Responsive Sizer helps implement are responsive layout by providing helper widgets and extensions

Last update: Jun 10, 2022

Responsive Sizer

Responsive Sizer helps implement a responsive layout by providing helper widgets and extensions

Responsive Image

Responsive Image

Content

Installation

Add responsive_sizer to pubspec.yaml

dependencies:
  responsive_sizer: ^2.0.1

Parameters

  • Adaptive.h() - Returns a calculated height based on the device
  • Adaptive.w() - Returns a calculated width based on the device
  • Adaptive.sp() - Returns a calculated sp based on the device
  • .h - Returns a calculated height based on the device
  • .w - Returns a calculated width based on the device
  • .sp - Returns a calculated sp based on the device
  • Device.boxConstraints - Returns the Device's BoxConstraints
  • Device.orientation - Returns the Screen Orientation (portrait or landscape)
  • Device.screenType - Returns the Screen Type (mobile or tablet)

Usage

Import the Package

import 'package:responsive_sizer/responsive_sizer.dart';

Wrap MaterialApp with ResponsiveSizer widget

 ResponsiveSizer(
      builder: (context, orientation, screenType) {
        return MaterialApp();
      }
 )

Widget Size

Container(
  width: Adaptive.w(20),    // This will take 20% of the screen's width
  height: 30.5.h     // This will take 30.5% of the screen's height
)

Font size

Text(
  'Responsive Sizer', 
  style: TextStyle(fontSize: 15.sp),
)

Orientation

If you want to support both portrait and landscape orientations

Device.orientation == Orientation.portrait
  ? Container(   // Widget for Portrait
      width: 100.w,
      height: 20.5.h,
   )
  : Container(   // Widget for Landscape
      width: 100.w,
      height: 12.5.h,
   )

DeviceType

If you want the same layout to look different in tablet and mobile, use the Device.screenType method:

Device.screenType == ScreenType.tablet
  ? Container(   // Widget for Tablet
      width: 100.w,
      height: 20.5.h,
   )
  : Container(   // Widget for Mobile
      width: 100.w,
      height: 12.5.h,
   )

Take Note

You need to import responsive_sizer package in order to access number.h, number.w, and number.sp

Auto import in VSCode and Android Studio doesn't work for dart extension methods. Typing 10.h would not bring up auto import suggestion for this package

One workaround is to type Device so that the auto import suggestion would show up:

import 'package:responsive_sizer/responsive_sizer.dart';

Community Support

If you have any suggestions or issues, feel free to open an issue

If you would like to contribute, feel free to create a PR

GitHub

