【问题标题】:Flutter initiating a provider and changing its value / NoSuchMethodErrorFlutter 启动提供程序并更改其值 / NoSuchMethodError
【发布时间】:2022-08-14 10:28:33
【问题描述】:

我努力改变我的供应商的价值观。

它们位于我的小部件树的顶部:

runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(
          create: (context) => User(),
        ),
        ChangeNotifierProvider(
          create: (context) => DisplayModel(),
        ),
      ],
      child: MyApp(),
    ),
  );

这是我尝试构建函数以更改提供程序值的类。 DisplayChange() 应该允许用户为 DisplayModel 设置自己的值。

class DisplayModel extends ChangeNotifier {
  String blogId;
  String title;
  String subtitle;
  String desc;
  String author;
  String publisherId;
  String imageUrl;

  DisplayModel(
      {this.blogId,
      this.title,
      this.subtitle,
      this.desc,
      this.author,
      this.publisherId,
      this.imageUrl});

  factory DisplayModel.fromDocument(doc) {
    return DisplayModel(
      blogId: doc[\'blogId\'],
      title: doc[\'title\'],
      subtitle: doc[\'subtitle\'],
      desc: doc[\'desc\'],
      author: doc[\'author\'],
      publisherId: doc[\'publisherId\'],
      imageUrl: doc[\'imageUrl\'],
    );
  }


  DisplayChange(DisplayModel) {
    DisplayModel (DisplayModel);
     notifyListeners();
     return DisplayModel();
  }
}

我在 MyApp() 中调用提供程序,我希望用户能够使用 loadebBlog 的值更改 DisplayModel 的实例(它使用与 DisplayModel 相同的构造函数构建)并被重定向到应用程序的主页

 child: GestureDetector(
                      onTap: () {
                        Provider.of<DisplayModel>(
                          context,
                          listen: false,
                        ).DisplayChange(loadedBlog);

                        print (\"ok\");

                       Navigator.of(this.context).pushReplacementNamed(\'home\');
                      },
                    child: Icon(Icons.ios_share),),

但是当点击按钮时,它会返回错误

The following NoSuchMethodError was thrown while handling a gesture:
Class \'BlogModel\' has no instance method \'call\'.
Receiver: Instance of \'BlogModel\'
Tried calling: call(Instance of \'BlogModel\')

逻辑好不好?我错过了什么?

感谢您的时间。

此致, 朱利安

    标签: flutter dart flutter-provider nosuchmethoderror


    【解决方案1】:

    刚遇到这个,所以我不知道4个月后它是否有帮助,但是..

    这种语法看起来很奇怪:

     DisplayChange(DisplayModel) {
        DisplayModel (DisplayModel);
         notifyListeners();
         return DisplayModel();
      }
    

    应该是这样的:

     DisplayChange(DisplayModel model) {
         // I'm not sure what this is supposed to do
         // but it's no-op code
         // DisplayModel (DisplayModel);
         notifyListeners();
         return DisplayModel();
      }
    

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 2011-02-27
      • 2012-11-08
      • 2020-09-06
      • 1970-01-01
      • 2022-01-14
      • 2020-09-08
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多