import 'package:fcs/domain/constants.dart'; import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/customer/model/customer_model.dart'; import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/fcs_id_icon.dart'; import 'package:fcs/pages/widgets/local_button.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; typedef void FindCallBack(); class CustomerEditor extends StatefulWidget { final User? customer; const CustomerEditor({this.customer}); @override _CustomerEditorState createState() => _CustomerEditorState(); } class _CustomerEditorState extends State { bool _isLoading = false; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { var phoneNumberBox = Row( children: [ Expanded( child: DisplayText( text: widget.customer!.phoneNumber, labelTextKey: "customer.phone", iconData: Icons.phone, )), IconButton( icon: Icon(Icons.open_in_new, color: primaryColor), onPressed: () => call(context, widget.customer!.phoneNumber)), ], ); final enabled = widget.customer!.status != user_disabled_status; final enableBox = LocalButton( textKey: enabled ? "customer.disable.btn" : "customer.enable.btn", iconData: enabled ? Icons.lock : Icons.lock_open, color: enabled ? primaryColor : Colors.grey, callBack: () => _enable(!enabled), ); return LocalProgress( inAsyncCall: _isLoading, child: SafeArea( child: Scaffold( appBar: AppBar( backgroundColor: Colors.white, shadowColor: Colors.transparent, centerTitle: true, leading: new IconButton( icon: new Icon( CupertinoIcons.back, color: primaryColor, size: 30, ), onPressed: () => Navigator.of(context).pop(), ), title: Text( widget.customer!.name, style: TextStyle( fontSize: 20, color: primaryColor, ), ), ), body: Padding( padding: const EdgeInsets.all(8.0), child: ListView( children: [ phoneNumberBox, DisplayText( text: widget.customer!.fcsID, labelTextKey: "customer.fcs.id", icon: FcsIDIcon(), ), DisplayText( text: widget.customer!.status, labelTextKey: "customer.status", iconData: Icons.add_alarm, ), SizedBox( height: 20, ), widget.customer!.requested ? fcsButton( context, getLocalString( context, "customer.invitation.request.confirm"), callack: _add) : Container(), widget.customer!.joined || widget.customer!.disabled ? enableBox : Container() ], ), ), ), )); } _add() async { showConfirmDialog(context, "customer.invitation.request.confirm", () async { setState(() { _isLoading = true; }); if (widget.customer == null) return; CustomerModel customerModel = Provider.of(context, listen: false); try { await customerModel.acceptRequest(widget.customer!.id); Navigator.pop(context); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } }); } _enable(bool enabled) async { setState(() { _isLoading = true; }); if (widget.customer == null) return; CustomerModel customerModel = Provider.of(context, listen: false); try { await customerModel.enableUser(widget.customer!, enabled); Navigator.pop(context); } catch (e) { showMsgDialog(context, "Error", e.toString()); } finally { setState(() { _isLoading = false; }); } } }