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