modulapp_core 1.0.1
modulapp_core: ^1.0.1 copied to clipboard
A set of static methods/getters to unify dependency injection, logging, etc, across app's modules/sfeatures
modulapp_core_example #
This example shows how it's simple to unify dependency injection, logging, etc, in a Flutter app.
main.dart #
import 'dart:developer' as dev;
import 'package:flutter/material.dart';
import 'package:flutter_inject/flutter_inject.dart' as pkg;
import 'package:modulapp_core/modulapp_core.dart';
void main() {
// Define project's dependency injection
Core.inject = <T>({required factory, required builder}) => pkg.Inject<T>(builder: builder, factory: factory);
// Define project's instance getter through context
Core.get = <T>(context) => pkg.Dependency.get<T>(context);
// Define project's logging method
Core.log = <T>(msg1, [msg2, msg3]) => dev.log('[$msg1] $msg2\n$msg3');
runApp(
MaterialApp(
home: injectAll(
dependencies: [
Dependency<String>((context) => 'This text has been injected'),
Dependency<int>((context) => 5),
],
builder: (context) => const HomeView(),
),
),
);
}
class HomeView extends StatefulWidget {
const HomeView({super.key});
@override
State<HomeView> createState() => _HomeViewState();
}
class _HomeViewState extends State<HomeView> {
late int _value;
void _onTap() => setState(() {
_value++;
});
@override
void didChangeDependencies() {
super.didChangeDependencies();
// Here we retrieved our injected number value to init the counter
_value = get<int>(context);
}
@override
Widget build(BuildContext context) {
// Here we retrieved our injected text value to set AppBar's title
final title = get<String>(context);
return Scaffold(
appBar: AppBar(title: Text(title)),
body: Center(
child: SizedBox(
width: 400,
child: Column(
spacing: 12.0,
children: [
const Text('Wow a counter example, what a surprise !'),
Text('Counter: $_value'),
ElevatedButton(onPressed: _onTap, child: const Text('Increment'))
],
),
),
),
);
}
}