首页 > 解决方案 > 如何解决“位置参数过多:预期 1 个,但找到 3 个”。颤振问题

问题描述

我是新来的颤振。我需要使用颤振提供者通过表单获取产品信息。我可以得到一个对象(仅像字符串名称值)。但是当我添加多个参数时,它显示以下错误。

位置参数过多:应有 1 个,但找到了 3 个。

这是我写的代码。

模型类

class Item {
  String itemName;
  String description;
  double itemPrice;
  Item(this.itemName, this.description, this.itemPrice);
}

ChangeNotifier 类

class ItemAddNotifier extends ChangeNotifier {
  List<Item> itemList = [];
  addItem(String itemName, String description, double itemPrice) {
    Item item = Item(itemName, description, itemPrice);
    itemList.add(item);
    notifyListeners();
  }
}

添加项目

class AddItems extends StatelessWidget {
  final TextEditingController _itemNameTextEditing = TextEditingController();
  final TextEditingController _itemDescriptionTextEditing =
      TextEditingController();
  final TextEditingController _itemPriceTextEditing = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Kavishka'),
      ),
      body: Container(
        padding: EdgeInsets.all(30.0),
        child: Column(
          children: [
            TextField(
              controller: _itemNameTextEditing,
              decoration: InputDecoration(
                contentPadding: EdgeInsets.all(15.0),
                hintText: 'Item Name',
              ),
            ),
            SizedBox(
              height: 20.0,
            ),
            TextField(
              controller: _itemDescriptionTextEditing,
              decoration: InputDecoration(
                contentPadding: EdgeInsets.all(15.0),
                hintText: 'Item Description',
              ),
            ),
            SizedBox(
              height: 20.0,
            ),
            TextField(
              controller: _itemPriceTextEditing,
              decoration: InputDecoration(
                contentPadding: EdgeInsets.all(15.0),
                hintText: 'Item Price',
              ),
            ),
            SizedBox(
              height: 20.0,
            ),
            RaisedButton(
              child: Text('ADD ITEM'),
              onPressed: () async {
                if (_itemNameTextEditing.text.isEmpty) {
                  return;
                }
                await Provider.of<ItemAddNotifier>(context, listen: false)
                    .addItem(
                        _itemNameTextEditing.text,
                        _itemDescriptionTextEditing.text,
                        _itemPriceTextEditing.text);
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
    );
  }
}

主屏幕

class HomeScreen extends StatelessWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Kavishka'),
        actions: [
          IconButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    fullscreenDialog: true,
                    builder: (context) {
                      return AddItems();
                    },
                  ),
                );
              },
              icon: Icon(Icons.add))
        ],
      ),
      body: Container(
        padding: EdgeInsets.all(30.0),
        child: Column(
          children: [
            Consumer<ItemAddNotifier>(builder: (context, itemAddNotifier, _) {
              return ListView.builder(
                  scrollDirection: Axis.vertical,
                  shrinkWrap: true,
                  itemCount: itemAddNotifier.itemList.length,
                  itemBuilder: (context, index) {
                    return Padding(
                      padding: EdgeInsets.all(15.0),
                      child: Column(
                        children: [
                          Text(
                            itemAddNotifier.itemList[index].itemName,
                            style:
                                TextStyle(fontSize: 20.0, color: Colors.black),
                          ),
                        ],
                      ),
                    );
                  });
            })
          ],
        ),
      ),
    );
  }
}

主要的

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (BuildContext context) {
        return ItemAddNotifier();
      },
      child: MaterialApp(
        home: Container(
          color: Colors.white,
          child: HomeScreen(),
        ),
      ),
    );
  }
}

它显示Item item = Item(itemName, description, itemPrice);在线错误。如果有人可以帮我解决这个问题。

谢谢你。

标签: flutterprovider

解决方案


推荐阅读