我解决了错误类型不匹配,但现在另一个异常被抛出
The argument type 'List' can't be assigned to the parameter type 'List'
这是控制台输出
在构建Welcome(state:_WelcomeState#276b6)时引发了以下ProviderNotFoundException:Error:Could not find correct Provider above this BlocBuilder<WelcomeBloc,WelcomeState> Widget
这是因为您使用的BuildContext
不包含您选择的提供程序。有几种常见情况:
- 您在
main.dart
中添加了新提供程序并执行了热重新加载。若要修复,请执行热重新启动。 - 您尝试读取的提供程序位于不同的路由中。
提供者是有作用域的。所以如果你在一个路由中插入一个提供者,那么其他路由将不能访问这个提供者。
- 您使用的
BuildContext
是您尝试读取的提供程序的祖先。
确保BlocBuilder<WelcomeBloc,WelcomeState>位于MultiProvider/Provider下。这通常发生在您创建提供程序并试图立即读取它时。
例如,而不是:
Widget build(BuildContext context) {
return Provider<Example>(
create: (_) => Example(),
// Will throw a ProviderNotFoundError, because `context` is associated
// to the widget that is the parent of `Provider<Example>`
child: Text(context.watch<Example>().toString()),
);
}
字符串
考虑使用builder
如下:
Widget build(BuildContext context) {
return Provider<Example>(
create: (_) => Example(),
// we use `builder` to obtain a new `BuildContext` that has access to the provider
builder: (context, child) {
// No longer throws
return Text(context.watch<Example>().toString());
}
);
}
型
相关的导致错误的小部件是
欢迎页面。dart:19
当抛出异常时,这就是堆栈。
这是我修改后的主.dart文件
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: AppPages.allBlocProviders(context) ,
child: ScreenUtilInit(
builder: (context, child) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: const AppBarTheme(
iconTheme: IconThemeData(
color: AppColors.primaryText
),
elevation: 0,
backgroundColor: Colors.white
)
),
onGenerateRoute: AppPages.GenerateRouteSettings,
);
},
)
);
}
型
这是我的欢迎. dart 文件.
return BlocBuilder<WelcomeBloc, WelcomeState>(
builder: (context, state) {
return Container(
color: Colors.white,
child: Scaffold(
body: Container(
margin: EdgeInsets.only(top: 34.h),
width: 375.w,
child: Stack(
alignment: Alignment.topCenter,
children: [
PageView(
controller: pageController,
onPageChanged: (value) {
state.page = value;
BlocProvider.of<WelcomeBloc>(context).add(WelcomeEvent());
// print(value);
},
children: [
_page(
1,
context,
"Next",
"First See Learning",
"Forget about a for of paper all knowledge in on learning",
"assets/images/reading.png"
),
_page(
2,
context,
"Next",
"Connect With Everyone",
"Always keep in touch with your tutor & friend, Let's get connected",
"assets/images/boy.png"
),
_page(
3,
context,
"Get Started",
"Always Fascinated Learning",
"Anywhere, anytime, The time is at our direction so study whenever you want",
"assets/images/man.png"
),
],
),
Positioned(
bottom: 100.h,
child: DotsIndicator(
position: state.page,
dotsCount: 3,
mainAxisAlignment: MainAxisAlignment.center,
decorator: DotsDecorator(
color: AppColors.primaryThirdElementText,
activeColor: AppColors.primaryElement,
size: const Size.square(8.0),
activeSize: const Size(18.0, 8.0),
activeShape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5.0)
)
),
)
)
],
),
),
),
);
},
);
}
型
这是我修改过的页面。dart文件
static List<PageEntity> routes (){
return [
PageEntity(
route: AppRoutes.INITIAL,
page: const Welcome(),
bloc: BlocProvider(create: (context)=>WelcomeBloc(),)
),
PageEntity(
route: AppRoutes.SING_IN,
page: const SignInPage(),
bloc: BlocProvider(create: (context)=>SignInBlocs(),)
),
PageEntity(
route: AppRoutes.REGISTER,
page: const Register(),
bloc: BlocProvider(create: (context)=>RegisterBlocs(),)
),
];
}
// return all the bloc providers
static List<BlocProvider> allBlocProviders(BuildContext context){
List<BlocProvider> blocProviders = <BlocProvider>[];
for(var blocs in routes()){
if(blocs.bloc != null){
blocProviders.add(blocs.bloc!);
}
}
return blocProviders;
}
// model that cover entire screen as we click on navigator object
static MaterialPageRoute GenerateRouteSettings(RouteSettings settings){
if(settings.name !=null){
// check for route name matching when navigator gets triggered.
var result = routes().where((element) => element.route == settings.name);
if(result.isNotEmpty){
return MaterialPageRoute(builder: (_)=> result.first.page, settings: settings);
}
}
return MaterialPageRoute(builder: (_)=> const SignInPage(), settings: settings);
}
}
class PageEntity{
String route;
Widget page;
BlocProvider? bloc;
PageEntity({required this.route, required this.page, this.bloc});
}
型
我怎么处理这个错误。我累了,但找不到解决办法。
1条答案
按热度按时间ncecgwcz1#
看起来没什么问题,你能提供一个例子给我调试吗?