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

Flutter中_saveForm函数无法保存新产品的问题排查

问题排查与修复:Flutter产品管理新增产品不显示

问题现象

通过EditProductScreen添加新产品并点击保存后,产品无法显示在用户产品页面,无任何错误提示。

问题根源

_saveForm函数的判断逻辑存在错误:初始化的_editedProduct.id是空字符串''而非null,导致新增产品时错误执行updateProduct逻辑(而非addProduct)。由于updateProduct中找不到对应ID的产品,仅会打印...,不会触发添加操作,也不会更新UI。

修复方案

将_saveForm中的判断条件从_editedProduct.id != null改为_editedProduct.id.isNotEmpty:

修改前代码

if (_editedProduct.id != null) {
  Provider.of<ProductsProvider>(context, listen: false)
      .updateProduct(_editedProduct.id, _editedProduct);
} else {
  Provider.of<ProductsProvider>(context, listen: false).addProduct(
    Product(
      title: _editedProduct.title,
      description: _editedProduct.description,
      price: _editedProduct.price,
      imageUrl: _editedProduct.imageUrl,
      id: DateTime.now().toString(),
    ),
  );
}

修改后代码

if (_editedProduct.id.isNotEmpty) {
  Provider.of<ProductsProvider>(context, listen: false)
      .updateProduct(_editedProduct.id, _editedProduct);
} else {
  Provider.of<ProductsProvider>(context, listen: false).addProduct(
    Product(
      title: _editedProduct.title,
      description: _editedProduct.description,
      price: _editedProduct.price,
      imageUrl: _editedProduct.imageUrl,
      id: DateTime.now().toString(),
    ),
  );
}

补充说明

初始化_editedProduct时,id被设为空字符串:

var _editedProduct = Product(
  id: '',
  title: '',
  description: '',
  price: 0,
  imageUrl: '',
);

此时_editedProduct.id != null始终为true(空字符串不是null),导致新增流程永远走不到addProduct。改为判断id.isNotEmpty后,新增产品时id为空字符串,会正确执行添加逻辑,产品就能正常显示在列表中。


内容的提问来源于stack exchange,提问作者Abu Bakkar Siddik Rana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:10