Dart setState未更新值
问题: setState未保存_产品的价值 尝试: 如果我在setState函数中打印_products的值,它将被更新:Dart setState未更新值,dart,flutter,Dart,Flutter,问题: setState未保存_产品的价值 尝试: 如果我在setState函数中打印_products的值,它将被更新: ['Product 1', 'Product 2', 'New Product'] 但当我将_products传递到我的products类时,_products的值被重置: ['Product 1', 'Product 2'] 代码: 在构建函数外部初始化_产品列表 每次调用setState时,都会调用build方法,该方法会重置_产品,因为它是在方法内部初始化的 尝试
['Product 1', 'Product 2', 'New Product']
但当我将_products传递到我的products类时,_products的值被重置:
['Product 1', 'Product 2']
代码:
在构建函数外部初始化_产品列表
每次调用setState时,都会调用build方法,该方法会重置_产品,因为它是在方法内部初始化的
尝试这样做:
class _ProductManagerState extends State<ProductManager> {
List<String> _products = ['Product 1', 'Product 2'];
@override
Widget build(BuildContext context) {
/*Rest of the code*/
}
}
编写Flitter应用程序时要牢记一条黄金法则: 小部件是不可变的 这意味着,小部件中声明的任何有状态或无状态在第一次构建后都不会改变 状态对象,即_ProductManagerState,虽然是可变的,但不会反映小部件黄金法则1中的任何更改 仅当且仅当小部件正在重建时,才会反映更新注意:小部件的重建=/=类的重建!。因此,在调用setState时,它不仅将产品添加到列表中,而且还强制重新生成。这就是为什么首先需要设置状态 因此,正如其他人所建议的,将_产品的初始化移出构建将解决它不保存的问题 它确实保存了,只是每次小部件重新构建自己时它都得到了重新初始化
class _ProductManagerState extends State<ProductManager> {
List<String> _products = ['Product 1', 'Product 2'];
@override
Widget build(BuildContext context) {
/*Rest of the code*/
}
}
import 'package:flutter/material.dart';
import './products.dart';
class ProductManager extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _ProductManagerState();
}
}
class _ProductManagerState extends State<ProductManager> {
List<String> _products = ['Product 1', 'Product 2'];
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
margin: EdgeInsets.all(10.0),
child: RaisedButton(
onPressed: () {
setState(() {
_products.add('New Product');
});
},
child: Text('Add Product'),
),
),
Products(_products),
],
);
}
}