Flutter开发报错:参数类型‘MaterialApp Function(BuildContext, AppProvider, Widget)’无法分配给目标参数类型
解决Flutter中Consumer组件builder参数类型不匹配的错误
嘿,我帮你找到了这个错误的根源——其实是空安全类型不兼容导致的!在新版本的Provider库中,Consumer的builder函数第三个参数child的类型是Widget?(可空类型),但你的代码里把它声明成了非空的Widget,这就直接触发了类型不匹配的报错。
快速修复方案
只需要把builder函数里的第三个参数类型改成Widget?就行;要是你压根用不上这个child参数,也可以用下划线_来忽略它(记得加上可空标记)。
修改后的完整代码如下:
import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:resturant/providers/app_provider.dart'; import 'package:resturant/screens/splash.dart'; import 'package:resturant/util/const.dart'; void main() { runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => AppProvider()), ], child: MyApp(), ), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return Consumer<AppProvider>( // 这里把第三个参数改为Widget?,解决类型不匹配 builder: (BuildContext context, AppProvider appProvider, Widget? child) { return MaterialApp( key: appProvider.key, debugShowCheckedModeBanner: false, navigatorKey: appProvider.navigatorKey, title: Constants.appName, theme: appProvider.theme, darkTheme: Constants.darkTheme, home: SplashScreen(), ); }, ); } }
另外提个小细节:你的代码里重复导入了util/const.dart,删掉其中一行就能避免冗余啦。
补充说明
如果你的项目用的是比较旧的Provider版本(还没适配空安全),那也可能是泛型类型匹配的问题,但现在主流版本都已经支持空安全了,所以这个可空类型不匹配是最可能的原因。修改完应该就能正常运行了~
内容的提问来源于stack exchange,提问作者faraz ahmed
相关产品推荐
相关产品推荐

