这是我的主要艺术
void main() async{
runApp(MyApp());
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Instant Tasker',
theme: theme(),
initialRoute: SplashScreen.routeName,
routes: routes,
);
}
}
这是启动屏幕
class SplashScreen extends StatefulWidget {
static String routeName = "/splash";
@override
_SplashScreenState createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
startTime() async {
var _duration = new Duration(seconds: 2);
return new Timer(_duration, navigationPage);
}
void navigationPage() {
var auth = FirebaseAuth.instance;
// ignore: deprecated_member_use
auth.onAuthStateChanged.listen((user) {
if (user != null) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (context) => MainScreen()),
(Route<dynamic> route) => false);
} else {}
});
}
@override
void initState() {
super.initState();
startTime();
}
@override
Widget build(BuildContext context) {
SizeConfig().init(context);
return Scaffold(
body: Body()
);
}
}
然而,我实现了在启动屏幕上检查用户,但它停留在启动屏幕检查用户,然后转到主屏幕,这似乎不太好。或者有人能建议如何在检查用户时显示CircularProgressIndicator而不是Splash Screen主体吗
您可以使用StreamProvder
实现
实施
步骤
创建CustomUser
数据模型。
class CustomUser {
final String userId;
CustomUser({this.userId});
}
创建一个名为FirebaseAuthService
的类并创建一个stream
以侦听FirebaseAuthStateChanges
import 'package:firebase_auth/firebase_auth.dart';
class FirebaseAuthService {
final FirebaseAuth auth = FirebaseAuth.instance;
// create user obj based on firebase user
CustomUser _userFromFirebaseUser(User user) {
return user != null ? CustomUser(userId: user.uid) : null;
}
// auth change user stream
//Required stream
Stream<CustomUser> get user {
return auth.authStateChanges().map(_userFromFirebaseUser);
}
}
}
在要检查AuthState的小部件树顶部添加一个StreamProvider
。
void main() async{
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamProvider<CustomUser>.value(
value: FirebaseAuthService().user,
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Instant Tasker',
theme: theme(),
initialRoute: SplashScreen.routeName,
routes: routes,
)
);
}
}
创建一个Wrapper
,并根据AuthState返回SplashScreen
或HomeScreen
。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class Wrapper extends StatefulWidget {
@override
_WrapperState createState() => _WrapperState();
}
class _WrapperState extends State<Wrapper> {
@override
Widget build(BuildContext context) {
final user = Provider.of<CustomUser>(context);
if (user == null) {
return SplashScreen();
}
return HomeScreen();
}
}
现在您可以使用final user = Provider.of<CustomUser>(context);
在小部件树中检查用户是否为null。
https://www.youtube.com/watch?v=z05m8nlPRxk&list=PL4cUxeGkcC9j-TKIdkb3ISfRbJeJYQwC&索引=3