toFormBuildRowCodeField method

String toFormBuildRowCodeField(
  1. SqfEntityFieldType field
)

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();
}