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

Flutter按月分周展示无时间日期及列表单行按钮隐藏功能咨询

Flutter日期展示与列表交互解决方案

单条按钮点击仅隐藏当前行按钮

原因

原代码使用全局单一变量viewVisible控制所有列表项按钮可见性,所有行共用同一份状态,修改后所有行同步生效。

解决方法

使用List<bool>存储每个列表项独立的可见状态,点击时仅修改对应索引的状态值。
初始化时添加:

List<bool> buttonVisible = List.generate(7, (index) => true);

修改Visibility的visible属性和点击事件:

Visibility(
  visible: buttonVisible[index],
  child: ElevatedButton(
    child: Text('登 録'),
    style: ElevatedButton.styleFrom(primary: Colors.indigo[700]),
    onPressed: () {
      setState(() {
        buttonVisible[index] = false;
      });
      ButtonClicked();
      _awaitReturnValueFromSecondScreen(context);
    },
  )
)

不含时间的日期+星期展示

当前使用的DateFormat配置已支持输出无时间的日期与星期,如需展示中文星期,指定中文locale即可:

// 需先在pubspec.yaml引入intl依赖,并导入相关包
import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';

// 初始化时调用日期本地化初始化
@override
void initState() {
  super.initState();
  initializeDateFormatting('zh_CN', null);
}

// 格式化配置,输出示例:06/17 (周一)
DateFormat formatter = DateFormat('MM/dd (E)', 'zh_CN');

按周展示、自动切换下一周

实现逻辑

  • 存储当前周的起始日期,默认以周一为周起始,可自行调整为周日
  • 页面加载/刷新时判断当前时间是否超过当前周的最后一天,是则自动将周起始向后推7天
  • 按周起始生成连续7天的日期列表

代码实现

// 存储当前周起始日期
DateTime currentWeekStart = DateTime.now().subtract(Duration(days: DateTime.now().weekday - 1));
List<String> items = [];
List<bool> buttonVisible = [];
DateFormat formatter = DateFormat('MM/dd (E)', 'zh_CN');

// 生成周日期列表,自动切换下一周
void generateWeekItems() {
  DateTime now = DateTime.now();
  // 当前周最后一天
  DateTime currentWeekEnd = currentWeekStart.add(const Duration(days: 6));
  // 若当前时间已超过本周最后一天,自动切到下一周
  if (now.isAfter(currentWeekEnd)) {
    currentWeekStart = currentWeekStart.add(const Duration(days: 7));
  }
  // 生成7天日期
  items = List.generate(7, (i) {
    DateTime date = currentWeekStart.add(Duration(days: i));
    return formatter.format(date);
  });
  // 同步重置按钮可见状态
  buttonVisible = List.generate(7, (index) => true);
  setState(() {});
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:36:04