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

Flutter中showTimePicker获取值后变为null的问题求助

问题解决方法

核心问题

vTimeSelected未作为State类的成员变量声明,导致组件重建时变量被重新初始化回到null状态;同时需确保状态更新后触发UI重建。

修复步骤

  1. 在State类中声明成员变量
    在你的State子类中添加vTimeSelected的定义:

    class _YourWidgetState extends State<YourWidget> {
      TimeOfDay? vTimeSelected; // 声明为State成员变量
      // ... 其他代码
    }
    
  2. 修正按钮点击逻辑
    确保获取时间后,通过setState通知Flutter更新UI:

    ElevatedButton(
      child: const Text('Time'),
      onPressed: () async {
        final selectedTime = await getTimeSelected(context);
        setState(() {
          vTimeSelected = selectedTime; // 赋值操作放在setState内
        });
      },
    ),
    
  3. 保留getTimeSelected函数
    你的时间选择函数无需修改,保持原样即可:

    Future<TimeOfDay?> getTimeSelected(BuildContext context) async {
      TimeOfDay vTime = TimeOfDay(hour: 0, minute: 0);
      TimeOfDay? newTime = await showTimePicker(context: context, initialTime: vTime);
      return newTime;
    }
    

修复原理

  • 把vTimeSelected设为State成员变量后,它的值会被State对象保留,不会随组件重建而丢失。
  • 在setState内赋值,会触发Flutter重新构建UI,此时Text组件就能读取到最新的vTimeSelected值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:10:33