blob: a47743769c6094024c505f0c8c9075f00bfb8a01 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// TODO(https://fxbug.dev/84961): Fix null safety and remove this language version.
// @dart=2.9
import 'dart:ui' as ui;
import 'package:fidl_test_touch/fidl_async.dart' as test_touch;
import 'package:flutter/material.dart';
import 'package:fuchsia_services/services.dart';
import 'package:zircon/zircon.dart';
void main() {
return runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Flutter App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// Each tap down event will bump up the counter, and we change the color.
int _touchCounter = 0;
final List<MaterialColor> _colors = <MaterialColor>[
Colors.red,
Colors.orange,
Colors.yellow,
Colors.green,
Colors.blue,
Colors.purple,
];
final _responseListener = test_touch.ResponseListenerProxy();
_MyHomePageState() {
Incoming.fromSvcPath()
..connectToService(_responseListener)
..close();
// We inspect the lower-level data packets, instead of using the higher-level gesture library.
WidgetsBinding.instance.window.onPointerDataPacket =
(ui.PointerDataPacket packet) {
// Record the time when the pointer event was received.
int nowNanos = System.clockGetMonotonic();
for (ui.PointerData data in packet.data) {
print('Flutter received a pointer: ${data.toStringFull()}');
if (data.change == ui.PointerChange.down) {
setState(() {
_touchCounter++; // Trigger color change on DOWN event.
});
_respond(test_touch.PointerData(
// Notify test that input was seen.
localX: data.physicalX,
localY: data.physicalY,
timeReceived: nowNanos,
componentName: 'one-flutter'));
}
}
};
}
void _respond(test_touch.PointerData pointerData) async {
await _responseListener.respond(pointerData);
}
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: 200,
height: 200,
decoration: BoxDecoration(
color: _colors[_touchCounter % _colors.length],
shape: BoxShape.rectangle))
])));
}