blob: 9d03adb9138a9152878ff2a2ea8745a1f5875216 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_driver/driver_extension.dart';
import 'package:device_info/device_info.dart';
import './image_page.dart';
import './page.dart';
final List<PageWidget> _allPages = <PageWidget>[
const ImagePage(),
];
void main() {
enableFlutterDriverExtension(handler: driverDataHandler.handleMessage);
runApp(_MyApp());
}
class _MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Screenshot Tests',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const _MyHomePage(title: 'Screenshot Tests Home Page'),
);
}
}
class _MyHomePage extends StatefulWidget {
const _MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<_MyHomePage> {
@override
void initState() {
driverDataHandler.handlerCompleter.complete(_handleDriverMessage);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ListView.builder(
itemCount: _allPages.length,
itemBuilder: (_, int index) => ListTile(
title: Text(_allPages[index].title, key: _allPages[index].key),
onTap: () => _pushPage(context, _allPages[index]),
),
),
);
}
void _pushPage(BuildContext context, PageWidget page) {
Navigator.of(context).push(MaterialPageRoute<void>(
builder: (_) => page,
));
}
Future<String> _handleDriverMessage(String message) async {
switch (message) {
case 'device_model':
final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
switch (Theme.of(context).platform) {
case TargetPlatform.iOS:
final IosDeviceInfo iosDeviceInfo = await deviceInfo.iosInfo;
if (iosDeviceInfo.isPhysicalDevice) {
return iosDeviceInfo.utsname.machine;
}
return 'sim_' + iosDeviceInfo.name;
case TargetPlatform.android:
return (await deviceInfo.androidInfo).model;
case TargetPlatform.fuchsia:
return 'fuchsia';
case TargetPlatform.macOS:
case TargetPlatform.linux:
case TargetPlatform.windows:
return 'unsupported';
break;
}
assert(false, 'Unhandled Theme target platform ${Theme.of(context).platform}.');
return 'unsupported';
}
return 'unknown message: "$message"';
}
}
class _FutureDataHandler {
final Completer<DataHandler> handlerCompleter = Completer<DataHandler>();
Future<String> handleMessage(String message) async {
final DataHandler handler = await handlerCompleter.future;
return handler(message);
}
}
_FutureDataHandler driverDataHandler = _FutureDataHandler();