blob: cff1c24ddbd99d33b89b1df8c91a439a995769fe [file] [log] [blame]
// 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<HardwareKeyDemo> 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()
)
);
}
}