Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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 - Fatal编程技术网

Flutter 找不到正确的提供程序<;数据库>;

Flutter 找不到正确的提供程序<;数据库>;,flutter,Flutter,我对颤振开发还不熟悉。 我通过检查发现的几个示例来创建一个小应用程序。 该应用程序使用firebase身份验证和数据库 我的main.dart文件没有任何内容。它只需加载一个登录页 Widget build(BuildContext context) { return Provider<AuthBase>( create: (context) => Auth(), child: MaterialApp( title: 'Hello

我对颤振开发还不熟悉。 我通过检查发现的几个示例来创建一个小应用程序。 该应用程序使用firebase身份验证和数据库

我的main.dart文件没有任何内容。它只需加载一个登录页

Widget build(BuildContext context) {
    return Provider<AuthBase>(
      create: (context) => Auth(),
      child: MaterialApp(
        title: 'Hello',
        home: LandingPage(),
      ),
    );
  }
小部件构建(构建上下文){
返回提供者(
create:(context)=>Auth(),
孩子:MaterialApp(
标题:“你好”,
主页:登录页(),
),
);
}
在登录页面中,我检查use是否已登录 在这两种情况下,他们都会进入主页() 但如果有用户数据库,则使用用户id初始化

Widget build(BuildContext context) {
    final auth = Provider.of<AuthBase>(context);

    return StreamBuilder<User>(
      stream: auth.onAuthStateChanged,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.active) {
          User user = snapshot.data;

          if (user == null) {
            print("no login");

            return Provider<Database>(
              create: (context) => FirestoreDatabase(uid: null),
              child: HomePage(),
            );
          } else {
            print("has a login");
            print(user.uid);

            return Provider<User>.value(
              value: user,
              child: Provider<Database>(
                  create: (context) => FirestoreDatabase(uid: user.uid),
                  child: HomePage()),
            );
          }
        } else {
          return Scaffold(
            body: Center(
              child: CircularProgressIndicator(),
            ),
          );
        }
      },
    );
  }
小部件构建(构建上下文){
最终认证=提供者(上下文);
返回流生成器(
流:auth.onAuthStateChanged,
生成器:(上下文,快照){
if(snapshot.connectionState==connectionState.active){
User=snapshot.data;
if(user==null){
打印(“无登录”);
返回提供者(
create:(context)=>FirestoreDatabase(uid:null),
子:主页(),
);
}否则{
打印(“已登录”);
打印(user.uid);
返回Provider.value(
值:用户,
子:提供者(
create:(context)=>FirestoreDatabase(uid:user.uid),
子:主页()),
);
}
}否则{
返回脚手架(
正文:中(
子对象:CircularProgressIndicator(),
),
);
}
},
);
}
主页已正确加载。 在主页中,我加载另一个页面以查看用户的帖子(如果用户已登录)

小部件构建(构建上下文){
返回脚手架(
车身:建造商(
生成器:(上下文)=>安全区域(
子:列(
儿童:[
升起的按钮(
child:Text(“我的帖子”),
已按下:(){
Navigator.push(上下文,
MaterialPage路由(生成器:(上下文)=>MyPosts());
},
)
],
),
),
),
);
}
在我的帖子中,我试图按照以下方式访问数据库

final database = Provider.of<Database>(context);
final database=Provider.of(上下文);
当我进入posts页面时,我发现以下错误

Error: Could not find the correct Provider<Database> above this MyPosts Widget

This likely happens because you used a `BuildContext` that does not include the provider
of your choice. There are a few common scenarios:
错误:在此MyPosts小部件上方找不到正确的提供程序
发生这种情况的原因可能是您使用了不包含提供程序的“BuildContext”
由你选择。有几个常见的场景:
我假设我使用提供者的方式是导致此错误的原因。 有人能提供一些帮助来修复这个错误吗


这是正确的方法吗?

MaterialApp
上方添加一个
Multiprovider
,并在其中创建
数据库

小部件构建(构建上下文){
回程多供应商(
供应商:[
ChangeNotifierProvider(生成器:(上下文)=>AuthBase()),
ChangeNotifierProvider(builder:(context)=>Database(),//在此处添加数据库提供程序
],
孩子:MaterialApp(
标题:“你好”,
主页:登录页(),
),
);
}

MaterialApp
上方添加一个
Multiprovider
,并在其中创建
数据库

小部件构建(构建上下文){
回程多供应商(
供应商:[
ChangeNotifierProvider(生成器:(上下文)=>AuthBase()),
ChangeNotifierProvider(builder:(context)=>Database(),//在此处添加数据库提供程序
],
孩子:MaterialApp(
标题:“你好”,
主页:登录页(),
),
);
}

谢谢您的回答。但这似乎不起作用。AuthBase类没有ChangeNotifier,数据库类也没有。有人能提供一些帮助吗?谢谢你的回答。但这似乎不起作用。AuthBase类没有ChangeNotifier,数据库类也没有。有人能提供一些帮助吗?
Error: Could not find the correct Provider<Database> above this MyPosts Widget

This likely happens because you used a `BuildContext` that does not include the provider
of your choice. There are a few common scenarios: