dart - setState 没有更新值

标签 dart flutter

问题: setState 未保存 _products 的值。

尝试过: 如果我在 setState 函数中打印 _products 的值,它会更新:

['Product 1', 'Product 2', 'New Product']

但是当我将 _products 传递给我的 Products 类时,_products 的值被重置:

['Product 1', 'Product 2']

代码:

import 'package:flutter/material.dart';

import './products.dart';

class ProductManager extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _ProductManagerState();
  }
}

class _ProductManagerState extends State<ProductManager> {
  @override
  Widget build(BuildContext context) {

    List<String> _products = ['Product 1', 'Product 2'];
    return Column(
      children: [
        Container(
          margin: EdgeInsets.all(10.0),
          child: RaisedButton(
            onPressed: () {
              setState(() {
                _products.add('New Product');
              });
            },
            child: Text('Add Product'),
          ),
        ),
        Products(_products),
      ],
    );
  }
}

最佳答案

build 函数之外初始化 _products 列表。

每次您调用 setState() 时,都会调用 build() 方法来重置 _products,因为它是在方法内部初始化的。

尝试这样做:

class _ProductManagerState extends State<ProductManager> {

  List<String> _products = ['Product 1', 'Product 2'];

  @override
  Widget build(BuildContext context) {
   /*Rest of the code*/
  }
}

关于dart - setState 没有更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54665699/

相关文章:

flutter - 在 Flutter 中将 Stream 转换为 Future

flutter - 如何删除用户点击的地方

flutter - 如何实现Flutter WebView Scale to Fit

firebase - Flutter:未捕获的 ReferenceError:firebase 未定义

java - 带有自签名证书的 Flutter https

dart - Flutter/GraphQL - 以自定义类型作为参数的突变

Flutter:仅在 Release模式下运行时才在空值上使用空检查运算符,而不是调试

dart - 删除和重新添加 polymer 元素实例的正确方法是什么?

integer - dart有数值剪辑功能吗

dart - Dart 不必要的包导入是否有任何性能缺陷?