首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:太多的位置参数:0预期,但3找到

错误:太多的位置参数:0预期,但3找到
EN

Stack Overflow用户
提问于 2019-08-30 20:22:40
回答 1查看 1.2K关注 0票数 0

我得到了这个错误:太多的位置参数:0预期,但3找到。(extra_positional_arguments_could_be_named at itemBuilder...and不知道是什么原因造成的。

错误出现在这里,->

代码语言:javascript
复制
itemBuilder: (ctx, i) => ProductItem(
          loadedProducts[i].id,
          loadedProducts[i].title,
          loadedProducts[i].imageUrl,
        ),
代码语言:javascript
复制
class ProductListPage extends StatelessWidget {
  ProductListPage({this.context});

  final List<Product> loadedProducts = [
    Product(
      id: 'p1',
      title: "Michael Kora",
      description: 'this is cool',
      price: 699,
      imageUrl:
          "https://n1.sdlcdn.com/imgs/c/9/8/Lambency-Brown-Solid-Casual-Blazers-SDL781227769-1-1b660.jpg",
    ),
    Product(
      id: 'p1',
      title: "Michael Kora",
      description: 'this is cool',
      price: 699,
      imageUrl:
          "https://n1.sdlcdn.com/imgs/c/9/8/Lambency-Brown-Solid-Casual-Blazers-SDL781227769-1-1b660.jpg",
    ),

  ];

  final BuildContext context;

//  @override
  Widget build(BuildContext context) {
    return Scaffold(

      body: GridView.builder(
        padding: const EdgeInsets.all(10.0),
        itemCount: loadedProducts.length,
        itemBuilder: (ctx, i) => ProductItem(
          loadedProducts[i].id,
          loadedProducts[i].title,
          loadedProducts[i].imageUrl,
        ),

    );
  }
}

ProductItem的定义如下:

代码语言:javascript
复制
class ProductItem extends StatelessWidget { 
  ProductItem({this.id, this.imageUrl, this.title}); 

  final String id;
  final String title;
  final String imageUrl;

  @override
  Widget build(BuildContext context) {
    return GridTile(
      child: Image.network(imageUrl),
    );
  } 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-30 21:54:06

简短回答:

ProductItem需要命名,而不是位置参数。初始化如下:

代码语言:javascript
复制
ProductItem(
  id: loadedProducts[i].id,
  title: loadedProducts[i].title,
  imageUrl: loadedProducts[i].imageUrl,
)

更长的答案:

错误通知我们:

太多的位置论点:0预期,但3发现。

这表明ProductItem构造函数不需要位置参数。它不知道该拿它们怎么办。为什么?让我们检查一下ProductItem类定义:

代码语言:javascript
复制
class ProductItem extends StatelessWidget { 
  ProductItem({this.id, this.imageUrl, this.title}); 
  ...
}

参数包含在{}中。在Dart中,这意味着它们是可选的命名参数。也就是说,如果你决定通过它们,你必须像这样把它们传递进去:

代码语言:javascript
复制
ProductItem(id: 'id', imageUrl: 'url', title: 'title')

请注意,每个参数的前面都有其名称,因此它被称为命名参数。相反,位置参数的区别仅在于它们在调用构造函数时所采取的立场。

类定义告诉我们,不应该用位置参数调用ProductItem的构造函数。相反,应该使用命名参数。ProductItem应该以这样的方式构造:

代码语言:javascript
复制
ProductItem(
  id: loadedProducts[i].id,
  title: loadedProducts[i].title,
  imageUrl: loadedProducts[i].imageUrl,
)

要了解有关参数类型的更多信息,请参阅Dart 文档。或者,探索DartPad的不同之处。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57732835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档