import 'package:aitrainer_app/bloc/account/account_bloc.dart'; import 'package:aitrainer_app/localization/app_language.dart'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/customer.dart'; import 'package:aitrainer_app/util/common.dart'; import 'package:aitrainer_app/util/trans.dart'; import 'package:aitrainer_app/widgets/app_bar_min.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:aitrainer_app/widgets/bottom_nav.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; // ignore: must_be_immutable class AccountPage extends StatelessWidget with Trans { // ignore: close_sinks AccountBloc accountBloc; @override Widget build(BuildContext context) { setContext(context); accountBloc = BlocProvider.of(context); return Scaffold( appBar: AppBarMin(), body: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage('asset/image/WT_light_background.png'), fit: BoxFit.cover, alignment: Alignment.center, ), ), child: BlocConsumer(listener: (context, state) { if (state is AccountError) { Scaffold.of(context).showSnackBar( SnackBar(backgroundColor: Colors.orange, content: Text(state.message, style: TextStyle(color: Colors.white)))); } else if (state is AccountLoading) {} }, builder: (context, state) { if (state is AccountInitial) { String customerName = accountBloc.customerRepository.firstName + " " + accountBloc.customerRepository.name; return accountWidget(context, customerName, accountBloc); } else if (state is AccountLoggedIn) { String customerName = accountBloc.customerRepository.firstName + " " + accountBloc.customerRepository.name; return accountWidget(context, customerName, accountBloc); } else if (state is AccountLoggedOut) { String customerName = ""; return accountWidget(context, customerName, accountBloc); } else if (state is AccountReady) { String customerName = accountBloc.customerRepository.firstName + " " + accountBloc.customerRepository.name; return accountWidget(context, customerName, accountBloc); } else { return accountWidget(context, "", accountBloc); } }), ), bottomNavigationBar: BottomNavigator(bottomNavIndex: 3)); } ListView accountWidget(BuildContext context, String customerName, AccountBloc accountBloc) { return ListView(padding: EdgeInsets.only(top: 35), children: [ ListTile( leading: Common.badgedIcon(Colors.grey, Icons.perm_identity, "personalData"), //Icon(Icons.perm_identity), subtitle: Text(t("Profile")), title: FlatButton( child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(customerName, style: TextStyle(color: Colors.blue)), Icon(Icons.arrow_forward_ios), ]), textColor: Colors.grey, color: Colors.white, onPressed: () => { if (accountBloc.customerRepository.customer != null && Cache().userLoggedIn != null) { Navigator.of(context).pushNamed('customerModifyPage'), } }, ), ), devices(context, accountBloc), loginOut(context, accountBloc), getMyTrainees(context, accountBloc), ]); } ListTile devices(BuildContext context, AccountBloc accountBloc) { ListTile element = ListTile(); element = ListTile( leading: Common.badgedIcon(Colors.grey, Icons.device_hub, "customerDevice"), title: FlatButton( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [Text(t("Available Devices"), style: TextStyle(color: Colors.orange)), Icon(Icons.arrow_forward_ios)]), textColor: Colors.orange, color: Colors.white, onPressed: () => { if (accountBloc.customerRepository.customer != null && Cache().userLoggedIn != null) { Navigator.of(context).pushNamed('customerExerciseDevicePage'), } }, ), ); return element; } ListTile loginOut(BuildContext context, AccountBloc accountBloc) { ListTile element = ListTile(); String text = "Logout"; Color buttonColor = Colors.orange; if (accountBloc.customerRepository.customer == null || accountBloc.customerRepository.customer.email == null) { text = "Login"; buttonColor = Colors.blue; } element = ListTile( enabled: true, leading: Icon(Icons.input), title: FlatButton( child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(t(text), style: TextStyle(color: buttonColor)), Icon(Icons.arrow_forward_ios), ]), textColor: buttonColor, color: Colors.white, onPressed: () => { if (accountBloc.loggedIn) { confirmationDialog(accountBloc), } else { accountBloc.add(AccountLogin()), Navigator.of(context).pushNamed('login'), } }, ), ); return element; } Widget getMyTrainees(BuildContext context, AccountBloc accountBloc) { if (accountBloc.customerRepository.customer == null) { return Container(); } if (accountBloc.customerRepository.customer.trainer == 0) { return ListTile( title: Container(), ); } if (accountBloc.customerRepository.getTraineesList() == null) { return ListTile( leading: Icon(Icons.people), title: RaisedButton( color: Colors.white70, onPressed: () => accountBloc.add(AccountGetTrainees()), child: Text("See my trainees"), ), ); } List elements = List(); accountBloc.customerRepository.getTraineesList().forEach((element) { Customer trainee = element; String name = trainee.name; String firstName = trainee.firstname; String nodeName = AppLanguage().appLocal == Locale("en") ? firstName + " " + name : name + " " + firstName; bool selected = accountBloc.traineeId == trainee.customerId; Widget widget = FlatButton( padding: EdgeInsets.all(10), shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(8)), side: BorderSide(width: 2, color: selected ? Colors.blue : Colors.black26), ), onPressed: () { accountBloc.add(AccountSelectTrainee(traineeId: trainee.customerId)); //Navigator.of(context).pushNamed('login'); }, child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( nodeName, style: TextStyle(color: selected ? Colors.blue : Colors.black54, fontWeight: selected ? FontWeight.bold : FontWeight.normal), ), Icon(Icons.arrow_forward_ios), ]), ); elements.add(widget); }); return ListTile( leading: Icon(Icons.people), subtitle: Text("My Trainees"), title: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceAround, children: elements, )); } void confirmationDialog(AccountBloc accountBloc) { showCupertinoDialog( useRootNavigator: true, context: context, //barrierDismissible: false, builder: (_) => CupertinoAlertDialog( title: Text(t("Are you sure to logout?")), content: Column(children: [ Divider(), ]), actions: [ FlatButton( child: Text(t("No")), onPressed: () => Navigator.pop(context), ), FlatButton( child: Text(t("Yes")), onPressed: () => { accountBloc.add(AccountLogout()), Navigator.pop(context), }, ) ], )); } }