- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 dart 类,它加载一个对象和一个图像。当我执行热重载时,函数 findById 返回错误消息 Bad State: No element
.在调试时,我看到我正在查询的列表是空的,一旦我进行了热重播。我想知道为什么会发生这种情况以及如何解决这个问题?
class ProductDetailScreen extends StatefulWidget {
static const routeName = '/product-detail';
@override
_ProductDetailScreenState createState() => _ProductDetailScreenState();
}
class _ProductDetailScreenState extends State<ProductDetailScreen> {
var loadedProduct;
var productId;
var _isLoading;
var _imageUrl;
var cartId;
var imagePath = '';
@override
void initState() {
super.initState();
createCartId();
}
Future<void> createCartId()async {
var id = await nanoid(10);
cartId = id;
}
Future<void> didChangeDependencies() async {
productId = ModalRoute.of(context).settings.arguments as String;
imagePath = productId;
setState(() {
_isLoading = true;
});
final myCacheManager = MyCacheManager();
await myCacheManager.cacheImage(imagePath).then((String imageUrl) {
setState(() {
_imageUrl = imageUrl;
_isLoading = false;
});
});
}
@override
Widget build(BuildContext context) {
loadedProduct = Provider.of<Products>(context,listen:false).findById(productId);
Size size = MediaQuery.of(context).size;
var userId = Provider.of<Auth>(context, listen: false).userId;
return !(_isLoading)?Scaffold(
appBar: AppBar(
actions: null,
title: Text(loadedProduct.title),
),
body:
CustomScrollView(
slivers: [
SliverFillRemaining(
hasScrollBody: false,
child:
Column(
children: <Widget>[
Container(
height: size.height * 0.35,
width: double.infinity,
child:_imageUrl != 'No picture loaded'?
CachedNetworkImage(
imageUrl: _imageUrl,
progressIndicatorBuilder: (context, url, downloadProgress) =>
Center(child:Loading()),
errorWidget: (context, url, error) => Image.asset('assets/images/placeholder.png'),
)
:Image.asset('assets/images/placeholder.png'),
),
Expanded(
child: ItemInfo(
cartId,
loadedProduct.id,
loadedProduct.title,
loadedProduct.price,
loadedProduct.description,
loadedProduct.categoryName,
loadedProduct.isAvailable),
),
],
))]))
:Center(child:Loading());
}
}
class ItemInfo extends StatefulWidget {
ItemInfo(this.cartId,this.id,this.name,this.price,this.description,this.category,this.isAvailable);
var id;
var cartId;
var name;
var price;
var description;
var category;
var isAvailable;
@override
_ItemInfoState createState() => _ItemInfoState();
}
class _ItemInfoState extends State<ItemInfo> {
bool changePrice = false;
List<String> selectedItems;
@override
Widget build(BuildContext context) {
return
Container(
padding: EdgeInsets.all(15),
width: double.infinity,
decoration: BoxDecoration(
boxShadow: [BoxShadow(color: Colors.orange, spreadRadius: 1)],
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(30),
topRight: Radius.circular(30),
),
),
child:
Column(
children: <Widget>[
TitlePriceRating(
name: widget.name,
price: widget.price,
),
],
),
);
}
}
这是函数函数 findById
Product findById(String id) {
return _items.firstWhere((prod) => prod.id == id);
}
这是设置 _items 列表的函数:
Future<void> fetchAndSetProducts(String title) async {
var encodedTitle = Uri.encodeComponent(title);
var url = 'https://mm-nn-default-rtdb.firebaseio.com/products.json?auth=$authToken';
try {
final response = await http.get(Uri.parse(url));
final extractedData = json.decode(response.body) as Map<String, dynamic>;
final List<Product> loadedProducts = [];
if (extractedData == null || extractedData['error'] != null) {
_items = loadedProducts;
return _items;
}
extractedData.forEach((prodId, prodData) {
loadedProducts.add(Product(
id: prodId,
title: prodData['title'],
description: prodData['description'],
price: prodData['price'],
categoryName: prodData['categoryName'],
));
});
notifyListeners();
_items = loadedProducts;
return _items;
} catch (error) {
throw (error);
}
}
该函数在名为
ProductOverviewScreen
的类中调用。然后调用一个名为
ProductGrid
的类.
ProductGrid
基本上包含产品的 ListView 构建器。这个类然后调用
ProductItem
这基本上是产品列表中的单个产品。
ProductItem
包含一个按钮,单击该按钮时会调用
ProductDetailsScreen
这是导致错误的类。
最佳答案
使用 setState 方法。
Future<void> didChangeDependencies() async {
setState(() {
productId = ModalRoute.of(context).settings.arguments as String;
imagePath = productId;
_isLoading = true;
});
final myCacheManager = MyCacheManager();
await myCacheManager.cacheImage(imagePath).then((String imageUrl) {
setState(() {
_imageUrl = imageUrl;
_isLoading = false;
});
});
}
关于flutter - findById 在热重载时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68964808/
我想从特定的本地对象中检索数据 var db=[ { "_id": "543adb9c7a0f149e3ac29438", "name": "user1", "email":
即使数据库中存在 id,以下 findById() 也会返回 null: router.get('/product/:id', function (req, res) { console.log("p
我有以下 dart 类,它加载一个对象和一个图像。当我执行热重载时,函数 findById 返回错误消息 Bad State: No element .在调试时,我看到我正在查询的列表是空的,一旦我进
我有运行 Mongoose 并成功返回以下结果的代码。 为什么我不能执行以下操作并从我的对象中获取值? Object.keys(result).forEach(function(record){
尝试使用 Axios.get 方法获取 ':id'S̶e̶r̶v̶e̶r̶̶i̶s̶̶r̶e̶s̶p̶o̶n̶d̶i̶n̶g̶̶w̶i̶t̶h̶̶a̶̶4̶0̶4̶ 目前我无法设置组件的状态。我得到一
hibernate 有一个特殊的问题。我有一个像这样的 hibernate 功能。 @SuppressWarnings("unchecked") public List findByResponseI
我在网上找到了以下代码,用于从数据库中获取对象。现在lock表示什么?什么时候锁? public T findById(ID id, boolean lock) { T entity;
我在使用 spring 3 和 hibernate-core 3.5.1-Final 的网络应用程序中遇到了一个非常奇怪的行为。 为了简单起见,我提供了我的代码.. if(ripid!=null){
我创建了 2 个表,名为:groupusermaps 和 groups。从 groupusermaps 中,我获取所有 groupId,并且这些 groupId 传入 findById() 方法,以获
我有三个实体。(我使用 xxx 作为这个例子的占位符) 我已经设置了他们所有的 @Entities与 @Entity @Table(name = "xxx") public class xxx { @
PHP 版本:5.2.17 CakePHP 版本:1.3.11 MySQL版本:5.5.9 我正在为客户开发一个非常简单的内部留言板网站。由于它仅供内部使用,因此客户要求没有用户名和密码,只有密码。没
我们有一个使用“findById”的非常简单的方法。 public Cart getCart(long cartId) { Cart cart = null; try {
我正在运行 Mongoose,我有一个工作连接,并且 findById()有时会返回结果: 情况1:无意义查询 models.Repo.findById("somefakeid", function(
列表项 var express = require("express"); var app = express(); var Mongoose = require("Mongoose"); Mongo
我正在尝试通过 mongodb 的对象 ID 获取项目对象,但是当我尝试在 postman 中调用该路由时,它会为我提供数据库中每个对象的列表(总共 4 个对象),而不是预期一个对象。 这是我为从数据
我有一个 Mongoose 模型,例如; var Schema = new Schema({ title: { type: String, required: true }, subtitle
我正在使用 mongoose 调用 findById,它没有返回所有字段,或者至少没有正确映射到字段。但如果我使用聚合,它会返回该字段 我有以下架构 const ratingSchema = new
我在使用 ButterKnife 时遇到此错误: error: cannot find symbol method findById(View,int) TextView tvHeaderTextOn
使用 Hibernate 获取的实体的所有字段都设置为 NULL。我怎样才能避免这种情况?这是我的 Jpa 存储库。 @Repository public interface PolicyReposi
我正在使用 Spring 和 JPA(带有 MySQL 的 Hibernate)以及 Lombok。 您好,我的实体的这一部分: @Data @AllArgsConstructor @NoArgsCo
我是一名优秀的程序员,十分优秀!