bdaya_form
A mason brick to generate a form using reactive_forms_annotations + reactive_forms_generator
Generated by [mason][1] š§±
Note that we use
bdaya_flutter_common
as a base library for the generated code We also needbuild_runner
as a dev dependency.
Usage
- Activate mason_cli
dart pub global activate mason_cli
- Add Brick
mason add bdaya_form
mason get
- Make
mason make bdaya_form -o lib/src/dialogs --name EditUser
Note that
bdaya_form
requires some dependencies, which you can add using this command:dart pub add reactive_forms_annotations --dev reactive_forms_generator
Variables
name
: The form name
Generated code:
assuming input is EditUser
view.dart
import 'package:bdaya_flutter_common/bdaya_flutter_common.dart';
import 'controller.dart';
import 'package:flutter/material.dart';
import 'form.dart';
class EditUserView extends StatelessWidget {
const EditUserView({
super.key,
required this.controller,
});
static Widget hooked({
BdayaGetItHookMode hookMode = BdayaGetItHookMode.factory,
String? instanceName,
Object? param1,
Object? param2,
List<Object?>? keys,
}) => HookBuilder(
builder: (context) => EditUserView(
controller: useBdayaViewController(
hookMode: hookMode,
instanceName: instanceName,
keys: keys,
param1: param1,
param2: param2,
),
),
);
//TODO: Replace T with the expected modal result
static Future<T?> showModal<T>(
BuildContext context, {
EditUserFormParameters? params,
}) async {
return await showDialog<T>(
context: context,
builder: (context) => Dialog(
//TODO: assign dialog properties
child: hooked(
param1: params,
),
),
);
}
final EditUserController controller;
@override
Widget build(BuildContext context) {
//see also BdayaMultiLoadableAreaWrapper, and BdayaLoadableAreaWrapper.custom
return EditUserModelFormBuilder(
model: controller.initialModelRx.of(context),
initState: (context, formModel) => controller.formRx.$ = formModel,
builder: (context, form, _) {
return Column(
children: [
//Add form controls ...
],
);
},
);
}
}
controller.dart
import 'package:bdaya_flutter_common/bdaya_flutter_common.dart';
import 'package:flutter/widgets.dart';
import 'form.dart';
class EditUserFormParameters {
}
@injectable
class EditUserController extends BdayaCombinedController {
final EditUserFormParameters parameters;
EditUserController(@factoryParam this.parameters);
final initialModelRx = SharedValue<EditUserModel?>(value: null);
final formRx = SharedValue<EditUserModelForm?>(value: null);
@override
void beforeRender(BuildContext context) {
super.beforeRender(context);
//initialize initialModelRx from the passed parameters here
//initialModelRx.$ = ...
}
}
form.dart
import 'package:reactive_forms/reactive_forms.dart';
import 'package:reactive_forms_annotations/reactive_forms_annotations.dart';
part 'form.gform.dart';
@ReactiveFormAnnotation()
class EditUserModel {
const EditUserModel({
@FormControlAnnotation() this.name,
});
final String? name;
}