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