Skip to content

Commit eb2d9de

Browse files
authored
Fix Null check operator used on a null value on TextField with contextMenuBuilder (flutter#128114)
Close flutter#128113 Fun fact: This is caught by monkey testing I have written (will soon be open sourced as well) that runs on my app! Without the fix, the test fails as expected: <details> ``` (base) � flutter git:(feat/text-field-npe) /Volumes/MyExternal/ExternalRefCode/flutter/bin/flutter test test/material/text_field_test.dart --name 'changes from default' 00:06 +0: context menu contextMenuBuilder changes from default to null ��� EXCEPTION CAUGHT BY WIDGETS LIBRARY ������������������������������������������������������������ The following _TypeError was thrown building _OverlayEntryWidget-[LabeledGlobalKey<_OverlayEntryWidgetState>#e3717](state: _OverlayEntryWidgetState#7666a): Null check operator used on a null value When the exception was thrown, this was the stack: #0 EditableTextState._createSelectionOverlay.<anonymous closure> (package:flutter/src/widgets/editable_text.dart:3331:43) #1 SelectionOverlay.showToolbar.<anonymous closure> (package:flutter/src/widgets/text_selection.dart:1357:36) #2 ContextMenuController.show.<anonymous closure> (package:flutter/src/widgets/context_menu_controller.dart:65:54) #3 _OverlayEntryWidgetState.build (package:flutter/src/widgets/overlay.dart:351:36) #4 StatefulElement.build (package:flutter/src/widgets/framework.dart:5198:27) #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5086:15) #6 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) #7 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #8 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) #9 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #10 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:6093:32) #11 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6595:17) #12 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #13 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) #14 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) #15 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #16 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) #17 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #18 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) #19 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #20 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) #21 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #22 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) #23 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #24 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) #25 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) #26 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #27 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) #28 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) #29 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #30 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) #31 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #32 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) #33 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #34 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) #35 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) #36 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #37 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) #38 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) #39 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #40 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) #41 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #42 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) #43 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) #44 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #45 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) #46 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #47 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) #48 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #49 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) #50 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) #51 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#52 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#53 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#54 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#55 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#56 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#57 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#58 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#59 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#60 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#61 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#62 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#63 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) flutter#64 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#65 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#66 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#67 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#68 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#69 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#70 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#71 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#72 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#73 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#74 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#75 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#76 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#77 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#78 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#79 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#80 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#81 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#82 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#83 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#84 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#85 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#86 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#87 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#88 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#89 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#90 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#91 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#92 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#93 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#94 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#95 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#96 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#97 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#98 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#99 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#100 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#101 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#102 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#103 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#104 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#105 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#106 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#107 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#108 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#109 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#110 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#111 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#112 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#113 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#114 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#115 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#116 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#117 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#118 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#119 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#120 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#121 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#122 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#123 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#124 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#125 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#126 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#127 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#128 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#129 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#130 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#131 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#132 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#133 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#134 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#135 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#136 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#137 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#138 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#139 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#140 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#141 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#142 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#143 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#144 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#145 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#146 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#147 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#148 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#149 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#150 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#151 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#152 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#153 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#154 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#155 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#156 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#157 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#158 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#159 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#160 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) flutter#161 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#162 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#163 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#164 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#165 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#166 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#167 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#168 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#169 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#170 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#171 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#172 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#173 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#174 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#175 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#176 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#177 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#178 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#179 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#180 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#181 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#182 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#183 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#184 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#185 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#186 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) flutter#187 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#188 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#189 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#190 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#191 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#192 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#193 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#194 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#195 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#196 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#197 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#198 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#199 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#200 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#201 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#202 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#203 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#204 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#205 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#206 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#207 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#208 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#209 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#210 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#211 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#212 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) flutter#213 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#214 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#215 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#216 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#217 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#218 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#219 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#220 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#221 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#222 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#223 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#224 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#225 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#226 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#227 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#228 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#229 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#230 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#231 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#232 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#233 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) flutter#234 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#235 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#236 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#237 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#238 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#239 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#240 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#241 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#242 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#243 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#244 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#245 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#246 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#247 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#248 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#249 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#250 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#251 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#252 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#253 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#254 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#255 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#256 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#257 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#258 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#259 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#260 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#261 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#262 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#263 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#264 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#265 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#266 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#267 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#268 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#269 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#270 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#271 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#272 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#273 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#274 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#275 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#276 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#277 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6442:14) flutter#278 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#279 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#280 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#281 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#282 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:107:11) flutter#283 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#284 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#285 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#286 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#287 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#288 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#289 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#290 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#291 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#292 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#293 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#294 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#295 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#296 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#297 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#298 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#299 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#300 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#301 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#302 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#303 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#304 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#305 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#306 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#307 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) flutter#308 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#309 StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5) flutter#310 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#311 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#312 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#313 ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5) flutter#314 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#315 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16) flutter#316 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#317 StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5) flutter#318 Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15) flutter#319 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1253:16) flutter#320 RenderObjectToWidgetElement.update (package:flutter/src/widgets/binding.dart:1230:5) flutter#321 RenderObjectToWidgetElement.performRebuild (package:flutter/src/widgets/binding.dart:1244:7) flutter#322 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) flutter#323 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2780:19) flutter#324 AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1396:19) flutter#325 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:358:5) flutter#326 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1297:15) flutter#327 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1227:9) flutter#328 AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:1246:9) flutter#331 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:68:41) flutter#332 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:1232:27) flutter#333 WidgetTester._pumpWidget (package:flutter_test/src/widget_tester.dart:587:20) flutter#334 WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:572:14) flutter#337 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:68:41) flutter#338 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:571:27) flutter#339 main.<anonymous closure>.<anonymous closure> (file:///Volumes/MyExternal/ExternalRefCode/flutter/packages/flutter/test/material/text_field_test.dart:15687:20) <asynchronous suspension> <asynchronous suspension> (elided 5 frames from dart:async and package:stack_trace) ���������������������������������������������������������������������������������������������������� 00:06 +0 -1: context menu contextMenuBuilder changes from default to null [E] Test failed. See exception logs above. The test description was: contextMenuBuilder changes from default to null To run this test again: /Volumes/MyExternal/ExternalRefCode/flutter/bin/cache/dart-sdk/bin/dart test /Volumes/MyExternal/ExternalRefCode/flutter/packages/flutter/test/material/text_field_test.dart -p vm --plain-name 'context menu contextMenuBuilder changes from default to null' 00:06 +0 -1: Some tests failed. (base) � flutter git:(feat/text-field-npe) ``` </details>
1 parent 7e87650 commit eb2d9de

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

packages/flutter/lib/src/widgets/editable_text.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -3312,6 +3312,7 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
33123312
}
33133313

