Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 找不到正确的提供程序不一致的行为_Flutter_Dart_Flutter Provider - Fatal编程技术网

Flutter 找不到正确的提供程序不一致的行为

Flutter 找不到正确的提供程序不一致的行为,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,嗨,我是新来的颤振和供应商,不能理解这个错误。基本上,我正在使用MultiProvider来管理下面这样的状态,这对其中一个(Auth)非常有效,但对另一个(User)非常有效,即使我以相同的方式使用它们。 我得到这个错误 注意,实际上有更多的提供者,但为了简化代码示例,对其进行了简化 错误 ════════ widgets库捕获到异常═══════════════════════════════════════════════════════ 生成起始页时引发了以下ProviderNotFou

嗨,我是新来的颤振和供应商,不能理解这个错误。基本上,我正在使用
MultiProvider
来管理下面这样的状态,这对其中一个(Auth)非常有效,但对另一个(User)非常有效,即使我以相同的方式使用它们。 我得到这个错误

注意,实际上有更多的提供者,但为了简化代码示例,对其进行了简化

错误
════════ widgets库捕获到异常═══════════════════════════════════════════════════════
生成起始页时引发了以下ProviderNotFoundException(脏,依赖项:[[u InheritedProviderScope,\u InheritedProviderScope,\u InheritedProviderScope,\u InheritedProviderScope]):
错误:在此StartPage小部件上方找不到正确的提供程序
若要修复,请执行以下操作:
*确保提供程序是此StartPage小部件的祖先
*向提供程序提供类型
*向消费者提供类型
*为Provider.of()提供类型
*确保使用了正确的“上下文”。
如果这些解决方案都不起作用,请在以下位置提交错误:
主飞镖
class SchoolApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主页:MultiProvider(
供应商:[
ChangeNotifierProvider(创建:(\u)=>Auth()),
ChangeNotifierProvider(创建:(\u)=>User()),
],
子:主页(),
));
}
}
类主页扩展了StatefulWidget{
@凌驾
State createState()=>new_HomePageState();
}
类_HomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
UserState\u UserState=Provider.of(上下文);
开关(_userState.status){
案例用户状态。未经验证:
返回LoginScreen();
案例用户状态。已验证:
返回起始页();
}
}
}
起始页
class StartPage使用ChangeNotifier扩展无状态小部件{
定时器;
@凌驾
小部件构建(构建上下文){
final_auth=Provider.of(上下文);
final _user=Provider.of(上下文,listen:true);
...
User.dart
类用户扩展ChangeNotifier{
Firestore db=Firestore.instance;
字符串\u userId、\u firstName、\u lastName、\u school、\u email、\u description、\u employer、\u title、\u name;
列出意识形态、利益和宗教;
UserType _UserType;
...
飞镖
类身份验证扩展了ChangeNotifier{
final FirebaseAuth _FirebaseAuth=FirebaseAuth.instance;
带email和密码(字符串电子邮件、字符串密码)的未来登录异步{
final AuthResult AuthResult=wait_firebaseAuth.signin with email and password(电子邮件:电子邮件,密码:密码);
notifyListeners();
返回authResult.user.uid.toString();
}
...
class SchoolApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回程多供应商(
供应商:[
ChangeNotifierProvider(创建:(\u)=>Auth()),
ChangeNotifierProvider(创建:(\u)=>User()),
],
孩子:MaterialApp(
标题:“颤振演示”,
主页:主页(),
));
} 
}

使用MultiProvider包装您的MaterialApp。我可能在上面的代码中遇到了一些括号问题

请尝试使用消费者包装需要从提供商处获取日期的小部件:

  Foo(
  child: Consumer<Auth, User>(
    builder: (context, auth, user, child) {
      return YourWidget(a: yourProviderData, child: child);
    },
    child: Baz(),
  ),
)
Foo(
儿童:消费者(
生成器:(上下文、身份验证、用户、子级){
返回您的小部件(a:yourProviderData,child:child);
},
child:Baz(),
),
)

您还可以尝试使用小部件
Builder(Builder:(context)=>)
包装代码,以访问最近的上下文引用。

回答我的问题以获得可见性。因此,在此处找到了我问题的答案

基本上我用错误的方式导入了包,我做到了 导入“path/file.dart”

而不是指定完整路径
import'package:/path/file.dart'

这也不起作用,我得到了相同的错误,但无论如何我也不应该把它放在我的MaterialApp之上,因为理想情况下,你会希望它尽可能地放在这三个选项之下,对吧?哦,我的错,我没有看到你没有定义类型更改通知提供者,你可以在我的原始文档中看到更改回答。告诉我它是否仍然显示错误。这对我来说不是真的起作用,同样的错误。如果我从这篇文章中正确理解,请使用provider.of the the hood
  Foo(
  child: Consumer<Auth, User>(
    builder: (context, auth, user, child) {
      return YourWidget(a: yourProviderData, child: child);
    },
    child: Baz(),
  ),
)