Browse Source

Plant action screen

master
daivph 5 years ago
parent
commit
56be653f32
4 changed files with 304 additions and 4 deletions
  1. +66
    -0
      lib/custom_model/Plant.dart
  2. +2
    -2
      lib/presentation/screens/actions/nursery/sc_edit_action_nursery.dart
  3. +232
    -0
      lib/presentation/screens/actions/plant/sc_edit_action_plant.dart
  4. +4
    -2
      lib/presentation/screens/plot_detail/sc_plot_action.dart

+ 66
- 0
lib/custom_model/Plant.dart View File

@@ -0,0 +1,66 @@
class Plant {
int cropId;
String executeDate;
String description;
String density;
num quantity;
List<SuppliesUsing> suppliesUsing;

Plant(
{this.cropId,
this.executeDate,
this.description,
this.density,
this.quantity,
this.suppliesUsing});

Plant.fromJson(Map<String, dynamic> json) {
cropId = json['cropId'];
executeDate = json['executeDate'];
description = json['description'];
density = json['density'];
quantity = json['quantity'];
if (json['suppliesUsing'] != null) {
suppliesUsing = new List<SuppliesUsing>();
json['suppliesUsing'].forEach((v) {
suppliesUsing.add(new SuppliesUsing.fromJson(v));
});
}
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['cropId'] = this.cropId;
data['executeDate'] = this.executeDate;
data['description'] = this.description;
data['density'] = this.density;
data['quantity'] = this.quantity;
if (this.suppliesUsing != null) {
data['suppliesUsing'] =
this.suppliesUsing.map((v) => v.toJson()).toList();
}
return data;
}
}

class SuppliesUsing {
String dosage;
int quantity;
int suppliesInWarehouseId;

SuppliesUsing({this.dosage, this.quantity, this.suppliesInWarehouseId});

SuppliesUsing.fromJson(Map<String, dynamic> json) {
dosage = json['dosage'];
quantity = json['quantity'];
suppliesInWarehouseId = json['suppliesInWarehouseId'];
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['dosage'] = this.dosage;
data['quantity'] = this.quantity;
data['suppliesInWarehouseId'] = this.suppliesInWarehouseId;
return data;
}
}

+ 2
- 2
lib/presentation/screens/actions/nursery/sc_edit_action_nursery.dart View File

@@ -12,12 +12,12 @@ import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'package:pattern_formatter/pattern_formatter.dart';
import 'package:farm_tpf/utils/formatter.dart';

class EditActionNursery extends StatefulWidget {
class EditActionNurseryScreen extends StatefulWidget {
@override
_EditActionNurseryState createState() => _EditActionNurseryState();
}

class _EditActionNurseryState extends State<EditActionNursery> {
class _EditActionNurseryState extends State<EditActionNurseryScreen> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
final _repository = Repository();
GlobalKey<FormState> _formKey = GlobalKey();

+ 232
- 0
lib/presentation/screens/actions/plant/sc_edit_action_plant.dart View File

@@ -0,0 +1,232 @@
import 'package:farm_tpf/custom_model/Plant.dart';
import 'package:farm_tpf/data/repository/repository.dart';
import 'package:farm_tpf/utils/const_string.dart';
import 'package:farm_tpf/utils/const_style.dart';
import 'package:farm_tpf/utils/pref.dart';
import 'package:farm_tpf/utils/validators.dart';
import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:intl/intl.dart';
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'package:pattern_formatter/pattern_formatter.dart';
import 'package:farm_tpf/utils/formatter.dart';

class EditActionPlantScreen extends StatefulWidget {
@override
_EditActionPlantScreenState createState() => _EditActionPlantScreenState();
}

class _EditActionPlantScreenState extends State<EditActionPlantScreen> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
final _repository = Repository();
GlobalKey<FormState> _formKey = GlobalKey();
bool _autoValidate = false;
Plant _plant = Plant();
var pref = LocalPref();
FlutterToast flutterToast;
TextEditingController _descriptionController = TextEditingController();
TextEditingController _quantityController = TextEditingController();
TextEditingController _densityController = TextEditingController();
String executeTimeView;
DateTime executeTime = DateTime.now();

@override
void initState() {
super.initState();
flutterToast = FlutterToast(context);
//UPDATE
if (_plant != null) {
try {
executeTime =
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(_plant.executeDate);
} catch (_) {}
} else {
//ADD NEW
var parsedExecuteDate =
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(executeTime);
_plant.executeDate = "$parsedExecuteDate";
}
executeTimeView = DateFormat("dd/MM/yyyy HH:mm").format(executeTime);
}

Widget _btnExecuteTimePicker() {
return 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) {
setState(() {
var parsedDate =
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(date);
_plant.executeDate = "$parsedDate";
executeTimeView = DateFormat("dd/MM/yyyy HH:mm").format(date);
});
}, currentTime: executeTime, locale: LocaleType.vi);
},
child: Container(
padding:
EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
decoration: BoxDecoration(
border: kBorderTextField,
),
child: Row(
children: [
Expanded(
child: Text(
//TODO: check condition
executeTimeView == null ? "$executeTime" : executeTimeView,
style: TextStyle(fontSize: 14.0, color: Colors.black87),
)),
Icon(
Icons.date_range,
color: Colors.blue,
),
],
)));
}

