forked from oyd/Adunatio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
5.3 KiB
146 lines
5.3 KiB
4 years ago
|
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<String>(
|
||
|
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<Form{classname}> {{
|
||
|
{controller}
|
||
|
|
||
|
final _{classname} = GlobalKey<FormState>();
|
||
|
@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: <Widget>[
|
||
|
{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])
|