Repository navigation
[SearchAnchor] ListTile with trailing widget throws _AssertionError when closing SearchAnchor #126590
Copy link
Copy link
Closed
Labels
a: error messageError messages from the Flutter frameworkError messages from the Flutter frameworkc: crashStack traces logged to the consoleStack traces logged to the consolefound in release: 3.10Found to occur in 3.10Found to occur in 3.10found in release: 3.11Found to occur in 3.11Found to occur in 3.11frameworkflutter/packages/flutter repository. See also f: labels.flutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: material_uimaterial_ui package in flutter/packagesmaterial_ui package in flutter/packagesr: fixedIssue is closed as already fixed in a newer versionIssue is closed as already fixed in a newer version
Description
Is there an existing issue for this?
- I have searched the existing issues
- I have read the guide to filing a bug
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!Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
a: error messageError messages from the Flutter frameworkError messages from the Flutter frameworkc: crashStack traces logged to the consoleStack traces logged to the consolefound in release: 3.10Found to occur in 3.10Found to occur in 3.10found in release: 3.11Found to occur in 3.11Found to occur in 3.11frameworkflutter/packages/flutter repository. See also f: labels.flutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: material_uimaterial_ui package in flutter/packagesmaterial_ui package in flutter/packagesr: fixedIssue is closed as already fixed in a newer versionIssue is closed as already fixed in a newer version
Activity
dalenjohnson commentedon May 11, 2023
More Info:
This isn't just from the suggestionsBuilder as it also happens when you provide your own viewBuilder to the SearchAnchor. Also, wrapping the trailing widget in a SizedBox or Container widget with a defined width does not solve the issue.
SearchAnchor with viewBuilder Code
darshankawar commentedon May 12, 2023
Thanks for the report. Seeing the same behavior as reported. Steps to replicate the error is to tap on search button and then select any item from the list which leads to the error in console. Verified on both latest versions and also tried using as suggested in the error message to
Trailing widget consumes entire tile width. Please use a sized widget, or consider replacing ListTile with a custom widget, but getting the same error.stable, master flutter doctor -v
Clip search view content during animation (#126975)
Clip search view content during animation (flutter#126975)
github-actions commentedon Jun 1, 2023
This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of
flutter doctor -vand a minimal reproduction of the issue.