gpt4 book ai didi

flutter - 从Flutter中的子小部件按返回按钮后,如何不调用didChangeDependencies()?

转载 作者:行者123 更新时间:2023-12-03 03:04:21 26 4
gpt4 key购买 nike

我正在使用提供程序包通过调用didChangeDependencies()方法在数组中加载产品。即使由于过滤器而进行了一些更改并且获取了新产品,然后在notifyListeners()的帮助下,此页面也可以成功重建,这仍然可以正常工作。尽管当我点击产品卡以查看产品详细信息屏幕并返回到所有产品屏幕时出现问题,但是再次调用didChangeDependencies并刷新了整个页面。回到此页面时,有什么方法可以停止触发didChangeDependencies(),或者还有其他更好的方法来实现我在这里所做的工作?

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import 'loader.dart';
import '../screens/product_overview.dart';
import '../providers/user.dart';

class AllProducts extends StatefulWidget {
final double deviceHeight;
final double deviceWidth;
AllProducts(this.deviceHeight, this.deviceWidth);
@override
_AllProductsState createState() => _AllProductsState();
}

class _AllProductsState extends State<AllProducts> {
List _products = [];
bool _isLoading = true;
bool _gettingMoreProducts = false;

_loadMoreProducts() async {
print('Reached end of list');
if (_gettingMoreProducts) {
print('Already getting products');
return;
}
print('Firestore function called');
_gettingMoreProducts = true;
dynamic newProducts =
await Provider.of<User>(context, listen: false).getProducts();
_products.addAll(newProducts);
setState(() {});
print('New Products added');
_gettingMoreProducts = false;
}

@override
void didChangeDependencies() {
setState(() {
_isLoading = true;
});
print('Getting new products from init state');
Provider.of<User>(context).getProducts().then((products) {
setState(() {
_products = products;
_isLoading = false;
});
});
super.didChangeDependencies();
}

@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(top: 5),
height: widget.deviceHeight * 0.80,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
),
child: _isLoading
? Loader()
: ListView.builder(
itemCount: _products.length,
itemBuilder: (context, index) {
// if (index == _products.length - 1) {
// _loadMoreProducts();
// }
return Dismissible(
key: UniqueKey(),
onDismissed: (direction) {
setState(() {
_products.removeAt(index);
});
},
background: Container(
color: Colors.red,
child: Icon(
Icons.cancel,
color: Colors.white,
size: 50,
),
),
secondaryBackground: Container(
color: Colors.green,
child: Icon(
Icons.check,
color: Colors.white,
size: 50,
),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
// Product Overview builds a simple card for product and whenever I tap on card it moves to product detail screen which is just a simple screen with product details and when I press back button from that page all products rebuild again due to didchangedependencies.
child: ProductOverview(_products[index],
widget.deviceHeight, widget.deviceWidth),
),
);
},
));
}
}

最佳答案

您可以尝试升级到Flutter SDK> = Beta v1.14.6。 Team Flutter已在此版本中对其进行了修复。

https://github.com/flutter/flutter/pull/49527

关于flutter - 从Flutter中的子小部件按返回按钮后,如何不调用didChangeDependencies()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61122435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com