import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/main_model.dart'; import 'package:fcs/fcs/common/pages/util.dart'; import 'package:fcs/fcs/common/helpers/theme.dart'; import 'package:fcs/vo/setting.dart'; import 'package:fcs/widget/local_text.dart'; import 'package:fcs/widget/progress.dart'; class Time { final int value; Time(this.value); String get getValue => value > 12 ? (value - 12).toString() + "PM" : value.toString() + "AM"; @override bool operator ==(other) { if (identical(this, other)) { return true; } return other.value == this.value; } @override int get hashCode { int result = 17; result = 37 * result + value.hashCode; return result; } } class SettingOwner extends StatefulWidget { final Setting setting; const SettingOwner({this.setting}); @override _SettingOwnerState createState() => _SettingOwnerState(); } class _SettingOwnerState extends State { final _formKey = GlobalKey(); bool _isLoading = false; List days = []; int poOpenAt = 0; int poCloseAt = 0; @override void initState() { super.initState(); days = dayLists; if (widget.setting != null) { poOpenAt = widget.setting.poOpenAt; poCloseAt = widget.setting.poCloseAt; days.forEach((d) => widget.setting.poCloseOn.contains(d.id) ? d.isChecked = true : d.isChecked = false); } } Widget showDayList(BuildContext context, MainModel mainModel) { return Container( margin: EdgeInsets.symmetric(vertical: 5.0), height: 500.0, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only(left: 10, top: 10), child: Text( "PO submission closed Day", style: TextStyle(color: Colors.black54), ), ), Expanded( child: ListView.builder( itemCount: days.length, scrollDirection: Axis.vertical, padding: EdgeInsets.only(top: 10), itemBuilder: (BuildContext context, int index) { return new Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ new Checkbox( value: days[index].isChecked == null ? false : days[index].isChecked, activeColor: primaryColor, onChanged: (bool value) { setState(() { days[index].isChecked = value; }); }), Container( padding: EdgeInsets.only(top: 13), child: new Text( dayLists[index].name, style: TextStyle( fontSize: 15.0, ), ), ), ], ); }), ), ], ), ); } @override Widget build(BuildContext context) { var mainModel = Provider.of(context); return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( backgroundColor: primaryColor, title: LocalText( context, "setting.title", fontSize: 20, color: Colors.white, ), actions: [ IconButton( icon: Icon(Icons.send), onPressed: () { if (!_formKey.currentState.validate()) return; showConfirmDialog(context, "setting.confirm", () { _submit(); }); }) ], ), body: ListView( children: [ Padding( padding: const EdgeInsets.only(left: 24), child: Row( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Text("PO submission opened at:"), ), getDropDown(poOpenAt, (value) { setState(() { setState(() { this.poOpenAt = value; }); }); }), ], ), ), Padding( padding: const EdgeInsets.only(left: 24), child: Row( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Text("PO submission closed at:"), ), getDropDown(poCloseAt, (value) { setState(() { setState(() { this.poCloseAt = value; }); }); }), ], ), ), Form( key: _formKey, child: ListView( shrinkWrap: true, padding: EdgeInsets.only(left: 24.0, right: 24.0), children: [ showDayList(context, mainModel), ], ), ), ], ), )); } Widget getDropDown(int initial, Function(int) onChanged) { Time value = Time(initial); return DropdownButton