esizer 1.0.1 copy "esizer: ^1.0.1" to clipboard
esizer: ^1.0.1 copied to clipboard

A Flutter package provide responsive, dynamic, configurable size for each device screen size.

ESizer #

A Flutter package provide responsive, dynamic, configurable size for each device screen size.

Features #

  • Responsive, adaptive size
  • Dynamic load size data from predefined files from assets

Without using this packages:

Getting Started #

This package is use to develop app which use Bloc pattern clearer, quicker, easier by wrapping complicated bloc usage.

Usage #

Create size resource data file and add to pubspec #

  • Create size resource data files (currently support only yaml format) in default folder : " assets/dimens". For example:
homeScreen:
  contentPadding: 10
  iconSize: 50
  titleTextSize: 24
  descriptionTextSize: 16
  widgetSpaceSize: 16
  • Add assets folder path to pubspec.yaml file:
flutter:
  # ... 
  assets:
    - assets/dimens/

Config and use in application #

  • Make sure WidgetsFlutterBinding.ensureInitialized(); main function before application start:
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

Using widget #

ESizer(
  builder: (BuildContext context) {
    return const ResponsiveHomePage();
  },
  sizeFileResolver: ({BoxConstraints? boxConstraints, Orientation? orientation}) => "phone.yaml",
)

Above code for sizeFileResolver function use very simple logic: return name of resource file. You can also add more logic to specify how to choose which size data files to load in.

For example: load 'phone.yaml' or 'table.yaml' depend on width and orientation of device

  String _resolveSizeDataFile({BoxConstraints? boxConstraints, Orientation? orientation}) {
  if (boxConstraints != null) {
    if (Platform.isAndroid || Platform.isIOS) {
      if (orientation == Orientation.portrait) {
        if (boxConstraints.maxWidth < 600) {
          return "phone.yaml";
        } else {
          return "tablet.yaml";
        }
      } else if (orientation == Orientation.landscape) {
        if (boxConstraints.maxHeight < 600) {
          return "phone.yaml";
        } else {
          return "tablet.yaml";
        }
      } else {
        return "phone.yaml";
      }
    } else {
      return "phone.yaml";
    }
  }
  return "phone.yaml";
}

Code generation for size data #

By using command 'esizer:generate' you can generate dart code for more convenient

flutter pub run esizer:generate -I assets/dimens -o dimen_keys.g.dart -n DimenKeys 

Then we have class like:

abstract class DimenKeys {
  static const homeScreenIconSize = 'homeScreen.icon_size';
  static const homeScreenTitleTextSize = 'homeScreen.titleTextSize';
  static const homeScreenDescriptionTextSize = 'homeScreen.descriptionTextSize';
  static const homeScreenWidgetSpaceSize = 'homeScreen.widgetSpaceSize';
  static const homeScreenContentPadding = 'homeScreen.contentPadding';
}

After that, in any where in application we use it as bellow:

Container (
  padding:EdgeInsets.all(DimenKeys.homeScreen_content_padding.sw),
  color: Colors.white)

Issues and feedback #

Create issues and add appropriate label on Github issues or into our mailing list For more detail see CONTRIBUTING

Contributor #

License #

MIT

3
likes
140
points
58
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package provide responsive, dynamic, configurable size for each device screen size.

Repository (GitHub)
Contributing

Documentation

API reference

License

MIT (license)

Dependencies

args, flutter, path, yaml

More

Packages that depend on esizer