【发布时间】:2020-04-18 15:07:52
【问题描述】:
我的设置
- 登录路径 - 异步检查用户是否登录
- 签入路线 - 由一个主要的有状态小部件和几个依赖于登录用户信息的无状态子小部件组成
我的想法
- 在登录路由上识别出用户登录后,使用 Navigator 将用户对象传递给签入路由
- 子小部件可以通过其构造函数接收用户对象
我的问题
- 用户对象未在签入路线的有状态小部件中“到达”
文件
这里是要检查的相关代码 sn-ps(我是从更复杂的文件中添加的,希望所有导入都正确):
Main.dart
import 'package:flutter/material.dart';
import 'loginView.dart';
import 'checkinView.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
initialRoute: '/',
routes: <String, WidgetBuilder>{
'/': (BuildContext context) => LoginView(),
'/checkin': (BuildContext context) => CheckinView(),
}
);
}
}
LoginView.dart
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class LoginView extends StatefulWidget {
@override
LoginViewState createState() => LoginViewState();
}
class LoginViewState extends State<LoginView> {
@override
void initState() {
super.initState();
checkLoginAndRedirect();
}
void checkLoginAndRedirect() async {
FirebaseAuth.instance.currentUser().then((FirebaseUser currUser){
if(currUser != null){
print("[LoginView - user] $currUser");
Navigator.pushNamed(context, '/checkin', arguments: {currUser});
}
});
}
}
CheckinView.dart
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'checkinList.dart';
class CheckinView extends StatefulWidget {
final FirebaseUser user;
CheckinView({this.user});
@override
CheckinViewState createState() {
print("[CheckinView - user] $user");
return CheckinViewState();
}
}
class CheckinViewState extends State<CheckinView> {
FirebaseUser _currentUser;
@override
void initState() {
super.initState();
setState((){
_currentUser = widget.user;
});
}
@override
Widget build(BuildContext context) {
print("[CheckinViewState - widget.user] " + widget.user.toString());
return Scaffold(
body: new Column(
children: <Widget>[
CheckinList(user: _currentUser)
]
)
);
}
}
CheckinList.dart
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class CheckinList extends StatelessWidget{
FirebaseUser user = null;
CheckinList({this.user = null});
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(30.0),
child: Text(user['name'])
);
}
}
【问题讨论】:
-
我认为这是 stackoverflow.com/questions/56262655/… 的副本。我有同样的问题。这个答案有效。