toFormBuildRowCodeField method
Implementation
String toFormBuildRowCodeField(SqfEntityFieldType field) {
// print('toFormWidgetsCode begin 7.1: tableName:${table.tableName}');
final ccName = toCamelCase(field.fieldName);
field.table = field.table ?? table;
final tablename = field.table!.tableName!.toLowerCase();
final retVal = StringBuffer()..write('''Widget buildRow$ccName() {''');
if (field is SqfEntityFieldRelationshipBase) {
return '''Widget buildRow$ccName(void Function(${field.table!.primaryKeyTypes[0]}? selected$ccName) onChangeDropdownItemFor$ccName) {
return Row(
children: <Widget>[
Expanded(
flex: 1,
child: Text('${field.relationshipName}'),
),
Expanded(
flex: 2,
child: Container(
child: DropdownButtonFormField(
value: _selected$ccName,
items: _dropdownMenuItemsFor$ccName,
onChanged: onChangeDropdownItemFor$ccName,
validator: (value) {
${field.isNotNull != null && field.isNotNull! ? '''
if ((_selected$ccName != null && _selected$ccName.toString() != '0')) {
return null;
} else if (value == null || value == 0) {
return 'Please enter ${field.relationshipName}';
}
return null;
''' : 'return null;'}
},
),
)),
],
);
}''';
}
switch (field.dbType) {
case DbType.integer:
case DbType.numeric:
case DbType.real:
final rangeValidator = StringBuffer();
if (field.minValue != null && field.maxValue != null) {
rangeValidator.write(
'''else if(${field.dbType == DbType.real ? 'double' : 'int'}.tryParse(value)! >${field.maxValue} || ${field.dbType == DbType.real ? 'double' : 'int'}.tryParse(value)! < ${field.minValue}){
return 'Please Enter Between ${field.minValue} and ${field.maxValue} (required)'; }''');
} else if (field.minValue != null) {
rangeValidator.write(
'''else if(${field.dbType == DbType.real ? 'double' : 'int'}.tryParse(value)! < ${field.minValue}){
return 'Please Enter Minimum ${field.minValue} (required)'; }''');
} else if (field.maxValue != null) {
rangeValidator.write(
'''else if(${field.dbType == DbType.real ? 'double' : 'int'}.tryParse(value)! > ${field.maxValue}){
return 'Please Enter Maximum ${field.maxValue} (required)'; }''');
}
if ((field.isNotNull != null && field.isNotNull!)) {
retVal.writeln('''return TextFormField(
validator: (value) {
if (${field.dbType == DbType.real ? 'double' : 'int'}.tryParse(value!) == null)
{
return 'Please Enter valid number (required)';
}
${rangeValidator.toString()}
return null;
},''');
} else {
retVal.writeln('''return TextFormField(
validator: (value) { if (value!.isNotEmpty && ${field.dbType == DbType.real ? 'double' : 'int'}.tryParse(value) == null)
{ return 'Please Enter valid number'; }
${rangeValidator.toString().replaceAll('(required)', '')}
return null;
},''');
}
break;
case DbType.bool:
retVal.writeln('''return Row(
children: <Widget>[
Text('$ccName?'),
Checkbox(
value: $tablename.${field.fieldName} ?? false,
onChanged: (bool? value) {
setState(() {
$tablename.${field.fieldName} = value;
});
},
),
],
);
}
''');
return retVal.toString();
case DbType.date:
retVal.writeln('return TextFormField(');
retVal.writeln('''onTap: () => UITools.showDateTimePicker(context
${_getNullableValueField(field.minValue, 'minTime')}
${_getNullableValueField(field.maxValue, 'maxTime')}
, onConfirm: (sqfSelectedDate) {
txt$ccName.text = UITools.convertDate(sqfSelectedDate);
setState(() {
$tablename.${field.fieldName} = sqfSelectedDate;
});
}, currentTime: DateTime.tryParse(txt$ccName.text) ?? $tablename.${field.fieldName} ?? DateTime.now()),
''');
break;
case DbType.datetime:
case DbType.datetimeUtc:
retVal.writeln(
'''return Row(children: <Widget>[Expanded(flex: 1, child: TextFormField(onTap: () => UITools.showDateTimePicker(context
${_getNullableValueField(field.minValue, 'minTime')}
${_getNullableValueField(field.maxValue, 'maxTime')}
, onConfirm: (sqfSelectedDate) {
txt$ccName.text = UITools.convertDate(sqfSelectedDate);
txtTimeFor$ccName.text = UITools.convertTime(sqfSelectedDate);
setState(() {
final d = DateTime.tryParse(txt$ccName.text) ?? $tablename.${field.fieldName} ?? DateTime.now();
$tablename.${field.fieldName} = DateTime(sqfSelectedDate.year, sqfSelectedDate.month, sqfSelectedDate.day).add(Duration(hours: d.hour,minutes: d.minute,seconds: d.second));
});
},
currentTime: DateTime.tryParse(txt$ccName.text) ?? $tablename.${field.fieldName} ?? DateTime.now()),
${field.isNotNull != null && field.isNotNull! ? 'validator: (value) { if (value == null || value.isEmpty) { return \'Please enter $ccName\'; } return null;},' : ''}
controller: txt$ccName,
decoration: InputDecoration(labelText: '$ccName'),
),
),
Expanded(flex: 1,child: TextFormField(onTap: () => UITools.showDateTimePicker(context,
onConfirm: (sqfSelectedDate) {
txtTimeFor$ccName.text = UITools.convertTime(sqfSelectedDate);
setState(() {
final d = DateTime.tryParse(txt$ccName.text) ?? $tablename.${field.fieldName} ?? DateTime.now();
$tablename.${field.fieldName} = DateTime(d.year, d.month, d.day).add(Duration(hours: sqfSelectedDate.hour,minutes: sqfSelectedDate.minute,seconds: sqfSelectedDate.second));
txt$ccName.text = UITools.convertDate($tablename.${field.fieldName}!);
});
},
currentTime: DateTime.tryParse('\${UITools.convertDate(DateTime.now())} \${txtTimeFor$ccName.text}') ?? $tablename.${field.fieldName} ?? DateTime.now()),
controller: txtTimeFor$ccName,
decoration: InputDecoration(labelText: 'time'),
))
]);
}''');
return retVal.toString();
default:
if ((field.isNotNull != null && field.isNotNull!)) {
retVal.writeln('''return TextFormField(
validator: (value) { if (value == null || value.isEmpty)
{ return 'Please enter $ccName'; }
return null;
},''');
} else {
retVal.writeln('return TextFormField(');
}
}
retVal.writeln(''' controller: txt$ccName,
decoration: InputDecoration(labelText: '$ccName'),
);
}''');
return retVal.toString();
}