obj_edit_gen
Automatically generate code for converting to widget by annotating Dart classes
Setup
To configure your project for the latest released version of,
obj_edit_gen see the example.
Example
Given a library test.dart with an Test class annotated with
@ObjEdit():
import 'package:obj_edit_annotation/obj_edit_annotation.dart';
import 'obj_option.dart';
//flutter pub run build_runner build --delete-conflicting-outputs
@ObjEdit(head: "import 'obj_option.dart';")
class Test {
@ObjEditTextSetting(
sectionName: "section1",
title: "Name",
hint: "name1",
icon: "Icons.person")
String name;
@ObjEditOptionSetting(
sectionName: "section1",
title: "Option",
options: '<String>["option1","option2","option3"]')
String option;
@ObjEditOptionSetting(
sectionName: "section1",
title: "ObjOption",
options:
'<ObjOption>[new ObjOption("objOption1"),new ObjOption("objOption2"),new ObjOption("objOption3")]')
ObjOption objOption;
@ObjEditTextSetting(sectionName: "section2", title: "Name", hint: "name2")
String name2;
@ObjEditOptionSetting(
sectionName: "section2",
title: "Option",
options: '<String>["option1","option2","option3"]')
String option2;
Test(this.name, this.option, this.objOption, this.name2, this.option2);
}
Building creates the corresponding part test.e.dart:
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// ObjEditGenerator
// **************************************************************************
import 'obj_option.dart';
import 'test.dart';
import 'package:flutter/material.dart';
import 'package:obj_edit_widgets/obj_edit_widgets.dart';
class TestWidget extends StatelessWidget {
final Test? obj;
TestWidget({Key? key, this.obj}) : super(key: key);
@override
Widget build(BuildContext context) {
if (obj == null) {
return new Center(child: new Text('No Content'));
}
return ObjEditor(sections: [
ObjSection(title: 'section1', tiles: [
TextTile(
title: "Name",
hintText: "name1",
icon: Icons.person,
initText: obj!.name,
onChanged: (String text) {
obj!.name = text;
},
),
DropDownTile<String>(
title: "Option",
selected: obj!.option,
options: <String>["option1", "option2", "option3"],
itemBuilder: (selectValue) {
return Text(selectValue.toString(), textAlign: TextAlign.end);
},
onChanged: (value) {
obj!.option = value;
},
),
DropDownTile<ObjOption>(
title: "ObjOption",
selected: obj!.objOption,
options: <ObjOption>[
new ObjOption("objOption1"),
new ObjOption("objOption2"),
new ObjOption("objOption3")
],
itemBuilder: (selectValue) {
return Text(selectValue.toString(), textAlign: TextAlign.end);
},
onChanged: (value) {
obj!.objOption = value;
},
),
]),
ObjSection(title: 'section2', tiles: [
TextTile(
title: "Name",
hintText: "name2",
initText: obj!.name2,
onChanged: (String text) {
obj!.name2 = text;
},
),
DropDownTile<String>(
title: "Option",
selected: obj!.option2,
options: <String>["option1", "option2", "option3"],
itemBuilder: (selectValue) {
return Text(selectValue.toString(), textAlign: TextAlign.end);
},
onChanged: (value) {
obj!.option2 = value;
},
),
]),
]);
}
}
Running the code generator
Once you have added the annotations to your code you then need to run the
code generator to generate the missing .e.dart generated dart files.
run flutter pub run build_runner build in your package
directory.
Annotation values
xclass annotation:@ObjEdit.xtext|int|double field annotation:@ObjEditTextSettingxoption field annotation:@ObjEditOptionSettingxbool field annotation:@ObjEditBoolSettingdate field