今天遇到的一个清奇的provider的异常
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following ProviderNotFoundError was thrown building Consumer<DarkModeModel>(dirty):
Error: Could not find the correct Provider<DarkModeModel> above this Consumer<DarkModeModel> Widget
To fix, please:
* Ensure the Provider<DarkModeModel> is an ancestor to this Consumer<DarkModeModel> Widget
* Provide types to Provider<DarkModeModel>
* Provide types to Consumer<DarkModeModel>
* Provide types to Provider.of<DarkModeModel>()
* Always use package imports. Ex: `import 'package:my_app/my_code.dart';
* Ensure the correct `context` is being used.
If none of these solutions work, please file a bug at:
https://github.com/rrousselGit/provider/issues
The relevant error-causing widget was:
Consumer<DarkModeModel> file:///E:/apps/winter/lib/SetUserInfo/SetAccountInfo.dart:33:4
When the exception was thrown, this was the stack:
#0 Provider.of (package:provider/src/provider.dart:184:7)
#1 Consumer.build (package:provider/src/consumer.dart:48:16)
#2 StatelessElement.build (package:flutter/src/widgets/framework.dart:4701:28)
#3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4627:15)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
出错的部分是app中“我的”界面里的“账号设置”功能,本希望能随materialapp的provider变化而改变button颜色,如
Consumer<DarkModeModel>(builder: (context, DarkModeModel, child) {
return Container(
child: Column(
children: [
Container(
margin: EdgeInsets.fromLTRB(20, 30, 20, 0),
child: SizedBox(
width: 420,
height: 80,
child: RaisedButton(
color: DarkModeModel.darkMode ? Colors.black : Colors.white,
child: Text(
'修改用户名',
style: TextStyle(fontSize: 25,
color: DarkModeModel.darkMode
? Colors.white
: Colors.black,),
),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ChangeUserName()));
},
),
),
);
)}
结果就报错了,抓狂了一天,最后在这里找到了答案:https://blog.51cto.com/15089765/2600554(这文章不错)
文章对该错误的评价是:没有注册导致的
然后我就明白了
改为如下:
MultiProvider(
providers: [
ChangeNotifierProvider<DarkModeModel>(create: (child) => DarkModeModel())
],
child:Consumer<DarkModeModel>(builder: (context, DarkModeModel, child) {
//代码块
});
欧了
provider4.3.3,从4版本后取消了builder,把builder换成create即可