flutter - 在 anchestor 中找不到提供程序
问题描述
在这里,我遇到了另一个提供商问题。我有一个切换主视图的主小部件,这个小部件称为 switcher.dart
我将 multiprovider 中的提供程序初始化到切换器中,并在加载的视图中使用它(mainPage.dart)。该视图给了我错误 Provider not found 。
切换器.dart
import '../providers/mainPageProvider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/userProvider.dart';
import 'package:flutter/widgets.dart';
import '../widgets/login.dart';
import '../widgets/mainPage.dart';
import '../widgets/splash.dart';
class Switcher extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProxyProvider<UserProvider, MainPageProvider>(
create: (context) => MainPageProvider.init(
Provider.of<UserProvider>(context, listen: false)),
update: (context, userProvider, mainPageProvider) =>
mainPageProvider..update(userProvider),
),
],
child: Consumer<UserProvider>(
builder: (context, user, _) {
print('switcher notifyed');
print(user.status);
switch (user.status) {
case UserStatus.Uninitialized:
return Splash();
break;
case UserStatus.Authenticated:
return MainPage();
break;
case UserStatus.Unauthenticated:
return Login();
break;
case UserStatus.Authenticating:
return Login();
break;
case UserStatus.Checking:
return Splash();
break;
default:
return Splash();
}
},
),
);
}
}
进入 mainPage 视图,我使用 MainPageProvider 的简单消费者,但说:
The following ProviderNotFoundError was thrown building Consumer<MainPageProvider>(dirty):
Error: Could not find the correct Provider<MainPageProvider> above this Consumer<MainPageProvider> Widget
To fix, please:
* Ensure the Provider<MainPageProvider> is an ancestor to this Consumer<MainPageProvider> Widget
* Provide types to Provider<MainPageProvider>
* Provide types to Consumer<MainPageProvider>
* Provide types to Provider.of<MainPageProvider>()
* Always use package imports. Ex: `import 'package:my_app/my_code.dart';
* Ensure the correct `context` is being used
查看本案例中的消费者示例 mainPage.dart
import 'package:client/providers/mainPageProvider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:provider/provider.dart';
import '../widgets/smallCard.dart';
import 'contoCard.dart';
class MainPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Container(
height: 100,
margin: EdgeInsets.only(left: 10),
child: Consumer<MainPageProvider>(
builder: (context, mainPageProvider, _) {
if(mainPageProvider.conti == null){
return SpinKitPulse(
color: Theme.of(context).primaryColor,
);
}else if(mainPageProvider.conti.length ==0){
return Text(
'Ancora nessun conto',
style: TextStyle(fontFamily: "sofiapro", fontSize: 14),
);
}else{
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: mainPageProvider.conti.length,
itemBuilder: (BuildContext context, index) {
var conti = mainPageProvider.conti;
var conto = conti[index];
return ContoCard(conto);
},
);
}
},
),
),
.......
切换器对我来说似乎是一个锚,因为视图是作为一个孩子加载的,我试图从 import '../providers/mainPageProvider.dart'; 更改导入方式;导入'package:client/providers/mainPageProvider.dart';但错误仍然存在。
任何帮助表示赞赏
解决方案
推荐阅读
- python - 在 python 中可视化一个巨大的相关矩阵
- python - 裁剪特定颜色区域(Python + OpenCV)
- javascript - 在SVG中旋转弧
- python - 在没有数学的情况下,如何在 Python 中接受多个输入并检查它是否是一个完美的正方形?
- angular - 是否可以通过 Angular 9 编译乳胶文档?
- rust - Rust - 如何返回不同函数的错误?
- json - jq 命令在尝试根据 JSON 文件的键获取值时返回空输出
- flutter - 如何在不使 main() 异步的情况下将异步对象注册到 get_it 包?
- reactjs - Chakra UI 在单个组件中使用多个模型
- python - 访问 Oauth 令牌时得到 400 响应