Configuring builder 🔨
To configure and run the builder there are 3 steps:
- Create and update lines to build.yaml
- Add the desired domain dart files (typically in
lib/features/example_domain.dart
file) - Run the build_runner in either
watch
orbuild
mode. - Call the scaffold from your dart code
Create and update build.yaml
Add the following to the build.yaml
at the root of your flutter project
targets:
$default:
builders:
scaffolding|dynamicBuilder:
generate_for: [lib/features/*.dart]
enabled: true
Create a domain dart file
Add a domain dart file to lib/features/example_domain.dart
abstract class ExampleDomain {
String todo = '';
bool complete = false;
}
Run build_runner
To run dynamic scaffolding once run the following:
flutter pub run build_runner build
To watch for change and re-generate run the following:
flutter pub run build_runner watch
This will generate example_domain.scaffold.dart
next to the dart file you created.
Call the scaffold from your dart file
The simplest way to call the file is directly from your main.dart
as follows:
import 'features/example_domain.scaffold.dart' as scaffold;
void main(List<String> args) => scaffold.main(args);
If you are deeper in your application as a widget call in the following way:
import 'features/example_domain.scaffold.dart' as scaffold;
class App extends StatefulWidget {
final NavigatorObserver? navigatorObserver;
const App({super.key, this.navigatorObserver});
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
late final repoFeature1;
void initState() {
super.initState();
repoFeature1 = Feature1RepositoryImpl();
}
Widget build(BuildContext context) {
return RepositoryProvider(
create: (context) => RepositoryProvider<Feature1Repository>.value(
value: repoFeature1,
),
child: Builder(builder: (_) => const Feature1ReadView()),
);
}
}
Or via a Navigator push
// Asssuming the Feature1RepositoryImpl() is in parent widget tree
Navigator.of(context).push(Feature1ReadView.route())