Skip to content

[SearchAnchor] ListTile with trailing widget throws _AssertionError when closing SearchAnchor #126590

@dalenjohnson

Description

@dalenjohnson

Is there an existing issue for this?

Steps to reproduce

In the sample code from the SearchAnchor.2.dart add a trailing widget to the ListTile in the SearchAnchor suggestionsBuilder and it throws an _AssertionError when closing the search view.

Expected results

Expect to be able to have a trailing widget in a ListTile built by the suggestionsBuilder of the SearchAnchor.

Actual results

Throws the following error:

_AssertionError ('package:flutter/src/material/list_tile.dart': Failed assertion: line 1323 pos 7: 'tileWidth != trailingSize.width || tileWidth == 0.0': Trailing widget consumes entire tile width. Please use a sized widget, or consider replacing ListTile with a custom widget (see https://api.flutter.dev/flutter/material/ListTile-class.html#material.ListTile.4))

Code sample

Code sample
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';

/// Flutter code sample for [SearchAnchor].

void main() => runApp(const SearchBarApp());

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

  @override
  State<SearchBarApp> createState() => _SearchBarAppState();
}

class _SearchBarAppState extends State<SearchBarApp> {
  final SearchController controller = SearchController();

  @override
  Widget build(BuildContext context) {
    final ThemeData themeData = ThemeData(useMaterial3: true);

    return MaterialApp(
      theme: themeData,
      home: Scaffold(
        appBar: AppBar(title: const Text('Search Anchor Sample')),
        body: Column(
          children: <Widget>[
            SearchAnchor(
                searchController: controller,
                builder: (BuildContext context, SearchController controller) {
                  return IconButton(
                    icon: const Icon(Icons.search),
                    onPressed: () {
                      controller.openView();
                    },
                  );
                },
                suggestionsBuilder:
                    (BuildContext context, SearchController controller) {
                  return List<ListTile>.generate(5, (int index) {
                    final String item = 'item $index';
                    return ListTile(
                      title: Text(item),
                      // Below is the one line changed from the example: search_anchor.2.dart
                      // https://github.com/flutter/flutter/blob/master/examples/api/lib/material/search_anchor/search_anchor.2.dart
                      trailing: const Icon(Icons.chevron_right),
                      onTap: () {
                        setState(() {
                          controller.closeView(item);
                        });
                      },
                    );
                  });
                }),
            Center(
              child: controller.text.isEmpty
                  ? const Text('No item selected')
                  : Text('Selected item: ${controller.value.text}'),
            ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

No response

Logs

Logs
Failed assertion: line 1323 pos 7: 'tileWidth != trailingSize.width || tileWidth == 0.0'

Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=2_bug.md

The relevant error-causing widget was:
  ListTile
  ListTile:file:///Users/dalenjohnson/Developer/Projects/Flutter%20Empty/search_anchor_list_title_trailing_test/lib/main.dart:45:28

When the exception was thrown, this was the stack:
#2      _RenderListTile.performLayout (package:flutter/src/material/list_tile.dart:1323:7)
list_tile.dart:1323
#3      RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#4      RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#5      RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
shifted_box.dart:238
#6      RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#7      RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#8      RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:238:12)
shifted_box.dart:238
#9      RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#10     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#11     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#12     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#13     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#14     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#15     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#16     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#17     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#18     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#19     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#20     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#21     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#22     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#23     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#24     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#25     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#26     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#27     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#28     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#29     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#30     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#31     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#32     RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:213:28)
sliver_list.dart:213
#33     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#34     RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:139:12)
sliver_padding.dart:139
#35     RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:361:11)
sliver_padding.dart:361
#36     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#37     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:534:13)
viewport.dart:534
#38     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1511:12)
viewport.dart:1511
#39     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1420:20)
viewport.dart:1420
#40     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#41     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#42     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#43     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#44     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#45     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#46     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#47     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#48     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#49     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#50     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#51     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#52     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#53     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#54     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#55     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#56     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#57     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#58     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#59     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#60     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#61     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#62     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#63     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:52:11)
layout_helper.dart:52
#64     RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:868:45)
flex.dart:868
#65     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:903:32)
flex.dart:903
#66     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#67     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#68     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#69     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#70     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#71     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#72     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#73     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#75     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:554:11)
custom_paint.dart:554
#76     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#77     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#78     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#79     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1449:11)
proxy_box.dart:1449
#80     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#81     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#82     RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:297:14)
proxy_box.dart:297
#83     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#84     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#85     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:122:14)
proxy_box.dart:122
#86     RenderObject.layout (package:flutter/src/rendering/object.dart:2395:7)
object.dart:2395
#87     RenderBox.layout (package:flutter/src/rendering/box.dart:2386:11)
box.dart:2386
#88     RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:438:14)
shifted_box.dart:438
#89     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2234:7)
object.dart:2234
#90     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1016:18)
object.dart:1016
#91     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:492:19)
binding.dart:492
#92     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:905:13)
binding.dart:905
#93     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:358:5)
binding.dart:358
#94     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1284:15)
binding.dart:1284
#95     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1214:9)
binding.dart:1214
#96     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1072:5)
binding.dart:1072
#97     _invoke (dart:ui/hooks.dart:142:13)
hooks.dart:142
#98     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:359:5)
platform_dispatcher.dart:359
#99     _drawFrame (dart:ui/hooks.dart:112:31)
hooks.dart:112
(elided 2 frames from class _AssertionError)
(elided:2

The following RenderObject was being processed when the exception was fired: _RenderListTile#bdbd6 relayoutBoundary=up12 NEEDS-PAINT:
  creator: _ListTile ← IconButtonTheme ← IconTheme ← Builder ← MediaQuery ← Padding ← SafeArea ←
    Builder ← Padding-[GlobalKey#6ade2] ← Ink ← Semantics ← Listener ← ⋯
  parentData: offset=Offset(16.0, 0.0) (can use size)
  constraints: BoxConstraints(w=21.6, 0.0<=h<=Infinity)
  size: Size(24.0, 136.0)
This RenderObject had the following descendants (showing up to depth 5):
    title: RenderParagraph#83259 relayoutBoundary=up13 NEEDS-PAINT
      text: TextSpan
    trailing: RenderSemanticsAnnotations#b31f9 relayoutBoundary=up13 NEEDS-PAINT
      child: RenderExcludeSemantics#0dcba relayoutBoundary=up14 NEEDS-PAINT
        child: RenderConstrainedBox#8b00f relayoutBoundary=up15 NEEDS-PAINT
          child: RenderPositionedBox#651a1 NEEDS-PAINT
            child: RenderParagraph#9243c relayoutBoundary=up1 NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════════════════════════

Flutter Doctor output

Doctor output
[✓] Flutter (Channel stable, 3.10.0, on macOS 13.3.1 22E772610a darwin-arm64, locale en-US)
    • Flutter version 3.10.0 on channel stable at /Users/dalenjohnson/Developer/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 84a1e904f4 (2 days ago), 2023-05-09 07:41:44 -0700
    • Engine revision d44b5a94c9
    • Dart version 3.0.0
    • DevTools version 2.23.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/dalenjohnson/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14E222b
    • CocoaPods version 1.12.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] VS Code (version 1.78.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.64.0

[✓] Connected device (3 available)
    • iPhone 14 Pro Max (mobile) • 9B35DE3E-8844-43EA-ABC2-D440C9A957EE • ios            • com.apple.CoreSimulator.SimRuntime.iOS-16-4 (simulator)
    • macOS (desktop)            • macos                                • darwin-arm64   • macOS 13.3.1 22E772610a darwin-arm64
    • Chrome (web)               • chrome                               • web-javascript • Google Chrome 113.0.5672.92

[✓] Network resources
    • All expected network resources are available.

• No issues found!

Metadata

Metadata

Assignees

Labels

a: error messageError messages from the Flutter frameworkc: crashStack traces logged to the consolef: material designflutter/packages/flutter/material repository.found in release: 3.10Found to occur in 3.10found in release: 3.11Found to occur in 3.11frameworkflutter/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 version

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions