我有一个屏幕,我想将数据从该屏幕传递到抽屉。我的抽屉类如下:
class InitDrawer extends StatelessWidget {
final Auth auth;
InitDrawer({this.auth});
@override
Widget build(BuildContext context) {
final String _name = auth.name;
final String _email = auth.email;
final drawerHeader = UserAccountsDrawerHeader(
accountName: Text(_name),
accountEmail: Text(_email),
currentAccountPicture: CircleAvatar(
...
),
);
return ListView(
children: <Widget>[
...
],
);
}
}
这是我的屏幕类,正在传递数据
class QRScannerScreen extends StatefulWidget {
static const routeName = '/qr';
final Auth auth;
const QRScannerScreen(this.auth);
@override
_QRScannerScreenState createState() => _QRScannerScreenState();
}
class _QRScannerScreenState extends State<QRScannerScreen> {
final auth = widget.auth;
...
drawer: InitDrawer(auth: auth,),
...
}
最后这是我的Auth类/通知的侦听器
class Auth with ChangeNotifier {
String _token;
DateTime _expiryDate;
String _userId;
int _carId;
String _email;
String _name;
String get name {
return _name;
}
String get email {
return _email;
}
...
}
我认为整个问题都来自auth
为空,当我尝试查看抽屉时,出现一个错误,提示我类型为Text的小部件不能包含{{1} }。因为我正在使用await和async获取身份验证,也许数据在屏幕加载时没有及时到达那里,并且导致null。也许我必须使用null
,但是我对Flutter / Dart还是陌生的,我不知道在哪里使用它。
答案 0 :(得分:0)
尝试删除final auth = widget.auth;
并在构建方法中使用widget.auth
,或至少在final auth
方法中定义initState
。但是,如果您决定使用initState
方法,请记住,您可能需要在auth
didUpdateWidget
的值