gpt4 book ai didi

查找提供者上下文的 flutter 问题

转载 作者:IT王子 更新时间:2023-10-29 07:10:50 26 4
gpt4 key购买 nike

我对 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 的代码片段:

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();
}
},
),
);
}
}

最佳答案

问题是:

您的 ChangeNotifierProvider 位于 Home 内,但您正试图在 Home 内访问它。 p>

提供者是有范围的。这意味着如果它位于小部件树中,则只有它的后代才能访问它。因此,在您的代码中,只有 Home 可以从提供程序读取。

要解决此问题,请将提供程序移至 MaterialApp 之上:

ChangeNotifierProvider<UserRepository> (
builder: (context) => UserRepository(),
child: MaterialApp(
home: Home(),
),
)

关于查找提供者上下文的 flutter 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57245186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com