mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

fuchsia_tester.dart still assumes Dart 1. Previously, it ran tests directly from source, flutter_platform.dart automatically runs a kernel compile when operating in Dart 2 mode, but this assumes a functional Dart SDK is available in the artifacts directly, and fuchsia_tester.dart mocks out the artifacts directory with an empty temp dir. Remaining work is: 1. Get the frontend server building as a dependency on Fuchsia. 2. Patch fuchsia_tester.dart to use a valid Dart SDK and frontend server. This also reverts migration to Dart 2 typedef syntax. This reverts commit6c56bb2
. (#18362) This reverts commit3daebd0
. (#18316)
76 lines
2.1 KiB
Dart
76 lines
2.1 KiB
Dart
// Copyright 2016 The Chromium 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:url_launcher/url_launcher.dart';
|
|
|
|
typedef Future<String> UpdateUrlFetcher();
|
|
|
|
class Updater extends StatefulWidget {
|
|
const Updater({ @required this.updateUrlFetcher, this.child, Key key })
|
|
: assert(updateUrlFetcher != null),
|
|
super(key: key);
|
|
|
|
final UpdateUrlFetcher updateUrlFetcher;
|
|
final Widget child;
|
|
|
|
@override
|
|
State createState() => new UpdaterState();
|
|
}
|
|
|
|
class UpdaterState extends State<Updater> {
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_checkForUpdates();
|
|
}
|
|
|
|
static DateTime _lastUpdateCheck;
|
|
Future<void> _checkForUpdates() async {
|
|
// Only prompt once a day
|
|
if (_lastUpdateCheck != null &&
|
|
new DateTime.now().difference(_lastUpdateCheck) < const Duration(days: 1)) {
|
|
return null; // We already checked for updates recently
|
|
}
|
|
_lastUpdateCheck = new DateTime.now();
|
|
|
|
final String updateUrl = await widget.updateUrlFetcher();
|
|
if (updateUrl != null) {
|
|
final bool wantsUpdate = await showDialog<bool>(context: context, builder: _buildDialog);
|
|
if (wantsUpdate != null && wantsUpdate)
|
|
launch(updateUrl);
|
|
}
|
|
}
|
|
|
|
Widget _buildDialog(BuildContext context) {
|
|
final ThemeData theme = Theme.of(context);
|
|
final TextStyle dialogTextStyle =
|
|
theme.textTheme.subhead.copyWith(color: theme.textTheme.caption.color);
|
|
return new AlertDialog(
|
|
title: const Text('Update Flutter Gallery?'),
|
|
content: new Text('A newer version is available.', style: dialogTextStyle),
|
|
actions: <Widget>[
|
|
new FlatButton(
|
|
child: const Text('NO THANKS'),
|
|
onPressed: () {
|
|
Navigator.pop(context, false);
|
|
},
|
|
),
|
|
new FlatButton(
|
|
child: const Text('UPDATE'),
|
|
onPressed: () {
|
|
Navigator.pop(context, true);
|
|
},
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) => widget.child;
|
|
}
|