Get It Future Builder
get_it_future_builder
provides a widget named GetItFutureBuilder
to wait for your async dependencies to be ready on your presentation layer.
This project is in its infancy stage, where any suggestions and PRs are welcome.
Installation 💻
❗ In order to start using Get It Future Builder you must have the Flutter SDK installed on your machine.
Add get_it_future_builder
to your pubspec.yaml
:
dependencies:
get_it_future_builder:
Install it:
flutter packages get
How to Use It
A Single Dependency
You can also see example directory.
Register your async dependency through GetIt
as such:
GetIt.I.registerSingletonAsync<Directory>(
() async {
return await getApplicationDocumentsDirectory();
},
instanceName: 'documents_dir', // optional
);
In our example, we'll use getApplicationDocumentsDirectory method of path_provider. Since it calls native code through MethodChannel
, it has to be asynchronous.
Then, in the presentation layer, you can simply do:
// notice how we get the dependency with generics
GetItFutureBuilder<Directory>(
// optional
instanceName: 'documentsDir',
// render this widget while loading
loading: (context) => LinearProgressIndicator(),
// render this widget when it's ready
ready: (context, instance) => Text('documents dir is: ${instance.path}'),
)
Multiple Dependencies
get_it_future_builder
supports the initialization widget up to 3 dependencies. These widgets are respectively named:
GetItFutureBuilder2
GetItFutureBuilder3
To initialize 2 dependencies on your widget tree, use GetItFutureBuilder2
.
Let's assume we have two asynchronous dependencies.
GetIt.I.registerSingletonAsync<Directory>(
() async {
return await getApplicationDocumentsDirectory();
},
instanceName: 'documents_dir', // optional
);
GetIt.I.registerSingletonAsync<Directory>(
() async {
return await getTemporaryDirectory();
},
instanceName: 'temp_dir', // optional
);
To initialize them asynchronously, use GetItFutureBuilder2
as below:
GetItFutureBuilder2<Directory, Directory>(
instanceName1: 'documents_dir', // optional
instanceName2: 'temp_dir', // optional
loading: (context) => const LinearProgressIndicator(),
ready: (context, instance1, instance2) => Text(
'Documents dir is ${instance1.path} and temp dir is ${instance2.path}',
),
),
The initialization of dependencies run concurrently.
Libraries
- get_it_future_builder
- A Very Good Project created by Very Good CLI.