Я пытаюсь автоматически войти в систему, если пользователь явно не вышел из приложения. Я использую firebase для аутентификации и пакет провайдера из паба для мониторинга изменений статуса авторизации.
У меня есть файл службы dart (первоначально из учебников TheNetNinja), который предоставляет поток и обернул файл main.dart
потоком. поставщик. Как я понимаю, в provider 4.0.1
больше нельзя использовать .value and supply the value
, как показано ниже:
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return StreamProvider<User>.value(
value: AuthService().user,
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Brewzz',
home: Wrapper(),
),
);
}
}
, но перейти на что-то подобное, используя create instead of value
, как ниже:
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
опущена для краткости. Любые предложения, пожалуйста? Спасибо