provider fixed

This commit is contained in:
Felipe
2023-11-01 11:26:25 -05:00
parent 9a41d12cc7
commit cdd9b040a8
3 changed files with 109 additions and 134 deletions
+11 -39
View File
@@ -1,4 +1,3 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -51,9 +50,8 @@ class _DrawerMenuState extends State<DrawerMenu> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final userProvider = Provider.of<UserProvider>(context); final userProvider = Provider.of<UserProvider>(context, listen: false);
UserModel? user = userProvider.user;
UserModel? user;
return Drawer( return Drawer(
child: Column( child: Column(
@@ -62,19 +60,7 @@ class _DrawerMenuState extends State<DrawerMenu> {
color: Colors.white, color: Colors.white,
child: Column( child: Column(
children: [ children: [
StreamBuilder<UserModel>( infoUser(context, user),
stream: userProvider.itemsStream,
builder: (BuildContext context,
AsyncSnapshot<UserModel> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else {
return infoUser(context, snapshot.data);
}
},
),
], // ], //
), ),
), ),
@@ -117,6 +103,7 @@ class _DrawerMenuState extends State<DrawerMenu> {
), ),
ListTile( ListTile(
onTap: () { onTap: () {
Navigator.pop(context);
if (kIsWeb) { if (kIsWeb) {
Navigator.push( Navigator.push(
context, context,
@@ -342,19 +329,9 @@ class _DrawerMenuState extends State<DrawerMenu> {
), ),
Column( Column(
children: [ children: [
StreamBuilder<UserModel>( ElevatedButton(
stream: userProvider.itemsStream,
builder:
(BuildContext context, AsyncSnapshot<UserModel> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else {
UserModel? user = snapshot.data;
return ElevatedButton(
onPressed: () { onPressed: () {
UserModel? user = userProvider.user;
if (user?.name == '' || if (user?.name == '' ||
user?.city == '' || user?.city == '' ||
user?.phoneNumber == '' || user?.phoneNumber == '' ||
@@ -372,8 +349,8 @@ class _DrawerMenuState extends State<DrawerMenu> {
snackPosition: SnackPosition.BOTTOM, snackPosition: SnackPosition.BOTTOM,
); );
} else { } else {
if (user?.state == 'pendiente' || if (user?.state == 'pendiente' || user?.state == null) {
user?.state == null) { Navigator.pop(context);
if (kIsWeb) { if (kIsWeb) {
Navigator.push( Navigator.push(
context, context,
@@ -383,12 +360,10 @@ class _DrawerMenuState extends State<DrawerMenu> {
), ),
); );
} else { } else {
Navigator.pushNamed( Navigator.pushNamed(context, '/profesionalProfile');
context, '/profesionalProfile');
} }
} else if (user?.state == 'revision') { } else if (user?.state == 'revision') {
Navigator.pushNamed( Navigator.pushNamed(context, '/profesionalRevision');
context, '/profesionalRevision');
} else if (user?.state == 'activo') { } else if (user?.state == 'activo') {
Navigator.pushNamed(context, '/solicitud'); Navigator.pushNamed(context, '/solicitud');
} }
@@ -410,11 +385,8 @@ class _DrawerMenuState extends State<DrawerMenu> {
fontSize: 15, fontSize: 15,
), ),
), ),
);
}
},
), ),
const SizedBox(height: 10), const SizedBox(height: 5),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
AuthenticationRepository.instance.logout(uid!); AuthenticationRepository.instance.logout(uid!);
+21 -23
View File
@@ -387,26 +387,6 @@ class _DrawerProfessionalState extends State<DrawerProfessional> {
], ],
), ),
), ),
Row(
children: [
const SizedBox(width: 10),
ElevatedButton(
onPressed: () {
AuthenticationRepository.instance.logout(uid!);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.white,
shape: const CircleBorder(),
elevation: 3,
minimumSize: const Size(45, 45),
),
child: const Icon(
Icons.logout_outlined,
color: Colors.red,
size: 35,
),
),
const SizedBox(width: 5),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
Navigator.pushReplacementNamed(context, '/servicio'); Navigator.pushReplacementNamed(context, '/servicio');
@@ -417,7 +397,7 @@ class _DrawerProfessionalState extends State<DrawerProfessional> {
borderRadius: BorderRadius.circular(50), borderRadius: BorderRadius.circular(50),
), ),
elevation: 0, elevation: 0,
minimumSize: const Size(200, 45), minimumSize: const Size(230, 45),
), ),
child: const Text( child: const Text(
'Modo usuario', 'Modo usuario',
@@ -427,9 +407,27 @@ class _DrawerProfessionalState extends State<DrawerProfessional> {
), ),
), ),
), ),
], const SizedBox(height: 5),
ElevatedButton(
onPressed: () {
AuthenticationRepository.instance.logout(uid!);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.red,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
), ),
const SizedBox(height: 10), minimumSize: const Size(230, 40),
),
child: const Text(
'Cerrar Sesión',
style: TextStyle(
color: Colors.white,
fontSize: 15,
),
),
),
const SizedBox(height: 5),
], ],
), ),
), ),
+16 -11
View File
@@ -5,19 +5,24 @@ import 'package:prosappco/src/models/user_model.dart';
class UserProvider extends ChangeNotifier { class UserProvider extends ChangeNotifier {
final FirebaseFirestore _firestore = FirebaseFirestore.instance; final FirebaseFirestore _firestore = FirebaseFirestore.instance;
Stream<UserModel>? _itemsStream; UserModel? _user;
UserProvider() { UserProvider() {
_itemsStream = _firestore _loadUser();
.collection('users')
.doc(FirebaseAuth.instance.currentUser?.uid)
.snapshots()
.map((event) {
final data = event.data() as Map<String, dynamic>;
return UserModel.fromFirestore(data);
});
} }
Stream<UserModel>? get itemsStream => _itemsStream; Future<void> _loadUser() async {
final documentSnapshot = await _firestore
.collection('users')
.doc(FirebaseAuth.instance.currentUser?.uid)
.get();
if (documentSnapshot.exists) {
final data = documentSnapshot.data() as Map<String, dynamic>;
_user = UserModel.fromFirestore(data);
notifyListeners();
}
}
UserModel? get user => _user;
} }