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

如何在Flutter Table Calendar表头下方添加指定文本?

解决方案:在TableCalendar表头下方添加提示文本

要在TableCalendar的表头(如<November 2022>)下方添加“pick a day”文本,你需要通过headerBuilder属性自定义表头区域,替代默认的表头样式。具体实现如下:

修改核心点

  1. 保留原headerStyle中formatButtonVisible: false的配置,移除titleCentered(自定义表头时自行控制对齐)
  2. 添加headerBuilder参数,用Column组合默认月份标题和提示文本,实现垂直布局

修改后的完整代码

import 'package:flutter/material.dart';
import 'package:table_calendar/table_calendar.dart';

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

 @override
  State<Journal> createState() => _JournalState();
}

class _JournalState extends State<Journal> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: Padding(
          padding:
              const EdgeInsets.only(left: 19, top: 8, bottom: 10, right: 19),
          child: IconButton(
            onPressed: () {},
            icon: const Icon(Icons.arrow_back_ios,
                color: Color.fromARGB(255, 0, 97, 146)),
          ),
        ),
        title: const Text('Meds-On-Time',
            style: TextStyle(
                fontWeight: FontWeight.w400,
                fontFamily: 'Inter',
                fontSize: 18)),
        centerTitle: true,
        actions: [
          Padding(
            padding:
                const EdgeInsets.only(left: 19, top: 8, bottom: 10, right: 10),
            child: InkWell(
              onTap: () {},
              child: Image.asset(
                'assets/images/action_Icons.png',
                width: 24,
                height: 24,
              ),
            ),
          ),
        ],
      ),
      body: Container(
        constraints: const BoxConstraints.expand(),
        decoration: const BoxDecoration(
          image: DecorationImage(
              image: AssetImage("assets/images/background_onTime.png"),
              fit: BoxFit.cover),
        ),
        child: Column(
          children: [
            TableCalendar(
              locale: "en_US",
              rowHeight: 40,
              headerStyle: const HeaderStyle(
                formatButtonVisible: false,
              ),
              // 自定义表头布局
              headerBuilder: (context, focusedDay) {
                return Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    // 复用默认表头标题组件,保留原有样式
                    DefaultHeaderTitle(
                      locale: "en_US",
                      focusedDay: focusedDay,
                    ),
                    // 添加提示文本
                    const SizedBox(height: 6),
                    const Text(
                      "pick a day",
                      style: TextStyle(
                        fontSize: 14,
                        color: Colors.grey[600],
                      ),
                    ),
                  ],
                );
              },
              focusedDay: DateTime.utc(2023, 11, 24),
              firstDay: DateTime.utc(2010, 11, 30),
              lastDay: DateTime.utc(2043, 11, 30),
              currentDay: DateTime.utc(2023, 11, 24),
            ),
            // 可根据需求保留或移除原日历下方的提示文本
            // Text("Pick a date to view your journal"),
          ],
        ),
      ),
    );
  }
}

说明

  • headerBuilder是TableCalendar提供的自定义表头入口,通过它可以完全控制表头的结构和样式
  • 使用DefaultHeaderTitle组件可以直接复用官方默认的月份标题格式与样式,无需手动处理日期格式化
  • 你可以通过调整SizedBox的高度、Text的字体/颜色等属性,让提示文本与整体UI风格匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:48:27