33143314
TextSelectionOverlay _createSelectionOverlay() {
3315+
final EditableTextContextMenuBuilder? contextMenuBuilder = widget.contextMenuBuilder;
33153316
final TextSelectionOverlay selectionOverlay = TextSelectionOverlay(
33163317
clipboardStatus: clipboardStatus,
33173318
context: context,
@@ -3325,10 +3326,10 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
33253326
selectionDelegate: this,
33263327
dragStartBehavior: widget.dragStartBehavior,
33273328
onSelectionHandleTapped: widget.onSelectionHandleTapped,
3328-
contextMenuBuilder: widget.contextMenuBuilder == null
3329+
contextMenuBuilder: contextMenuBuilder == null
33293330
? null
33303331
: (BuildContext context) {
3331-
return widget.contextMenuBuilder!(
3332+
return contextMenuBuilder(
33323333
context,
33333334
this,
33343335
);

packages/flutter/test/material/text_field_test.dart

+43
Original file line numberDiff line numberDiff line change
@@ -15661,6 +15661,49 @@ void main() {
1566115661
},
1566215662
skip: kIsWeb, // [intended] on web the browser handles the context menu.
1566315663
);
15664+
15665+
testWidgets('contextMenuBuilder changes from default to null', (WidgetTester tester) async {
15666+
final GlobalKey key = GlobalKey();
15667+
final TextEditingController controller = TextEditingController(text: '');
15668+
await tester.pumpWidget(MaterialApp(home: Material(child: TextField(key: key, controller: controller))));
15669+
15670+
await tester.pump(); // Wait for autofocus to take effect.
15671+
15672+
// Long-press to bring up the context menu.
15673+
final Finder textFinder = find.byType(EditableText);
15674+
await tester.longPress(textFinder);
15675+
tester.state<EditableTextState>(textFinder).showToolbar();
15676+
await tester.pump();
15677+
15678+
expect(find.byType(AdaptiveTextSelectionToolbar), findsOneWidget);
15679+
15680+
// Set contextMenuBuilder to null.
15681+
await tester.pumpWidget(
15682+
MaterialApp(
15683+
home: Material(
15684+
child: TextField(
15685+
key: key,
15686+
controller: controller,
15687+
contextMenuBuilder: null,
15688+
),
15689+
),
15690+
),
15691+
);
15692+
15693+
// Trigger build one more time...
15694+
await tester.pumpWidget(
15695+
MaterialApp(
15696+
home: Material(
15697+
child: Padding(
15698+
padding: EdgeInsets.zero,
15699+
child: TextField(key: key, controller: controller, contextMenuBuilder: null),
15700+
),
15701+
),
15702+
),
15703+
);
15704+
},
15705+
skip: kIsWeb, // [intended] on web the browser handles the context menu.
15706+
);
1566415707
});
1566515708

1566615709
group('magnifier builder', () {

0 commit comments

Comments
 (0)