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

Flutter开发中如何将Firebase Document ID传递到更新页以修改数据

问题解决方案

核心问题是跳转更新页时没有将当前任务的document.id作为参数传递给目标页面,按以下步骤修改即可正常实现更新逻辑:

步骤1:修改UpdateStatusPage增加接收参数的构造函数

给更新页组件新增必传的文档ID参数,还可以新增原有任务内容的可选参数,方便编辑时直接回显内容,减少用户操作成本:

class UpdateStatusPage extends StatefulWidget {
  // 必传参数:当前要编辑的任务文档ID
  final String documentId;
  // 可选参数:原有任务内容,用于编辑页回显
  final String? oldBaslik;
  final String? oldIcerik;

  const UpdateStatusPage({
    super.key,
    required this.documentId,
    this.oldBaslik,
    this.oldIcerik,
  });

  @override
  State<UpdateStatusPage> createState() => _UpdateStatusPageState();
}

在更新页的initState生命周期里给控制器赋值,实现原有内容回显:

class _UpdateStatusPageState extends State<UpdateStatusPage> {
  final gorevBaslikController = TextEditingController();
  final gorevIcerikController = TextEditingController();

  @override
  void initState() {
    super.initState();
    // 回显原有任务内容
    if(widget.oldBaslik != null){
      gorevBaslikController.text = widget.oldBaslik!;
    }
    if(widget.oldIcerik != null){
      gorevIcerikController.text = widget.oldIcerik!;
    }
  }

  // 其余原有代码保持不变
}

步骤2:修改列表页跳转逻辑,传递参数

找到列表页编辑按钮的跳转逻辑,把当前遍历到的文档ID和内容传递给更新页:

IconButton(
  icon: Icon(Icons.edit),
  onPressed: () async {
    await Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => UpdateStatusPage(
          documentId: document.id,
          oldBaslik: data['GorevBaslik'],
          oldIcerik: data['GorevIcerik'],
        )
      )
    );
  }),

步骤3:修复更新页的更新逻辑

这里需要同时修复两处原有代码的问题:

  1. 用传递过来的widget.documentId替换原本不存在的document.id
  2. 提交更新时要取控制器的text属性,不要直接传控制器对象,否则会存储控制器的内存地址而非输入内容
ElevatedButton(
  onPressed: (){
    firestore
      .collection('Task')
      .doc('${auth.currentUser?.email}')
      .collection('tasks')
      // 使用传递过来的文档ID
      .doc(widget.documentId)
      .update(
        {
          // 取控制器的text属性获取输入内容
          'GorevBaslik': gorevBaslikController.text,
          'GorevIcerik': gorevIcerikController.text,
        }
    ).then((value) => Navigator.pop(context)); // 更新完成后自动返回列表页
  },
  child: Text(
    "Güncelle",
    style: TextStyle(color: Colors.white),
  ),
),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:24:02