Files
fcs/lib/pages/email_page.dart

160 lines
4.7 KiB
Dart
Raw Normal View History

2020-05-29 07:45:27 +06:30
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:fcs/model/language_model.dart';
import 'package:fcs/model/main_model.dart';
import 'package:fcs/model/shared_pref.dart';
import 'package:fcs/model/user_model.dart';
2020-08-30 21:26:37 +06:30
import 'package:fcs/fcs/common/theme.dart';
2020-05-29 07:45:27 +06:30
import 'package:fcs/vo/user.dart';
import 'package:fcs/widget/local_text.dart';
import 'package:fcs/widget/localization/app_translations.dart';
import 'package:fcs/widget/progress.dart';
import 'confirm_email.dart';
import 'util.dart';
class EmailPage extends StatefulWidget {
final User user;
EmailPage({this.user});
@override
_EmailPageState createState() => _EmailPageState();
}
class _EmailPageState extends State<EmailPage> {
final TextEditingController _email = new TextEditingController();
bool _isLoading = false;
final _formKey = GlobalKey<FormState>();
@override
void initState() {
super.initState();
if (widget.user != null) {
_email.text = widget.user.email;
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
MainModel mainModel = Provider.of<MainModel>(context);
var languageModel = Provider.of<LanguageModel>(context);
final emailInput = TextFormField(
controller: _email,
autofocus: false,
decoration: new InputDecoration(
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0)),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0)),
labelText: AppTranslations.of(context).text("login.email"),
labelStyle: labelStyle,
icon: Icon(
Icons.email,
color: primaryColor,
)),
validator: (value) {
if (value.isEmpty) {
return AppTranslations.of(context).text("login.email.empty");
}
return null;
},
);
final enterButton = Padding(
padding: EdgeInsets.symmetric(vertical: 16.0),
child: RaisedButton(
onPressed: () => _add(mainModel),
padding: EdgeInsets.all(10),
color: primaryColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(7),
),
child: Text(AppTranslations.of(context).text("login.email.add"),
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
),
);
final skipButton = Container(
child: InkWell(
onTap: () {
SharedPref.saveSkippedRecoverEmail(true);
2020-08-30 21:26:37 +06:30
Navigator.pushNamedAndRemoveUntil(
context, "/welcome", (r) => false);
2020-05-29 07:45:27 +06:30
},
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
AppTranslations.of(context).text("login.email.skip"),
style: languageModel.isEng
? TextStyle(fontSize: 18, fontFamily: 'WorkSansMedium')
: TextStyle(fontSize: 18, fontFamily: 'MyanmarUnicode'),
),
Container(
padding: EdgeInsets.only(top: 4),
child: Icon(
Icons.skip_next,
size: 30,
)),
],
)),
);
return LocalProgress(
inAsyncCall: _isLoading,
child: Scaffold(
appBar: AppBar(
title: LocalText(
context,
'login.email.title',
fontSize: 20,
color: Colors.white,
),
backgroundColor: primaryColor,
),
body: Center(
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.only(left: 24.0, right: 24.0),
children: <Widget>[
Form(key: _formKey, child: emailInput),
SizedBox(height: 8.0),
enterButton,
widget.user != null ? Container() : skipButton
],
),
),
),
);
}
Future<void> _add(MainModel mainModel) async {
if (!_formKey.currentState.validate()) {
return;
}
setState(() {
_isLoading = true;
});
try {
UserModel userModel = Provider.of<UserModel>(context);
await userModel.addEmail(mainModel.user.phoneNumber, _email.text);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ConfirmEmail(
id: mainModel.user.phoneNumber,
email: _email.text,
)));
} catch (e) {
showMsgDialog(context, "Error", e.toString());
} finally {
setState(() {
_isLoading = false;
});
}
}
}