https://github.com/ivangalkindeveloper/dependency_initializer
Initializer utility of dependencies for Dart & Flutter projects.
https://github.com/ivangalkindeveloper/dependency_initializer
dart dart-lang dart-library dart-package dart-utility dart-utils dartlang
Last synced: 2 months ago
JSON representation
Initializer utility of dependencies for Dart & Flutter projects.
- Host: GitHub
- URL: https://github.com/ivangalkindeveloper/dependency_initializer
- Owner: ivangalkindeveloper
- License: other
- Created: 2024-08-03T22:44:20.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2024-09-15T18:05:00.000Z (8 months ago)
- Last Synced: 2025-01-18T22:46:55.821Z (4 months ago)
- Topics: dart, dart-lang, dart-library, dart-package, dart-utility, dart-utils, dartlang
- Language: Dart
- Homepage:
- Size: 35.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Dependency initializer
Initializer utility of dependencies for Dart & Flutter projects.\
The utility does not depend on Flutter SDK to be able to use it for Dart projects as well.# Usage
1) Prepare list of initialize steps:
```dart
final List> coreStepList = [
InitializationStep(
title: "Config",
initialize: (
Process process,
) =>
process.config = Config$(),
),
];
final List> dataStepList = [
InitializationStep(
title: "HttpClient",
initialize: (
Process process,
) =>
process.client = HttpClient$(
config: process.config!,
),
),
InitializationStep(
title: "Api",
initialize: (
Process process,
) =>
process.api = Api$(
client: process.client!,
),
),
InitializationStep(
title: "Dao",
initialize: (
Process process,
) =>
process.dao = Dao$(
config: process.config!,
),
),
InitializationStep(
title: "Storage",
initialize: (
Process process,
) =>
process.storage = Storage$(
config: process.config!,
),
),
InitializationStep(
title: "Repository",
initialize: (
Process process,
) =>
process.repository = Repository$(
api: process.api!,
dao: process.dao!,
storage: process.storage!,
),
),
];
final List> blocStepList = [
InitializationStep(
title: "Bloc",
initialize: (
Process process,
) =>
process.bloc = Bloc(
repository: process.repository!,
),
),
];
```2) Create initializer and start initialize process:
```dart
final Initializer initializer = Initializer(
creteProcess: () => Process(),
stepList: [
...coreStepList,
...dataStepList,
...blocStepList,
],
onSuccess: (
Result result,
Duration duration,
) {
// Success result of initialization
},
);
await initializer.run();
```# Use cases
Initializer has several use cases:
1) Direct.\
For example, if you want the Flutter application to show a native splash screen when it starts, and then launch the first widget.
```dart
final Initializer initializer = Initializer(
creteProcess: () => Process(),
stepList: stepList,
onSuccess: (
DependencyInitializationResult initializationResult,
Duration duration,
) => runApp(
ApplicationWidget(
result: initializationResult.result,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
await initializer.run();
```2) With async completer.\
For example, you have a widget that displays its splash screen, and this widget must be rebuilt asynchronously using the initialization compiler.
```dart
final Initializer initializer = Initializer(
creteProcess: () => Process(),
stepList: stepList,
onStart: (
Completer> completer,
) => runApp(
ApplicationWidget(
completer: completer,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
await initializer.run();
```3) Reinitialization from result.\
For example, in the runtime of a Flutter application, you need to reinitialize your new dependencies for the new environment and return the first widget of the Flutter application again.
```dart
await initializationResult.reRun(
stepList: [
InitializationStep(
title: "Config",
initialize: (
Process process,
) =>
process.config = AnotherConfig(),
),
...initializationResult.reinitializationStepList,
],
onSuccess: (
DependencyInitializationResult initializationResult,
Duration duration,
) => runApp(
ApplicationWidget(
result: initializationResult.result,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
```# Additional information
For more details see example project.
And feel free to open an issue if you find any bugs or errors or suggestions.