refactor: delete account information

release/mobdr-v0.0.1
Frédérik Benoist 2023-06-03 23:33:39 +02:00
parent ee68dd4f98
commit d2d92ed8bb
5 changed files with 8 additions and 647 deletions

View File

@ -1,269 +0,0 @@
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/config/global_style.dart';
import 'package:mobdr/service/shared_prefs.dart';
import 'package:mobdr/ui/account/account_information/edit_email.dart';
import 'package:mobdr/ui/account/account_information/edit_name.dart';
import 'package:mobdr/ui/account/account_information/edit_phone_number.dart';
import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:mobdr/ui/reusable/cache_image_network.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
class AccountInformationPage extends StatefulWidget {
@override
_AccountInformationPageState createState() => _AccountInformationPageState();
}
class _AccountInformationPageState extends State<AccountInformationPage> {
// initialize reusable widget
final _reusableWidget = ReusableWidget();
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(
color: GlobalStyle.appBarIconThemeColor,
),
elevation: GlobalStyle.appBarElevation,
title: Text(
'Account Information',
style: GlobalStyle.appBarTitle,
),
backgroundColor: GlobalStyle.appBarBackgroundColor,
systemOverlayStyle: GlobalStyle.appBarSystemOverlayStyle,
bottom: _reusableWidget.bottomAppBar(),
),
body: Container(
margin: EdgeInsets.fromLTRB(16, 0, 16, 16),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_createProfilePicture(),
SizedBox(height: 40),
Text(
'Name',
style: GlobalStyle.accountInformationLabel,
),
SizedBox(
height: 8,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
"${SharedPrefs().prenom} ${SharedPrefs().nom}",
style: GlobalStyle.accountInformationValue,
),
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditNamePage()));
},
child: Text('Edit',
style: GlobalStyle.accountInformationEdit),
)
],
),
SizedBox(
height: 24,
),
Row(
children: [
Text(
'Email',
style: GlobalStyle.accountInformationLabel,
),
SizedBox(
width: 8,
),
_verifiedLabel()
],
),
SizedBox(
height: 8,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
'robert.steven@ijtechnology.net',
style: GlobalStyle.accountInformationValue,
),
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditEmailPage()));
},
child: Text('Edit',
style: GlobalStyle.accountInformationEdit),
)
],
),
SizedBox(
height: 24,
),
Row(
children: [
Text(
'Phone Number',
style: GlobalStyle.accountInformationLabel,
),
SizedBox(
width: 8,
),
_verifiedLabel()
],
),
SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
'0811888999',
style: GlobalStyle.accountInformationValue,
),
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditPhoneNumberPage()));
},
child: Text('Edit',
style: GlobalStyle.accountInformationEdit),
)
],
),
],
),
),
));
}
Widget _createProfilePicture() {
final double profilePictureSize = MediaQuery.of(context).size.width / 3;
return Align(
alignment: Alignment.center,
child: Container(
margin: EdgeInsets.only(top: 40),
width: profilePictureSize,
height: profilePictureSize,
child: GestureDetector(
onTap: () {
_showPopupUpdatePicture();
},
child: Stack(
children: [
CircleAvatar(
backgroundColor: Colors.white,
radius: (profilePictureSize),
child: Hero(
tag: 'profilePicture',
child: ClipOval(
child: buildCacheNetworkImage(
width: profilePictureSize,
height: profilePictureSize,
url: GLOBAL_URL + '/user/avatar.png')),
),
),
// create edit icon in the picture
Container(
width: 30,
height: 30,
margin: EdgeInsets.only(
top: 0, left: MediaQuery.of(context).size.width / 4),
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
elevation: 1,
child: Icon(Icons.edit, size: 12, color: CHARCOAL),
),
),
],
),
),
),
);
}
Widget _verifiedLabel() {
return Container(
padding: EdgeInsets.fromLTRB(8, 2, 8, 2),
decoration: BoxDecoration(
color: SOFT_BLUE, borderRadius: BorderRadius.circular(2)),
child: Row(
children: [
Text('verified', style: TextStyle(color: Colors.white, fontSize: 11)),
SizedBox(
width: 4,
),
Icon(Icons.done, color: Colors.white, size: 11)
],
),
);
}
void _showPopupUpdatePicture() {
// set up the buttons
Widget cancelButton = TextButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('No', style: TextStyle(color: SOFT_BLUE)));
Widget continueButton = TextButton(
onPressed: () {
Navigator.pop(context);
Fluttertoast.showToast(
msg: 'Click edit profile picture',
toastLength: Toast.LENGTH_SHORT);
},
child: Text('Yes', style: TextStyle(color: SOFT_BLUE)));
// set up the AlertDialog
AlertDialog alert = AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
title: Text(
'Edit Profile Picture',
style: TextStyle(fontSize: 18),
),
content: Text('Do you want to edit profile picture ?',
style: TextStyle(fontSize: 13, color: BLACK_GREY)),
actions: [
cancelButton,
continueButton,
],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
return alert;
},
);
}
}

View File

@ -1,129 +0,0 @@
/*
This is edit email page
include file in reuseable/global_function.dart to call function from GlobalFunction
include file in reuseable/global_widget.dart to call function from GlobalWidget
*/
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/config/global_style.dart';
import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:mobdr/ui/reusable/global_function.dart';
import 'package:flutter/material.dart';
class EditEmailPage extends StatefulWidget {
@override
_EditEmailPageState createState() => _EditEmailPageState();
}
class _EditEmailPageState extends State<EditEmailPage> {
// initialize reusable widget and global function
final _reusableWidget = ReusableWidget();
final _globalFunction = GlobalFunction();
TextEditingController _etEmail = TextEditingController();
bool _buttonDisabled = true;
@override
void initState() {
_etEmail = TextEditingController(text: 'robert.steven@ijtechnology.net');
if (_globalFunction.validateEmail(_etEmail.text)) {
_buttonDisabled = false;
} else {
_buttonDisabled = true;
}
super.initState();
}
@override
void dispose() {
_etEmail.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(
color: GlobalStyle.appBarIconThemeColor,
),
elevation: GlobalStyle.appBarElevation,
title: Text(
'Edit Email',
style: GlobalStyle.appBarTitle,
),
backgroundColor: GlobalStyle.appBarBackgroundColor,
systemOverlayStyle: GlobalStyle.appBarSystemOverlayStyle,
bottom: _reusableWidget.bottomAppBar(),
),
body: ListView(
padding: EdgeInsets.all(16),
children: [
TextFormField(
keyboardType: TextInputType.emailAddress,
controller: _etEmail,
style: TextStyle(color: CHARCOAL),
onChanged: (textValue) {
setState(() {
if (_globalFunction.validateEmail(textValue)) {
_buttonDisabled = false;
} else {
_buttonDisabled = true;
}
});
},
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: PRIMARY_COLOR, width: 2.0)),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC)),
),
labelText: 'Email',
labelStyle: TextStyle(color: BLACK_GREY)),
),
SizedBox(
height: 40,
),
Container(
child: TextButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> states) =>
states.contains(MaterialState.disabled)
? Colors.grey[300]!
: _buttonDisabled
? Colors.grey[300]!
: PRIMARY_COLOR,
),
overlayColor:
MaterialStateProperty.all(Colors.transparent),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3.0),
)),
),
onPressed: () {
if (!_buttonDisabled) {
_reusableWidget.startLoading(
context, 'Edit Email Success', 1);
FocusScope.of(context).unfocus();
}
},
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5.0),
child: Text(
'Save',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: _buttonDisabled
? Colors.grey[600]
: Colors.white),
textAlign: TextAlign.center,
),
))),
],
));
}
}

View File

@ -1,92 +0,0 @@
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/config/global_style.dart';
import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:flutter/material.dart';
class EditNamePage extends StatefulWidget {
@override
_EditNamePageState createState() => _EditNamePageState();
}
class _EditNamePageState extends State<EditNamePage> {
// initialize reusable widget
final _reusableWidget = ReusableWidget();
TextEditingController _etName = TextEditingController();
@override
void initState() {
_etName = TextEditingController(text: 'Robert Steven');
super.initState();
}
@override
void dispose() {
_etName.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(
color: GlobalStyle.appBarIconThemeColor,
),
elevation: GlobalStyle.appBarElevation,
title: Text(
'Edit Name',
style: GlobalStyle.appBarTitle,
),
backgroundColor: GlobalStyle.appBarBackgroundColor,
systemOverlayStyle: GlobalStyle.appBarSystemOverlayStyle,
bottom: _reusableWidget.bottomAppBar(),
),
body: ListView(
padding: EdgeInsets.all(16),
children: [
TextField(
controller: _etName,
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: PRIMARY_COLOR, width: 2.0)),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC)),
),
labelText: 'Name',
labelStyle: TextStyle(color: BLACK_GREY)),
),
SizedBox(
height: 40,
),
Container(
child: TextButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> states) => PRIMARY_COLOR,
),
overlayColor: MaterialStateProperty.all(Colors.transparent),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3.0),
)),
),
onPressed: () {
_reusableWidget.startLoading(
context, 'Edit Name Success', 1);
},
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5.0),
child: Text(
'Save',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.white),
textAlign: TextAlign.center,
),
)),
),
],
));
}
}

View File

@ -1,122 +0,0 @@
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/config/global_style.dart';
import 'package:mobdr/ui/reusable/reusable_widget.dart';
import 'package:mobdr/ui/reusable/global_function.dart';
import 'package:flutter/material.dart';
class EditPhoneNumberPage extends StatefulWidget {
@override
_EditPhoneNumberPageState createState() => _EditPhoneNumberPageState();
}
class _EditPhoneNumberPageState extends State<EditPhoneNumberPage> {
// initialize reusable widget and global function
final _reusableWidget = ReusableWidget();
final _globalFunction = GlobalFunction();
TextEditingController _etPhoneNumber = TextEditingController();
bool _buttonDisabled = true;
@override
void initState() {
_etPhoneNumber = TextEditingController(text: '0811888999');
if (_globalFunction.validateMobileNumber(_etPhoneNumber.text)) {
_buttonDisabled = false;
} else {
_buttonDisabled = true;
}
super.initState();
}
@override
void dispose() {
_etPhoneNumber.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(
color: GlobalStyle.appBarIconThemeColor,
),
elevation: GlobalStyle.appBarElevation,
title: Text(
'Edit Phone Number',
style: GlobalStyle.appBarTitle,
),
backgroundColor: GlobalStyle.appBarBackgroundColor,
systemOverlayStyle: GlobalStyle.appBarSystemOverlayStyle,
bottom: _reusableWidget.bottomAppBar(),
),
body: ListView(
padding: EdgeInsets.all(16),
children: [
TextFormField(
keyboardType: TextInputType.number,
controller: _etPhoneNumber,
style: TextStyle(color: CHARCOAL),
onChanged: (textValue) {
setState(() {
if (_globalFunction.validateMobileNumber(textValue)) {
_buttonDisabled = false;
} else {
_buttonDisabled = true;
}
});
},
decoration: InputDecoration(
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: PRIMARY_COLOR, width: 2.0)),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC)),
),
labelText: 'Phone Number',
labelStyle: TextStyle(color: BLACK_GREY)),
),
SizedBox(
height: 40,
),
Container(
child: TextButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> states) =>
states.contains(MaterialState.disabled)
? Colors.grey[300]!
: _buttonDisabled
? Colors.grey[300]!
: PRIMARY_COLOR,
),
overlayColor: MaterialStateProperty.all(Colors.transparent),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3.0),
)),
),
onPressed: () {
if (!_buttonDisabled) {
_reusableWidget.startLoading(
context, 'Edit Phone Number Success', 1);
FocusScope.of(context).unfocus();
}
},
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 5),
child: Text(
'Save',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: _buttonDisabled
? Colors.grey[600]
: Colors.white),
textAlign: TextAlign.center,
),
)),
),
],
));
}
}

View File

@ -7,7 +7,6 @@ import 'package:mobdr/config/constant.dart';
import 'package:mobdr/config/global_style.dart';
import 'package:mobdr/service/shared_prefs.dart';
import 'package:mobdr/ui/account/about.dart';
import 'package:mobdr/ui/account/account_information/account_information.dart';
import 'package:mobdr/ui/account/notification_setting.dart';
import 'package:mobdr/ui/account/log.dart';
import 'package:mobdr/ui/general/notification.dart';
@ -129,23 +128,15 @@ class _TabAccountPageState extends State<TabAccountPage>
Container(
width: profilePictureSize,
height: profilePictureSize,
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AccountInformationPage()));
},
child: CircleAvatar(
backgroundColor: Colors.grey[200],
radius: profilePictureSize,
child: CircleAvatar(
backgroundColor: Colors.grey[200],
radius: profilePictureSize,
child: CircleAvatar(
backgroundColor: Colors.white,
radius: profilePictureSize - 4,
child: Hero(
tag: 'profilePicture',
child: ClipOval(child: imageFromBase64String()),
),
backgroundColor: Colors.white,
radius: profilePictureSize - 4,
child: Hero(
tag: 'profilePicture',
child: ClipOval(child: imageFromBase64String()),
),
),
),
@ -163,24 +154,6 @@ class _TabAccountPageState extends State<TabAccountPage>
SizedBox(
height: 8,
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AccountInformationPage()));
},
child: Row(
children: [
Text('Account Information',
style: TextStyle(fontSize: 14, color: BLACK_GREY)),
SizedBox(
width: 8,
),
Icon(Icons.chevron_right, size: 20, color: SOFT_GREY)
],
),
)
],
),
)