// 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() ) ); } }