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

Flutter中如何用时间选择器展示API返回时间并实现修改

解决方案:加载API返回的时间到时间选择器

不用再依赖TimeOfDay.now()了,直接把API返回的时间字符串转成TimeOfDay对象来用就行,具体操作和代码示例如下:

  • 把API时间字符串转成TimeOfDay对象
    把"22:05"这类字符串按冒号拆分成小时和分钟,转成整数后创建TimeOfDay实例,24小时制的话直接使用即可,无需额外转换。

  • 用转换后的时间初始化状态
    在State类里定义一个TimeOfDay类型的变量,在initState方法里完成字符串转TimeOfDay的操作并赋值,替代原来的TimeOfDay.now()初始化逻辑。

  • 打开时间选择器时用这个初始时间
    调用showTimePicker时,将initialTime参数设置为我们转换好的时间,这样选择器打开时默认选中的就是API返回的时间。

  • 选择新时间后更新状态刷新UI
    选完时间后,更新状态变量,输入框会自动刷新显示新的时间。

完整代码示例:

import 'package:flutter/material.dart';

class TimeInputPage extends StatefulWidget {
  const TimeInputPage({super.key});

  @override
  State<TimeInputPage> createState() => _TimeInputPageState();
}

class _TimeInputPageState extends State<TimeInputPage> {
  // 模拟API返回的时间字符串
  final String apiTimeStr = "22:05";
  late TimeOfDay _selectedTime;

  @override
  void initState() {
    super.initState();
    // 拆分时间字符串并转换为TimeOfDay
    final timeParts = apiTimeStr.split(':');
    final hour = int.parse(timeParts[0]);
    final minute = int.parse(timeParts[1]);
    _selectedTime = TimeOfDay(hour: hour, minute: minute);
  }

  Future<void> _openTimePicker() async {
    final pickedTime = await showTimePicker(
      context: context,
      initialTime: _selectedTime, // 用API返回的时间初始化选择器
      // 强制使用24小时制显示,可选配置
      builder: (context, child) {
        return MediaQuery(
          data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
          child: child!,
        );
      },
    );

    if (pickedTime != null && pickedTime != _selectedTime) {
      setState(() {
        _selectedTime = pickedTime;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('时间选择')),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: TextField(
          readOnly: true,
          onTap: _openTimePicker,
          decoration: InputDecoration(
            labelText: '设置时间',
            hintText: _selectedTime.format(context),
            suffixIcon: const Icon(Icons.access_time),
          ),
        ),
      ),
    );
  }
}

关键注意点:

  • 务必在initState里完成时间转换,确保页面初始化时就显示API返回的时间
  • showTimePicker的initialTime必须传入自定义的_selectedTime,而不是默认的当前时间
  • 如果API返回的是带AM/PM的12小时制字符串,需要额外处理转换逻辑,你的场景是24小时制,直接拆分即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:36:04