【发布时间】:2019-12-06 06:47:36
【问题描述】:
我对 Flutter Provider 模式有疑问。将用户重定向到新屏幕后,找不到提供程序。
在我之前的问题之后 (Could not find the correct provider above this widget) 我写了这段代码:
class NewRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = 'Tap to select';
return MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: NewRouteBody()
));
}
}
class NewRouteBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
var user = Provider.of<UserRepository>(context);
return ListView(...)
我做了同样的事情,但我再次收到错误消息,指出在此小部件上方找不到正确的提供程序 (NewRouteBody)。
试图以某种方式修复它,谷歌搜索了几个小时的答案,但没有成功......
感谢任何帮助。
编辑
这是UserRepository,其中包含模式:
class UserRepository with ChangeNotifier {
User user;
Status _status = Status.Uninitialized;
Status get status => _status;
User get getUser => user;
...}
编辑 2:
带有 ChangeNotifier 的代码 sn-p:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.red,
),
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<UserRepository>(
builder: (context) => UserRepository.instance(),
child: Consumer<UserRepository>(
builder: (context, UserRepository userRepository, _) {
switch (userRepository.status) {
case Status.Uninitialized:
return Login();
case Status.Unauthenticated:
return Login();
case Status.Authenticating:
case Status.Authenticated:
if(userRepository.getUser.isPrefSet == 0){
return Selection();
}
return Dashboard();
}
},
),
);
}
}
【问题讨论】:
-
您的 sn-p 中根本没有提供程序。它在哪里?
-
我已经编辑了我的问题...我认为我可以使用这个
var user = Provider.of<UserRepository>(context);通过所有应用程序访问user。 -
谢谢,但您的典型
ChangeNotifierProvider()或Provider()在哪里? -
我再次编辑了我的问题。这就是应用的核心。它将用户重定向到仪表板或登录屏幕。从仪表板用户可以转到新屏幕,在这种情况下
NewRoute... 我知道在我之前的评论中使用用户变量可以访问任何屏幕中的用户属性。 -
非常感谢!
标签: flutter dart flutter-provider