asyncstate 2.0.0 copy "asyncstate: ^2.0.0" to clipboard
asyncstate: ^2.0.0 copied to clipboard

This package will help you to call a loading in your async methods very easily, and you don't need to worried when it's is starting or finishing.

Async State

Platform


iOS Android Mac Linux Windows


Usage #

1 - Wrap your MaterialApp Or CurpertinoApp with the AsyncStateBuilder.
2 - Get the "navigatorObserver" from the builder function and add it to your component's "navigatorObservers".
3 - If you want, you can add a widget to "CustomLoader".

Code example:

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    /// Here you need to wrap your MaterialApp with the AsyncStateBuilder
    return AsyncStateBuilder(
      /// Here you can customize your default loading that will show every transaction
      /// Leave it and it will show a simple CircularProgress.adaptive indicator
      customLoader: const MyLoading(),

      builder: (navigatorObserver) => MaterialApp(
        themeMode: ThemeMode.dark,

        /// Here you need to pass the navigatorObserver to the MaterialApp
        navigatorObservers: [navigatorObserver],
        home: HomePage(),
      ),
    );
  }
}   

The asyncronous loader call methods allow you to define a LoaderType, and pass the widget to be displayed. #

  Future<void> loadMoreSnackBar() async {
    await Future.delayed(const Duration(seconds: 10)).asyncLoader(
      loaderType: LoaderType.snackBar,
      customLoader: const SnackBar(
        content: Text('Loading more...'),
        duration: Duration(seconds: 90),
      ),
    );
  }

  Future<void> loadMoreMaterialBanner() async {
    await Future.delayed(const Duration(seconds: 10)).asyncLoader(
      loaderType: LoaderType.materialBanner,
      customLoader: const MaterialBanner(
        content: Text('Loading more...'),
        actions: [SizedBox.shrink()],
      ),
    );
  }

Mixin AsyncStateMixin #

Methods #

callAsyncLoader - Automatically call your loader during async calls.
showMaterialBanner - Allow you call the MaterialBanner on ScaffoldMessenger.
showSnackBar - Allow you call the SnackBar on ScaffoldMessenger.
showDialog - Allow you call the Dialog on showDialog.
showBottomSheet - Allow you call the BottomSheet on showBottomSheet.

class HomeController with AsyncStateMixin {
  
  Future goBack(Function callback) async {
    return await callAsyncLoader(
      Future.delayed(
        const Duration(seconds: 3),
        () {
          callback();
        },
      ),
    );
  }

Future<void> loginError() async {
    try {
      await _fakeError().asyncLoader();
    } catch (e) {
      showMaterialBanner(
        materialBanner: MaterialBanner(
          actions: const [
            SizedBox.shrink(),
          ],
          content: Text(
            e.toString(),
          ),
        ),
      );
    }
  }
}

Extension anywhere (.asyncLoader()) #

class HomeController{

   Future<bool> login() async {
    try {
      return await Future.delayed(const Duration(seconds: 3), () {
        return true;
      }).asyncLoader(
          customLoader: const MyCustomLoadingWidget(
        text: 'Sign in! Hold on!!!!',
      ));
    } catch (e) {
      return false;
    }
  }
}

Call in your View like this #

ElevatedButton(
  onPressed: () async {
    if (await controller.login()) {
  ///Use a Navigator to go to another page if your login is true
 ///You don't need to care about start of finish the loading, just what to do after or before!
     Navigator.push(
         context,
           MaterialPageRoute(
              builder: (context) => SecondPage(
                 controller: controller,
        )),
    );
 }
},
 child: const Text('Sign in!'),
)

Bugs or Requests #

If you encounter any problems feel free to open an issue. If you feel the library is missing a feature, please raise a ticket on GitHub and I'll look into it. Pull request are also welcome.

Contributors #


Leonardo Serrano


Marcus Brasizza

If you like what I do, maybe consider buying me a coffee/tea πŸ₯ΊπŸ‘‰πŸ‘ˆ

Buy Me A Coffee

56
likes
0
pub points
84%
popularity

Publisher

verified publisherleonardoserrano.dev

This package will help you to call a loading in your async methods very easily, and you don't need to worried when it's is starting or finishing.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on asyncstate