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
120
pub points
22%
popularity

Publisher

unverified uploader

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

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

MIT (LICENSE)

Dependencies

args, flutter, path, yaml

More

Packages that depend on esizer