Я пытаюсь автоматически войти в систему, если пользователь явно не вышел из приложения. Я использую firebase для аутентификации, а пакет провайдера из паба для отслеживания изменений статуса аутентификации.
У меня есть файл службы dart (первоначально из учебников TheNetNinja), который предоставляет поток и оборачивает файл main.dart потоком. поставщик.
class FoodMart extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return StreamProvider(
create: (_) => AuthService().user,
child: MaterialApp(
title: 'Flutter Demo',
onGenerateRoute: Router.generateRoute,
home: Landing(),
),
);
}
}
Я закрыл и снова открыл приложение, но по-прежнему не перенаправляю на домашнюю страницу. Я делаю это неправильно? Когда я перезагружаюсь в горячем режиме, меня перенаправляют на домашнюю страницу, но только тогда. Вот реализация класса AuthService.dart:
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:food_mart/models/users.dart';
import 'package:food_mart/services/database.dart';
class AuthService {
FirebaseAuth _mAuth = FirebaseAuth.instance;
Stream<User> get user {
return _mAuth.onAuthStateChanged.map(_mapUserFromFirebase);
}
User _mapUserFromFirebase(FirebaseUser firebaseUser) {
return firebaseUser != null ? User(userId: firebaseUser.uid) : null;
}
Future createUser(String email, String pwd, String role) async{
try {
AuthResult result = await _mAuth.createUserWithEmailAndPassword(email: email, password: pwd);
FirebaseUser firebaseUser = result.user;
await DatabaseService(userId: firebaseUser.uid).setUserData(email: email, role: role);
return _mapUserFromFirebase(firebaseUser);
} catch(e){
print(e.toString());
return e;
}
}
Future loginUser(String email, String pwd) async{
try {
AuthResult authResult = await _mAuth.signInWithEmailAndPassword(email: email, password: pwd);
FirebaseUser firebaseUser = authResult.user;
return _mapUserFromFirebase(firebaseUser);
} catch(e){
print(e.toString());
return null;
}
}
Future signOut() async {
try {
return await _mAuth.signOut();
} catch(e){
print(e.toString());
return null;
}
}
}
Модель User была опущена для краткости. Пожалуйста, помогите :) Спасибо заранее!