Created
February 2, 2021 19:31
-
-
Save gaetschwartz/7cf05a7907a1de9a4c28395a264e0897 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Flutter code sample for LogicalKeyboardKey | |
import 'package:flutter/foundation.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:flutter/services.dart'; | |
void main() => runApp(MyApp()); | |
/// This is the main application widget. | |
class MyApp extends StatelessWidget { | |
static const String _title = 'Flutter Code Sample'; | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
title: _title, | |
home: Scaffold( | |
appBar: AppBar(title: const Text(_title)), | |
body: MyStatefulWidget(), | |
), | |
); | |
} | |
} | |
/// This is the stateful widget that the main application instantiates. | |
class MyStatefulWidget extends StatefulWidget { | |
MyStatefulWidget({Key key}) : super(key: key); | |
@override | |
_MyStatefulWidgetState createState() => _MyStatefulWidgetState(); | |
} | |
/// This is the private State class that goes with MyStatefulWidget. | |
class _MyStatefulWidgetState extends State<MyStatefulWidget> { | |
// 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(() { | |
_message = (event.isControlPressed ? 'CTRL + ' : '') + | |
"0x" + | |
event.logicalKey.keyId.toRadixString(16) + | |
'\n' + | |
event.logicalKey.toString(); | |
}); | |
print("0x" + event.logicalKey.keyId.toRadixString(16)); | |
} | |
@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'); | |
}, | |
), | |
), | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment