Skip to content

Getting started

opa_rfs is a runtime fluid-sizing engine for Flutter. It requires Dart 3.12 or newer and Flutter 3.44 or newer.

Install

Add the package to your application:

yaml
dependencies:
  opa_rfs: ^1.0.0

Then import its public library:

dart
import 'package:opa_rfs/opa_rfs.dart';

No build step or configuration file is required.

Resolve your first value

When the available width is already known, pass it directly:

dart
final headlineSize = Rfs.value(
  64,
  width: constraints.maxWidth,
  min: 36,
);

When you have a BuildContext, contextValue reads the application window and the nearest RfsScope:

dart
final pagePadding = Rfs.contextValue(context, 48, min: 20);

For a reusable endpoint pair, declare an RfsValue:

dart
abstract final class AppSizes {
  static const heroTitle = RfsValue(max: 64, min: 36);
  static const cardPadding = RfsValue(max: 32, min: 16);
}

final title = AppSizes.heroTitle.resolve(width: width);

Use local constraints

Responsive components usually look best when they follow the space they are actually given rather than the entire screen. RfsBuilder, RfsText, and RfsBox use local layout constraints automatically:

dart
RfsBuilder(
  builder: (context, metrics) {
    final gap = metrics.resolve(max: 48, min: 20);
    return Padding(
      padding: EdgeInsets.all(gap),
      child: content,
    );
  },
)

Where to go next

Released under the MIT License.