import 'package:farm_tpf/data/repository/user_repository.dart'; import 'package:farm_tpf/models/account.dart'; import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart'; import 'package:farm_tpf/presentation/custom_widgets/widget_toast.dart'; import 'package:farm_tpf/presentation/screens/profile/sc_change_password.dart'; import 'package:farm_tpf/utils/validators.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:keyboard_dismisser/keyboard_dismisser.dart'; import 'bloc_get_account.dart'; class UpdateProfileScreen extends StatefulWidget { static Route route() { return MaterialPageRoute(builder: (_) => UpdateProfileScreen()); } @override _UpdateProfileScreenState createState() => _UpdateProfileScreenState(); } class _UpdateProfileScreenState extends State { final GlobalKey _scaffoldKey = new GlobalKey(); final _repository = UserRepository(); GlobalKey _formKey = GlobalKey(); bool _autoValidate = false; FlutterToast flutterToast; Account _account = Account(); TextEditingController _userNameController = TextEditingController(); TextEditingController _fullNameController = TextEditingController(); TextEditingController _emailController = TextEditingController(); TextEditingController _addressController = TextEditingController(); @override void initState() { super.initState(); flutterToast = FlutterToast(context); getAccountBloc.getAccount((data) { _account = data; _userNameController.text = _account.login; _fullNameController.text = _account.fullName.toString(); _emailController.text = _account.email.toString(); _addressController.text = _account.address; }, (err) { flutterToast.showToast(child: WidgetToast(message: "Lỗi tải dữ liệu")); }); } _validateInputs() async { if (_formKey.currentState.validate()) { _formKey.currentState.save(); LoadingDialog.showLoadingDialog(_scaffoldKey.currentContext); _repository.updateProfile(_account).then((value) { LoadingDialog.hideLoadingDialog(_scaffoldKey.currentContext); _scaffoldKey.currentState.showSnackBar(SnackBar( content: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('Cập nhật thành công.'), Icon(Icons.done), ], ), backgroundColor: Colors.green, duration: Duration(seconds: 3), )); }).catchError((onError) { _scaffoldKey.currentState.showSnackBar(SnackBar( content: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('Cập nhật không thành công.'), Icon(Icons.error), ], ), backgroundColor: Colors.red, duration: Duration(seconds: 3), )); LoadingDialog.hideLoadingDialog(_scaffoldKey.currentContext); print("error"); }); } else { _autoValidate = true; } } Widget _userNameField() { return TextFormField( keyboardType: TextInputType.text, enabled: false, decoration: InputDecoration(labelText: "Tài khoản"), controller: _userNameController, validator: (String value) { return Validators.validateNotNullOrEmpty(value, "Tài khoản"); }, onSaved: (newValue) {}, ); } Widget _fullNameField() { return TextFormField( keyboardType: TextInputType.text, decoration: InputDecoration(labelText: "Họ và tên"), controller: _fullNameController, validator: (String value) { return Validators.validateNotNullOrEmpty(value, "Họ và tên"); }, onSaved: (newValue) { _account.fullName = newValue; }, ); } Widget _emailField() { return TextFormField( keyboardType: TextInputType.emailAddress, decoration: InputDecoration(labelText: "Email"), controller: _emailController, validator: (String value) { return Validators.validateEmail(value); }, onSaved: (newValue) { _account.email = newValue; }, ); } Widget _addressField() { return TextFormField( keyboardType: TextInputType.text, decoration: InputDecoration(labelText: "Địa chỉ"), controller: _addressController, onSaved: (newValue) { _account.address = newValue; }, ); } Widget _btnChangePassword() { return FlatButton( padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 0.0, left: 0.0), onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => ChangePasswordScreen()), ); }, child: Container( padding: EdgeInsets.only(top: 15.0, right: 0.0, bottom: 10.5, left: 0.0), decoration: BoxDecoration( border: Border(bottom: BorderSide(width: 0.5, color: Colors.grey)), ), child: Row( children: [ Expanded( child: Text( "Cập nhật mật khẩu".toUpperCase(), style: TextStyle( fontSize: 14.0, color: Colors.black, fontWeight: FontWeight.bold), )), Icon(Icons.arrow_forward_ios), ], ))); } @override Widget build(BuildContext context) => KeyboardDismisser( child: Scaffold( appBar: AppBar( centerTitle: true, title: Text( "Thông tin cá nhân", textAlign: TextAlign.center, ), actions: [ IconButton( icon: Icon(Icons.done), onPressed: () { FocusScopeNode currentFocus = FocusScope.of(context); if (!currentFocus.hasPrimaryFocus) { currentFocus.unfocus(); } _validateInputs(); }) ], ), key: _scaffoldKey, body: _buildContent())); Widget _buildContent() { return StreamBuilder( stream: getAccountBloc.actions, builder: (context, AsyncSnapshot snapshot) { if (snapshot.hasData) { return Form( key: _formKey, autovalidate: _autoValidate, child: SingleChildScrollView( padding: EdgeInsets.all(8.0), child: Column( children: [ _userNameField(), SizedBox( height: 8.0, ), _fullNameField(), SizedBox( height: 8.0, ), _emailField(), SizedBox( height: 16.0, ), _btnChangePassword() ], ), )); } else { return Center( child: CircularProgressIndicator(), ); } }); } }