Widget _btnSelectSeed() {
return FlatButton(
padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 0.0, left: 0.0),
onPressed: () {},
child: Container(
padding:
EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
decoration: BoxDecoration(
border: kBorderTextField,
),
child: Row(
children: [
Expanded(
child: Text(
"Tên giống",
style: TextStyle(fontSize: 14.0, color: Colors.black87),
)),
Icon(
Icons.arrow_drop_down,
color: Colors.grey,
),
],
)));
}

Widget _quantityField() {
return TextFormField(
keyboardType: TextInputType.numberWithOptions(decimal: true),
inputFormatters: [
ThousandsFormatter(
formatter: NumberFormat("#,###.##", "es"), allowFraction: true)
],
decoration: InputDecoration(labelText: "Số lượng cây trồng"),
controller: _quantityController,
validator: (String value) {
return Validators.validNumber(value, "Số lượng cây trồng");
},
onSaved: (newValue) {
_plant.quantity = newValue.parseDoubleThousand();
},
);
}

Widget _densityField() {
return TextFormField(
keyboardType: TextInputType.text,
decoration: InputDecoration(labelText: "Mật độ"),
controller: _densityController,
onSaved: (newValue) {
_plant.density = newValue;
},
);
}

Widget _desciptionField() {
return TextFormField(
keyboardType: TextInputType.text,
decoration: InputDecoration(labelText: "Ghi chú"),
controller: _descriptionController,
onSaved: (newValue) {
_plant.description = newValue;
},
);
}

_actionAppBar() {
IconButton iconButton;
if (1 == 1) {
iconButton = IconButton(
icon: Icon(
Icons.done,
color: Colors.black,
),
onPressed: () {},
);
return <Widget>[iconButton];
}
return <Widget>[Container()];
}

@override
Widget build(BuildContext context) => KeyboardDismisser(
gestures: [
GestureType.onTap,
GestureType.onPanUpdateDownDirection,
],
child: Scaffold(
key: _scaffoldKey,
appBar: AppBar(
centerTitle: true,
title: Text(plot_action_plant),
actions: _actionAppBar()),
body: KeyboardDismisser(
child: Form(
key: _formKey,
autovalidate: _autoValidate,
child: SingleChildScrollView(
padding: 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,
),
Container(
width: double.infinity,
child: Text(
"Tên giống",
style: TextStyle(
color: Colors.black54, fontSize: 13.0),
),
),
_btnSelectSeed(),
SizedBox(
height: 8.0,
),
_quantityField(),
SizedBox(
height: 8.0,
),
_densityField(),
SizedBox(
height: 8.0,
),
_desciptionField()
],
),
)))));
@override
void dispose() {
_quantityController.dispose();
_densityController.dispose();
_descriptionController.dispose();
super.dispose();
}
}

+ 4
- 2
lib/presentation/screens/plot_detail/sc_plot_action.dart View File

@@ -4,6 +4,7 @@ import 'package:farm_tpf/presentation/custom_widgets/bottom_loader.dart';
import 'package:farm_tpf/presentation/custom_widgets/loading_list_page.dart';
import 'package:farm_tpf/presentation/screens/actions/nursery/sc_edit_action_nursery.dart';
import 'package:farm_tpf/presentation/screens/actions/other/sc_edit_action_other.dart';
import 'package:farm_tpf/presentation/screens/actions/plant/sc_edit_action_plant.dart';
import 'package:farm_tpf/presentation/screens/plot/sc_plot.dart';
import 'package:farm_tpf/presentation/screens/plot_detail/bloc/plot_detail_bloc.dart';
import 'package:farm_tpf/utils/const_color.dart';
@@ -31,8 +32,9 @@ class _PlotActionScreenState extends State<PlotActionScreen> {
}

_initActionButtons() {
actions.add(ActionType(plot_action_nursery, null, EditActionNursery()));
actions.add(ActionType(plot_action_plant, null, null));
actions
.add(ActionType(plot_action_nursery, null, EditActionNurseryScreen()));
actions.add(ActionType(plot_action_plant, null, EditActionPlantScreen()));
actions.add(ActionType(plot_action_crop_status, null, null));
actions.add(ActionType(plot_action_environment_update, null, null));
actions.add(ActionType(plot_action_dung, null, null));

Loading…
Cancel
Save