You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Dart中将列表添加至另一列表时子列表同步更新问题求解

问题原因
  1. Dart 中列表属于引用类型,变量存储的是列表的内存地址而非列表本身的内容。你当前代码中所有 Model 实例的 list 属性都指向同一个列表对象,当这个对象的内容修改时,所有引用它的地方都会同步获取到最新内容,就会出现所有子列表同步更新的现象。
  2. 你将 list 变量定义在 build 方法内部,若 Widget 触发重建,list 会被重新初始化为空列表,也会导致业务逻辑异常。
解决方法

修改逻辑保证每个存入全局集合的 Model 都持有独立的列表实例:

  • 将 list 变量从 build 方法移到类的成员属性位置,避免 Widget 重建时列表被重置
  • 每次创建 Model 实例存入全局列表时,通过 List.from(list) 创建当前列表的深拷贝,保证各 Model 的列表互不影响
  • 移除无用的参数传递,精简逻辑

修改后代码

import 'package:flutter/material.dart';
import 'package:fooderlichapp/themes/models.dart';

class Display extends StatelessWidget {   
  final TextEditingController textCont = TextEditingController();
  // 列表移到类成员位置
  final List<String> list = [];

  void add() {
    list.add(textCont.text);
    textCont.clear();
    debugPrint("added text successfully");
  }

  void addModelClass() {
    // 核心修改:创建列表的拷贝传入新Model
    final newModel = Model(name: textCont.text, list: List.from(list));
    ModelClass.modelList.add(newModel);
    // 如果需要新增后清空当前输入列表,可放开下面的注释
    // list.clear();
  }

  void view() {
    var models = ModelClass.modelList;
    for (var model in models) {
      debugPrint(" ${model.list}");
    }
  }

  @override   
  Widget build(BuildContext context) {
    return Container(
      child: Scaffold(
        body: Column(
          children: [
            TextField(
              controller: textCont,
            ),
            IconButton(
                onPressed: add,
                icon: Icon(Icons.add)),
            TextButton(
                onPressed: addModelClass,
                child: Text("add text")),
            ElevatedButton(
                onPressed: view,
                child: Text("display"))
          ],
        ),
      ),
    );
  }
}

模型类可同步优化规范属性定义:

class Model {
  final String? name;
  final List<String>? list;
  Model({this.name, this.list});
}

class ModelClass {
  static List<Model> modelList = [];
}

内容的提问来源于stack exchange,提问作者Asumah Yakubu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:45:00