Skip to content

ListTile intrinsic height incorrectly returns minTileHeight instead of actual content height #179377

@ericwimp8

Description

@ericwimp8

Description

When ListTileThemeData.minTileHeight is set in the theme, ListTile reports its intrinsic height as the minTileHeight value rather than its actual content height. This causes a RenderFlex overflow when ListTile is used inside an IntrinsicHeight widget, because IntrinsicHeight constrains the layout to 35px while the actual ListTile content requires ~40px.

The minTileHeight property should act as a minimum constraint, not override the intrinsic height calculation. When content exceeds minTileHeight, the intrinsic height should reflect the actual content size.

Steps to Reproduce

  1. Set ListTileThemeData(minTileHeight: 35) in the app theme
  2. Place a ListTile inside Column → IntrinsicHeight → Row → Expanded → Column
  3. Run the app

Expected Behavior

IntrinsicHeight calculates the true intrinsic height of ListTile (~40px) and no overflow occurs.

Actual Behavior

IntrinsicHeight uses minTileHeight (35px) as the intrinsic height, causing a 5px overflow.

A RenderFlex overflowed by 5.0 pixels on the bottom.
constraints: BoxConstraints(w=600.0, 0.0<=h<=35.0)
size: Size(600.0, 35.0)

Minimal Reproduction Code

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        listTileTheme: ListTileThemeData(minTileHeight: 35),
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  Widget build(BuildContext context) {
    return const Material(
      type: MaterialType.transparency,
      child: Column(
        children: [
          IntrinsicHeight(
            child: Row(
              children: [
                Expanded(
                  child: Column(
                    children: [ListTile(title: Text('item.label'))],
                  ),
                ),
                Expanded(
                  child: Column(
                    children: [ListTile(title: Text('item.label'))],
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

Flutter Doctor Output

[✓] Flutter (Channel stable, 3.38.3, on macOS 15.6 24G84 darwin-arm64 (Rosetta), locale en-AU)
    • Flutter version 3.38.3 on channel stable at /Users/eric/development/flutter
    • Framework revision 19074d12f7 (2025-11-20)
    • Engine revision 13e658725d
    • Dart version 3.10.1
    • DevTools version 2.51.1

[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 26.1.1)
[✓] Chrome - develop for the web
[✓] Connected device (4 available)
[✓] Network resources

• No issues found!

Platform

Tested on Chrome (web)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work lista: error messageError messages from the Flutter frameworkf: material designflutter/packages/flutter/material repository.found in release: 3.38Found to occur in 3.38found in release: 3.39Found to occur in 3.39frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer versionteam-designOwned by Design Languages teamtriaged-designTriaged by Design Languages team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions