Open divan opened 2 months ago
After upgrading to 3.x.x there is no way to achieve consistent field look&feel throught default Flutter's InputDecoration. Many people have code that provides InputDecoration to their fields' widgets. 3.x.x update removed this possibility.
InputDecoration
Related issues: https://github.com/oi-narendra/multiselect-dropdown/issues/144 https://github.com/oi-narendra/multiselect-dropdown/issues/150
One of the solutions in these cases is to use InputDecorator widget and wrap field into it(removing all decoration in the child).
InputDecorator
However, wrapping into InputDecorator somehow throws hard to decipher error.
Code to reproduce:
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:multi_dropdown/multi_dropdown.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp.router( title: 'Multiselect dropdown demo', debugShowCheckedModeBanner: false, themeMode: ThemeMode.dark, theme: ThemeData( primarySwatch: Colors.green, ), routerConfig: GoRouter(routes: [ GoRoute( path: '/', builder: (context, state) { return const MyHomePage(); }, ), ]), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key}); @override State<MyHomePage> createState() => _MyHomePageState(); } class User { final String name; final int id; User({required this.name, required this.id}); @override String toString() { return 'User(name: $name, id: $id)'; } } class _MyHomePageState extends State<MyHomePage> { final _formKey = GlobalKey<FormState>(); final controller = MultiSelectController<User>(); @override Widget build(BuildContext context) { var items = [ DropdownItem(label: 'Nepal', value: User(name: 'Nepal', id: 1)), DropdownItem(label: 'Australia', value: User(name: 'Australia', id: 6)), DropdownItem(label: 'India', value: User(name: 'India', id: 2)), DropdownItem(label: 'China', value: User(name: 'China', id: 3)), DropdownItem(label: 'USA', value: User(name: 'USA', id: 4)), DropdownItem(label: 'UK', value: User(name: 'UK', id: 5)), DropdownItem(label: 'Germany', value: User(name: 'Germany', id: 7)), DropdownItem(label: 'France', value: User(name: 'France', id: 8)), ]; return Scaffold( backgroundColor: Colors.white, body: SafeArea( child: Padding( padding: const EdgeInsets.all(16), child: SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), child: SizedBox( width: double.infinity, height: MediaQuery.of(context).size.height, child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ const SizedBox( height: 4, ), InputDecorator( decoration: const InputDecoration(), child: MultiDropdown<User>( items: items, controller: controller, enabled: true, searchEnabled: true, chipDecoration: const ChipDecoration( backgroundColor: Colors.yellow, wrap: true, runSpacing: 2, spacing: 10, ), fieldDecoration: FieldDecoration( hintText: 'Countries', hintStyle: const TextStyle(color: Colors.black87), prefixIcon: const Icon(CupertinoIcons.flag), showClearIcon: false, border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: Colors.grey), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: const BorderSide( color: Colors.black87, ), ), ), dropdownDecoration: const DropdownDecoration( marginTop: 2, maxHeight: 500, header: Padding( padding: EdgeInsets.all(8), child: Text( 'Select countries from the list', textAlign: TextAlign.start, style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), ), ), dropdownItemDecoration: DropdownItemDecoration( selectedIcon: const Icon(Icons.check_box, color: Colors.green), disabledIcon: Icon(Icons.lock, color: Colors.grey.shade300), ), validator: (value) { if (value == null || value.isEmpty) { return 'Please select a country'; } return null; }, onSelectionChange: (selectedItems) { debugPrint("OnSelectionChange: $selectedItems"); }, ), ), const SizedBox(height: 12), Wrap( spacing: 8, children: [ ElevatedButton( onPressed: () { if (_formKey.currentState?.validate() ?? false) { final selectedItems = controller.selectedItems; debugPrint(selectedItems.toString()); } }, child: const Text('Submit'), ), ElevatedButton( onPressed: () { controller.selectAll(); }, child: const Text('Select All'), ), ElevatedButton( onPressed: () { controller.clearAll(); }, child: const Text('Unselect All'), ), ElevatedButton( onPressed: () { controller.addItems([ DropdownItem( label: 'France', value: User(name: 'France', id: 8)), ]); }, child: const Text('Add Items'), ), ElevatedButton( onPressed: () { controller.selectWhere((element) => element.value.id == 1 || element.value.id == 2 || element.value.id == 3); }, child: const Text('Select Where'), ), ElevatedButton( onPressed: () { controller.selectAtIndex(0); }, child: const Text('Select At Index'), ), ElevatedButton( onPressed: () { controller.openDropdown(); }, child: const Text('Open/Close dropdown'), ), ], ) ], ), ), ), ), ), )); } }
Output:
Performing hot restart... Restarted application in 304ms. ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════ The following assertion was thrown during performLayout(): RenderBox.size accessed beyond the scope of resize, layout, or permitted parent access. RenderBox can always access its own size, otherwise, the only object that is allowed to read RenderBox.size is its parent, if they have said they will. It you hit this assert trying to access a child's size, pass "parentUsesSize: true" to that child's layout() in RenderConstrainedBox.performLayout. 'package:flutter/src/rendering/box.dart': Failed assertion: line 2178 pos 16: 'sizeAccessAllowed' 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.yml The relevant error-causing widget was: InputDecorator InputDecorator:file:///private/tmp/multidemo/lib/main.dart:90:23 When the exception was thrown, this was the stack: #2 RenderBox.size.<anonymous closure> (package:flutter/src/rendering/box.dart:2178:16) #3 RenderBox.size (package:flutter/src/rendering/box.dart:2199:6) #4 _RenderDecoration.computeDistanceToActualBaseline (package:flutter/src/material/input_decorator.dart:1262:100) #5 RenderBox.getDistanceToActualBaseline.<anonymous closure> (package:flutter/src/rendering/box.dart:2384:63) #6 _Baseline.memoize.ifAbsent (package:flutter/src/rendering/box.dart:1029:42) #7 _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:543:23) #8 _Baseline.memoize (package:flutter/src/rendering/box.dart:1030:18) #9 RenderBox._computeWithTimeline (package:flutter/src/rendering/box.dart:1549:32) #10 RenderBox._computeIntrinsics (package:flutter/src/rendering/box.dart:1527:26) #11 RenderBox.getDistanceToActualBaseline (package:flutter/src/rendering/box.dart:2381:12) #12 RenderProxyBoxMixin.computeDistanceToActualBaseline (package:flutter/src/rendering/proxy_box.dart:93:19) #13 RenderBox.getDistanceToActualBaseline.<anonymous closure> (package:flutter/src/rendering/box.dart:2384:63) #14 _Baseline.memoize.ifAbsent (package:flutter/src/rendering/box.dart:1029:42) #15 _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:543:23) #16 _Baseline.memoize (package:flutter/src/rendering/box.dart:1030:18) #17 RenderBox._computeWithTimeline (package:flutter/src/rendering/box.dart:1549:32) #18 RenderBox._computeIntrinsics (package:flutter/src/rendering/box.dart:1527:26) #19 RenderBox.getDistanceToActualBaseline (package:flutter/src/rendering/box.dart:2381:12) #20 RenderProxyBoxMixin.computeDistanceToActualBaseline (package:flutter/src/rendering/proxy_box.dart:93:19) #21 RenderBox.getDistanceToActualBaseline.<anonymous closure> (package:flutter/src/rendering/box.dart:2384:63) #22 _Baseline.memoize.ifAbsent (package:flutter/src/rendering/box.dart:1029:42) #23 _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:543:23) #24 _Baseline.memoize (package:flutter/src/rendering/box.dart:1030:18) #25 RenderBox._computeWithTimeline (package:flutter/src/rendering/box.dart:1549:32) #26 RenderBox._computeIntrinsics (package:flutter/src/rendering/box.dart:1527:26) #27 RenderBox.getDistanceToActualBaseline (package:flutter/src/rendering/box.dart:2381:12) #28 RenderProxyBoxMixin.computeDistanceToActualBaseline (package:flutter/src/rendering/proxy_box.dart:93:19) #29 RenderBox.getDistanceToActualBaseline.<anonymous closure> (package:flutter/src/rendering/box.dart:2384:63) #30 _Baseline.memoize.ifAbsent (package:flutter/src/rendering/box.dart:1029:42) #31 _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:543:23) #32 _Baseline.memoize (package:flutter/src/rendering/box.dart:1030:18) #33 RenderBox._computeWithTimeline (package:flutter/src/rendering/box.dart:1549:32) #34 RenderBox._computeIntrinsics (package:flutter/src/rendering/box.dart:1527:26) #35 RenderBox.getDistanceToActualBaseline (package:flutter/src/rendering/box.dart:2381:12) #36 RenderProxyBoxMixin.computeDistanceToActualBaseline (package:flutter/src/rendering/proxy_box.dart:93:19) #37 RenderBox.getDistanceToActualBaseline.<anonymous closure> (package:flutter/src/rendering/box.dart:2384:63) #38 _Baseline.memoize.ifAbsent (package:flutter/src/rendering/box.dart:1029:42) #39 _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:543:23) #40 _Baseline.memoize (package:flutter/src/rendering/box.dart:1030:18) #41 RenderBox._computeWithTimeline (package:flutter/src/rendering/box.dart:1549:32) #42 RenderBox._computeIntrinsics (package:flutter/src/rendering/box.dart:1527:26) #43 RenderBox.getDistanceToActualBaseline (package:flutter/src/rendering/box.dart:2381:12) #44 RenderProxyBoxMixin.computeDistanceToActualBaseline (package:flutter/src/rendering/proxy_box.dart:93:19) #45 RenderBox.getDistanceToActualBaseline.<anonymous closure> (package:flutter/src/rendering/box.dart:2384:63) #46 _Baseline.memoize.ifAbsent (package:flutter/src/rendering/box.dart:1029:42) #47 _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:543:23) #48 _Baseline.memoize (package:flutter/src/rendering/box.dart:1030:18) #49 RenderBox._computeWithTimeline (package:flutter/src/rendering/box.dart:1549:32) #50 RenderBox._computeIntrinsics (package:flutter/src/rendering/box.dart:1527:26) #51 RenderBox.getDistanceToActualBaseline (package:flutter/src/rendering/box.dart:2381:12) #52 RenderProxyBoxMixin.computeDistanceToActualBaseline (package:flutter/src/rendering/proxy_box.dart:93:19) #53 RenderBox.getDistanceToActualBaseline.<anonymous closure> (package:flutter/src/rendering/box.dart:2384:63) #54 _Baseline.memoize.ifAbsent (package:flutter/src/rendering/box.dart:1029:42) #55 _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:543:23) #56 _Baseline.memoize (package:flutter/src/rendering/box.dart:1030:18) #57 RenderBox._computeWithTimeline (package:flutter/src/rendering/box.dart:1549:32) #58 RenderBox._computeIntrinsics (package:flutter/src/rendering/box.dart:1527:26) #59 RenderBox.getDistanceToActualBaseline (package:flutter/src/rendering/box.dart:2381:12) #60 RenderBox.getDistanceToBaseline (package:flutter/src/rendering/box.dart:2362:16) #61 ChildLayoutHelper.getBaseline (package:flutter/src/rendering/layout_helper.dart:76:18) #62 _RenderDecoration._getBaseline (package:flutter/src/material/input_decorator.dart:910:30) #63 _RenderDecoration._layout (package:flutter/src/material/input_decorator.dart:1038:67) #64 _RenderDecoration.performLayout (package:flutter/src/material/input_decorator.dart:1299:44) #65 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #66 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61:11) #67 RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:985:73) #68 RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:1051:32) #69 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #70 RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:291:14) #71 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #72 _RenderSingleChildViewport.performLayout (package:flutter/src/widgets/single_child_scroll_view.dart:483:14) #73 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #74 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #75 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #76 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #77 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #78 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #79 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #80 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #81 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #82 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #83 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #84 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #85 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #86 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #87 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #88 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #89 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:569:11) #90 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #91 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #92 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #93 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #94 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #95 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #96 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #97 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #98 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #99 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #100 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #101 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:234:12) #102 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #103 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:234:12) #104 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #105 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:173:12) #106 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1092:7) #107 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:237:7) #108 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:404:14) #109 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #110 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #111 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #112 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #113 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1448:11) #114 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #115 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #116 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #117 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #118 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #119 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #120 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #121 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:61:11) #122 RenderStack._computeSize (package:flutter/src/rendering/stack.dart:595:43) #123 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:622:12) #124 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #125 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #126 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #127 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #128 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #129 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #130 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #131 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #132 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #133 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #134 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #135 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #136 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3728:13) #137 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #138 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #139 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #140 _RenderTheaterMixin.layoutChild (package:flutter/src/widgets/overlay.dart:1002:13) #141 _RenderTheater.performLayout (package:flutter/src/widgets/overlay.dart:1311:9) #142 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #143 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #144 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #145 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #146 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #147 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #148 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #149 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #150 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #151 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #152 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #153 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #154 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #155 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #156 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #157 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #158 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #159 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:21) #160 RenderObject.layout (package:flutter/src/rendering/object.dart:2608:7) #161 RenderView.performLayout (package:flutter/src/rendering/view.dart:281:14) #162 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2446:7) #163 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1052:18) #164 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1065:15) #165 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:602:23) #166 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1164:13) #167 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:468:5) #168 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397:15) #169 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318:9) #170 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:1040:9) #171 PlatformDispatcher.scheduleWarmUpFrame.<anonymous closure> (dart:ui/platform_dispatcher.dart:837:16) #175 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12) (elided 5 frames from class _AssertionError, class _Timer, and dart:async-patch) The following RenderObject was being processed when the exception was fired: _RenderDecoration#c72f0 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE: creator: _Decorator ← InputDecorator ← Column ← _FormScope ← WillPopScope ← Form-[LabeledGlobalKey<FormState>#a7c7b] ← SizedBox ← _SingleChildViewport ← IgnorePointer-[GlobalKey#63fc0] ← Semantics ← Listener ← _GestureSemantics ← ⋯ parentData: offset=Offset(0.0, 0.0); flex=null; fit=null (can use size) constraints: BoxConstraints(0.0<=w<=768.0, 0.0<=h<=Infinity) size: MISSING This RenderObject had the following descendants (showing up to depth 5): input: _RenderLayoutSurrogateProxyBox#ca764 relayoutBoundary=up2 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE child: RenderLeaderLayer#e84cd relayoutBoundary=up3 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE child: RenderSemanticsAnnotations#3e591 relayoutBoundary=up4 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE child: RenderMouseRegion#35c3d relayoutBoundary=up5 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE child: RenderSemanticsAnnotations#a33d4 relayoutBoundary=up6 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE helperError: RenderConstrainedBox#70726 relayoutBoundary=up2 NEEDS-PAINT container: RenderCustomPaint#6b6e4 NEEDS-LAYOUT NEEDS-PAINT ════════════════════════════════════════════════════════════════════════════════════════════════════ Another exception was thrown: RenderBox was not laid out: _RenderDecoration#c72f0 relayoutBoundary=up1 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderFlex#0f513 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderConstrainedBox#40f27 relayoutBoundary=up17 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: _RenderSingleChildViewport#fef6e relayoutBoundary=up16 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderIgnorePointer#3d171 relayoutBoundary=up15 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderSemanticsAnnotations#52c86 relayoutBoundary=up14 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderPointerListener#3a4b2 relayoutBoundary=up13 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#9aec4 relayoutBoundary=up12 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderPointerListener#a8481 relayoutBoundary=up11 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: _RenderScrollSemantics#5fddd relayoutBoundary=up10 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#03cf1 relayoutBoundary=up9 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderCustomPaint#5cb1d relayoutBoundary=up8 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderMouseRegion#25089 relayoutBoundary=up7 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderPointerListener#5ad61 relayoutBoundary=up6 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderSemanticsGestureHandler#7dfaa relayoutBoundary=up5 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderPointerListener#18e0b relayoutBoundary=up4 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#84b90 relayoutBoundary=up3 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderPadding#2cb7f relayoutBoundary=up2 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderPadding#8de36 relayoutBoundary=up1 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#84b90 relayoutBoundary=up3 NEEDS-PAINT
After upgrading to 3.x.x there is no way to achieve consistent field look&feel throught default Flutter's
InputDecoration
. Many people have code that provides InputDecoration to their fields' widgets. 3.x.x update removed this possibility.Related issues: https://github.com/oi-narendra/multiselect-dropdown/issues/144 https://github.com/oi-narendra/multiselect-dropdown/issues/150
One of the solutions in these cases is to use
InputDecorator
widget and wrap field into it(removing all decoration in the child).However, wrapping into InputDecorator somehow throws hard to decipher error.
Code to reproduce:
Output: