workouttest_app/lib/view/account.dart
2020-09-19 08:09:43 +02:00

213 lines
7.1 KiB
Dart

import 'package:aitrainer_app/bloc/account/account_bloc.dart';
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/model/customer.dart';
import 'package:aitrainer_app/util/trans.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<AccountBloc>(context);
return Scaffold(
appBar: AppBar(
title: Text(t('Account')),
backgroundColor: Colors.transparent,
),
body: Container(
foregroundDecoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('asset/image/WT_long_logo.png'),
alignment: Alignment.topRight,
),
),
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('asset/image/WT_light_background.png'),
fit: BoxFit.cover,
alignment: Alignment.center,
),
),
child: BlocConsumer<AccountBloc, AccountState>(
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: 135), children: <Widget>[
ListTile(
leading: 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) {
Navigator.of(context).pushNamed('customerModifyPage'),
print("Profile"),
}
},
),
),
loginOut( context, accountBloc ),
getMyTrainees(context, accountBloc),
]);
}
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 ) {
accountBloc.add(AccountLogout())
} 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<Widget> elements = List<Widget>();
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,
)
);
}
}