flutter_loading_button 0.0.2 copy "flutter_loading_button: ^0.0.2" to clipboard
flutter_loading_button: ^0.0.2 copied to clipboard

A package wrapper around material buttons to display a loading widget while waiting for the onPressed method to finish

Flutter Loading Button #

This package is a wrapper around the existing material buttons to provide support to display a loading widget while the onPressed method of the buttons performs an async task. This can for example be a HTTP request to your API to query some data but a basic timer task will do it too.

Info #

Right now this package only wraps around the TextButton widget. Support for IconButton, ElevatedButton and OutlinedButton are currently in the process.

Getting started #

First add the dependency into your pubspec.yaml:

dependencies:
    flutter_loading_button: ^0.0.2

OR Add the dependency via terminal:

flutter pub add flutter_loading_button

When making use of the package:

import 'package:flutter_loading_button/loading_button.dart';

Usage #

Add a LoadingButton with a CircularProgressIndicator being displayed while this widget is in the loading state to your widget tree:

LoadingButton(
    // This needs to be async
    onPressed: () async {
        await Future.delayed(const Duration(seconds: 3), () => print('Task done!'),
        );
    },
    child: const Text('Button'),
    loadingWidget: const CircularProgressIndicator(),
)

You can also pass a LinearProgressIndicator but when trying to render it it will take the whole width available to display itself. Try wrapping it around in a Container:

LoadingButton(
    // This needs to be async
    onPressed: () async {
        await Future.delayed(const Duration(seconds: 3), () => print('Task done!'),
        );
    },
    child: const Text('Button'),
    loadingWidget: Container(
        constraints: const BoxConstraints(maxWidth: 200),
        child: const LinearProgressIndicator(),
    ),
)

Since LoadingButton currently wraps around TextButton it is also to supported to call LoadingButton.icon():

LoadingButton.icon(
    // This needs to be async
    onPressed: () async {
        await Future.delayed(const Duration(seconds: 3), () => print('Task done!'),
        );
    },
    child: const Text('Button'),
    icon: const Icon(Icons.settings),
    loadingWidget: const LinearProgressIndicator(),
)

NOTE: The onPressed method needs to be async for the loading widget to appear.

Future Updates #

Currently the plan is to add support for

  • IconButton, ElevatedButton and OutlinedButton
  • Passing a style to the LoadingButton

Bugs, Errors etc. #

If you find any weird behaviour, bugs or errors please let me know. Also an image or a gif will help a lot if the UI behaves differently.

3
likes
130
pub points
71%
popularity

Publisher

unverified uploader

A package wrapper around material buttons to display a loading widget while waiting for the onPressed method to finish

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter

More

Packages that depend on flutter_loading_button