You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Flutter中使用Provider时出现“Too many positional arguments”报错

问题解决方案

核心原因

你的报错来自两个问题:

  1. 参数类型不匹配:你定义的addItem方法第三个入参要求为double类型,但你在按钮点击事件中传入的是_itemPriceTextEditing.text,属于String类型,类型不匹配会触发编译异常。
  2. 类名冲突:如果确认你自己写的Item模型类构造函数确实是3个位置参数,仍然报「Too many positional arguments: 1 expected, but 3 found」错误,说明你当前文件导入了其他第三方库中同名的Item类,这类第三方的Item类通常仅需要1个入参,覆盖了你自定义的模型类。

修复步骤

  • 修正参数类型:将价格输入的字符串转换为double类型,同时可以增加异常处理避免用户输入非数字时崩溃,修改按钮的onPressed逻辑:
onPressed: () {
  if (_itemNameTextEditing.text.isEmpty || _itemPriceTextEditing.text.isEmpty) {
    return;
  }
  // 不需要加await,addItem是同步方法
  Provider.of<ItemAddNotifier>(context, listen: false).addItem(
    _itemNameTextEditing.text,
    _itemDescriptionTextEditing.text,
    // 字符串转double,非法输入默认设为0
    double.tryParse(_itemPriceTextEditing.text) ?? 0.0,
  );
  Navigator.pop(context);
},
  • 解决类名冲突:检查ItemAddNotifier文件头部的导入语句,确认引入的Item是你自己定义的模型类。如果确实存在其他包的同名Item导入,要么修改你自己的模型类名避免冲突,要么通过导入别名区分:
// 导入自定义模型类时加别名
import '路径/你的item模型文件.dart' as localModel;

// 构造Item时使用别名
localModel.Item item = localModel.Item(itemName, description, itemPrice);

内容的提问来源于stack exchange,提问作者Kavishka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:27:00