add email change on web + class InfoMessage and ApiWrapper

profile
remrem 2 years ago
parent 9a2b7e4fb2
commit 67864dd09c

@ -35,8 +35,8 @@ class MyApp extends StatelessWidget {
// tested with just a hot reload. // tested with just a hot reload.
primaryColor: TColor.primaryColor1, primaryColor: TColor.primaryColor1,
fontFamily: "Poppins"), fontFamily: "Poppins"),
//home: const StartedView(),
home: const SignUpView(), home: const SignUpView(),
//home: const ProfileView(),
); );
} }
} }

@ -0,0 +1,38 @@
import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:smartfit_app_mobile/modele/utile/info_message.dart';
import 'package:email_validator/email_validator.dart';
import 'package:tuple/tuple.dart';
class ApiWrapper {
IDataStrategy api = RequestApi();
Future<bool> modifyUserInfo(String infoToModify, String value, String token,
InfoMessage infoManager) async {
if (infoToModify == 'email' && EmailValidator.validate(value) ||
infoToModify == 'password' ||
infoToModify == 'username') {
Tuple2<bool, String> res =
await api.modifAttribut(token, infoToModify, value);
if (res.item1 == true) {
infoManager.displayMessage(
"${infoToModify.capitalize()} modified succesfully !", false);
return true;
} else {
infoManager.displayMessage(
"An error occured :/ Please try again.", true);
return false;
}
} else {
infoManager.displayMessage(
"This is not a valid $infoToModify :/ Please try again.", true);
return false;
}
}
}
extension StringExtension on String {
String capitalize() {
return "${this[0].toUpperCase()}${substring(1).toLowerCase()}";
}
}

@ -37,6 +37,6 @@ abstract class IDataStrategy {
Future<void> updateUsername(String token, String username); Future<void> updateUsername(String token, String username);
*/ */
Future<Tuple2> modifAttribut( Future<Tuple2<bool, String>> modifAttribut(
String token, String nameAttribut, String newValue); String token, String nameAttribut, String newValue);
} }

@ -123,7 +123,7 @@ class RequestApi extends IDataStrategy {
} }
@override @override
Future<Tuple2> modifAttribut( Future<Tuple2<bool, String>> modifAttribut(
String token, String nameAttribut, String newValue) async { String token, String nameAttribut, String newValue) async {
final response = await http.put(Uri.parse('$urlApi/user/$nameAttribut'), final response = await http.put(Uri.parse('$urlApi/user/$nameAttribut'),
headers: <String, String>{ headers: <String, String>{
@ -133,8 +133,8 @@ class RequestApi extends IDataStrategy {
body: jsonEncode(<String, String>{nameAttribut: newValue})); body: jsonEncode(<String, String>{nameAttribut: newValue}));
if (response.statusCode == 200) { if (response.statusCode == 200) {
Map<String, dynamic> json = jsonDecode(response.body); //Map<String, dynamic> json = jsonDecode(response.body);
return Tuple2(true, json); return const Tuple2(true, "200 - OK");
} }
if (response.statusCode == 400) { if (response.statusCode == 400) {
return const Tuple2(false, "400 - BAD REQUEST"); return const Tuple2(false, "400 - BAD REQUEST");

@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
class InfoMessage {
String message = "";
Color messageColor = Colors.transparent;
bool isVisible = false;
void displayMessage(String message, bool isError) {
this.message = message;
isVisible = true;
if (isError) {
messageColor = Colors.red;
} else {
messageColor = Colors.green;
}
}
}

@ -204,9 +204,6 @@ class _WebSignUpView extends State<WebSignUpView> {
SizedBox( SizedBox(
height: media.width * 0.04, height: media.width * 0.04,
), ),
SizedBox(
height: media.width * 0.04,
),
TextButton( TextButton(
onPressed: () { onPressed: () {
Navigator.push( Navigator.push(
@ -234,9 +231,6 @@ class _WebSignUpView extends State<WebSignUpView> {
], ],
), ),
), ),
SizedBox(
height: media.width * 0.04,
),
], ],
), ),
), ),

@ -1,10 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:responsive_builder/responsive_builder.dart'; import 'package:responsive_builder/responsive_builder.dart';
import 'package:smartfit_app_mobile/view/profile/mobile/mobile_change_email.dart'; import 'package:smartfit_app_mobile/view/profile/mobile/mobile_change_email.dart';
import 'package:smartfit_app_mobile/view/profile/mobile/mobile_change_username.dart';
import 'package:smartfit_app_mobile/view/profile/web/web_change_email.dart'; import 'package:smartfit_app_mobile/view/profile/web/web_change_email.dart';
import 'package:smartfit_app_mobile/view/profile/web/web_change_username.dart';
class ChangeEmailView extends StatefulWidget { class ChangeEmailView extends StatefulWidget {
const ChangeEmailView({super.key}); const ChangeEmailView({super.key});

@ -1,10 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/button/round_button.dart'; import 'package:smartfit_app_mobile/common_widget/button/round_button.dart';
import 'package:smartfit_app_mobile/common_widget/text_field/round_text_field.dart'; import 'package:smartfit_app_mobile/common_widget/text_field/round_text_field.dart';
class MobileChangeEmailView extends StatefulWidget { class MobileChangeEmailView extends StatefulWidget {
const MobileChangeEmailView({super.key}); const MobileChangeEmailView({super.key});
@ -15,11 +15,11 @@ class MobileChangeEmailView extends StatefulWidget {
class _MobileChangeEmailViewState extends State<MobileChangeEmailView> { class _MobileChangeEmailViewState extends State<MobileChangeEmailView> {
final TextEditingController controllerTextEmail = TextEditingController(); final TextEditingController controllerTextEmail = TextEditingController();
final TextEditingController controllerTextPassword = TextEditingController(); final TextEditingController controllerTextPassword = TextEditingController();
String oldUsername = "Ancien e-mail";
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var media = MediaQuery.of(context).size; var media = MediaQuery.of(context).size;
String userEmail = context.watch<User>().email;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
@ -44,9 +44,7 @@ class _MobileChangeEmailViewState extends State<MobileChangeEmailView> {
height: 15, height: 15,
fit: BoxFit.contain, fit: BoxFit.contain,
), ),
), ),
), ),
title: Text( title: Text(
"Changer son e-mail", "Changer son e-mail",
@ -75,7 +73,7 @@ class _MobileChangeEmailViewState extends State<MobileChangeEmailView> {
), ),
), ),
Text( Text(
oldUsername, // Utilisez votre ancien pseudo ici userEmail, // Utilisez votre ancien pseudo ici
style: TextStyle( style: TextStyle(
color: TColor.black, color: TColor.black,
fontSize: 16, fontSize: 16,
@ -91,7 +89,6 @@ class _MobileChangeEmailViewState extends State<MobileChangeEmailView> {
), ),
child: Column( child: Column(
children: [ children: [
RoundTextField( RoundTextField(
hitText: "Nouveau e-mail", hitText: "Nouveau e-mail",
icon: "assets/img/user_text.svg", icon: "assets/img/user_text.svg",
@ -99,9 +96,7 @@ class _MobileChangeEmailViewState extends State<MobileChangeEmailView> {
controller: controllerTextEmail, controller: controllerTextEmail,
), ),
SizedBox(height: media.width * 0.07), SizedBox(height: media.width * 0.07),
RoundButton( RoundButton(title: "Confirmer", onPressed: () {}),
title: "Confirmer",
onPressed: () {}),
], ],
), ),
), ),

@ -1,9 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/modele/api/api_wrapper.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/button/round_button.dart'; import 'package:smartfit_app_mobile/common_widget/button/round_button.dart';
import 'package:smartfit_app_mobile/common_widget/text_field/round_text_field.dart'; import 'package:smartfit_app_mobile/common_widget/text_field/round_text_field.dart';
import 'package:smartfit_app_mobile/modele/utile/info_message.dart';
class WebChangeEmailView extends StatefulWidget { class WebChangeEmailView extends StatefulWidget {
const WebChangeEmailView({super.key}); const WebChangeEmailView({super.key});
@ -14,12 +16,13 @@ class WebChangeEmailView extends StatefulWidget {
class _WebChangeEmailViewState extends State<WebChangeEmailView> { class _WebChangeEmailViewState extends State<WebChangeEmailView> {
final TextEditingController controllerTextEmail = TextEditingController(); final TextEditingController controllerTextEmail = TextEditingController();
final TextEditingController controllerTextPassword = TextEditingController(); final ApiWrapper apiWrapper = ApiWrapper();
String oldUsername = "Ancien e-mail"; final InfoMessage infoManager = InfoMessage();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var media = MediaQuery.of(context).size; var media = MediaQuery.of(context).size;
String userEmail = context.watch<User>().email;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
@ -44,12 +47,10 @@ class _WebChangeEmailViewState extends State<WebChangeEmailView> {
height: 15, height: 15,
fit: BoxFit.contain, fit: BoxFit.contain,
), ),
), ),
), ),
title: Text( title: Text(
"Changer son e-mail", "Changer son email",
style: TextStyle( style: TextStyle(
color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700), color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700),
), ),
@ -67,7 +68,7 @@ class _WebChangeEmailViewState extends State<WebChangeEmailView> {
Row( Row(
children: [ children: [
Text( Text(
"Ancien e-mail : ", "Email actuel : ",
style: TextStyle( style: TextStyle(
color: TColor.black, color: TColor.black,
fontSize: 16, fontSize: 16,
@ -75,7 +76,7 @@ class _WebChangeEmailViewState extends State<WebChangeEmailView> {
), ),
), ),
Text( Text(
oldUsername, userEmail,
style: TextStyle( style: TextStyle(
color: TColor.black, color: TColor.black,
fontSize: 16, fontSize: 16,
@ -91,17 +92,33 @@ class _WebChangeEmailViewState extends State<WebChangeEmailView> {
), ),
child: Column( child: Column(
children: [ children: [
RoundTextField( RoundTextField(
hitText: "Nouveau email", hitText: "Nouveau email",
icon: "assets/img/user_text.svg", icon: "assets/img/user_text.svg",
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
controller: controllerTextEmail, controller: controllerTextEmail,
), ),
SizedBox(height: media.width * 0.04), SizedBox(height: media.width * 0.01),
Visibility(
visible: infoManager.isVisible,
child: Text(infoManager.message,
style:
TextStyle(color: infoManager.messageColor))),
SizedBox(height: media.width * 0.03),
RoundButton( RoundButton(
title: "Confirmer", title: "Confirmer",
onPressed: () {}), onPressed: () async {
bool res = await apiWrapper.modifyUserInfo(
'email',
controllerTextEmail.text,
Provider.of<User>(context, listen: false).token,
infoManager);
if (res) {
Provider.of<User>(context, listen: false).email =
controllerTextEmail.text;
}
setState(() {});
}),
], ],
), ),
), ),

@ -1,5 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:animated_toggle_switch/animated_toggle_switch.dart'; import 'package:animated_toggle_switch/animated_toggle_switch.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/button/round_button.dart'; import 'package:smartfit_app_mobile/common_widget/button/round_button.dart';
import 'package:smartfit_app_mobile/common_widget/setting_row.dart'; import 'package:smartfit_app_mobile/common_widget/setting_row.dart';
@ -48,6 +50,8 @@ class _WebProfileView extends State<WebProfileView> {
]; ];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
String _username = context.watch<User>().username;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
backgroundColor: TColor.white, backgroundColor: TColor.white,
@ -106,7 +110,7 @@ class _WebProfileView extends State<WebProfileView> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
"Benjelloun Othmane", _username,
style: TextStyle( style: TextStyle(
color: TColor.black, color: TColor.black,
fontSize: 14, fontSize: 14,
@ -390,7 +394,8 @@ class _WebProfileView extends State<WebProfileView> {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => const PrivacyPolicyView(), builder: (context) =>
const PrivacyPolicyView(),
), ),
); );
} else if (iObj["tag"] == "5") { } else if (iObj["tag"] == "5") {

@ -35,6 +35,7 @@ dependencies:
file_picker: ^6.1.1 file_picker: ^6.1.1
csv: ^5.1.1 csv: ^5.1.1
fit_tool: ^1.0.5 fit_tool: ^1.0.5
email_validator: '^2.1.16'
# The following adds the Cupertino Icons font to your application. # The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons. # Use with the CupertinoIcons class for iOS style icons.

Loading…
Cancel
Save