import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:le_kiosque_by_gcs/model/magazine.dart'; import 'package:le_kiosque_by_gcs/model/user.dart'; import 'package:le_kiosque_by_gcs/services/firestore/user_service.dart'; import 'package:le_kiosque_by_gcs/ui/custom/item_mag_large.dart'; import 'package:le_kiosque_by_gcs/ui/custom/profile_picture.dart'; import 'package:le_kiosque_by_gcs/ui/view/editprofile/edit_profil.dart'; import 'package:provider/provider.dart'; class ProfileView extends StatefulWidget { @override _ProfileViewState createState() => _ProfileViewState(); } class _ProfileViewState extends State { @override Widget build(BuildContext context) { 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, ), ), ) ], ), ), 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, ), ), ); } else { return Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } }, ); } Widget _buildProfileBody() { return Container( width: double.infinity, decoration: BoxDecoration( color: Color(0xFFF8F8F8), borderRadius: BorderRadius.only( topLeft: Radius.circular(30), ), ), ); } 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( user.city ?? "No location", style: TextStyle(color: Colors.grey), ) ], ) ], ); } _showEditProfileView(BuildContext context, KiosqueUser user) { final userService = Provider.of(context, listen: false); Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => EditProfileView( userService: userService, user: user, ), ), ); } }