|
- import 'package:farm_tpf/custom_model/action_form/ActionUIField.dart';
- import 'package:farm_tpf/custom_model/action_form/ActionUIForm.dart';
- import 'package:farm_tpf/data/repository/repository.dart';
- import 'package:farm_tpf/presentation/custom_widgets/app_bar_widget.dart';
- import 'package:farm_tpf/presentation/custom_widgets/bloc/media_helper_bloc.dart';
- import 'package:farm_tpf/presentation/custom_widgets/button_widget.dart';
- import 'package:farm_tpf/presentation/custom_widgets/dropdown_supply_widget.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_action_field_date.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_field_time_picker.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_media_picker.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_text_field_area.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_text_form_field.dart';
- import 'package:farm_tpf/presentation/screens/actions/cubit/action_ui_cubit.dart';
- import 'package:farm_tpf/utils/pref.dart';
- import 'package:farm_tpf/utils/validators.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_bloc/flutter_bloc.dart';
- import 'package:get/get.dart';
- import 'package:keyboard_dismisser/keyboard_dismisser.dart';
-
- import 'state_management_helper/change_file_controller.dart';
-
- class ActionScreen extends StatefulWidget {
- final int idAction;
- final String title;
- ActionScreen({@required this.idAction, @required this.title});
-
- @override
- _ActionScreenState createState() => _ActionScreenState();
- }
-
- class _ActionScreenState extends State<ActionScreen> {
- final _scaffoldKey = GlobalKey<ScaffoldState>();
- var _formKey = GlobalKey<FormState>();
- var pref = LocalPref();
- final _executeByController = TextEditingController();
- DateTime executeTime = DateTime.now();
- List<String> filePaths = List<String>();
- var changeFileController = Get.put(ChangeFileController());
- Map<String, TextEditingController> textFieldControllers = {};
-
- Future<Null> getSharedPrefs() async {
- var currentFullName = await pref.getString(DATA_CONST.CURRENT_FULL_NAME);
- _executeByController.text = currentFullName ?? "";
- }
-
- @override
- void initState() {
- super.initState();
- getSharedPrefs();
- }
-
- _validateInputs() async {
- if (_formKey.currentState.validate()) {
- _formKey.currentState.save();
- LoadingDialog.showLoadingDialog(context);
- filePaths = Get.find<ChangeFileController>().newFiles;
- //Create request general model
- try {
- LoadingDialog.hideLoadingDialog(context);
- //ADD NEW
- //Update
- textFieldControllers.forEach((key, value) {
- print(textFieldControllers[key].text);
- });
- } catch (e) {
- LoadingDialog.hideLoadingDialog(context);
- print(e.toString());
- }
- } else {
- //
- }
- }
-
- Widget _btnExecuteTimePicker() {
- return WidgetFieldDateTimePicker(
- initDateTime: executeTime,
- onUpdateDateTime: (selectedDate) {
- //
- });
- }
-
- Widget _executeByField() {
- return TextFormField(
- keyboardType: TextInputType.text,
- decoration: InputDecoration(labelText: "Người thực hiện"),
- enabled: false,
- controller: _executeByController,
- onSaved: (newValue) {},
- );
- }
-
- //
- // GENERATE DYNAMIC FORM
- //
-
- 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 == 0
- ? (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 == 1
- ? (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(
- value: field.description,
- hint:
- '${field.description} ${field.isMandatory == 1 ? '*' : ''}',
- condition: field.tbActivityExtendTypeCondition,
- invalidMessage: '',
- onPressed: () {});
- } else if (field.tbControlTypeName == 'date') {
- return FieldDateWidget(
- value: field.description,
- hint:
- '${field.description} ${field.isMandatory == 1 ? '*' : ''}',
- invalidMessage: '',
- onPressed: () {});
- } else if (field.tbControlTypeName == 'radiobutton') {
- return Text(field.tbControlTypeName);
- } else {
- return Text(field.tbControlTypeName);
- }
- }),
- );
- }
-
- @override
- Widget build(BuildContext context) => KeyboardDismisser(
- gestures: [
- GestureType.onTap,
- GestureType.onPanUpdateDownDirection,
- ],
- child: Scaffold(
- backgroundColor: Colors.white,
- key: _scaffoldKey,
- appBar: AppBarWidget(
- isBack: true,
- action: InkWell(
- child: Text(
- 'Lưu',
- style: TextStyle(
- color: Colors.red, fontWeight: FontWeight.normal),
- ),
- onTap: () {
- FocusScopeNode currentFocus = FocusScope.of(context);
- if (!currentFocus.hasPrimaryFocus) {
- currentFocus.unfocus();
- }
- _validateInputs();
- },
- ),
- ),
- body: KeyboardDismisser(
- child: MultiBlocProvider(
- providers: [
- BlocProvider<ActionUiCubit>(
- create: (context) =>
- ActionUiCubit(repository: Repository())
- ..getActionUIForm(widget.idAction)),
- BlocProvider<MediaHelperBloc>(
- create: (context) =>
- MediaHelperBloc()..add(ChangeListMedia(items: [])),
- )
- ],
- child: Form(
- key: _formKey,
- child: SafeArea(
- child: SingleChildScrollView(
- child: BlocBuilder<ActionUiCubit, ActionUiState>(
- builder: (context, state) {
- if (state is ActionUiLoading) {
- print('loading...');
- return Center(child: CircularProgressIndicator());
- } else if (state is ActionUiSuccess) {
- var actionUiForm = state.item as ActionUIForm;
- actionUiForm.objectParameterDTOList
- .forEach((element) {
- var textEditingController =
- new TextEditingController();
- textFieldControllers.putIfAbsent(
- element.id.toString(),
- () => textEditingController);
- });
- return Column(
- children: [
- Padding(
- padding: const EdgeInsets.all(8.0),
- child: Column(
- children: <Widget>[
- Container(
- width: double.infinity,
- child: Text(
- "Ngày thực hiện *",
- style: TextStyle(
- color: Colors.black54,
- fontSize: 13.0),
- ),
- ),
- _btnExecuteTimePicker(),
- SizedBox(
- height: 8.0,
- ),
- generateTextField(actionUiForm
- .objectParameterDTOList),
- _executeByField(),
- SizedBox(
- height: 8.0,
- ),
- ],
- ),
- ),
- Container(
- width: double.infinity,
- height: 16,
- color: Colors.grey[200],
- ),
- BlocBuilder<MediaHelperBloc,
- MediaHelperState>(
- builder: (context, state) {
- if (state is MediaHelperSuccess) {
- return WidgetMediaPicker(
- currentItems: state.items,
- onChangeFiles: (newPathFiles,
- deletePathFiles) async {
- Get.find<ChangeFileController>()
- .change(newPathFiles,
- deletePathFiles);
- });
- } else {
- return Center(
- child: CircularProgressIndicator());
- }
- }),
- Padding(
- padding: const EdgeInsets.all(8.0),
- child: ButtonWidget(
- title: 'CẬP NHẬT',
- onPressed: () {
- FocusScopeNode currentFocus =
- FocusScope.of(context);
- if (!currentFocus.hasPrimaryFocus) {
- currentFocus.unfocus();
- }
- _validateInputs();
- }),
- ),
- ],
- );
- } else if (state is ActionUiFailure) {
- print('error');
- return Text(state.errorString);
- // LoadingDialog.hideLoadingDialog(context);
- }
- },
- ),
- ),
- )),
- ))));
- @override
- void dispose() {
- _executeByController.dispose();
- super.dispose();
- }
- }
|