From e294752ab8734354e63a668379bb454bffd47f39 Mon Sep 17 00:00:00 2001 From: Eric Ampire Date: Wed, 31 Mar 2021 22:39:08 +0200 Subject: [PATCH] Fix editing view issue --- lib/ui/view/editprofile/edit_profil.dart | 271 ++++++++++++----------- lib/ui/view/profile.dart | 226 +++++++++---------- 2 files changed, 252 insertions(+), 245 deletions(-) diff --git a/lib/ui/view/editprofile/edit_profil.dart b/lib/ui/view/editprofile/edit_profil.dart index 41b2bb1..c7f6e3c 100644 --- a/lib/ui/view/editprofile/edit_profil.dart +++ b/lib/ui/view/editprofile/edit_profil.dart @@ -1,5 +1,4 @@ import 'package:country_picker/country_picker.dart'; -import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:le_kiosque_by_gcs/model/user.dart'; @@ -8,10 +7,12 @@ import 'package:le_kiosque_by_gcs/ui/custom/profile_picture.dart'; class EditProfileView extends StatefulWidget { final UserService userService; + final KiosqueUser user; const EditProfileView({ Key key, @required this.userService, + @required this.user, }) : super(key: key); @override @@ -19,6 +20,7 @@ class EditProfileView extends StatefulWidget { } class _EditProfileViewState extends State { + TextEditingController _countryController = TextEditingController(); TextEditingController _cityController = TextEditingController(); TextEditingController _dateController = TextEditingController(); @@ -41,6 +43,7 @@ class _EditProfileViewState extends State { } } + bool _validateAndSaveForm() { final formState = _formKey.currentState; if (formState.validate()) { @@ -64,144 +67,144 @@ class _EditProfileViewState extends State { _dateController.text = stringDate; } + @override + void initState() { + if (widget.user.birthDay != null) { + final stringDate = DateFormat.yMMMd().format(widget.user.birthDay); + _selectedDate = widget.user.birthDay; + _dateController.text = stringDate; + } + + _countryController.text = widget.user.country; + _genderController.text = widget.user.gender; + _cityController.text = widget.user.city; + super.initState(); + } + @override Widget build(BuildContext context) { - return StreamBuilder( - stream: widget.userService - .getCurrentUser(FirebaseAuth.instance.currentUser.uid), - builder: (_, snapshot) { - if (snapshot.hasData) { - return Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - iconTheme: IconThemeData( - color: Color(0xFF545454), //change your color here - ), - ), - body: SingleChildScrollView( - child: Column( - children: [ - Row( - children: [ - Padding( - padding: const EdgeInsets.all(16.0), - child: - ProfilePicture(imageUrl: snapshot.data.profileUrl), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - snapshot.data.displayName, - style: TextStyle( - fontSize: 26, - color: Colors.black, - ), - ), - Row( - children: [ - Padding( - padding: const EdgeInsets.only( - top: 10, - right: 10, - bottom: 10, - ), - child: Icon( - Icons.location_on, - color: Color(0xFFA5A5A5), - size: 17, - ), - ), - Text( - snapshot.data.city ?? "No location", - style: TextStyle(color: Colors.grey), - ) - ], - ) - ], - ) - ], - ), - Padding( - padding: const EdgeInsets.all(16.0), - child: Form( - key: _formKey, - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - TextFormField( - controller: _countryController, - readOnly: true, - validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, - onTap: () => _showCountryPicker(context), - decoration: InputDecoration( - border: OutlineInputBorder(), - hintText: 'Pays', - labelText: "Pays", - hoverColor: Colors.black, - ), - ), - SizedBox(height: 16), - TextFormField( - controller: _cityController, - validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, - decoration: InputDecoration( - border: OutlineInputBorder(), - hintText: 'Ville', - labelText: "Ville", - hoverColor: Colors.black, - ), - ), - SizedBox(height: 16), - TextFormField( - validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, - controller: _genderController, - onTap: () => _showGenderDialog(), - readOnly: true, - decoration: InputDecoration( - border: OutlineInputBorder(), - hintText: 'Genre', - labelText: "Genre", - hoverColor: Colors.black, - ), - ), - SizedBox(height: 16), - TextFormField( - readOnly: true, - validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, - controller: _dateController, - onTap: () => _selectDate(context), - decoration: InputDecoration( - border: OutlineInputBorder(), - hintText: 'Date de naissance', - labelText: "Date de naissance", - hoverColor: Colors.black, - ), - ), - SizedBox(height: 16), - SizedBox( - height: 50, - child: ElevatedButton( - onPressed: () => _submitForm(snapshot.data), - child: Text("Enregistrer"), - ), - ) - ], + return Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + iconTheme: IconThemeData( + color: Color(0xFF545454), //change your color here + ), + ), + body: SingleChildScrollView( + child: Column( + children: [ + Row( + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: + ProfilePicture(imageUrl: widget.user.profileUrl), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.user.displayName, + style: TextStyle( + fontSize: 26, + color: Colors.black, ), ), - ) - ], + Row( + children: [ + Padding( + padding: const EdgeInsets.only( + top: 10, + right: 10, + bottom: 10, + ), + child: Icon( + Icons.location_on, + color: Color(0xFFA5A5A5), + size: 17, + ), + ), + Text( + widget.user.city ?? "No location", + style: TextStyle(color: Colors.grey), + ) + ], + ) + ], + ) + ], + ), + Padding( + padding: const EdgeInsets.all(16.0), + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + TextFormField( + controller: _countryController, + readOnly: true, + validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, + onTap: () => _showCountryPicker(context), + decoration: InputDecoration( + border: OutlineInputBorder(), + hintText: 'Pays', + labelText: "Pays", + hoverColor: Colors.black, + ), + ), + SizedBox(height: 16), + TextFormField( + controller: _cityController, + validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, + decoration: InputDecoration( + border: OutlineInputBorder(), + hintText: 'Ville', + labelText: "Ville", + hoverColor: Colors.black, + ), + ), + SizedBox(height: 16), + TextFormField( + validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, + controller: _genderController, + onTap: () => _showGenderDialog(), + readOnly: true, + decoration: InputDecoration( + border: OutlineInputBorder(), + hintText: 'Genre', + labelText: "Genre", + hoverColor: Colors.black, + ), + ), + SizedBox(height: 16), + TextFormField( + readOnly: true, + validator: (value) => value.isEmpty ? 'Ne doit pas être vide ! !' : null, + controller: _dateController, + onTap: () => _selectDate(context), + decoration: InputDecoration( + border: OutlineInputBorder(), + hintText: 'Date de naissance', + labelText: "Date de naissance", + hoverColor: Colors.black, + ), + ), + SizedBox(height: 16), + SizedBox( + height: 50, + child: ElevatedButton( + onPressed: () => _submitForm(widget.user), + child: Text("Enregistrer"), + ), + ) + ], + ), ), - ), - ); - } else { - return Scaffold( - body: Center( - child: Text("Problème de connexion !"), - ), - ); - } - }, + ) + ], + ), + ), ); } diff --git a/lib/ui/view/profile.dart b/lib/ui/view/profile.dart index 4f1fae9..314bb26 100644 --- a/lib/ui/view/profile.dart +++ b/lib/ui/view/profile.dart @@ -16,69 +16,91 @@ class ProfileView extends StatefulWidget { class _ProfileViewState extends State { @override Widget build(BuildContext context) { - // TODO Removing - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverToBoxAdapter( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - _buildProfileHeader(), - SizedBox(height: 24), - Padding( - padding: const EdgeInsets.only( - left: 16, - top: 34, - right: 16, - bottom: 16, + final userService = Provider.of(context, listen: false); + return StreamBuilder( + stream: userService.getCurrentUser(FirebaseAuth.instance.currentUser.uid), + builder: (context, snapshot) { + if (snapshot.hasError) { + return Scaffold( + body: Center( + child: Text("Une erreur s'est produite"), + ), + ); + } + if (snapshot.hasData) { + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverToBoxAdapter( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _buildProfileHeader(snapshot.data), + SizedBox(height: 24), + Padding( + padding: const EdgeInsets.only( + left: 16, + top: 34, + right: 16, + bottom: 16, + ), + child: Text( + "A lire plus tard", + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + ), + ), + ) + ], ), - child: Text( - "A lire plus tard", - style: TextStyle( - fontSize: 22, - fontWeight: FontWeight.bold, + ), + SliverPadding( + padding: EdgeInsets.all(16), + sliver: SliverGrid( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + mainAxisSpacing: 16.0, + crossAxisSpacing: 16.0, + mainAxisExtent: 250, + ), + delegate: SliverChildBuilderDelegate( + (context, int index) => + ItemMagLarge(magazine: magazinesTest[index]), + childCount: magazinesTest.length, ), ), - ) + ), ], ), - ), - SliverPadding( - padding: EdgeInsets.all(16), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - mainAxisSpacing: 16.0, - crossAxisSpacing: 16.0, - mainAxisExtent: 250 - ), - delegate: SliverChildBuilderDelegate( - (context, int index) => ItemMagLarge(magazine: magazinesTest[index]), - childCount: magazinesTest.length, + floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling, + floatingActionButtonLocation: + FloatingActionButtonLocation.centerFloat, + floatingActionButton: Visibility( + child: FloatingActionButton.extended( + onPressed: () => _showEditProfileView(context, snapshot.data), + label: const Text( + 'Editer', + style: TextStyle( + color: Color(0XFFFF567E), + ), + ), + icon: const Icon( + Icons.edit, + color: Color(0XFFFF567E), + ), + backgroundColor: Colors.white, ), ), - ), - ], - ), - floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling, - floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, - floatingActionButton: Visibility( - child: FloatingActionButton.extended( - onPressed: () => _showEditProfileView(context), - label: const Text( - 'Editer', - style: TextStyle( - color: Color(0XFFFF567E), + ); + } else { + return Scaffold( + body: Center( + child: CircularProgressIndicator(), ), - ), - icon: const Icon( - Icons.edit, - color: Color(0XFFFF567E), - ), - backgroundColor: Colors.white, - ), - ), + ); + } + }, ); } @@ -94,70 +116,52 @@ class _ProfileViewState extends State { ); } - Widget _buildProfileHeader() { - final userService = Provider.of(context, listen: false); - return StreamBuilder( - stream: userService.getCurrentUser(FirebaseAuth.instance.currentUser.uid), - builder: (context, snapshot) { - if (snapshot.hasError) { - return Scaffold( - body: Center( - child: Text("Une erreur s'est produite"), - ), - ); - } - if (snapshot.hasData) { - return Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Center( - child: Padding( - padding: const EdgeInsets.all(16.0), - child: ProfilePicture(imageUrl: snapshot.data.profileUrl), - ), + Widget _buildProfileHeader(KiosqueUser user) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Center( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: ProfilePicture(imageUrl: user.profileUrl), + ), + ), + Text( + user.displayName, + style: TextStyle( + fontSize: 26, + color: Colors.black, + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Icon( + Icons.location_on, + color: Color(0xFFA5A5A5), + size: 17, ), - Text( - snapshot.data.displayName, - style: TextStyle( - fontSize: 26, - color: Colors.black, - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Icon( - Icons.location_on, - color: Color(0xFFA5A5A5), - size: 17, - ), - ), - Text( - snapshot.data.city ?? "No location", - style: TextStyle(color: Colors.grey), - ) - ], - ) - ], - ); - } else { - return Scaffold( - body: Center( - child: CircularProgressIndicator(), ), - ); - } - }, + Text( + user.city ?? "No location", + style: TextStyle(color: Colors.grey), + ) + ], + ) + ], ); } - _showEditProfileView(BuildContext context) { + _showEditProfileView(BuildContext context, KiosqueUser user) { final userService = Provider.of(context, listen: false); Navigator.of(context).push( MaterialPageRoute( - builder: (BuildContext context) => EditProfileView(userService: userService), + builder: (BuildContext context) => EditProfileView( + userService: userService, + user: user, + ), ), ); }