Browse Source

date time, radio button widget

smf
daivph 4 years ago
parent
commit
7a97abb838
2 changed files with 191 additions and 128 deletions
  1. +109
    -65
      lib/presentation/custom_widgets/widget_action_field_date.dart
  2. +82
    -63
      lib/presentation/screens/actions/sc_action.dart

+ 109
- 65
lib/presentation/custom_widgets/widget_action_field_date.dart View File

@@ -1,82 +1,126 @@
import 'package:farm_tpf/utils/validators.dart';
import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:get/get.dart';
import 'package:get/get_state_manager/get_state_manager.dart';
import 'package:farm_tpf/utils/formatter.dart';

class FieldDateWidget extends StatelessWidget {
import 'widget_field_time_picker.dart';

class FieldDateWidget extends StatefulWidget {
final String hint;
final String value;
final Function onPressed;
final Function(DateTime) onPressed;
final String invalidMessage;
final String tag;
FieldDateWidget(
{@required this.hint,
@required this.tag,
this.value,
@required this.onPressed,
this.invalidMessage});

@override
_FieldDateWidgetState createState() => _FieldDateWidgetState();
}

class _FieldDateWidgetState extends State<FieldDateWidget> {
ChangeDateTimePicker controller;

@override
void initState() {
super.initState();
controller = Get.put(ChangeDateTimePicker(), tag: widget.tag);
}

@override
Widget build(BuildContext context) {
return SizedBox(
width: double.infinity,
height: Validators.stringNotNullOrEmpty(invalidMessage) ? 85 : 65,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
hint ?? '',
style: TextStyle(
color: Validators.stringNotNullOrEmpty(invalidMessage)
? Colors.red
: Colors.black54,
fontSize: 13.0),
),
SizedBox(
return GetBuilder<ChangeDateTimePicker>(
tag: widget.tag,
builder: (data) {
return SizedBox(
width: double.infinity,
height: 44,
child: FlatButton(
padding: EdgeInsets.only(
top: 0.0, right: 0.0, bottom: 0.0, left: 0.0),
onPressed: onPressed,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.only(
top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 0.5,
color: Validators.stringNotNullOrEmpty(
invalidMessage)
? Colors.red
: Colors.black54)),
),
child: Row(
children: [
Expanded(
child: Text(value ?? hint,
style: TextStyle(
fontSize: 16.0,
color: Colors.black45))),
Icon(
Icons.date_range,
color: Colors.grey,
),
],
))
],
)),
),
Validators.stringNotNullOrEmpty(invalidMessage)
? Text(
invalidMessage ?? '',
height: Validators.stringNotNullOrEmpty(widget.invalidMessage)
? 85
: 65,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
widget.hint ?? '',
style: TextStyle(
fontSize: 12.0,
color: Colors.red,
fontWeight: FontWeight.normal),
textAlign: TextAlign.left,
)
: SizedBox(),
],
),
);
color:
Validators.stringNotNullOrEmpty(widget.invalidMessage)
? Colors.red
: Colors.black54,
fontSize: 13.0),
),
SizedBox(
width: double.infinity,
height: 44,
child: FlatButton(
padding: EdgeInsets.only(
top: 0.0, right: 0.0, bottom: 0.0, left: 0.0),
onPressed: () {
DatePicker.showDateTimePicker(context,
showTitleActions: true,
onChanged: (date) {}, onConfirm: (date) {
controller.change(date);
widget.onPressed(date);
},
currentTime: data?.selectedDateTime,
locale: LocaleType.vi);
},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.only(
top: 0.0,
right: 0.0,
bottom: 10.5,
left: 0.0),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 0.5,
color: Validators.stringNotNullOrEmpty(
widget.invalidMessage)
? Colors.red
: Colors.black54)),
),
child: Row(
children: [
Expanded(
child: Text(
data?.selectedDateTime
?.displayDateTime_DDMMYYYY_HHmm() ??
widget.hint,
style: TextStyle(
fontSize: 14.0,
color: Colors.black))),
Icon(
Icons.date_range,
color: Colors.grey,
),
],
))
],
)),
),
Validators.stringNotNullOrEmpty(widget.invalidMessage)
? Text(
widget.invalidMessage ?? '',
style: TextStyle(
fontSize: 12.0,
color: Colors.red,
fontWeight: FontWeight.normal),
textAlign: TextAlign.left,
)
: SizedBox(),
],
),
);
});
}
}

+ 82
- 63
lib/presentation/screens/actions/sc_action.dart View File

@@ -96,71 +96,90 @@ class _ActionScreenState extends State<ActionScreen> {
//

Widget generateTextField(List<ActionUIField> fields) {
return Container(
height: fields.length * 70.0,
child: ListView.separated(
itemCount: fields.length,
separatorBuilder: (context, index) {
return SizedBox(
height: 8,
);
},
itemBuilder: (context, index) {
var field = fields[index];
if (field.tbControlTypeName == 'text') {
return TextFormField(
keyboardType: TextInputType.text,
decoration: InputDecoration(labelText: field.description),
controller: textFieldControllers[field.id.toString()],
onSaved: (newValue) {},
validator: field.isMandatory
? (String value) {
return Validators.validateNotNullOrEmpty(
value, 'Vui lòng nhập ${field.description}');
}
: null,
return Wrap(
children: [
ListView.separated(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: fields.length,
separatorBuilder: (context, index) {
return SizedBox(
height: 8,
);
} else if (field.tbControlTypeName == 'number') {
return WidgetTextFormFieldNumber(
hintValue: field.description,
textController: textFieldControllers[field.id.toString()],
onSaved: (newValue) {},
validator: field.isMandatory
? (String value) {
return Validators.validNumberOrEmpty(
value, 'Vui lòng nhập ${field.description}');
}
: null,
);
} else if (field.tbControlTypeName == 'textarea') {
return TextFieldAreaWidget(
hint: field.description,
},
itemBuilder: (context, index) {
var field = fields[index];
if (field.tbControlTypeName == 'text') {
return TextFormField(
keyboardType: TextInputType.text,
decoration: InputDecoration(labelText: field.description),
controller: textFieldControllers[field.id.toString()],
onSaved: (newValue) {});
} else if (field.tbControlTypeName == 'dropdown') {
return DropdownSupplyWidget(
titleName: field.description ?? '',
tbSupply: field.tbActivityExtendTypeExternalTable ?? '',
tag: field.name,
value: field.description,
hint: '${field.description} ${field.isMandatory ? '*' : ''}',
condition: field.tbActivityExtendTypeCondition,
invalidMessage: '',
onPressed: (commonData) {
print(commonData.name);
});
} else if (field.tbControlTypeName == 'date') {
return FieldDateWidget(
value: field.description,
hint: '${field.description} ${field.isMandatory ? '*' : ''}',
invalidMessage: '',
onPressed: () {});
} else if (field.tbControlTypeName == 'radiobutton') {
return Text(field.tbControlTypeName);
} else {
return Text(field.tbControlTypeName);
}
}),
onSaved: (newValue) {},
validator: field.isMandatory
? (String value) {
return Validators.validateNotNullOrEmpty(
value, 'Vui lòng nhập ${field.description}');
}
: null,
);
} else if (field.tbControlTypeName == 'number') {
return WidgetTextFormFieldNumber(
hintValue: field.description,
textController: textFieldControllers[field.id.toString()],
onSaved: (newValue) {},
validator: field.isMandatory
? (String value) {
return Validators.validNumberOrEmpty(
value, 'Vui lòng nhập ${field.description}');
}
: null,
);
} else if (field.tbControlTypeName == 'textarea') {
return TextFieldAreaWidget(
hint: field.description,
controller: textFieldControllers[field.id.toString()],
onSaved: (newValue) {});
} else if (field.tbControlTypeName == 'dropdown') {
return DropdownSupplyWidget(
titleName: field.description ?? '',
tbSupply: field.tbActivityExtendTypeExternalTable ?? '',
tag: field.name,
value: field.description,
hint:
'${field.description} ${field.isMandatory ? '*' : ''}',
condition: field.tbActivityExtendTypeCondition,
invalidMessage: '',
onPressed: (commonData) {
print(commonData.name);
});
} else if (field.tbControlTypeName == 'date') {
return FieldDateWidget(
tag: field.name,
value: field.description,
hint:
'${field.description} ${field.isMandatory ? '*' : ''}',
invalidMessage: '',
onPressed: (selectedDate) {
print(selectedDate.day);
});
} else if (field.tbControlTypeName == 'radiobutton') {
return DropdownSupplyWidget(
titleName: field.description ?? '',
tbSupply: field.tbActivityExtendTypeExternalTable ?? '',
tag: field.name,
value: field.description,
hint:
'${field.description} ${field.isMandatory ? '*' : ''}',
condition: field.tbActivityExtendTypeCondition,
invalidMessage: '',
onPressed: (commonData) {
print(commonData.name);
});
} else {
return Container();
}
})
],
);
}


Loading…
Cancel
Save