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

Flutter中使用Stateful Widget为状态对象赋值遇空值问题

问题分析与解决方法

你的代码里address变量初始值为null,在onTextFieldSaved方法中使用address?.firstName = value时,因为address是null,空安全的?.操作符会直接跳过赋值操作,导致address始终是null,执行_formKey.currentState!.save()后自然拿不到值。

修复步骤

  1. 初始化Address对象
    在_ShippingAddressState类中,把Address? address;改为:

    Address address = Address();
    

    让address从一开始就是一个实例,而非null。

  2. 简化赋值逻辑
    因为address已经是确定的非空实例,onTextFieldSaved里的赋值可以去掉?:

    void onTextFieldSaved(String? value, String type) {
      switch (type) {
        case 'first_name':
          address.firstName = value;
          break;
      }
    }
    

修改后的关键代码片段

class _ShippingAddressState extends State<ShippingAddress> {
  final _formKey = GlobalKey<FormState>();

  // 初始化Address实例
  Address address = Address();

  @override
  Widget build(BuildContext context) {
    // 原有build代码保持不变
  }

  void onTextFieldSaved(String? value, String type) {
    switch (type) {
      case 'first_name':
        // 直接赋值,无需空安全判断
        address.firstName = value;
        break;
    }
  }
}

完成修改后,点击按钮执行_formKey.currentState!.save()时,address就能正确保存输入框的值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:30:11