flutter - 状态错误 : no element

标签 flutter dart

我在浏览列表时遇到此错误,问题是列表不为空,因为我有一些手动数据放置它,所以我不确定我做错了什么,这是我的代码

class ProductDetailScreen extends StatelessWidget {
  // final String title;
  // final double price;

  // ProductDetailScreen(this.title, this.price);
  static const routeName = '/product-detail';

  @override
  Widget build(BuildContext context) {
    final String productId =
        ModalRoute.of(context).settings.arguments as String; // is the id!

    final loadedProduct = Provider.of<Products>(
      context,
      listen: false,
    ).findById(productId);

    // ...
    return Scaffold(
      appBar: AppBar(
        title: Text(loadedProduct.title),
      ),
    );
  }
}

通过 View ID 查找方法来自此处:

    import 'package:flutter/material.dart';
import 'package:shop_app/providers/product.dart';

class Products with ChangeNotifier {
  List<Product> _items = [
    Product(
      id: 'p1',
      title: 'Red Shirt',
      description: 'A red shirt - it is pretty red!',
      price: 29.99,
      imageUrl:
          'https://cdn.pixabay.com/photo/2016/10/02/22/17/red-t-shirt-1710578_1280.jpg',
    ),
    Product(
      id: 'p2',
      title: 'Trousers',
      description: 'A nice pair of trousers.',
      price: 59.99,
      imageUrl:
          'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/Trousers%2C_dress_%28AM_1960.022-8%29.jpg/512px-Trousers%2C_dress_%28AM_1960.022-8%29.jpg',
    ),
    Product(
      id: 'p3',
      title: 'Yellow Scarf',
      description: 'Warm and cozy - exactly what you need for the winter.',
      price: 19.99,
      imageUrl:
          'https://live.staticflickr.com/4043/4438260868_cc79b3369d_z.jpg',
    ),
    Product(
      id: 'p4',
      title: 'A Pan',
      description: 'Prepare any meal you want.',
      price: 49.99,
      imageUrl:
          'https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Cast-Iron-Pan.jpg/1024px-Cast-Iron-Pan.jpg',
    ),
  ];

  List<Product> get items {
    return [..._items];
  }

  Product findById(String id) {
    return _items.firstWhere((prod) => prod.id == id);
  }

  void addProduct() {
    notifyListeners();
  }
}

知道为什么它不起作用吗?我已经添加了虚拟数据,所以它应该扫描该列表,不是吗?

最佳答案

firstWhere返回满足给定谓词测试的第一个元素。

如果没有元素满足测试,则返回调用orElse函数的结果。如果省略 orElse,则默认抛出 StateError。

关于flutter - 状态错误 : no element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67106994/

相关文章:

list - 将项目删除并再次添加到列表中时保持列表中的位置

firebase - Flutter-如何在下一页上查询与以前单击过的ListTile相同的文档ID

ajax - Dart Adaj错误

dart - 如何更改 AppBar 的阴影颜色?

flutter - 在 TextField 小部件 : Flutter 中从下方剪切文本

dart - 我应该为 flutter 形式的每个输入字段创建一个单独的 Controller 吗?

flutter - 从 parent 那里再次运行 future

Flutter 在选择时更改 NavigationBarThemeData labelTextStyle 颜色

Flutter:如何以编程方式添加 TextField 或 TextFormField

Flutter 和 Getx 状态管理 - ListView 更改