This reverts commit 12ec7dc879.
This commit is contained in:
@@ -55,7 +55,8 @@ enum KeyEventResult {
|
||||
///
|
||||
/// Returns a [KeyEventResult] that describes how, and whether, the key event
|
||||
/// was handled.
|
||||
typedef FocusOnKeyCallback = KeyEventResult Function(FocusNode node, RawKeyEvent event);
|
||||
// TODO(gspencergoog): Convert this from dynamic to KeyEventResult once migration is complete.
|
||||
typedef FocusOnKeyCallback = dynamic Function(FocusNode node, RawKeyEvent event);
|
||||
|
||||
/// An attachment point for a [FocusNode].
|
||||
///
|
||||
@@ -1673,18 +1674,33 @@ class FocusManager with DiagnosticableTreeMixin, ChangeNotifier {
|
||||
bool handled = false;
|
||||
for (final FocusNode node in <FocusNode>[_primaryFocus!, ..._primaryFocus!.ancestors]) {
|
||||
if (node.onKey != null) {
|
||||
final KeyEventResult result = node.onKey!(node, event);
|
||||
switch (result) {
|
||||
case KeyEventResult.handled:
|
||||
// TODO(gspencergoog): Convert this from dynamic to KeyEventResult once migration is complete.
|
||||
final dynamic result = node.onKey!(node, event);
|
||||
assert(
|
||||
result is bool || result is KeyEventResult,
|
||||
'Value returned from onKey handler must be a non-null bool or KeyEventResult, not ${result.runtimeType}',
|
||||
);
|
||||
if (result is KeyEventResult) {
|
||||
switch (result) {
|
||||
case KeyEventResult.handled:
|
||||
assert(_focusDebug('Node $node handled key event $event.'));
|
||||
handled = true;
|
||||
break;
|
||||
case KeyEventResult.skipRemainingHandlers:
|
||||
assert(_focusDebug('Node $node stopped key event propagation: $event.'));
|
||||
handled = false;
|
||||
break;
|
||||
case KeyEventResult.ignored:
|
||||
continue;
|
||||
}
|
||||
} else if (result is bool){
|
||||
if (result) {
|
||||
assert(_focusDebug('Node $node handled key event $event.'));
|
||||
handled = true;
|
||||
break;
|
||||
case KeyEventResult.skipRemainingHandlers:
|
||||
assert(_focusDebug('Node $node stopped key event propagation: $event.'));
|
||||
handled = false;
|
||||
break;
|
||||
case KeyEventResult.ignored:
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1596,7 +1596,7 @@ void main() {
|
||||
bool? keyEventHandled;
|
||||
await tester.pumpWidget(
|
||||
Focus(
|
||||
onKey: (_, __) => KeyEventResult.ignored, // This one does nothing.
|
||||
onKey: (_, __) => true, // This one does nothing.
|
||||
focusNode: focusNode,
|
||||
child: Container(key: key1),
|
||||
),
|
||||
@@ -1611,7 +1611,7 @@ void main() {
|
||||
Focus(
|
||||
onKey: (FocusNode node, RawKeyEvent event) { // The updated handler handles the key.
|
||||
keyEventHandled = true;
|
||||
return KeyEventResult.handled;
|
||||
return true;
|
||||
},
|
||||
focusNode: focusNode,
|
||||
child: Container(key: key1),
|
||||
|
||||
Reference in New Issue
Block a user