[Windows, Keyboard] Fix logical key for PrintScreen (#94454)

This commit is contained in:
Tong Mu 2021-12-01 14:24:04 -08:00 committed by GitHub
parent 418cd95661
commit 32d78ab40c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 39 additions and 132 deletions

View file

@ -46,75 +46,11 @@ abstract class KeyboardKey with Diagnosticable {
/// look at the physical key to make sure that regardless of the character the
/// key produces, you got the key that is in that location on the keyboard.
///
/// {@tool dartpad --template=stateful_widget_scaffold}
/// {@tool dartpad}
/// This example shows how to detect if the user has selected the logical "Q"
/// key.
///
/// ```dart imports
/// import 'package:flutter/foundation.dart';
/// import 'package:flutter/services.dart';
/// ```
///
/// ```dart
/// // The node used to request the keyboard focus.
/// final FocusNode _focusNode = FocusNode();
/// // The message to display.
/// String? _message;
///
/// // Focus nodes need to be disposed.
/// @override
/// void dispose() {
/// _focusNode.dispose();
/// super.dispose();
/// }
///
/// // Handles the key events from the RawKeyboardListener and update the
/// // _message.
/// void _handleKeyEvent(RawKeyEvent event) {
/// setState(() {
/// if (event.logicalKey == LogicalKeyboardKey.keyQ) {
/// _message = 'Pressed the "Q" key!';
/// } else {
/// if (kReleaseMode) {
/// _message = 'Not a Q: Pressed 0x${event.logicalKey.keyId.toRadixString(16)}';
/// } else {
/// // The debugName will only print useful information in debug mode.
/// _message = 'Not a Q: Pressed ${event.logicalKey.debugName}';
/// }
/// }
/// });
/// }
///
/// @override
/// Widget build(BuildContext context) {
/// final TextTheme textTheme = Theme.of(context).textTheme;
/// return Container(
/// color: Colors.white,
/// alignment: Alignment.center,
/// child: DefaultTextStyle(
/// style: textTheme.headline4!,
/// child: RawKeyboardListener(
/// focusNode: _focusNode,
/// onKey: _handleKeyEvent,
/// child: AnimatedBuilder(
/// animation: _focusNode,
/// builder: (BuildContext context, Widget? child) {
/// if (!_focusNode.hasFocus) {
/// return GestureDetector(
/// onTap: () {
/// FocusScope.of(context).requestFocus(_focusNode);
/// },
/// child: const Text('Tap to focus'),
/// );
/// }
/// return Text(_message ?? 'Press a key');
/// },
/// ),
/// ),
/// ),
/// );
/// }
/// ```
/// ** See code in examples/api/lib/services/keyboard_key/logical_keyboard_key.0.dart **
/// {@end-tool}
/// See also:
///
@ -318,9 +254,9 @@ class LogicalKeyboardKey extends KeyboardKey {
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(StringProperty('keyId', '0x${keyId.toRadixString(16).padLeft(8, '0')}', showName: true));
properties.add(StringProperty('keyLabel', keyLabel, showName: true));
properties.add(StringProperty('debugName', debugName, showName: true, defaultValue: null));
properties.add(StringProperty('keyId', '0x${keyId.toRadixString(16).padLeft(8, '0')}'));
properties.add(StringProperty('keyLabel', keyLabel));
properties.add(StringProperty('debugName', debugName, defaultValue: null));
}
@@@MASK_CONSTANTS@@@
@ -365,69 +301,11 @@ class LogicalKeyboardKey extends KeyboardKey {
/// looking for "the key next to the TAB key", since on a French keyboard,
/// the key next to the TAB key has an "A" on it.
///
/// {@tool dartpad --template=stateful_widget_scaffold}
/// {@tool dartpad}
/// This example shows how to detect if the user has selected the physical key
/// to the right of the CAPS LOCK key.
///
/// ```dart imports
/// import 'package:flutter/services.dart';
/// ```
///
/// ```dart
/// // The node used to request the keyboard focus.
/// final FocusNode _focusNode = FocusNode();
/// // The message to display.
/// String? _message;
///
/// // Focus nodes need to be disposed.
/// @override
/// void dispose() {
/// _focusNode.dispose();
/// super.dispose();
/// }
///
/// // Handles the key events from the RawKeyboardListener and update the
/// // _message.
/// void _handleKeyEvent(RawKeyEvent event) {
/// setState(() {
/// if (event.physicalKey == PhysicalKeyboardKey.keyA) {
/// _message = 'Pressed the key next to CAPS LOCK!';
/// } else {
/// _message = 'Wrong key.';
/// }
/// });
/// }
///
/// @override
/// Widget build(BuildContext context) {
/// final TextTheme textTheme = Theme.of(context).textTheme;
/// return Container(
/// color: Colors.white,
/// alignment: Alignment.center,
/// child: DefaultTextStyle(
/// style: textTheme.headline4!,
/// child: RawKeyboardListener(
/// focusNode: _focusNode,
/// onKey: _handleKeyEvent,
/// child: AnimatedBuilder(
/// animation: _focusNode,
/// builder: (BuildContext context, Widget? child) {
/// if (!_focusNode.hasFocus) {
/// return GestureDetector(
/// onTap: () {
/// FocusScope.of(context).requestFocus(_focusNode);
/// },
/// child: const Text('Tap to focus'),
/// );
/// }
/// return Text(_message ?? 'Press a key');
/// },
/// ),
/// ),
/// ),
/// );
/// }
/// ```
/// ** See code in examples/api/lib/services/keyboard_key/physical_keyboard_key.0.dart **
/// {@end-tool}
///
/// See also:
@ -483,8 +361,8 @@ class PhysicalKeyboardKey extends KeyboardKey {
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(StringProperty('usbHidUsage', '0x${usbHidUsage.toRadixString(16).padLeft(8, '0')}', showName: true));
properties.add(StringProperty('debugName', debugName, showName: true, defaultValue: null));
properties.add(StringProperty('usbHidUsage', '0x${usbHidUsage.toRadixString(16).padLeft(8, '0')}'));
properties.add(StringProperty('debugName', debugName, defaultValue: null));
}
// Key constants for all keyboard keys in the USB HID specification at the

View file

@ -3075,6 +3075,9 @@
"gtk": [
"3270_PrintScreen"
],
"windows": [
"SNAPSHOT"
],
"android": [
"SYSRQ"
],
@ -3086,6 +3089,9 @@
"gtk": [
64797
],
"windows": [
44
],
"android": [
120
],

View file

@ -80,6 +80,17 @@
"xkb": 641
}
},
"MicrophoneMuteToggle": {
"names": {
"name": "MicrophoneMuteToggle",
"chromium": "MicrophoneMuteToggle"
},
"scanCodes": {
"usb": 24,
"linux": 248,
"xkb": 256
}
},
"Sleep": {
"names": {
"name": "Sleep",

View file

@ -27,7 +27,6 @@
"Select": ["SELECT"],
"Print": ["PRINT"],
"Execute": ["EXECUTE"],
"Snapshot": ["SNAPSHOT"],
"Insert": ["INSERT"],
"Delete": ["DELETE"],
"Help": ["HELP"],
@ -36,6 +35,7 @@
"ContextMenu": ["APPS"],
"PageDown": ["NEXT"],
"PageUp": ["PRIOR"],
"PrintScreen": ["SNAPSHOT"],
"Numpad0": ["NUMPAD0"],
"Numpad1": ["NUMPAD1"],
"Numpad2": ["NUMPAD2"],

View file

@ -3600,6 +3600,12 @@ class PhysicalKeyboardKey extends KeyboardKey {
/// See the function [RawKeyEvent.physicalKey] for more information.
static const PhysicalKeyboardKey privacyScreenToggle = PhysicalKeyboardKey(0x00000017);
/// Represents the location of the "Microphone Mute Toggle" key on a
/// generalized keyboard.
///
/// See the function [RawKeyEvent.physicalKey] for more information.
static const PhysicalKeyboardKey microphoneMuteToggle = PhysicalKeyboardKey(0x00000018);
/// Represents the location of the "Sleep" key on a generalized keyboard.
///
/// See the function [RawKeyEvent.physicalKey] for more information.
@ -5031,6 +5037,7 @@ class PhysicalKeyboardKey extends KeyboardKey {
0x00000015: resume,
0x00000016: turbo,
0x00000017: privacyScreenToggle,
0x00000018: microphoneMuteToggle,
0x00010082: sleep,
0x00010083: wakeUp,
0x000100b5: displayToggleIntExt,
@ -5304,6 +5311,7 @@ class PhysicalKeyboardKey extends KeyboardKey {
0x00000015: 'Resume',
0x00000016: 'Turbo',
0x00000017: 'Privacy Screen Toggle',
0x00000018: 'Microphone Mute Toggle',
0x00010082: 'Sleep',
0x00010083: 'Wake Up',
0x000100b5: 'Display Toggle Int Ext',

View file

@ -784,6 +784,7 @@ const Map<int, PhysicalKeyboardKey> kFuchsiaToPhysicalKey = <int, PhysicalKeyboa
0x00000015: PhysicalKeyboardKey.resume,
0x00000016: PhysicalKeyboardKey.turbo,
0x00000017: PhysicalKeyboardKey.privacyScreenToggle,
0x00000018: PhysicalKeyboardKey.microphoneMuteToggle,
0x00010082: PhysicalKeyboardKey.sleep,
0x00010083: PhysicalKeyboardKey.wakeUp,
0x000100b5: PhysicalKeyboardKey.displayToggleIntExt,
@ -2108,6 +2109,7 @@ const Map<int, PhysicalKeyboardKey> kLinuxToPhysicalKey = <int, PhysicalKeyboard
0x000000f2: PhysicalKeyboardKey.save,
0x000000f3: PhysicalKeyboardKey.launchDocuments,
0x000000fc: PhysicalKeyboardKey.brightnessAuto,
0x00000100: PhysicalKeyboardKey.microphoneMuteToggle,
0x0000016e: PhysicalKeyboardKey.info,
0x00000172: PhysicalKeyboardKey.programGuide,
0x0000017a: PhysicalKeyboardKey.closedCaptionToggle,
@ -2637,6 +2639,7 @@ const Map<String, PhysicalKeyboardKey> kWebToPhysicalKey = <String, PhysicalKeyb
'MediaTrackPrevious': PhysicalKeyboardKey.mediaTrackPrevious,
'MetaLeft': PhysicalKeyboardKey.metaLeft,
'MetaRight': PhysicalKeyboardKey.metaRight,
'MicrophoneMuteToggle': PhysicalKeyboardKey.microphoneMuteToggle,
'Minus': PhysicalKeyboardKey.minus,
'New': PhysicalKeyboardKey.newKey,
'NonConvert': PhysicalKeyboardKey.nonConvert,
@ -2806,6 +2809,7 @@ const Map<int, LogicalKeyboardKey> kWindowsToLogicalKey = <int, LogicalKeyboardK
41: LogicalKeyboardKey.select,
42: LogicalKeyboardKey.print,
43: LogicalKeyboardKey.execute,
44: LogicalKeyboardKey.printScreen,
45: LogicalKeyboardKey.insert,
46: LogicalKeyboardKey.delete,
47: LogicalKeyboardKey.help,