diff --git a/examples/widgets/raw_keyboard.dart b/examples/widgets/raw_keyboard.dart new file mode 100644 index 00000000000..0840ec6f88a --- /dev/null +++ b/examples/widgets/raw_keyboard.dart @@ -0,0 +1,78 @@ +// Copyright (c) 2015, the Flutter project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'package:sky_services/raw_keyboard/raw_keyboard.mojom.dart' as mojo; +import 'package:sky_services/sky/input_event.mojom.dart' as mojo; + +void main() { + runApp( + new MaterialApp( + title: "Hardware Key Demo", + routes: { + '/': (RouteArguments args) => const HardwareKeyDemo() + } + ) + ); +} + +class HardwareKeyDemo extends StatefulComponent { + const HardwareKeyDemo(); + HardwareKeyDemoState createState() => new HardwareKeyDemoState(); +} + +class HardwareKeyDemoState extends State implements mojo.RawKeyboardListener { + + mojo.InputEvent _event = null; + + void initState() { + mojo.RawKeyboardServiceProxy rawKeyboardService = new mojo.RawKeyboardServiceProxy.unbound(); + try { + shell.connectToService(null, rawKeyboardService); + mojo.RawKeyboardListenerStub listener = new mojo.RawKeyboardListenerStub.unbound() + ..impl = this; + rawKeyboardService.ptr.addListener(listener); + } finally { + rawKeyboardService.close(); + } + super.initState(); + } + + void onKey(mojo.InputEvent event) { + setState(() { + _event = event; + }); + } + + Widget _buildBody() { + if (_event == null) { + return new Center( + child: new Text("Press a key", style: Typography.black.display1) + ); + } + return new Column([ + new Text( + '${_event?.type}', + style: Typography.black.body2 + ), + new Text( + '${_event?.keyData?.keyCode}', + style: Typography.black.display4 + ) + ], justifyContent: FlexJustifyContent.center); + } + + Widget build(BuildContext context) { + return new Scaffold( + toolBar: new ToolBar( + center: new Text("Hardware Key Demo") + ), + body: new Material( + child: _buildBody() + ) + ); + } +}