dependency_initializer

Creator: coderz1093

Last updated:

0 purchases

dependency_initializer Image
dependency_initializer Images

Languages

Categories

Add to Cart

Description:

dependency initializer

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 #

Prepare list of initialize steps:

final List<InitializationStep<Process>> coreStepList = [
InitializationStep(
title: "Config",
initialize: (
Process process,
) =>
process.config = Config$(),
),
];
final List<InitializationStep<Process>> 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<InitializationStep<Process>> blocStepList = [
InitializationStep(
title: "Bloc",
initialize: (
Process process,
) =>
process.bloc = Bloc(
repository: process.repository!,
),
),
];
copied to clipboard

Create initializer and start initialize process:

final Initializer initializer = Initializer<Process, Result>(
creteProcess: () => Process(),
stepList: [
...coreStepList,
...dataStepList,
...blocStepList,
],
onSuccess: (
Result result,
Duration duration,
) {
// Success result of initialization
},
);
await initializer.run();
copied to clipboard
Use cases #
Initializer has several use cases:

Direct.
For example, if you want the Flutter application to show a native splash screen when it starts, and then launch the first widget.

final Initializer initializer = Initializer<Process, Result>(
creteProcess: () => Process(),
stepList: stepList,
onSuccess: (
DependencyInitializationResult<Process, Result> initializationResult,
Duration duration,
) => runApp(
ApplicationWidget(
result: initializationResult.result,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep<Process> step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
await initializer.run();
copied to clipboard

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.

final Initializer initializer = Initializer<Process, Result>(
creteProcess: () => Process(),
stepList: stepList,
onStart: (
Completer<DependencyInitializationResult<Process, Result>> completer,
) => runApp(
ApplicationWidget(
completer: completer,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep<Process> step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
await initializer.run();
copied to clipboard

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.

await initializationResult.reRun(
stepList: [
InitializationStep(
title: "Config",
initialize: (
Process process,
) =>
process.config = AnotherConfig(),
),
...initializationResult.reinitializationStepList,
],
onSuccess: (
DependencyInitializationResult<Process, Result> initializationResult,
Duration duration,
) => runApp(
ApplicationWidget(
result: initializationResult.result,
),
),
onError: (
Object? error,
StackTrace stackTrace,
Process process,
DependencyInitializationStep<Process> step,
Duration duration,
) => runApp(
const ApplicationErrorWidget(),
),
);
copied to clipboard
Additional information #
For more details see example project.
And feel free to open an issue if you find any bugs or errors or suggestions.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.