from models.Account import Account from models.Payment import Payments from models.User import User from scripts.generate_flutter_model import build_class def mainBuilder(classlist): blist = [] for cls in classlist: data = build_class(cls,blist) blist = blist + data[1] clstypeList = [i.__class__.__name__ for i in blist] for classItem in data[0]: imports = "import 'package:flutter/material.dart';\n" imports += "import 'package:flutter/services.dart';\n" controller = "" controllerInit = "" controllerDispose = "" textFields = "" for field in classItem.get('fields'): if field.get('name') == "id": continue if field.get('autogen'): continue controller += "\tTextEditingController _{};\n".format(field.get('name')) controllerInit += "\t\t_{} = new TextEditingController();\n".format(field.get('name')) controllerDispose += "\t\t_{}.dispose();\n".format(field.get('name')) req = "" if field.get('required'): req = """ validator: (value) { if (value.isEmpty) { return 'Please enter some text'; } return null; }, """ if field.get("is_class"): imports += "import 'package:adunationfe/data/forms/Form{}.dart';\n".format(field.get('class_name')) imports += "import 'package:adunationfe/data/models/{}.dart';\n".format(field.get('class_name')) if field.get('islist'): controller += "\t\tList<{classname}> item{name};\n".format(classname=field.get('class_name'), name=field.get('name')) controllerInit += "\t\t\titem{name} = [];\n".format(name=field.get('name')) else: controller += "\t\t{classname} item{name};\n".format(classname=field.get('class_name'), name=field.get('name')) controllerInit += "\t\t\titem{name} = {classname}();\n".format(classname=field.get('class_name'), name=field.get('name')) elif field.get('choices'): imports += "import 'package:dropdown_search/dropdown_search.dart';\n" textFields += """ DropdownSearch( mode: Mode.BOTTOM_SHEET, showClearButton: true, showSearchBox: true, label: '{name}', showSelectedItem: true, items: ['{items}'], hint: "country in menu mode", onChanged: print, selectedItem: "") , SizedBox( height: 15, ), """.format(items = "','".join(field.get('choices')),name=field.get('name')) elif field.get('type') == 'String': textFields +=""" new TextFormField( decoration: new InputDecoration(labelText: "Enter your {name}"), controller: _{name}, {req} ), SizedBox( height: 15, ), """.format(name=field.get('name'),req=req) elif field.get('type') == 'int': textFields += """ new TextFormField( decoration: new InputDecoration(labelText: "Enter your {name}"), controller: _{name}, keyboardType: TextInputType.number, inputFormatters: < TextInputFormatter > [ FilteringTextInputFormatter.digitsOnly ], {req} ), SizedBox( height: 15, ), """.format(name=field.get('name'),req=req) # elif field.get('is_class'): # print(field) # # exit() cls_text = """ {imports} class Form{classname} extends StatefulWidget {{ @override _Form{classname} createState() => _Form{classname}(); }} class _Form{classname} extends State {{ {controller} final _{classname} = GlobalKey(); @override void initState() {{ {initdata} super.initState(); }} @override void dispose() {{ {dispose} super.dispose(); }} @override Widget build(BuildContext context) {{ return new Form( key:_{classname}, child:new Column( mainAxisAlignment: MainAxisAlignment.center, children: [ {textfield} ]) ); }} }} """.format(imports=imports,classname=classItem.get('class'),controller=controller,initdata=controllerInit,dispose=controllerDispose,textfield=textFields) f = open("flutter_out/Form{}.dart".format(classItem.get('class')),"w+") f.write(cls_text) f.close() import os os.chdir('../') print(os.getcwd()) mainBuilder([User, Payments, Account])