Мое приложение не может загрузить пользовательский интерфейс входа в систему, оно просто застряло при загрузке CircularProgressIndicator (): вот мой код поставщика кода. Когда я запускаю приложение, оно вообще не показывает ошибок, но затем приложение не загружает пользовательский интерфейс входа: main.dart
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider.value(value: UserProvider.initialize())
],
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'AfriMarKet',
theme: ThemeData(
primaryColor: Colors.white
),
home: ScreensController());
}
}
class ScreensController extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<UserProvider>(context);
switch (user.status) {
case Status.Uninitialized:
return SplashScreen();
case Status.Unauthenticated:
case Status.Authenticating:
return LoginPage();
case Status.Authenticated:
return HomePage();
default:
return LoginPage();
}
}
}
provider.dart enum Status {Uninitialized, Authenticated, Authenticating, Unauthenticated}
class UserProvider extends ChangeNotifier{
FirebaseAuth _auth;
FirebaseUser _user;
Status _status = Status.Uninitialized;
Status get status => _status;
FirebaseUser get user => _user;
Firestore _firestore = Firestore.instance;
UserServices _userServices = UserServices();
UserProvider.initialize(): _auth = FirebaseAuth.instance{
_auth.onAuthStateChanged.listen(_onStateChanged);
}
Future<bool> signIn(String email, String password)async{
try{
_status = Status.Authenticating;
notifyListeners();
await _auth.signInWithEmailAndPassword(email: email, password: password);
return true;
}catch(e){
_status = Status.Unauthenticated;
notifyListeners();
print(e.toString());
return false;
}
}
Future<bool> signUp(String name,String email, String password)async{
try{
_status = Status.Authenticating;
notifyListeners();
await _auth.createUserWithEmailAndPassword(email: email, password: password).then((user){
_firestore.collection('users').document(user.user.uid).setData({
'name':name,
'email':email,
'uid':user.user.uid
});
});
return true;
}catch(e){
_status = Status.Unauthenticated;
notifyListeners();
print(e.toString());
return false;
}
}
Future signOut()async{
_auth.signOut();
_status = Status.Unauthenticated;
notifyListeners();
return Future.delayed(Duration.zero);
}
Future<void> _onStateChanged(FirebaseUser user) async{
if(user == null){
_status = Status.Unauthenticated;
}else{
_user = user;
_status = Status.Authenticated;
}
notifyListeners();
}
}