Provider填坑

今天遇到的一个清奇的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即可

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值