https://github.com/CoderUni/responsive_sizer
Comments
  • 1. LateInitializationError: Field 'height' has not been initialized.

    ======== Exception caught by widgets library =======================================================
    The following LateError was thrown building MyApp(dirty):
    LateInitializationError: Field 'height' has not been initialized.
    
    The relevant error-causing widget was: 
      MyApp MyApp:file:///D:/OneDrive%20-%20ECAM/Projet_App_Trading_Conseils/flexmes_mobile_app/lib/main.dart:16:22
    When the exception was thrown, this was the stack: 
    #0      Device.height (package:responsive_sizer/src/helper.dart)
    #1      DeviceExt.h (package:responsive_sizer/src/extension.dart:7:33)
    #2      appThemeData (package:flexmes_mobile_app/config/themes.dart:15:21)
    #3      appThemeData (package:flexmes_mobile_app/config/themes.dart)
    #4      MyApp.build (package:flexmes_mobile_app/main.dart:35:22)
    #5      StatelessElement.build (package:flutter/src/widgets/framework.dart:4662:28)
    #6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4588:15)
    #7      Element.rebuild (package:flutter/src/widgets/framework.dart:4311:5)
    #8      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4566:5)
    #9      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4561:5)
    #10     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3631:14)
    #11     Element.updateChild (package:flutter/src/widgets/framework.dart:3383:18)
    #12     RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1198:16)
    #13     RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1167:5)
    #14     RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1112:18)
    #15     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2531:19)
    #16     RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1111:13)
    #17     WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:944:7)
    #18     WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:924:7)
    (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
    ====================================================================================================
    
    Reviewed by Flexmess at 2022-01-06 19:44
  • 2. Extension malfunction, still...

    I don't know why it closes it, it still works badly, more than anything I mean the calculation it does for the .sp function it does not work well, as it is now it would be better to have left it as before and I will show you.

    I already said that you had to take into account the two sizes of the screen, it is useless to use only the width because when the height changes the text should change with it, that is to adapt well.

    But keep with the idea of ​​only taking width into account and now it works worse. It has been good to use pixelDensity, that is correct but the calculation is not well done and as I said I will show you with screenshots that I have made using your method and using mine with two independent functions, a .ts2 call that uses your package for the measures and the other just uses MediaQuery to have more real measures, but they both work fine.

    Here I attach the photographs, two photos are in an android studio emulator where only the height changes and the other two are two real devices.

    Also say that the sizes have been set in the large android studio emulator and in portrait mode, so you can see that only in that photo, all the font sizes are the same.

    Web 1920 – 1 Web 1920 – 2 Web 1920 – 3 Web 1920 – 4

    As you can see, the functions I have created are almost perfect, but almost perfect is better than totally bad.

    I also want to say that the .h and .w functions now work fine, but you could also think of using pixelDensity for this, since not all screens have the same pixel density even if they have the same dimensions.

    All this I leave in this drive link where the screenshots are so you can see them well, and I also attach there the folder of the project where I have done the tests. Feel free to try and if my function convinces you, do not hesitate to use it in your package, I just want to help you.

    Here the project link: https://drive.google.com/file/d/1WENQoD4MmwUnEZazOpeD7qksGZUbFBbA/view?usp=sharing

    Reviewed by hekhy at 2021-06-08 13:08
  • 3. LateInitializationError: Field 'width' has not been initialized.

    LateInitializationError: Field 'width' has not been initialized.

    It gave me this error when I was trying to use it in my app, specifically in a ThemeData, this is my code:

    static final ThemeData theme = ThemeData(
    
        // blanco puro Color(0xffFFFFFF)
        scaffoldBackgroundColor: blanco,
        // negro Color(0xff000000)
        shadowColor: negro,
    
        colorScheme: ColorScheme(
          // color1 el del igual Color(0xff8500C7)
          primary: color1, 
          // color2 el del title del appbar y el boton menu Color(0xff7D00BA)
          primaryVariant: color2, 
          // color3 el del operador Color(0xff6B00A1)
          onPrimary: color3, 
          // color4 el del scaffold del drawer y divider del resultado Color(0xff52007A)
          secondary: color4, 
          // color5(casi negro) el de los numeros del teclado y valores resultado Color(0xff27003B)
          secondaryVariant: color5, 
          // blanco puro Color(0xffFFFFFF)
          error: blanco, 
          // negro Color(0xff000000)
          onError: negro,
    
          // color fuera numero
          surface: colorFueraNumero, 
          // color dentro numero
          onSurface: colorDentroNumero, 
          // color fuera igual
          background: colorFueraIgual, 
          // color dentro igual
          onBackground: color4, 
          // color fuera operadores
          onSecondary: colorFueraOperadores,
    
    
          brightness: Brightness.light
        ),
    
        visualDensity: VisualDensity.adaptivePlatformDensity,
        
        appBarTheme: AppBarTheme(
          color: Colors.transparent,
          elevation: 0,
          centerTitle: true,
          textTheme: TextTheme(
            headline6: GoogleFonts.exo(color: color2, fontSize: 19.0.sp, fontWeight: FontWeight.w600)
          ),
          iconTheme: IconThemeData(
            color: Colors.white,
            size: 27.0.sp
          ),
        )
      ); 
    

    It says that the fault is in the line of headline: and also in that of size: inside iconTheme

    I send you a capture of all the errors. herttjer Although there it says # 1 DeviceExt.w I have tried with all of them, 19.0.sp, 19.0.w, 19.0.h, 19.sp, 19.w, 19.h. They all give those same mistakes. I've been testing and I can't solve it, but the fact is that I was using the sizer package, the same one where you told me in response to my request to add ".sp" also in the "int" that this package of yours will use, but for now I will finish my app with that package and the next one I will start with yours, since it will be easier for me starting from scratch to find the errors.

    Reviewed by hekhy at 2021-04-09 13:16
  • 4. The application works badly when you compile it

    I was talking to the flutter developers in this thread since the problem happened in the compilation phase and not in the development phase, I took their problem for granted, but thanks to the comments of another user we managed to find the fault in the resposive_sizer package and in the other called sizer, there You can see details of the user who commented on it and how he fixes the problem, maybe this can help you to deduce where the problem is in your package. Anyway, it is clear that the problem is here, this is not critical, I like your package and if you remind me, I already tried to help you previously here, I will only mention it so that you can try to fix it.

    Anyway tell you that I simply generate this class based on your package that worked well for me and in this way I only use the mediaquery but in an easier way.

    sizer.dart

    import 'package:flutter/widgets.dart';
    
    /// Gets the screen type between mobile and tablet.
    enum ScreenType { mobile, tablet }
    
    
    class Sizer {
      static double h(BuildContext context) {
        return MediaQuery.of(context).size.height;
      }
    
      static double w(BuildContext context) {
        return MediaQuery.of(context).size.width;
      }
    
      static Orientation orientation(BuildContext context) {
        return (h(context) > w(context))
            ? Orientation.portrait
            : Orientation.landscape;
      }
    
      static bool isPortrait(BuildContext context) {
        return (orientation(context) == Orientation.portrait) ? true : false;
      }
    
      static bool isLandscape(BuildContext context) {
        return (orientation(context) == Orientation.portrait) ? false : true;
      }
    
      static ScreenType screenType(BuildContext context) {
        return ((orientation(context) == Orientation.portrait &&
                    w(context) < 600) ||
                (orientation(context) == Orientation.landscape && h(context) < 600))
            ? ScreenType.mobile
            : ScreenType.tablet;
      }
    
      static bool isMobile(BuildContext context) {
        return (screenType(context) == ScreenType.mobile) ? true : false;
      }
    
      static bool isTablet(BuildContext context) {
        return (screenType(context) == ScreenType.mobile) ? false : true;
      }
    }
    
    extension SizerExt on num {
      /// Calculates the height depending on the device's screen size
      /// Eg: 20.h -> will take 20% of the screen's height
      double h(BuildContext context) {
        return MediaQuery.of(context).size.height * (this / 100);
      }
    
      /// Calculates the width depending on the device's screen size
      /// Eg: 20.h -> will take 20% of the screen's width
      double w(BuildContext context) {
        return MediaQuery.of(context).size.width * (this / 100);
      }
    
      /// Calculates the sp (Scalable Pixel) depending on the device's screen size
      double sp(BuildContext context) {
        return this *
            ((((MediaQuery.of(context).size.height +
                            MediaQuery.of(context).size.width) +
                        (MediaQuery.of(context).devicePixelRatio *
                            MediaQuery.of(context).size.aspectRatio)) /
                    3) /
                3) /
            100;
      }
    }
    

    I divided by 3 the .sp method because I get all the data from the device using mediaquery.

    Reviewed by hekhy at 2021-10-12 18:13
  • 5. Extension malfunction

    As the title indicates, in my opinion the extensions .h, .w, .sp, do not work correctly, maybe there is some concrete reason why you have done it and that is beyond my knowledge, but for the moment I think it should work otherwise and I'll explain why below.

    1- .w and .h extensions I was reviewing the package and I saw that when setScreenSize() changes the value of adaptiveWidth and adaptiveHeight, you put an if loop to verify that if the orientation is in portrait mode and set its value in this way, that is;

    if (orientation == Orientation.portrait) {
          adaptiveWidth = boxConstraints.maxWidth;
          adaptiveHeight = boxConstraints.maxHeight;
        } else {
          adaptiveWidth = boxConstraints.maxHeight;
          adaptiveHeight = boxConstraints.maxWidth;
        }
    

    Nothing you do not know until there, but as I said before in my humble opinion, I think it should work in another way, that is, it should not be this cycle, because when I want to change a size in landscape mode I want my adaptideWidth is the actual width that I currently have when being in landscape mode and not the width that it would have in portrait mode, perhaps for the size of the letter if it works because it is the same size in the two orientations but for the sizes of a Container() for example, in my opinion not. I repeat that maybe I'm wrong but I think it should always be the width of the screen whether you are in landscape or portrait mode, that is.

         adaptiveWidth = boxConstraints.maxWidth;
         adaptiveHeight = boxConstraints.maxHeight;
    

    2- .sp extension Something similar to the previous ones happens to this extension, that is, when you do the operation; double get sp => this * (Device.adaptiveWidth / 3) / 100; You only take into account the width of the screen, but for me this is an error, I put an example so that you understand:

    Now I have a device with a size of, 1366x768 in landscape mode and 768x1366 in portrait mode (I use computer sizes because they are the ones I know the most), then I create a Container() with a size of 20% of the height and 20% of the width in portrait mode, and inside I add a Text() with a size that fits the size of the Container() but does not come out outside of it. And now I launch my application on a device with a screen that has a size of 1280x768 in landscape mode and 768x1280 in portrait mode. If I take as a reference the width of the screen in portrait mode to adjust the size with the extension ".sp", since the width is now 768 the same as before, and the height is 1280 less than before, my Text() It will be seen with a size the same as before, which will cause the letter to be cut off because it no longer fits the dimensions of the Container() that I had created, since the height is reduced but the font size It remains the same.

    To fix this problem I have created my own test function, which would be like this:

    double textSize(BuildContext context, num mySize) {
      final h = MediaQuery.of(context).size.height;
      final w = MediaQuery.of(context).size.width;
    
      double result = mySize * (((h + w) / 2) / 4) / 100;
    
      return result;
    }
    

    and if you wanted to add it to your package it would be like this:

    double get sp => this * (((Device.adaptiveWidth + Device.adaptiveHeight) / 2) / 4) / 100; In this way, if you change any of the two sizes of the screen, the text adapts accordingly because it takes into reference the total resolution of the screen and not only the width. Even to be totally exact, the pixelRatio and the aspectRatio could also be taken into account, being this way: double get sp => this * (((Device.adaptiveWidth + Device.adaptiveHeight + MediaQuery.of (context) .devicePixelRatio + MediaQuery.of (context) .size.aspectRatio) / 2) / 4) / 100; which would not change the final value too much, but it would make it even more precise since not all phones are the same even if their resolutions are the same.

    PS: If you divide "/ 4.5" double get sp => this * (((Device.adaptiveWidth + Device.adaptiveHeight) / 2) / 4.5) / 100; It will give you a result more similar to the result that it gave with double get sp => this * (Device.adaptiveWidth / 3) / 100; in this way it will be easier to adapt to your design if someone was using the package, since the sizes will be more or less the same but it will adapt depending on the total resolution of the screen. What happens that I have divided by 4 because I love whole numbers XD

    If I make a mistake with something, sorry, do not hesitate to correct me, but I only try to help because I like this package since I know of the headaches that adapting the application to all screens gives and I think this is the best way to do it.

    Regards, and thanks for your work.

    Reviewed by hekhy at 2021-05-19 15:59
  • 6. Remove unnecessary logic based on orientation to really fix #2

    I don't really know what last update should fix, but it did not help on my device. So I am sharing my fix. As I already explained in issue #2 flutter layout listener should be aware of orientation and width & height should be set. You dont need any extra logic there

    Reviewed by radvansky-tomas at 2021-04-23 10:05
  • 7. Handle master detail pattern

    Works like this:

    https://blogs.windows.com/windowsdeveloper/2017/05/01/master-master-detail-pattern/

    https://en.m.wikipedia.org/wiki/Master%E2%80%93detail_interface

    On mobile you navigate from the master to the detail page.

    On desktop of tablet , you have master and detail page on the same screen.

    This is a very common need …

    routing can get tricky to do it .

    typicalky I have seen it done I using a different scaffold for each which is not DRY as we would like . It would be awesome if that can be abstracted to a degree .

    my feeling is that a higher level component is created that uses your library to do both scenarios in a reusable way .

    Thoughts ?

    Would be great to end up with an example showing it

    Reviewed by gedw99 at 2021-06-07 15:02
  • 8. Orientation aware

    I had to disable this bit to actually get correct width / height

      // Sets screen width and height
        // if (orientation == Orientation.portrait) {
        width = boxConstraints.maxWidth;
        height = boxConstraints.maxHeight;
        // } else {
        //   width = boxConstraints.maxHeight;
        //   height = boxConstraints.maxWidth;
        // }
    

    AS far as I know then LayoutBuilder is orientation aware...ie width is always width and you should not artificially change it.

    Reviewed by radvansky-tomas at 2021-04-18 07:11
  • 9. How can I make rebuild the screen again when I change the orientation?

    Hello,

    I would like to know the difference between using the following :

        final bool _isOrientationPortrait =
            Device.orientation == Orientation.portrait; // Not rebuilding
    
        final bool isOrientationPortrait =
            MediaQuery.of(context).orientation == Orientation.portrait; // Rebuilding
    
    

    Since when using the MediaQuery and I flip my device, it automatically updates the widget, but when using it with the package it doesn't update and I have to be occupying OrientationBuilder. So I would like to know how to update a screen...

    I use my ResponsiveSizer like this in my main.dart file :

          [...]
          child: MaterialApp(
            navigatorKey: navigatorKey,
            onGenerateRoute: RouteGenerator.generateRoute,
            [...]
            builder: (BuildContext context, Widget? child) => MediaQuery(
              data: MediaQuery.of(context).copyWith(
                textScaleFactor: MediaQuery.of(context)
                    .textScaleFactor
                    .clamp(1.0, 1.4),
              ),
              child: ResponsiveSizer(
                builder: (context, orientation, screenSize) =>
                    child ?? const SizedBox.shrink(),
              ),
            ),
          ),
    
    
    Reviewed by kauzige at 2022-02-17 12:19
  • 10. Use of the package

    Hello I wanted to ask a question about the use of the package. I have been using the package and it is doing very well, the problem is that I don't know if I am using it well. Since the same thing happened to me with the other package of sizer. That is, I cannot adapt my application to all screens perfectly, and I think it is because I do not use it well. So my question would be, should I put the ResposiveSizer widget on every screen where I use it or just put it in the main as it works in the example?

    Reviewed by hekhy at 2021-05-17 17:12
  • 11. Defined Size as dp and sp not as percentage.

    I see your package to defined size is as a percentage (Max to define the size is 100, ex: 100.0.w / 100.0.h --> it's mean the size is 100% / full screen). But can we specify the size is not using a percentage but using a dp for width and height and a sp for the font?

    For example, if in the mockup get the size for the font is 14, so we can't implement your package like this: style: TextStyle(fontSize: 14.0.sp), // This is not sp, but the font size is 14% from the screen. So it not accurate with the size in the mockup that created by designer.

    Also if in the mockup get width is 100 and height is 50 for the Button, so we can't implement your package like this:

    SizedBox(
       width: 100.0.w,  // This is not accurate with the size in the mockup that created by designer.
       height: 50.0.h, // This is not accurate with the size in the mockup that created by designer.
       child: RaisedButton(),
    ),
    

    I think this is the major issue.

    This is a issue mentioned in the original Sizer package, I have the same issue, I want to use exact values from Design and the package should scale accordingly. Can you please tell me how I can do this? I have heard, extensions can be used but I am not able to work it out.

    If you could show an example, I would be highly grateful.

    Reviewed by zyllus17 at 2021-05-10 11:54

Related

Helper Telegram bot for @tgtoadbot
Helper Telegram bot for @tgtoadbot

Телеграм хелпер-бот для @tgtoadbot Setup 1. Скопировать и отредактировать .env файл cp .env.sample .env 2. Проинициализировать mongo, добавить пользо

Dec 2, 2021
Validating numbers and providing necessary detail base on selected country
Validating numbers and providing necessary detail base on selected country

international_phone_field ?? Validating numbers and providing necessary detail base on selected country ?? . The pacakge comes with enough detail abou

Jun 12, 2022
A Flutter grid view which supports waterfall flow layout.

waterfall_flow A Flutter grid view easy to build waterfall flow layout quickly. Web demo for WaterfallFlow Language: English | 中文简体 waterfall_flow Use

Jun 24, 2022
This Dart package offers developers a streamlined library of Flutter widgets, useful for expanding widgets and text views, when users interact with them.
This Dart package offers developers a streamlined library of Flutter widgets, useful for expanding widgets and text views, when users interact with them.

This Dart package offers developers a streamlined library of Flutter widgets, useful for expanding widgets and text views, when users interact with them.

Feb 26, 2022
The app to demo animation with Flutter by implement Facebook reactions
The app to demo animation with Flutter by implement Facebook reactions

Facebook Reactions Animation Description The app to demo animation with Flutter by implement Facebook reactions. Watch the demo video for more clarity

Jun 25, 2022
A Flutter project that gives basic flutter design to implement a login UI
A Flutter project that gives basic flutter design to implement a login UI

Login UI Design A Flutter project that gives basic flutter design to implement a

Apr 23, 2022
The most complete Chat UI for flutter highly customizable and helps developing chat UI faster.
The most complete Chat UI for flutter highly customizable and helps developing chat UI faster.

⚠️ Dashchat v2 is available in v2 branch ⚠️ You can open issues for the v2 to indicate things we need to implement/fix. Also the API can change until

Jun 10, 2022
Instagram UI designed with Flutter; it is compatible and responsive with any type of Android and iOS devices.

instagram Instagram clone UI designed with Flutter; it is compatible and responsive with any type of Android and iOS devices . Getting Started This pr

Oct 28, 2021
I am trying to teach Responsive Ui design. This video for Web and Mobile. This design is suitable for Desktop, Tab, and Mobile platforms.
I am trying to teach Responsive Ui design. This video for Web and Mobile. This design is suitable for Desktop, Tab, and Mobile platforms.

before clone the GitHub repository please give a star on the repository. I am trying to teach Responsive Ui design. This video for Web and Mobile. Thi

Jan 22, 2022
Tour guide App UI in Flutter Consist of Three Pages. First Screen is Splash Screen , Second is welcome screen routing to third Screen and Third screen consist of details , navigation, places, and responsive UI.
Tour guide App UI in Flutter Consist of Three Pages. First Screen is Splash Screen , Second is welcome screen routing to third Screen and Third screen consist of details , navigation, places, and responsive UI.

Tour Guide // Tourism App Ui in Flutter. Tour Guid App Ui in Flutter. Visit Website Features State Management Navigation Bar Responsive Design Hybrid

Dec 7, 2021
Responsive Admin Panel or Dashboard using Flutter
Responsive Admin Panel or Dashboard using Flutter

Responsive Admin Panel or Dashboard using Flutter

Jun 27, 2022
A flutter plugin for Easily make Flutter apps responsive. Automatically adapt UI to different screen sizes. Responsiveness made simple.
A flutter plugin for Easily make Flutter apps responsive. Automatically adapt UI to different screen sizes. Responsiveness made simple.

A flutter plugin for Easily make Flutter apps responsive. Automatically adapt UI to different screen sizes. Responsiveness made simple.

Jun 25, 2022
Instagram social network interface in a responsive built using flutter
Instagram social network interface in a responsive built using flutter

Responsive Instagram ?? Responsive Instagram foi um projeto realizado com o intuito de aprendizagem e prática da linguagem de programação Dart em conj

Jun 11, 2022
A responsive book app UI using flutter

Flutter Book Project I'm design a responsive book app UI using flutter, There is 3 page home page that includes a horizontal category list, then a lis

Jun 11, 2022
Flutter Widgets that you can touch and feel
Flutter Widgets that you can touch and feel

Flutter widgets you haven't used yet. Problems that proximity solves Currently, Flutter has a lot of useful pre-built widgets, no, too many widgets. T

Feb 26, 2022
Allows widgets to be zoomed in and out by inserting a OverlayEntry which allows the widget to be on the front at all times.

zoom_pinch_overlay An instagram style pinch and zoom widget for all platform completely written in pure dart! All other "zoom_pinch" package doesnt di

Jun 24, 2022
A simple package that provides you with some widgets and cutom clippers which implements the shape of a coupon card.
A simple package that provides you with some widgets and cutom clippers which implements the shape of a coupon card.

Coupon UI Kit A simple package that provides you with some widgets and cutom clippers which implements the shape of a coupon card. The example contain

Jun 27, 2022
A set of high-level Flutter UI components and stand-alone widgets for easier implementation of most used UI features
A set of high-level Flutter UI components and stand-alone widgets for easier implementation of most used UI features

A set of high-level Flutter UI components and stand-alone widgets for easier implementation of most used UI features

Jun 7, 2022
This package provides some widgets you can use to create a smooshy UI.
This package provides some widgets you can use to create a smooshy UI.

Dough Library Squishy widgets for Flutter. Quick Links Dough Demos Here are a few samples of the different widgets provided by this repo. You can find

Jun 20, 2022