Skip to content

Commit c862bef

Browse files
author
flyboy
authored
Merge branch 'master' into fix/gridview_delegate
2 parents 4f0cce9 + 315a8f4 commit c862bef

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1343
-520
lines changed

.ci.yaml

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4583,7 +4583,8 @@ targets:
45834583
- bin/**
45844584
- .ci.yaml
45854585

4586-
- name: Windows build_tests_1_6
4586+
- name: Windows build_tests_1_7
4587+
bringup: true
45874588
recipe: flutter/flutter_drone
45884589
timeout: 60
45894590
properties:
@@ -4597,11 +4598,12 @@ targets:
45974598
{"dependency": "vs_build", "version": "version:vs2019"}
45984599
]
45994600
shard: build_tests
4600-
subshard: "1_6"
4601+
subshard: "1_7"
46014602
tags: >
46024603
["framework", "hostonly", "shard", "windows"]
46034604
4604-
- name: Windows build_tests_2_6
4605+
- name: Windows build_tests_2_7
4606+
bringup: true
46054607
recipe: flutter/flutter_drone
46064608
timeout: 60
46074609
properties:
@@ -4615,11 +4617,12 @@ targets:
46154617
{"dependency": "vs_build", "version": "version:vs2019"}
46164618
]
46174619
shard: build_tests
4618-
subshard: "2_6"
4620+
subshard: "2_7"
46194621
tags: >
46204622
["framework", "hostonly", "shard", "windows"]
46214623
4622-
- name: Windows build_tests_3_6
4624+
- name: Windows build_tests_3_7
4625+
bringup: true
46234626
recipe: flutter/flutter_drone
46244627
timeout: 60
46254628
properties:
@@ -4633,11 +4636,12 @@ targets:
46334636
{"dependency": "vs_build", "version": "version:vs2019"}
46344637
]
46354638
shard: build_tests
4636-
subshard: "3_6"
4639+
subshard: "3_7"
46374640
tags: >
46384641
["framework", "hostonly", "shard", "windows"]
46394642
4640-
- name: Windows build_tests_4_6
4643+
- name: Windows build_tests_4_7
4644+
bringup: true
46414645
recipe: flutter/flutter_drone
46424646
timeout: 60
46434647
properties:
@@ -4651,11 +4655,12 @@ targets:
46514655
{"dependency": "vs_build", "version": "version:vs2019"}
46524656
]
46534657
shard: build_tests
4654-
subshard: "4_6"
4658+
subshard: "4_7"
46554659
tags: >
46564660
["framework", "hostonly", "shard", "windows"]
46574661
4658-
- name: Windows build_tests_5_6
4662+
- name: Windows build_tests_5_7
4663+
bringup: true
46594664
recipe: flutter/flutter_drone
46604665
timeout: 60
46614666
properties:
@@ -4669,11 +4674,12 @@ targets:
46694674
{"dependency": "vs_build", "version": "version:vs2019"}
46704675
]
46714676
shard: build_tests
4672-
subshard: "5_6"
4677+
subshard: "5_7"
46734678
tags: >
46744679
["framework", "hostonly", "shard", "windows"]
46754680
4676-
- name: Windows build_tests_6_6
4681+
- name: Windows build_tests_6_7
4682+
bringup: true
46774683
recipe: flutter/flutter_drone
46784684
timeout: 60
46794685
properties:
@@ -4687,7 +4693,26 @@ targets:
46874693
{"dependency": "vs_build", "version": "version:vs2019"}
46884694
]
46894695
shard: build_tests
4690-
subshard: "6_6"
4696+
subshard: "6_7"
4697+
tags: >
4698+
["framework", "hostonly", "shard", "windows"]
4699+
4700+
- name: Windows build_tests_7_7
4701+
bringup: true
4702+
recipe: flutter/flutter_drone
4703+
timeout: 60
4704+
properties:
4705+
add_recipes_cq: "true"
4706+
dependencies: >-
4707+
[
4708+
{"dependency": "android_sdk", "version": "version:33v6"},
4709+
{"dependency": "chrome_and_driver", "version": "version:118.0.5993.70"},
4710+
{"dependency": "open_jdk", "version": "version:17"},
4711+
{"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"},
4712+
{"dependency": "vs_build", "version": "version:vs2019"}
4713+
]
4714+
shard: build_tests
4715+
subshard: "7_7"
46914716
tags: >
46924717
["framework", "hostonly", "shard", "windows"]
46934718

bin/internal/engine.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
eee8aeb953dfc4c7f47730582c90e84556e7974f
1+
78584fec8e5228df3ff4aae9f1a9df95ea11cd73

packages/flutter/lib/src/material/app.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,8 +1079,9 @@ class _MaterialAppState extends State<MaterialApp> {
10791079
Widget result = _buildWidgetApp(context);
10801080
result = Focus(
10811081
canRequestFocus: false,
1082-
onKey: (FocusNode node, RawKeyEvent event) {
1083-
if (event is! RawKeyDownEvent || event.logicalKey != LogicalKeyboardKey.escape) {
1082+
onKeyEvent: (FocusNode node, KeyEvent event) {
1083+
if ((event is! KeyDownEvent && event is! KeyRepeatEvent) ||
1084+
event.logicalKey != LogicalKeyboardKey.escape) {
10841085
return KeyEventResult.ignored;
10851086
}
10861087
return Tooltip.dismissAllToolTips() ? KeyEventResult.handled : KeyEventResult.ignored;

packages/flutter/lib/src/material/dropdown_menu.dart

Lines changed: 72 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -348,35 +348,54 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
348348
final GlobalKey _leadingKey = GlobalKey();
349349
late List<GlobalKey> buttonItemKeys;
350350
final MenuController _controller = MenuController();
351-
late final TextEditingController _textEditingController;
352351
late bool _enableFilter;
353352
late List<DropdownMenuEntry<T>> filteredEntries;
354353
List<Widget>? _initialMenu;
355354
int? currentHighlight;
356355
double? leadingPadding;
357356
bool _menuHasEnabledItem = false;
357+
TextEditingController? _localTextEditingController;
358+
TextEditingController get _textEditingController {
359+
return widget.controller ?? (_localTextEditingController ??= TextEditingController());
360+
}
358361

359362
@override
360363
void initState() {
361364
super.initState();
362-
_textEditingController = widget.controller ?? TextEditingController();
363365
_enableFilter = widget.enableFilter;
364366
filteredEntries = widget.dropdownMenuEntries;
365367
buttonItemKeys = List<GlobalKey>.generate(filteredEntries.length, (int index) => GlobalKey());
366368
_menuHasEnabledItem = filteredEntries.any((DropdownMenuEntry<T> entry) => entry.enabled);
367369

368370
final int index = filteredEntries.indexWhere((DropdownMenuEntry<T> entry) => entry.value == widget.initialSelection);
369371
if (index != -1) {
370-
_textEditingController.text = filteredEntries[index].label;
371-
_textEditingController.selection =
372-
TextSelection.collapsed(offset: _textEditingController.text.length);
372+
_textEditingController.value = TextEditingValue(
373+
text: filteredEntries[index].label,
374+
selection: TextSelection.collapsed(offset: filteredEntries[index].label.length),
375+
);
373376
}
374377
refreshLeadingPadding();
375378
}
376379

380+
@override
381+
void dispose() {
382+
if (_localTextEditingController != null) {
383+
debugPrint('Disposing of $_textEditingController');
384+
}
385+
_localTextEditingController?.dispose();
386+
_localTextEditingController = null;
387+
super.dispose();
388+
}
389+
377390
@override
378391
void didUpdateWidget(DropdownMenu<T> oldWidget) {
379392
super.didUpdateWidget(oldWidget);
393+
if (oldWidget.controller != widget.controller) {
394+
if (widget.controller != null) {
395+
_localTextEditingController?.dispose();
396+
_localTextEditingController = null;
397+
}
398+
}
380399
if (oldWidget.enableSearch != widget.enableSearch) {
381400
if (!widget.enableSearch) {
382401
currentHighlight = null;
@@ -394,9 +413,10 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
394413
if (oldWidget.initialSelection != widget.initialSelection) {
395414
final int index = filteredEntries.indexWhere((DropdownMenuEntry<T> entry) => entry.value == widget.initialSelection);
396415
if (index != -1) {
397-
_textEditingController.text = filteredEntries[index].label;
398-
_textEditingController.selection =
399-
TextSelection.collapsed(offset: _textEditingController.text.length);
416+
_textEditingController.value = TextEditingValue(
417+
text: filteredEntries[index].label,
418+
selection: TextSelection.collapsed(offset: filteredEntries[index].label.length),
419+
);
400420
}
401421
}
402422
}
@@ -463,7 +483,6 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
463483

464484
List<Widget> _buildButtons(
465485
List<DropdownMenuEntry<T>> filteredEntries,
466-
TextEditingController textEditingController,
467486
TextDirection textDirection,
468487
{ int? focusedIndex, bool enableScrollToHighlight = true}
469488
) {
@@ -519,9 +538,10 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
519538
trailingIcon: entry.trailingIcon,
520539
onPressed: entry.enabled
521540
? () {
522-
textEditingController.text = entry.label;
523-
textEditingController.selection =
524-
TextSelection.collapsed(offset: textEditingController.text.length);
541+
_textEditingController.value = TextEditingValue(
542+
text: entry.label,
543+
selection: TextSelection.collapsed(offset: entry.label.length),
544+
);
525545
currentHighlight = widget.enableSearch ? i : null;
526546
widget.onSelected?.call(entry.value);
527547
}
@@ -535,37 +555,43 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
535555
return result;
536556
}
537557

538-
void handleUpKeyInvoke(_) => setState(() {
539-
if (!_menuHasEnabledItem || !_controller.isOpen) {
540-
return;
541-
}
542-
_enableFilter = false;
543-
currentHighlight ??= 0;
544-
currentHighlight = (currentHighlight! - 1) % filteredEntries.length;
545-
while (!filteredEntries[currentHighlight!].enabled) {
558+
void handleUpKeyInvoke(_) {
559+
setState(() {
560+
if (!_menuHasEnabledItem || !_controller.isOpen) {
561+
return;
562+
}
563+
_enableFilter = false;
564+
currentHighlight ??= 0;
546565
currentHighlight = (currentHighlight! - 1) % filteredEntries.length;
547-
}
548-
final String currentLabel = filteredEntries[currentHighlight!].label;
549-
_textEditingController.text = currentLabel;
550-
_textEditingController.selection =
551-
TextSelection.collapsed(offset: _textEditingController.text.length);
552-
});
566+
while (!filteredEntries[currentHighlight!].enabled) {
567+
currentHighlight = (currentHighlight! - 1) % filteredEntries.length;
568+
}
569+
final String currentLabel = filteredEntries[currentHighlight!].label;
570+
_textEditingController.value = TextEditingValue(
571+
text: currentLabel,
572+
selection: TextSelection.collapsed(offset: currentLabel.length),
573+
);
574+
});
575+
}
553576

554-
void handleDownKeyInvoke(_) => setState(() {
555-
if (!_menuHasEnabledItem || !_controller.isOpen) {
556-
return;
557-
}
558-
_enableFilter = false;
559-
currentHighlight ??= -1;
560-
currentHighlight = (currentHighlight! + 1) % filteredEntries.length;
561-
while (!filteredEntries[currentHighlight!].enabled) {
577+
void handleDownKeyInvoke(_) {
578+
setState(() {
579+
if (!_menuHasEnabledItem || !_controller.isOpen) {
580+
return;
581+
}
582+
_enableFilter = false;
583+
currentHighlight ??= -1;
562584
currentHighlight = (currentHighlight! + 1) % filteredEntries.length;
563-
}
564-
final String currentLabel = filteredEntries[currentHighlight!].label;
565-
_textEditingController.text = currentLabel;
566-
_textEditingController.selection =
567-
TextSelection.collapsed(offset: _textEditingController.text.length);
568-
});
585+
while (!filteredEntries[currentHighlight!].enabled) {
586+
currentHighlight = (currentHighlight! + 1) % filteredEntries.length;
587+
}
588+
final String currentLabel = filteredEntries[currentHighlight!].label;
589+
_textEditingController.value = TextEditingValue(
590+
text: currentLabel,
591+
selection: TextSelection.collapsed(offset: currentLabel.length),
592+
);
593+
});
594+
}
569595

570596
void handlePressed(MenuController controller) {
571597
if (controller.isOpen) {
@@ -580,18 +606,10 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
580606
setState(() {});
581607
}
582608

583-
@override
584-
void dispose() {
585-
if (widget.controller == null) {
586-
_textEditingController.dispose();
587-
}
588-
super.dispose();
589-
}
590-
591609
@override
592610
Widget build(BuildContext context) {
593611
final TextDirection textDirection = Directionality.of(context);
594-
_initialMenu ??= _buildButtons(widget.dropdownMenuEntries, _textEditingController, textDirection, enableScrollToHighlight: false);
612+
_initialMenu ??= _buildButtons(widget.dropdownMenuEntries, textDirection, enableScrollToHighlight: false);
595613
final DropdownMenuThemeData theme = DropdownMenuTheme.of(context);
596614
final DropdownMenuThemeData defaults = _DropdownMenuDefaultsM3(context);
597615

@@ -610,7 +628,7 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
610628
}
611629
}
612630

613-
final List<Widget> menu = _buildButtons(filteredEntries, _textEditingController, textDirection, focusedIndex: currentHighlight);
631+
final List<Widget> menu = _buildButtons(filteredEntries, textDirection, focusedIndex: currentHighlight);
614632

615633
final TextStyle? effectiveTextStyle = widget.textStyle ?? theme.textStyle ?? defaults.textStyle;
616634

@@ -670,9 +688,10 @@ class _DropdownMenuState<T> extends State<DropdownMenu<T>> {
670688
if (currentHighlight != null) {
671689
final DropdownMenuEntry<T> entry = filteredEntries[currentHighlight!];
672690
if (entry.enabled) {
673-
_textEditingController.text = entry.label;
674-
_textEditingController.selection =
675-
TextSelection.collapsed(offset: _textEditingController.text.length);
691+
_textEditingController.value = TextEditingValue(
692+
text: entry.label,
693+
selection: TextSelection.collapsed(offset: entry.label.length),
694+
);
676695
widget.onSelected?.call(entry.value);
677696
}
678697
} else {

packages/flutter/lib/src/material/slider.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,6 @@ class _SliderState extends State<Slider> with TickerProviderStateMixin {
666666
final double lerpValue = _lerp(value);
667667
if (lerpValue != widget.value) {
668668
widget.onChanged!(lerpValue);
669-
_focusNode?.requestFocus();
670669
}
671670
}
672671

@@ -1376,8 +1375,8 @@ class _RenderSlider extends RenderBox with RelayoutWhenSystemFontsChangeMixin {
13761375
if (hovered && hoveringThumb) {
13771376
_state.overlayController.forward();
13781377
} else {
1379-
// Only remove overlay when Slider is unfocused.
1380-
if (!hasFocus) {
1378+
// Only remove overlay when Slider is inactive and unfocused.
1379+
if (!_active && !hasFocus) {
13811380
_state.overlayController.reverse();
13821381
}
13831382
}

0 commit comments

Comments
 (0)