stream image

This commit is contained in:
Felipe
2024-02-16 11:37:12 -05:00
parent d9d6b50d78
commit 1b565d70f4
8 changed files with 129 additions and 211 deletions
+22 -24
View File
@@ -6,8 +6,6 @@ import 'package:prosappco/blocs/my_user_bloc/my_user_bloc.dart';
import 'package:prosappco/blocs/sign_up_bloc/sign_up_bloc.dart';
import 'package:prosappco/blocs/sing_in_bloc/sign_in_bloc.dart';
import 'package:prosappco/blocs/update_user_info_bloc/update_user_info_bloc.dart';
import 'package:prosappco/screens/home/home_screen.dart';
import 'package:user_repository/user_repository.dart';
import 'app_view.dart';
@@ -17,28 +15,28 @@ class MainApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<AuthenticationBloc>(
create: (context) => Injector.appInstance.get<AuthenticationBloc>(),
),
BlocProvider<MyUserBloc>(
create: (context) => Injector.appInstance.get<MyUserBloc>(),
),
BlocProvider<UpdateUserInfoBloc>(
create: (context) => Injector.appInstance.get<UpdateUserInfoBloc>(),
),
BlocProvider<SignInBloc>(
create: (context) => Injector.appInstance.get<SignInBloc>(),
),
BlocProvider<SignUpBloc>(
create: (context) => Injector.appInstance.get<SignUpBloc>(),
)
// RepositoryProvider<AuthenticationBloc>(
// create: (_) => AuthenticationBloc(myUserRepository: userRepository),
// ),
],
child: BlocBuilder<MyUserBloc, MyUserState>(builder: (context, state) {
providers: [
BlocProvider<AuthenticationBloc>(
create: (context) => Injector.appInstance.get<AuthenticationBloc>(),
),
BlocProvider<MyUserBloc>(
create: (context) => Injector.appInstance.get<MyUserBloc>(),
),
BlocProvider<UpdateUserInfoBloc>(
create: (context) => Injector.appInstance.get<UpdateUserInfoBloc>(),
),
BlocProvider<SignInBloc>(
create: (context) => Injector.appInstance.get<SignInBloc>(),
),
BlocProvider<SignUpBloc>(
create: (context) => Injector.appInstance.get<SignUpBloc>(),
)
],
child: BlocBuilder<MyUserBloc, MyUserState>(
builder: (context, state) {
return const MyAppView();
}));
},
),
);
}
}
+11 -31
View File
@@ -1,11 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:prosappco/blocs/my_user_bloc/my_user_bloc.dart';
import 'package:prosappco/blocs/sing_in_bloc/sign_in_bloc.dart';
import 'package:prosappco/blocs/update_user_info_bloc/update_user_info_bloc.dart';
import 'package:prosappco/screens/authentication/welcome_screen.dart';
import 'package:prosappco/screens/home/home_screen.dart';
import 'package:prosappco/screens/profile/profile_screen.dart';
import 'blocs/authentication_bloc/authentication_bloc.dart';
@@ -31,33 +27,17 @@ class MyAppView extends StatelessWidget {
),
home: BlocBuilder<AuthenticationBloc, AuthenticationState>(
builder: (context, state) {
if (state.status == AuthenticationStatus.authenticated) {
// MultiBlocProvider(
// providers: [
// BlocProvider(
// create: (context) => SignInBloc(
// userRepository:
// context.read<AuthenticationBloc>().userRepository),
// ),
// BlocProvider(
// create: (context) => UpdateUserInfoBloc(
// userRepository:
// context.read<AuthenticationBloc>().userRepository),
// ),
// BlocProvider(
// create: (context) => MyUserBloc(
// myUserRepository:
// context.read<AuthenticationBloc>().userRepository)
// ..add(GetMyUser(
// myUserId:
// context.read<AuthenticationBloc>().state.user!.uid)),
// ),
// ],
// child: const HomeScreen(),
// );
return const HomeScreen();
} else {
return const WelcomeScreen();
switch (state.status) {
case AuthenticationStatus.authenticated:
return const HomeScreen();
case AuthenticationStatus.unauthenticated:
return const WelcomeScreen();
case AuthenticationStatus.unknown:
return const Center(
child: CircularProgressIndicator(), // splash screen
);
}
}),
);
@@ -2,7 +2,6 @@ import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:meta/meta.dart';
import 'package:user_repository/user_repository.dart';
+1 -40
View File
@@ -15,38 +15,12 @@ class MyUserBloc extends Bloc<MyUserEvent, MyUserState> {
: _userRepository = myUserRepository,
super(const MyUserState.loading()) {
_userRepository.streamUser().listen((event) {
log('xd ---: ${event}');
if (event == null) {
log('UserChanged: ${event}');
emit(const MyUserState.failure());
} else {
log('UserChanged: ${event}');
emit(MyUserState.success(event!));
emit(MyUserState.success(event));
}
});
// on<UserChanged>(_onUserChanged);
// _userRepository.user.first.then((user) {
// log('xd: ${user}');
// if (user != null) {
// add(UserChanged(user: user));
// _userSubscription = _userRepository.user.listen((user) {
// log('xd: ${user}');
// add(UserChanged(user: user));
// });
// }
// }).catchError((e) {
// log('xd: ${e}');
// add(UserChanged(user: null));
// });
// on<GetMyUser>(_onGetMyUser);
// _userRepository.user.listen((user) {
// if (user != null) {
// add(GetMyUser(myUserId: user.uid));
// }
// });
// emit(MyUserState.success(MyUser(
// name: 'John', id: '123', email: 'johndoe@gmail.com', picture: '')));
}
void _onUserChanged(UserChanged event, Emitter<MyUserState> emit) {
@@ -59,17 +33,4 @@ class MyUserBloc extends Bloc<MyUserEvent, MyUserState> {
emit(MyUserState.success(event.user!));
}
}
// void _onGetMyUser(GetMyUser event, Emitter<MyUserState> emit) async {
// log('GetMyUser: ${event.myUserId}');
// emit(const MyUserState.loading());
// try {
// MyUser myUser = await _userRepository.getMyUser(event.myUserId);
// log('GetMyUser: $myUser');
// emit(MyUserState.success(myUser));
// } catch (e) {
// log('GetMyUser: $e');
// emit(const MyUserState.failure());
// }
// }
}
+1 -2
View File
@@ -1,7 +1,6 @@
RegExp emailRexExp = RegExp(r'^[\w-\.]+@([\w-]+.)+[\w-]{2,4}$');
RegExp passwordRexExp = RegExp(
r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~`)\%\-(_+=;:,.<>/?"[{\]}\|^]).{8,}$');
RegExp passwordRexExp = RegExp(r'^(?=.*?[A-Z])(?=.*?[0-9]).{8,}$');
RegExp specialCharRexExp =
RegExp(r'^(?=.*?[!@#$&*~`)\%\-(_+=;:,.<>/?"[{\]}\|^])');
+4 -11
View File
@@ -169,29 +169,22 @@ class _SignUpScreenState extends State<SignUpScreen> {
? Colors.green
: Theme.of(context).colorScheme.onBackground),
),
Text(
"⚈ 1 number",
style: TextStyle(
color: containsNumber
? Colors.green
: Theme.of(context).colorScheme.onBackground),
),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"1 special character",
"8 minimum character",
style: TextStyle(
color: containsSpecialChar
color: contains8Length
? Colors.green
: Theme.of(context).colorScheme.onBackground),
),
Text(
"8 minimum character",
"1 number",
style: TextStyle(
color: contains8Length
color: containsNumber
? Colors.green
: Theme.of(context).colorScheme.onBackground),
),
+90 -98
View File
@@ -26,112 +26,104 @@ class _HomeScreenState extends State<HomeScreen> {
},
child: Scaffold(
backgroundColor: Theme.of(context).colorScheme.background,
drawer:
BlocBuilder<MyUserBloc, MyUserState>(builder: (context, state) {
if (state.status == MyUserStatus.success) {
return Drawer(
backgroundColor: Theme.of(context).colorScheme.background,
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Material(
color: Theme.of(context).colorScheme.primary,
child: InkWell(
onTap: () {
Navigator.push(
context,
CupertinoPageRoute(
builder: (context) => const ProfileScreen(),
),
);
},
child: Container(
padding: EdgeInsets.only(
top: 20 + MediaQuery.of(context).padding.top,
bottom: 20,
),
child: Column(
children: [
state.user!.picture == ""
? Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: Colors.grey.shade300,
shape: BoxShape.circle,
),
child: Icon(
CupertinoIcons.person,
color: Colors.grey.shade400,
size: 35,
),
)
: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: Colors.grey,
shape: BoxShape.circle,
image: DecorationImage(
image: NetworkImage(
state.user!.picture!,
),
fit: BoxFit.cover,
),
),
),
const SizedBox(height: 12),
Text(
state.user!.name,
style: const TextStyle(
fontSize: 24,
color: Colors.white,
),
),
Text(
state.user!.email,
style: const TextStyle(
fontSize: 15,
color: Colors.white,
),
)
],
),
drawer: Drawer(
backgroundColor: Theme.of(context).colorScheme.background,
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Material(
color: Theme.of(context).colorScheme.primary,
child: InkWell(
onTap: () {
Navigator.push(
context,
CupertinoPageRoute(
builder: (context) => const ProfileScreen(),
),
);
},
child: Container(
padding: EdgeInsets.only(
top: 20 + MediaQuery.of(context).padding.top,
bottom: 20,
),
),
Container(
height: MediaQuery.of(context).size.height,
color: Theme.of(context).colorScheme.background,
child: ListView(
child: Column(
children: [
ListTile(
onTap: () {
context
.read<SignInBloc>()
.add(const SignOutRequired());
},
title: const Text(
'Cerrar Sesión',
context.read<MyUserBloc>().state.user!.picture == ""
? Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: Colors.grey.shade300,
shape: BoxShape.circle,
),
child: Icon(
CupertinoIcons.person,
color: Colors.grey.shade400,
size: 35,
),
)
: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: Colors.grey,
shape: BoxShape.circle,
image: DecorationImage(
image: NetworkImage(
context
.read<MyUserBloc>()
.state
.user!
.picture!,
),
fit: BoxFit.cover,
),
),
),
const SizedBox(height: 12),
Text(
context.read<MyUserBloc>().state.user!.name,
style: const TextStyle(
fontSize: 24,
color: Colors.white,
),
),
Text(
context.read<MyUserBloc>().state.user!.email,
style: const TextStyle(
fontSize: 15,
color: Colors.white,
),
)
],
),
)
],
),
),
),
),
);
} else {
return Drawer(
backgroundColor: Theme.of(context).colorScheme.background,
child: const Center(
child: CircularProgressIndicator(),
),
);
}
}),
Container(
height: MediaQuery.of(context).size.height,
color: Theme.of(context).colorScheme.background,
child: ListView(
children: [
ListTile(
onTap: () {
context
.read<SignInBloc>()
.add(const SignOutRequired());
},
title: const Text(
'Cerrar Sesión',
),
)
],
),
)
],
),
),
),
appBar: AppBar(),
body: Center(
child: Text(
@@ -29,10 +29,6 @@ class FirebaseUserRepository implements UserRepository {
_userStreamController.add(null);
}
});
this.streamUser().listen((event) {
log('xd - : ${event}');
});
}
// Stream<MyUser?> get user => _userStreamController.stream;