Unverified Commit 83986acb authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Add a real-er web restart, doctor, workflow (#33786)

parent 6d554827
...@@ -12,7 +12,7 @@ dependencies: ...@@ -12,7 +12,7 @@ dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -65,4 +65,4 @@ dependencies: ...@@ -65,4 +65,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: 5cc4 # PUBSPEC CHECKSUM: f3c5
...@@ -43,7 +43,7 @@ dev_dependencies: ...@@ -43,7 +43,7 @@ dev_dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -82,4 +82,4 @@ flutter: ...@@ -82,4 +82,4 @@ flutter:
- packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/people/square/ali.png
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
# PUBSPEC CHECKSUM: f699 # PUBSPEC CHECKSUM: f69a
...@@ -43,7 +43,7 @@ dev_dependencies: ...@@ -43,7 +43,7 @@ dev_dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -79,4 +79,4 @@ dev_dependencies: ...@@ -79,4 +79,4 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: f699 # PUBSPEC CHECKSUM: f69a
...@@ -16,7 +16,7 @@ dependencies: ...@@ -16,7 +16,7 @@ dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -73,4 +73,4 @@ dependencies: ...@@ -73,4 +73,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: ce27 # PUBSPEC CHECKSUM: 1128
...@@ -7,7 +7,7 @@ environment: ...@@ -7,7 +7,7 @@ environment:
dependencies: dependencies:
path: 1.6.2 path: 1.6.2
args: 1.5.1 args: 1.5.2
meta: 1.1.6 meta: 1.1.6
process: 3.0.9 process: 3.0.9
platform: 2.2.0 platform: 2.2.0
...@@ -64,7 +64,7 @@ dependencies: ...@@ -64,7 +64,7 @@ dependencies:
yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies: dev_dependencies:
mockito: 4.0.0 mockito: 4.1.0
test_api: 0.2.5 test_api: 0.2.5
# PUBSPEC CHECKSUM: 7f9d # PUBSPEC CHECKSUM: ee9f
// Copyright 2019 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 'package:flutter_devicelab/framework/framework.dart';
import 'package:flutter_devicelab/tasks/web_dev_mode_tests.dart';
Future<void> main() async {
await task(createWebDevModeTest());
}
// Copyright 2019 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 'package:flutter_devicelab/framework/framework.dart';
import 'package:flutter_devicelab/tasks/web_dev_mode_tests.dart';
Future<void> main() async {
await task(createWebDevModeTest());
}
// Copyright 2019 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 'package:flutter_devicelab/framework/framework.dart';
import 'package:flutter_devicelab/tasks/web_dev_mode_tests.dart';
Future<void> main() async {
await task(createWebDevModeTest());
}
// Copyright 2019 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 'dart:convert';
import 'dart:io';
import 'package:path/path.dart' as path;
import '../framework/framework.dart';
import '../framework/utils.dart';
final Directory _editedFlutterGalleryDir = dir(path.join(Directory.systemTemp.path, 'edited_flutter_gallery'));
final Directory flutterGalleryDir = dir(path.join(flutterDirectory.path, 'examples/flutter_gallery'));
TaskFunction createWebDevModeTest() {
return () async {
final List<String> options = <String>[
'--hot', '-d', 'web', '--verbose', '--resident', '--target=lib/main_web.dart',
];
setLocalEngineOptionIfNecessary(options);
int hotRestartCount = 0;
await inDirectory<void>(flutterDirectory, () async {
rmTree(_editedFlutterGalleryDir);
mkdirs(_editedFlutterGalleryDir);
recursiveCopy(flutterGalleryDir, _editedFlutterGalleryDir);
await inDirectory<void>(_editedFlutterGalleryDir, () async {
{
final Process packagesGet = await startProcess(
path.join(flutterDirectory.path, 'bin', 'flutter'),
<String>['packages', 'get'],
environment: <String, String>{
'FLUTTER_WEB': 'true',
},
);
await packagesGet.exitCode;
final Process process = await startProcess(
path.join(flutterDirectory.path, 'bin', 'flutter'),
<String>['run']..addAll(options),
environment: <String, String>{
'FLUTTER_WEB': 'true',
},
);
final Completer<void> stdoutDone = Completer<void>();
final Completer<void> stderrDone = Completer<void>();
process.stdout
.transform<String>(utf8.decoder)
.transform<String>(const LineSplitter())
.listen((String line) {
if (line.contains('To hot restart')) {
process.stdin.write('R');
}
if (line.contains('Restarted')) {
if (hotRestartCount == 0) {
// Update the file and reload again.
final File appDartSource = file(path.join(
_editedFlutterGalleryDir.path, 'lib/gallery/app.dart',
));
appDartSource.writeAsStringSync(
appDartSource.readAsStringSync().replaceFirst(
"'Flutter Gallery'", "'Updated Flutter Gallery'",
)
);
process.stdin.writeln('R');
++hotRestartCount;
} else {
// Quit after second hot restart.
process.stdin.writeln('q');
}
}
print('stdout: $line');
}, onDone: () {
stdoutDone.complete();
});
process.stderr
.transform<String>(utf8.decoder)
.transform<String>(const LineSplitter())
.listen((String line) {
print('stderr: $line');
}, onDone: () {
stderrDone.complete();
});
await Future.wait<void>(<Future<void>>[
stdoutDone.future,
stderrDone.future,
]);
await process.exitCode;
}
// Start `flutter run` again to make sure it loads from the previous
// state. dev compilers loads up from previously compiled JavaScript.
{
final Process process = await startProcess(
path.join(flutterDirectory.path, 'bin', 'flutter'),
<String>['run']..addAll(options),
environment: <String, String>{
'FLUTTER_WEB': 'true',
},
);
final Completer<void> stdoutDone = Completer<void>();
final Completer<void> stderrDone = Completer<void>();
process.stdout
.transform<String>(utf8.decoder)
.transform<String>(const LineSplitter())
.listen((String line) {
if (line.contains('To hot restart')) {
process.stdin.write('R');
}
if (line.contains('Restarted')) {
process.stdin.writeln('q');
}
print('stdout: $line');
}, onDone: () {
stdoutDone.complete();
});
process.stderr
.transform<String>(utf8.decoder)
.transform<String>(const LineSplitter())
.listen((String line) {
print('stderr: $line');
}, onDone: () {
stderrDone.complete();
});
await Future.wait<void>(<Future<void>>[
stdoutDone.future,
stderrDone.future,
]);
await process.exitCode;
}
});
});
if (hotRestartCount != 1) {
return TaskResult.failure(null);
}
return TaskResult.success(null);
};
}
...@@ -125,6 +125,13 @@ tasks: ...@@ -125,6 +125,13 @@ tasks:
stage: devicelab_win stage: devicelab_win
required_agent_capabilities: ["windows/android"] required_agent_capabilities: ["windows/android"]
windows_chrome_dev_mode:
description: >
Run flutter web on the devicelab and hot restart.
stage: devicelab_win
required_agent_capabilities: ["windows/android"]
flaky: true
# Android on-device tests # Android on-device tests
complex_layout_scroll_perf__timeline_summary: complex_layout_scroll_perf__timeline_summary:
...@@ -324,6 +331,13 @@ tasks: ...@@ -324,6 +331,13 @@ tasks:
stage: devicelab stage: devicelab
required_agent_capabilities: ["linux/android"] required_agent_capabilities: ["linux/android"]
linux_chrome_dev_mode:
description: >
Run flutter web on the devicelab and hot restart.
stage: devicelab
required_agent_capabilities: ["linux/android"]
flaky: true
# iOS on-device tests # iOS on-device tests
flavors_test_ios: flavors_test_ios:
...@@ -421,6 +435,13 @@ tasks: ...@@ -421,6 +435,13 @@ tasks:
stage: devicelab_ios stage: devicelab_ios
required_agent_capabilities: ["mac/ios"] required_agent_capabilities: ["mac/ios"]
macos_chrome_dev_mode:
description: >
Run flutter web on the devicelab and hot restart.
stage: devicelab_ios
required_agent_capabilities: ["mac/ios"]
flaky: true
# Tests running on Windows host # Tests running on Windows host
flavors_test_win: flavors_test_win:
......
...@@ -8,9 +8,9 @@ environment: ...@@ -8,9 +8,9 @@ environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0" sdk: ">=2.0.0-dev.68.0 <3.0.0"
dependencies: dependencies:
args: 1.5.1 args: 1.5.2
file: 5.0.8 file: 5.0.8
image: 2.1.3 image: 2.1.4
meta: 1.1.6 meta: 1.1.6
path: 1.6.2 path: 1.6.2
platform: 2.2.0 platform: 2.2.0
...@@ -73,4 +73,4 @@ dev_dependencies: ...@@ -73,4 +73,4 @@ dev_dependencies:
watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: b018 # PUBSPEC CHECKSUM: 491a
...@@ -9,7 +9,7 @@ dependencies: ...@@ -9,7 +9,7 @@ dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -63,4 +63,4 @@ dependencies: ...@@ -63,4 +63,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: d60e # PUBSPEC CHECKSUM: 820f
...@@ -40,7 +40,7 @@ dev_dependencies: ...@@ -40,7 +40,7 @@ dev_dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -76,4 +76,4 @@ dev_dependencies: ...@@ -76,4 +76,4 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: 10be # PUBSPEC CHECKSUM: fdbf
...@@ -13,7 +13,7 @@ dependencies: ...@@ -13,7 +13,7 @@ dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -67,4 +67,4 @@ dependencies: ...@@ -67,4 +67,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: d60e # PUBSPEC CHECKSUM: 820f
...@@ -35,7 +35,7 @@ dev_dependencies: ...@@ -35,7 +35,7 @@ dev_dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -74,4 +74,4 @@ builders: ...@@ -74,4 +74,4 @@ builders:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: d60e # PUBSPEC CHECKSUM: 820f
...@@ -13,7 +13,7 @@ dependencies: ...@@ -13,7 +13,7 @@ dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -67,4 +67,4 @@ dependencies: ...@@ -67,4 +67,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: d60e # PUBSPEC CHECKSUM: 820f
...@@ -13,7 +13,7 @@ dependencies: ...@@ -13,7 +13,7 @@ dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -67,4 +67,4 @@ dependencies: ...@@ -67,4 +67,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: d60e # PUBSPEC CHECKSUM: 820f
...@@ -5,10 +5,10 @@ dependencies: ...@@ -5,10 +5,10 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
test: 1.6.3 test: 1.6.3
mockito: 4.0.0 mockito: 4.1.0
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -60,4 +60,4 @@ dependencies: ...@@ -60,4 +60,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: bf1e # PUBSPEC CHECKSUM: 8420
...@@ -13,7 +13,7 @@ dependencies: ...@@ -13,7 +13,7 @@ dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -67,4 +67,4 @@ dependencies: ...@@ -67,4 +67,4 @@ dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: d60e # PUBSPEC CHECKSUM: 820f
...@@ -5,7 +5,7 @@ dependencies: ...@@ -5,7 +5,7 @@ dependencies:
build: 1.1.4 build: 1.1.4
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -32,4 +32,4 @@ environment: ...@@ -32,4 +32,4 @@ environment:
# The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite. # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite.
sdk: ">=2.0.0-dev.68.0 <3.0.0" sdk: ">=2.0.0-dev.68.0 <3.0.0"
# PUBSPEC CHECKSUM: 669a # PUBSPEC CHECKSUM: 069b
...@@ -6,7 +6,7 @@ environment: ...@@ -6,7 +6,7 @@ environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0" sdk: ">=2.0.0-dev.68.0 <3.0.0"
dependencies: dependencies:
image: 2.1.3 image: 2.1.4
flutter: flutter:
sdk: flutter sdk: flutter
flutter_driver: flutter_driver:
...@@ -15,7 +15,7 @@ dependencies: ...@@ -15,7 +15,7 @@ dependencies:
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
archive: 2.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" archive: 2.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -77,4 +77,4 @@ dev_dependencies: ...@@ -77,4 +77,4 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: 1b28 # PUBSPEC CHECKSUM: 772a
...@@ -17,7 +17,7 @@ dev_dependencies: ...@@ -17,7 +17,7 @@ dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
mockito: 4.0.0 mockito: 4.1.0
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -36,4 +36,4 @@ dev_dependencies: ...@@ -36,4 +36,4 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: 949f # PUBSPEC CHECKSUM: 0ba0
...@@ -13,7 +13,7 @@ dartdoc: ...@@ -13,7 +13,7 @@ dartdoc:
nodoc: true nodoc: true
dependencies: dependencies:
args: 1.5.1 args: 1.5.2
dart_style: 1.2.7 dart_style: 1.2.7
meta: 1.1.6 meta: 1.1.6
platform: 2.2.0 platform: 2.2.0
...@@ -98,4 +98,4 @@ executables: ...@@ -98,4 +98,4 @@ executables:
vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" web_socket_channel: 1.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: 6b2c # PUBSPEC CHECKSUM: 052d
...@@ -6,7 +6,7 @@ environment: ...@@ -6,7 +6,7 @@ environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0" sdk: ">=2.0.0-dev.68.0 <3.0.0"
dependencies: dependencies:
args: 1.5.1 args: 1.5.2
http: 0.12.0+2 http: 0.12.0+2
path: 1.6.2 path: 1.6.2
platform: 2.2.0 platform: 2.2.0
...@@ -22,4 +22,4 @@ dependencies: ...@@ -22,4 +22,4 @@ dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: 8bd3 # PUBSPEC CHECKSUM: 24d4
...@@ -7,7 +7,7 @@ environment: ...@@ -7,7 +7,7 @@ environment:
dependencies: dependencies:
archive: 2.0.9 archive: 2.0.9
args: 1.5.1 args: 1.5.2
http: 0.12.0+2 http: 0.12.0+2
intl: 0.15.8 intl: 0.15.8
meta: 1.1.6 meta: 1.1.6
...@@ -30,11 +30,11 @@ dependencies: ...@@ -30,11 +30,11 @@ dependencies:
dev_dependencies: dev_dependencies:
test_api: 0.2.5 test_api: 0.2.5
mockito: 4.0.0 mockito: 4.1.0
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
stack_trace: 1.9.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" stack_trace: 1.9.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
stream_channel: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" stream_channel: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: 470f # PUBSPEC CHECKSUM: a711
...@@ -9,7 +9,7 @@ environment: ...@@ -9,7 +9,7 @@ environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0" sdk: ">=2.0.0-dev.68.0 <3.0.0"
dependencies: dependencies:
args: 1.5.1 args: 1.5.2
vector_math: 2.0.8 vector_math: 2.0.8
xml: 3.5.0 xml: 3.5.0
...@@ -37,4 +37,4 @@ dev_dependencies: ...@@ -37,4 +37,4 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: b74d # PUBSPEC CHECKSUM: 3d4e
...@@ -23,7 +23,7 @@ dev_dependencies: ...@@ -23,7 +23,7 @@ dev_dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -73,4 +73,4 @@ dev_dependencies: ...@@ -73,4 +73,4 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: 5ff8 # PUBSPEC CHECKSUM: 25f9
...@@ -12,9 +12,9 @@ dependencies: ...@@ -12,9 +12,9 @@ dependencies:
intl: 0.15.8 intl: 0.15.8
connectivity: 0.4.3+2 connectivity: 0.4.3+2
string_scanner: 1.0.4 string_scanner: 1.0.4
url_launcher: 5.0.2 url_launcher: 5.0.3
cupertino_icons: 0.1.2 cupertino_icons: 0.1.2
video_player: 0.10.1+2 video_player: 0.10.1+3
scoped_model: 1.0.1 scoped_model: 1.0.1
shrine_images: 1.1.2 shrine_images: 1.1.2
...@@ -39,7 +39,7 @@ dev_dependencies: ...@@ -39,7 +39,7 @@ dev_dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -253,4 +253,4 @@ flutter: ...@@ -253,4 +253,4 @@ flutter:
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf
# PUBSPEC CHECKSUM: 8760 # PUBSPEC CHECKSUM: 7863
...@@ -21,7 +21,7 @@ dev_dependencies: ...@@ -21,7 +21,7 @@ dev_dependencies:
test: 1.6.3 test: 1.6.3
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -72,4 +72,4 @@ dev_dependencies: ...@@ -72,4 +72,4 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: 5ff8 # PUBSPEC CHECKSUM: 25f9
...@@ -15,7 +15,7 @@ dependencies: ...@@ -15,7 +15,7 @@ dependencies:
isolate: 2.0.2 isolate: 2.0.2
analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -62,4 +62,4 @@ dev_dependencies: ...@@ -62,4 +62,4 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# PUBSPEC CHECKSUM: 63b7 # PUBSPEC CHECKSUM: 69b8
...@@ -22,7 +22,7 @@ dev_dependencies: ...@@ -22,7 +22,7 @@ dev_dependencies:
sdk: flutter sdk: flutter
flutter_goldens: flutter_goldens:
sdk: flutter sdk: flutter
mockito: 4.0.0 mockito: 4.1.0
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -42,4 +42,4 @@ dev_dependencies: ...@@ -42,4 +42,4 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: 94dc # PUBSPEC CHECKSUM: 45dd
...@@ -43,7 +43,7 @@ dependencies: ...@@ -43,7 +43,7 @@ dependencies:
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies: dev_dependencies:
mockito: 4.0.0 mockito: 4.1.0
quiver: 2.0.3 quiver: 2.0.3
# PUBSPEC CHECKSUM: b48d # PUBSPEC CHECKSUM: ef8e
...@@ -33,6 +33,6 @@ dependencies: ...@@ -33,6 +33,6 @@ dependencies:
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies: dev_dependencies:
mockito: 4.0.0 mockito: 4.1.0
# PUBSPEC CHECKSUM: 046a # PUBSPEC CHECKSUM: 926b
...@@ -20,7 +20,7 @@ dependencies: ...@@ -20,7 +20,7 @@ dependencies:
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
mockito: 4.0.0 mockito: 4.1.0
async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -35,4 +35,4 @@ dev_dependencies: ...@@ -35,4 +35,4 @@ dev_dependencies:
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM: 4ddd # PUBSPEC CHECKSUM: c3de
...@@ -31,6 +31,8 @@ dart_library("flutter_tools") { ...@@ -31,6 +31,8 @@ dart_library("flutter_tools") {
"//third_party/dart-pkg/pub/json_schema", "//third_party/dart-pkg/pub/json_schema",
"//third_party/dart-pkg/pub/linter", "//third_party/dart-pkg/pub/linter",
"//third_party/dart-pkg/pub/meta", "//third_party/dart-pkg/pub/meta",
"//third_party/dart-pkg/pub/mime",
"//third_party/dart-pkg/pub/multi_server_socket",
"//third_party/dart-pkg/pub/multicast_dns", "//third_party/dart-pkg/pub/multicast_dns",
"//third_party/dart-pkg/pub/mustache", "//third_party/dart-pkg/pub/mustache",
"//third_party/dart-pkg/pub/package_config", "//third_party/dart-pkg/pub/package_config",
...@@ -38,12 +40,16 @@ dart_library("flutter_tools") { ...@@ -38,12 +40,16 @@ dart_library("flutter_tools") {
"//third_party/dart-pkg/pub/platform", "//third_party/dart-pkg/pub/platform",
"//third_party/dart-pkg/pub/process", "//third_party/dart-pkg/pub/process",
"//third_party/dart-pkg/pub/quiver", "//third_party/dart-pkg/pub/quiver",
"//third_party/dart-pkg/pub/shelf_packages_handler",
"//third_party/dart-pkg/pub/shelf_static",
"//third_party/dart-pkg/pub/stack_trace", "//third_party/dart-pkg/pub/stack_trace",
"//third_party/dart-pkg/pub/test", "//third_party/dart-pkg/pub/test",
"//third_party/dart-pkg/pub/usage", "//third_party/dart-pkg/pub/usage",
"//third_party/dart-pkg/pub/web_socket_channel", "//third_party/dart-pkg/pub/web_socket_channel",
"//third_party/dart-pkg/pub/webkit_inspection_protocol",
"//third_party/dart-pkg/pub/xml", "//third_party/dart-pkg/pub/xml",
"//third_party/dart-pkg/pub/yaml", "//third_party/dart-pkg/pub/yaml",
"//third_party/dart-pkg/pub/node_preamble",
] ]
} }
......
...@@ -56,7 +56,7 @@ class ApplicationPackageFactory { ...@@ -56,7 +56,7 @@ class ApplicationPackageFactory {
return applicationBinary == null return applicationBinary == null
? MacOSApp.fromMacOSProject(FlutterProject.current().macos) ? MacOSApp.fromMacOSProject(FlutterProject.current().macos)
: MacOSApp.fromPrebuiltApp(applicationBinary); : MacOSApp.fromPrebuiltApp(applicationBinary);
case TargetPlatform.web: case TargetPlatform.web_javascript:
return WebApplicationPackage(FlutterProject.current()); return WebApplicationPackage(FlutterProject.current());
case TargetPlatform.linux_x64: case TargetPlatform.linux_x64:
return applicationBinary == null return applicationBinary == null
...@@ -411,7 +411,7 @@ class ApplicationPackageStore { ...@@ -411,7 +411,7 @@ class ApplicationPackageStore {
case TargetPlatform.linux_x64: case TargetPlatform.linux_x64:
case TargetPlatform.windows_x64: case TargetPlatform.windows_x64:
case TargetPlatform.tester: case TargetPlatform.tester:
case TargetPlatform.web: case TargetPlatform.web_javascript:
return null; return null;
} }
return null; return null;
......
...@@ -136,7 +136,7 @@ class CachedArtifacts extends Artifacts { ...@@ -136,7 +136,7 @@ class CachedArtifacts extends Artifacts {
case TargetPlatform.windows_x64: case TargetPlatform.windows_x64:
case TargetPlatform.fuchsia: case TargetPlatform.fuchsia:
case TargetPlatform.tester: case TargetPlatform.tester:
case TargetPlatform.web: case TargetPlatform.web_javascript:
return _getHostArtifactPath(artifact, platform, mode); return _getHostArtifactPath(artifact, platform, mode);
} }
assert(false, 'Invalid platform $platform.'); assert(false, 'Invalid platform $platform.');
...@@ -238,7 +238,7 @@ class CachedArtifacts extends Artifacts { ...@@ -238,7 +238,7 @@ class CachedArtifacts extends Artifacts {
case TargetPlatform.windows_x64: case TargetPlatform.windows_x64:
case TargetPlatform.fuchsia: case TargetPlatform.fuchsia:
case TargetPlatform.tester: case TargetPlatform.tester:
case TargetPlatform.web: case TargetPlatform.web_javascript:
assert(mode == null, 'Platform $platform does not support different build modes.'); assert(mode == null, 'Platform $platform does not support different build modes.');
return fs.path.join(engineDir, platformName); return fs.path.join(engineDir, platformName);
case TargetPlatform.ios: case TargetPlatform.ios:
......
...@@ -243,7 +243,7 @@ enum TargetPlatform { ...@@ -243,7 +243,7 @@ enum TargetPlatform {
windows_x64, windows_x64,
fuchsia, fuchsia,
tester, tester,
web, web_javascript,
} }
/// iOS target device architecture. /// iOS target device architecture.
...@@ -303,8 +303,8 @@ String getNameForTargetPlatform(TargetPlatform platform) { ...@@ -303,8 +303,8 @@ String getNameForTargetPlatform(TargetPlatform platform) {
return 'fuchsia'; return 'fuchsia';
case TargetPlatform.tester: case TargetPlatform.tester:
return 'flutter-tester'; return 'flutter-tester';
case TargetPlatform.web: case TargetPlatform.web_javascript:
return 'web'; return 'web-javascript';
} }
assert(false); assert(false);
return null; return null;
...@@ -328,8 +328,8 @@ TargetPlatform getTargetPlatformForName(String platform) { ...@@ -328,8 +328,8 @@ TargetPlatform getTargetPlatformForName(String platform) {
return TargetPlatform.linux_x64; return TargetPlatform.linux_x64;
case 'windows-x64': case 'windows-x64':
return TargetPlatform.windows_x64; return TargetPlatform.windows_x64;
case 'web': case 'web-javascript':
return TargetPlatform.web; return TargetPlatform.web_javascript;
} }
assert(platform != null); assert(platform != null);
return null; return null;
......
...@@ -403,7 +403,7 @@ class RunCommand extends RunCommandBase { ...@@ -403,7 +403,7 @@ class RunCommand extends RunCommandBase {
// in a "hot mode". // in a "hot mode".
final bool webMode = !FlutterVersion.instance.isStable final bool webMode = !FlutterVersion.instance.isStable
&& devices.length == 1 && devices.length == 1
&& await devices.single.targetPlatform == TargetPlatform.web && await devices.single.targetPlatform == TargetPlatform.web_javascript
&& hotMode; && hotMode;
ResidentRunner runner; ResidentRunner runner;
......
...@@ -22,7 +22,10 @@ import '../runner/flutter_command.dart'; ...@@ -22,7 +22,10 @@ import '../runner/flutter_command.dart';
const Map<String, String> _kManuallyPinnedDependencies = <String, String>{ const Map<String, String> _kManuallyPinnedDependencies = <String, String>{
// Add pinned packages here. // Add pinned packages here.
'flutter_gallery_assets': '0.1.8', // See //examples/flutter_gallery/pubspec.yaml 'flutter_gallery_assets': '0.1.8', // See //examples/flutter_gallery/pubspec.yaml
'build_daemon': '0.6.1', 'build_daemon': '0.6.1', // Crashes at 1.0
'test': '1.6.3', // | Tests are timing out at 1.6.4 https://github.com/flutter/flutter/issues/33823
'test_api': '0.2.5', // |
'test_core': '0.2.5' // |
}; };
class UpdatePackagesCommand extends FlutterCommand { class UpdatePackagesCommand extends FlutterCommand {
...@@ -1106,7 +1109,16 @@ String _generateFakePubspec(Iterable<PubspecDependency> dependencies) { ...@@ -1106,7 +1109,16 @@ String _generateFakePubspec(Iterable<PubspecDependency> dependencies) {
overrides.writeln('dependency_overrides:'); overrides.writeln('dependency_overrides:');
if (_kManuallyPinnedDependencies.isNotEmpty) { if (_kManuallyPinnedDependencies.isNotEmpty) {
printStatus('WARNING: the following packages use hard-coded version constraints:'); printStatus('WARNING: the following packages use hard-coded version constraints:');
final Set<String> allTransitive = <String>{
for (PubspecDependency dependency in dependencies)
dependency.name
};
for (String package in _kManuallyPinnedDependencies.keys) { for (String package in _kManuallyPinnedDependencies.keys) {
// Don't add pinned dependency if it is not in the set of all transitive dependencies.
if (!allTransitive.contains(package)) {
printStatus('Skipping $package because it was not transitive');
continue;
}
final String version = _kManuallyPinnedDependencies[package]; final String version = _kManuallyPinnedDependencies[package];
result.writeln(' $package: $version'); result.writeln(' $package: $version');
printStatus(' - $package: $version'); printStatus(' - $package: $version');
......
...@@ -43,8 +43,9 @@ import 'macos/xcode_validator.dart'; ...@@ -43,8 +43,9 @@ import 'macos/xcode_validator.dart';
import 'run_hot.dart'; import 'run_hot.dart';
import 'usage.dart'; import 'usage.dart';
import 'version.dart'; import 'version.dart';
import 'web/chrome.dart';
import 'web/compile.dart'; import 'web/compile.dart';
import 'web/web_device.dart'; import 'web/workflow.dart';
import 'windows/windows_workflow.dart'; import 'windows/windows_workflow.dart';
Future<T> runInContext<T>( Future<T> runInContext<T>(
...@@ -100,6 +101,7 @@ Future<T> runInContext<T>( ...@@ -100,6 +101,7 @@ Future<T> runInContext<T>(
Usage: () => Usage(), Usage: () => Usage(),
UserMessages: () => UserMessages(), UserMessages: () => UserMessages(),
WebCompiler: () => const WebCompiler(), WebCompiler: () => const WebCompiler(),
WebWorkflow: () => const WebWorkflow(),
WindowsWorkflow: () => const WindowsWorkflow(), WindowsWorkflow: () => const WindowsWorkflow(),
Xcode: () => Xcode(), Xcode: () => Xcode(),
XcodeValidator: () => const XcodeValidator(), XcodeValidator: () => const XcodeValidator(),
......
...@@ -23,6 +23,7 @@ import 'macos/macos_device.dart'; ...@@ -23,6 +23,7 @@ import 'macos/macos_device.dart';
import 'project.dart'; import 'project.dart';
import 'tester/flutter_tester.dart'; import 'tester/flutter_tester.dart';
import 'web/web_device.dart'; import 'web/web_device.dart';
import 'web/workflow.dart';
import 'windows/windows_device.dart'; import 'windows/windows_device.dart';
DeviceManager get deviceManager => context.get<DeviceManager>(); DeviceManager get deviceManager => context.get<DeviceManager>();
......
...@@ -33,6 +33,8 @@ import 'proxy_validator.dart'; ...@@ -33,6 +33,8 @@ import 'proxy_validator.dart';
import 'tester/flutter_tester.dart'; import 'tester/flutter_tester.dart';
import 'version.dart'; import 'version.dart';
import 'vscode/vscode_validator.dart'; import 'vscode/vscode_validator.dart';
import 'web/web_validator.dart';
import 'web/workflow.dart';
import 'windows/windows_workflow.dart'; import 'windows/windows_workflow.dart';
Doctor get doctor => context.get<Doctor>(); Doctor get doctor => context.get<Doctor>();
...@@ -66,6 +68,9 @@ class _DefaultDoctorValidatorsProvider implements DoctorValidatorsProvider { ...@@ -66,6 +68,9 @@ class _DefaultDoctorValidatorsProvider implements DoctorValidatorsProvider {
if (iosWorkflow.appliesToHostPlatform) if (iosWorkflow.appliesToHostPlatform)
_validators.add(iosValidator); _validators.add(iosValidator);
if (webWorkflow.appliesToHostPlatform)
_validators.add(const WebValidator());
final List<DoctorValidator> ideValidators = <DoctorValidator>[]; final List<DoctorValidator> ideValidators = <DoctorValidator>[];
ideValidators.addAll(AndroidStudioValidator.allValidators); ideValidators.addAll(AndroidStudioValidator.allValidators);
ideValidators.addAll(IntelliJValidator.installedValidators); ideValidators.addAll(IntelliJValidator.installedValidators);
...@@ -278,6 +283,8 @@ class Doctor { ...@@ -278,6 +283,8 @@ class Doctor {
/// A series of tools and required install steps for a target platform (iOS or Android). /// A series of tools and required install steps for a target platform (iOS or Android).
abstract class Workflow { abstract class Workflow {
const Workflow();
/// Whether the workflow applies to this platform (as in, should we ever try and use it). /// Whether the workflow applies to this platform (as in, should we ever try and use it).
bool get appliesToHostPlatform; bool get appliesToHostPlatform;
......
...@@ -20,7 +20,7 @@ import 'ios/plist_utils.dart' as plist; ...@@ -20,7 +20,7 @@ import 'ios/plist_utils.dart' as plist;
import 'ios/xcodeproj.dart' as xcode; import 'ios/xcodeproj.dart' as xcode;
import 'plugins.dart'; import 'plugins.dart';
import 'template.dart'; import 'template.dart';
import 'web/web_device.dart'; import 'web/workflow.dart';
/// Represents the contents of a Flutter project at the specified [directory]. /// Represents the contents of a Flutter project at the specified [directory].
/// ///
...@@ -188,7 +188,7 @@ class FlutterProject { ...@@ -188,7 +188,7 @@ class FlutterProject {
if (flutterDesktopEnabled && macos.existsSync()) { if (flutterDesktopEnabled && macos.existsSync()) {
await macos.ensureReadyForPlatformSpecificTooling(); await macos.ensureReadyForPlatformSpecificTooling();
} }
if (flutterWebEnabled) { if (flutterWebEnabled && web.existsSync()) {
await web.ensureReadyForPlatformSpecificTooling(); await web.ensureReadyForPlatformSpecificTooling();
} }
await injectPlugins(this, checkProjects: checkProjects); await injectPlugins(this, checkProjects: checkProjects);
......
...@@ -5,11 +5,14 @@ ...@@ -5,11 +5,14 @@
import 'dart:async'; import 'dart:async';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
import 'asset.dart'; import 'asset.dart';
import 'base/common.dart'; import 'base/common.dart';
import 'base/file_system.dart'; import 'base/file_system.dart';
import 'base/logger.dart';
import 'base/terminal.dart'; import 'base/terminal.dart';
import 'base/utils.dart';
import 'build_info.dart'; import 'build_info.dart';
import 'bundle.dart'; import 'bundle.dart';
import 'dart/package_map.dart'; import 'dart/package_map.dart';
...@@ -19,8 +22,8 @@ import 'project.dart'; ...@@ -19,8 +22,8 @@ import 'project.dart';
import 'resident_runner.dart'; import 'resident_runner.dart';
import 'run_hot.dart'; import 'run_hot.dart';
import 'web/asset_server.dart'; import 'web/asset_server.dart';
import 'web/chrome.dart';
import 'web/compile.dart'; import 'web/compile.dart';
import 'web/web_device.dart';
/// A hot-runner which handles browser specific delegation. /// A hot-runner which handles browser specific delegation.
class ResidentWebRunner extends ResidentRunner { class ResidentWebRunner extends ResidentRunner {
...@@ -44,6 +47,7 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -44,6 +47,7 @@ class ResidentWebRunner extends ResidentRunner {
WebAssetServer _server; WebAssetServer _server;
ProjectFileInvalidator projectFileInvalidator; ProjectFileInvalidator projectFileInvalidator;
DateTime _lastCompiled; DateTime _lastCompiled;
WipConnection _connection;
final FlutterProject flutterProject; final FlutterProject flutterProject;
@override @override
...@@ -58,12 +62,16 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -58,12 +62,16 @@ class ResidentWebRunner extends ResidentRunner {
} }
@override @override
Future<void> cleanupAfterSignal() { Future<void> cleanupAfterSignal() async {
await _connection.sendCommand('Browser.close');
_connection = null;
return _server?.dispose(); return _server?.dispose();
} }
@override @override
Future<void> cleanupAtFinish() { Future<void> cleanupAtFinish() async {
await _connection?.sendCommand('Browser.close');
_connection = null;
return _server?.dispose(); return _server?.dispose();
} }
...@@ -128,7 +136,15 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -128,7 +136,15 @@ class ResidentWebRunner extends ResidentRunner {
await _server.initialize(); await _server.initialize();
// Step 3: Spawn an instance of Chrome and direct it to the created server. // Step 3: Spawn an instance of Chrome and direct it to the created server.
await chromeLauncher.launch('http:localhost:${_server.port}'); final String url = 'http://localhost:${_server.port}';
final Chrome chrome = await chromeLauncher.launch(url);
final ChromeTab chromeTab = await chrome.chromeConnection.getTab((ChromeTab chromeTab) {
return chromeTab.url.contains(url); // we don't care about trailing slashes or #
});
_connection = await chromeTab.connect();
_connection.onClose.listen((WipConnection connection) {
appFinished();
});
// We don't support the debugging proxy yet. // We don't support the debugging proxy yet.
appStartedCompleter?.complete(); appStartedCompleter?.complete();
...@@ -139,23 +155,39 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -139,23 +155,39 @@ class ResidentWebRunner extends ResidentRunner {
} }
@override @override
Future<OperationResult> restart( Future<OperationResult> restart({
{bool fullRestart = false, bool fullRestart = false,
bool pauseAfterRestart = false, bool pauseAfterRestart = false,
String reason, String reason,
bool benchmarkMode = false}) async { bool benchmarkMode = false,
final List<Uri> invalidatedSources = ProjectFileInvalidator.findInvalidated( }) async {
lastCompiled: _lastCompiled, final Stopwatch timer = Stopwatch()..start();
urisToMonitor: <Uri>[ final Status status = logger.startProgress(
for (FileSystemEntity entity in flutterProject.directory 'Performing hot restart...',
.childDirectory('lib') timeout: timeoutConfiguration.fastOperation,
.listSync(recursive: true)) progressId: 'hot.restart',
if (entity is File && entity.path.endsWith('.dart')) entity.uri
], // Add new class to track this for web.
packagesPath: PackageMap.globalPackagesPath,
); );
await webCompilationProxy.invalidate(inputs: invalidatedSources); OperationResult result = OperationResult.ok;
printStatus('Sources updated, refresh browser'); try {
return OperationResult.ok; final List<Uri> invalidatedSources = ProjectFileInvalidator.findInvalidated(
lastCompiled: _lastCompiled,
urisToMonitor: <Uri>[
for (FileSystemEntity entity in flutterProject.directory
.childDirectory('lib')
.listSync(recursive: true))
if (entity is File && entity.path.endsWith('.dart')) entity.uri
], // Add new class to track this for web.
packagesPath: PackageMap.globalPackagesPath,
);
await webCompilationProxy.invalidate(inputs: invalidatedSources);
await _connection.sendCommand('Page.reload');
await Future<void>.delayed(const Duration(milliseconds: 150));
} catch (err) {
result = OperationResult(1, err.toString());
} finally {
printStatus('Restarted application in ${getElapsedAsMilliseconds(timer.elapsed)}.');
status.cancel();
}
return result;
} }
} }
...@@ -670,7 +670,7 @@ DevelopmentArtifact _artifactFromTargetPlatform(TargetPlatform targetPlatform) { ...@@ -670,7 +670,7 @@ DevelopmentArtifact _artifactFromTargetPlatform(TargetPlatform targetPlatform) {
case TargetPlatform.android_x64: case TargetPlatform.android_x64:
case TargetPlatform.android_x86: case TargetPlatform.android_x86:
return DevelopmentArtifact.android; return DevelopmentArtifact.android;
case TargetPlatform.web: case TargetPlatform.web_javascript:
return DevelopmentArtifact.web; return DevelopmentArtifact.web;
case TargetPlatform.ios: case TargetPlatform.ios:
return DevelopmentArtifact.iOS; return DevelopmentArtifact.iOS;
......
...@@ -170,7 +170,6 @@ class WebAssetServer { ...@@ -170,7 +170,6 @@ class WebAssetServer {
Future<void> _completeRequest(HttpRequest request, File file, Future<void> _completeRequest(HttpRequest request, File file,
[String contentType = 'text']) async { [String contentType = 'text']) async {
printTrace('looking for ${request.uri} at ${file.path}');
if (!file.existsSync()) { if (!file.existsSync()) {
request.response.statusCode = HttpStatus.notFound; request.response.statusCode = HttpStatus.notFound;
await request.response.close(); await request.response.close();
......
// Copyright 2019 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:webkit_inspection_protocol/webkit_inspection_protocol.dart';
import '../base/common.dart';
import '../base/context.dart';
import '../base/file_system.dart';
import '../base/io.dart';
import '../base/os.dart';
import '../base/platform.dart';
import '../base/process_manager.dart';
import '../convert.dart';
import '../globals.dart';
/// The [ChromeLauncher] instance.
ChromeLauncher get chromeLauncher => context.get<ChromeLauncher>();
/// An environment variable used to override the location of chrome.
const String kChromeEnvironment = 'CHROME_EXECUTABLE';
/// The expected executable name on linux.
const String kLinuxExecutable = 'google-chrome';
/// The expected executable name on macOS.
const String kMacOSExecutable =
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
/// The expected executable name on Windows.
const String kWindowsExecutable = r'Google\Chrome\Application\chrome.exe';
/// The possible locations where the chrome executable can be located on windows.
final List<String> kWindowsPrefixes = <String>[
platform.environment['LOCALAPPDATA'],
platform.environment['PROGRAMFILES'],
platform.environment['PROGRAMFILES(X86)']
];
/// Find the chrome executable on the current platform.
///
/// Does not verify whether the executable exists.
String findChromeExecutable() {
if (platform.environment.containsKey(kChromeEnvironment)) {
return platform.environment[kChromeEnvironment];
}
if (platform.isLinux) {
return kLinuxExecutable;
}
if (platform.isMacOS) {
return kMacOSExecutable;
}
if (platform.isWindows) {
final String windowsPrefix = kWindowsPrefixes.firstWhere((String prefix) {
if (prefix == null) {
return false;
}
final String path = fs.path.join(prefix, kWindowsExecutable);
return fs.file(path).existsSync();
}, orElse: () => '.');
return fs.path.join(windowsPrefix, kWindowsExecutable);
}
throwToolExit('Platform ${platform.operatingSystem} is not supported.');
return null;
}
/// Responsible for launching chrome with devtools configured.
class ChromeLauncher {
const ChromeLauncher();
static final Completer<Chrome> _currentCompleter = Completer<Chrome>();
/// Launch the chrome browser to a particular `host` page.
Future<Chrome> launch(String url) async {
final String chromeExecutable = findChromeExecutable();
final Directory dataDir = fs.systemTempDirectory.createTempSync();
final int port = await os.findFreePort();
final List<String> args = <String>[
chromeExecutable,
// Using a tmp directory ensures that a new instance of chrome launches
// allowing for the remote debug port to be enabled.
'--user-data-dir=${dataDir.path}',
'--remote-debugging-port=$port',
// When the DevTools has focus we don't want to slow down the application.
'--disable-background-timer-throttling',
// Since we are using a temp profile, disable features that slow the
// Chrome launch.
'--disable-extensions',
'--disable-popup-blocking',
'--bwsi',
'--no-first-run',
'--no-default-browser-check',
'--disable-default-apps',
'--disable-translate',
url,
];
final Process process = await processManager.start(args);
// Wait until the DevTools are listening before trying to connect.
await process.stderr
.transform(utf8.decoder)
.transform(const LineSplitter())
.firstWhere((String line) => line.startsWith('DevTools listening'))
.timeout(const Duration(seconds: 60), onTimeout: () {
throwToolExit('Unable to connect to Chrome DevTools.');
return null;
});
return _connect(Chrome._(
port,
ChromeConnection('localhost', port),
process: process,
dataDir: dataDir,
));
}
static Future<Chrome> _connect(Chrome chrome) async {
if (_currentCompleter.isCompleted) {
throwToolExit('Only one instance of chrome can be started.');
}
// The connection is lazy. Try a simple call to make sure the provided
// connection is valid.
try {
await chrome.chromeConnection.getTabs();
} catch (e) {
await chrome.close();
throwToolExit(
'Unable to connect to Chrome debug port: ${chrome.debugPort}\n $e');
}
_currentCompleter.complete(chrome);
return chrome;
}
/// Connects to an instance of Chrome with an open debug port.
static Future<Chrome> fromExisting(int port) async =>
_connect(Chrome._(port, ChromeConnection('localhost', port)));
static Future<Chrome> get connectedInstance => _currentCompleter.future;
}
/// A class for managing an instance of Chrome.
class Chrome {
const Chrome._(
this.debugPort,
this.chromeConnection, {
Process process,
Directory dataDir,
}) : _process = process,
_dataDir = dataDir;
final int debugPort;
final Process _process;
final Directory _dataDir;
final ChromeConnection chromeConnection;
static Completer<Chrome> _currentCompleter = Completer<Chrome>();
Future<void> close() async {
if (_currentCompleter.isCompleted) {
_currentCompleter = Completer<Chrome>();
}
chromeConnection.close();
_process?.kill(ProcessSignal.SIGKILL);
await _process?.exitCode;
try {
// Chrome starts another process as soon as it dies that modifies the
// profile information. Give it some time before attempting to delete
// the directory.
await Future<void>.delayed(const Duration(milliseconds: 500));
} catch (_) {
// Silently fail if we can't clean up the profile information.
} finally {
try {
await _dataDir?.delete(recursive: true);
} on FileSystemException {
printError('failed to delete temporary profile at ${_dataDir.path}');
}
}
}
}
...@@ -5,30 +5,18 @@ ...@@ -5,30 +5,18 @@
import '../application_package.dart'; import '../application_package.dart';
import '../asset.dart'; import '../asset.dart';
import '../base/common.dart'; import '../base/common.dart';
import '../base/context.dart';
import '../base/file_system.dart'; import '../base/file_system.dart';
import '../base/io.dart'; import '../base/io.dart';
import '../base/logger.dart'; import '../base/logger.dart';
import '../base/platform.dart';
import '../base/process_manager.dart'; import '../base/process_manager.dart';
import '../build_info.dart'; import '../build_info.dart';
import '../bundle.dart'; import '../bundle.dart';
import '../device.dart'; import '../device.dart';
import '../globals.dart'; import '../globals.dart';
import '../project.dart'; import '../project.dart';
import '../version.dart';
import '../web/compile.dart'; import '../web/compile.dart';
import '../web/workflow.dart';
ChromeLauncher get chromeLauncher => context.get<ChromeLauncher>(); import 'chrome.dart';
/// Only launch or display web devices if `FLUTTER_WEB`
/// environment variable is set to true.
bool get flutterWebEnabled {
_flutterWebEnabled = platform.environment['FLUTTER_WEB']?.toLowerCase() == 'true';
return _flutterWebEnabled && !FlutterVersion.instance.isStable;
}
bool _flutterWebEnabled;
class WebApplicationPackage extends ApplicationPackage { class WebApplicationPackage extends ApplicationPackage {
WebApplicationPackage(this._flutterProject) : super(id: _flutterProject.manifest.appName); WebApplicationPackage(this._flutterProject) : super(id: _flutterProject.manifest.appName);
...@@ -42,7 +30,6 @@ class WebApplicationPackage extends ApplicationPackage { ...@@ -42,7 +30,6 @@ class WebApplicationPackage extends ApplicationPackage {
Directory get webSourcePath => _flutterProject.directory.childDirectory('web'); Directory get webSourcePath => _flutterProject.directory.childDirectory('web');
} }
class WebDevice extends Device { class WebDevice extends Device {
WebDevice() : super('web'); WebDevice() : super('web');
...@@ -94,7 +81,17 @@ class WebDevice extends Device { ...@@ -94,7 +81,17 @@ class WebDevice extends Device {
DevicePortForwarder get portForwarder => const NoOpDevicePortForwarder(); DevicePortForwarder get portForwarder => const NoOpDevicePortForwarder();
@override @override
Future<String> get sdkNameAndVersion async => 'web'; Future<String> get sdkNameAndVersion async {
final String chrome = findChromeExecutable();
final ProcessResult result = await processManager.run(<String>[
chrome,
'--version',
]);
if (result.exitCode == 0) {
return result.stdout;
}
return 'unknown';
}
@override @override
Future<LaunchResult> startApp( Future<LaunchResult> startApp(
...@@ -140,7 +137,7 @@ class WebDevice extends Device { ...@@ -140,7 +137,7 @@ class WebDevice extends Device {
} }
@override @override
Future<TargetPlatform> get targetPlatform async => TargetPlatform.web; Future<TargetPlatform> get targetPlatform async => TargetPlatform.web_javascript;
@override @override
Future<bool> uninstallApp(ApplicationPackage app) async => true; Future<bool> uninstallApp(ApplicationPackage app) async => true;
...@@ -202,45 +199,3 @@ class WebDevices extends PollingDeviceDiscovery { ...@@ -202,45 +199,3 @@ class WebDevices extends PollingDeviceDiscovery {
@override @override
bool get supportsPlatform => flutterWebEnabled; bool get supportsPlatform => flutterWebEnabled;
} }
const String _klinuxExecutable = 'google-chrome';
const String _kMacOSExecutable = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
const String _kWindowsExecutable = r'Google\Chrome\Application\chrome.exe';
final List<String> _kWindowsPrefixes = <String>[
platform.environment['LOCALAPPDATA'],
platform.environment['PROGRAMFILES'],
platform.environment['PROGRAMFILES(X86)'],
];
// Responsible for launching chrome with devtools configured.
class ChromeLauncher {
const ChromeLauncher();
/// Launch the chrome browser to a particular `host` page.
Future<Process> launch(String host) async {
String executable;
if (platform.isMacOS) {
executable = _kMacOSExecutable;
} else if (platform.isLinux) {
executable = _klinuxExecutable;
} else if (platform.isWindows) {
final String filePath = _kWindowsPrefixes.firstWhere((String prefix) {
if (prefix == null) {
return false;
}
final String path = fs.path.join(prefix, _kWindowsExecutable);
return fs.file(path).existsSync();
}, orElse: () => '.');
executable = filePath;
} else {
throwToolExit('Platform ${platform.operatingSystem} is not supported.');
}
if (!fs.file(executable).existsSync()) {
throwToolExit('Chrome executable not found at $executable');
}
return processManager.start(<String>[
executable,
host,
], mode: ProcessStartMode.detached);
}
}
// Copyright 2019 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 '../base/platform.dart';
import '../doctor.dart';
import 'chrome.dart';
import 'workflow.dart';
/// A validator that checks whether chrome is installed and can run.
class WebValidator extends DoctorValidator {
const WebValidator() : super('Chrome - develop for the web');
@override
Future<ValidationResult> validate() async {
final String chrome = findChromeExecutable();
final bool canRunChrome = canFindChrome();
final List<ValidationMessage> messages = <ValidationMessage>[];
if (platform.environment.containsKey(kChromeEnvironment)) {
messages.add(ValidationMessage('$kChromeEnvironment = $chrome'));
} else {
messages.add(ValidationMessage('Chrome at $chrome'));
messages.add(ValidationMessage.hint('$kChromeEnvironment not set'));
}
if (!canRunChrome) {
return ValidationResult(
ValidationType.missing,
messages,
statusInfo: 'Cannot find chrome executable at $chrome',
);
}
return ValidationResult(
ValidationType.installed,
messages,
);
}
}
// Copyright 2019 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 '../base/context.dart';
import '../base/file_system.dart';
import '../base/platform.dart';
import '../base/process_manager.dart';
import '../doctor.dart';
import '../version.dart';
import 'chrome.dart';
/// Only launch or display web devices if `FLUTTER_WEB`
/// environment variable is set to true.
bool get flutterWebEnabled {
_flutterWebEnabled = platform.environment['FLUTTER_WEB']?.toLowerCase() == 'true';
return _flutterWebEnabled && !FlutterVersion.instance.isStable;
}
bool _flutterWebEnabled;
/// The web workflow instance.
WebWorkflow get webWorkflow => context.get<WebWorkflow>();
class WebWorkflow extends Workflow {
const WebWorkflow();
@override
bool get appliesToHostPlatform => flutterWebEnabled && (platform.isWindows || platform.isMacOS || platform.isLinux);
@override
bool get canLaunchDevices => flutterWebEnabled && canFindChrome();
@override
bool get canListDevices => flutterWebEnabled && canFindChrome();
@override
bool get canListEmulators => false;
}
/// Whether we can locate the chrome executable.
bool canFindChrome() {
final String chrome = findChromeExecutable();
if (platform.isLinux) {
return processManager.canRun(chrome);
} else if (platform.isMacOS) {
return fs.file(chrome).existsSync();
} else if (platform.isWindows) {
return fs.file(chrome).existsSync();
}
return false;
}
...@@ -10,7 +10,7 @@ environment: ...@@ -10,7 +10,7 @@ environment:
dependencies: dependencies:
# To update these, use "flutter update-packages --force-upgrade". # To update these, use "flutter update-packages --force-upgrade".
archive: 2.0.9 archive: 2.0.9
args: 1.5.1 args: 1.5.2
bsdiff: 0.1.0 bsdiff: 0.1.0
completion: 0.2.1+1 completion: 0.2.1+1
coverage: 0.12.4 coverage: 0.12.4
...@@ -33,6 +33,7 @@ dependencies: ...@@ -33,6 +33,7 @@ dependencies:
usage: 3.4.1 usage: 3.4.1
vm_service_client: 0.2.6+2 vm_service_client: 0.2.6+2
web_socket_channel: 1.0.13 web_socket_channel: 1.0.13
webkit_inspection_protocol: 0.4.0
xml: 3.5.0 xml: 3.5.0
yaml: 2.1.15 yaml: 2.1.15
flutter_goldens_client: flutter_goldens_client:
...@@ -60,7 +61,7 @@ dependencies: ...@@ -60,7 +61,7 @@ dependencies:
build_config: 0.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" build_config: 0.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
build_resolvers: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" build_resolvers: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
built_collection: 4.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" built_collection: 4.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
built_value: 6.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" built_value: 6.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -100,13 +101,13 @@ dependencies: ...@@ -100,13 +101,13 @@ dependencies:
dev_dependencies: dev_dependencies:
collection: 1.14.11 collection: 1.14.11
mockito: 4.0.0 mockito: 4.1.0
file_testing: 2.1.0 file_testing: 2.1.0
vm_service_lib: 3.17.0 vm_service_lib: 3.17.0+1
test: 1.6.3 test: 1.6.3
build_runner: 1.4.0 build_runner: 1.4.0
build_vm_compilers: 1.0.0 build_vm_compilers: 1.0.0
build_test: 0.10.7+3 build_test: 0.10.8
mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...@@ -118,4 +119,4 @@ dartdoc: ...@@ -118,4 +119,4 @@ dartdoc:
# Exclude this package from the hosted API docs. # Exclude this package from the hosted API docs.
nodoc: true nodoc: true
# PUBSPEC CHECKSUM: b34a # PUBSPEC CHECKSUM: ef94
...@@ -66,7 +66,7 @@ void main() { ...@@ -66,7 +66,7 @@ void main() {
when(mockDeviceManager.getDevices()).thenAnswer((Invocation invocation) { when(mockDeviceManager.getDevices()).thenAnswer((Invocation invocation) {
return Stream<Device>.fromIterable(<Device>[ return Stream<Device>.fromIterable(<Device>[
MockDevice(TargetPlatform.web), MockDevice(TargetPlatform.web_javascript),
]); ]);
}); });
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/project.dart';
import 'package:flutter_tools/src/web/chrome.dart';
import 'package:flutter_tools/src/web/compile.dart'; import 'package:flutter_tools/src/web/compile.dart';
import 'package:flutter_tools/src/web/web_device.dart'; import 'package:flutter_tools/src/web/web_device.dart';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
......
// Copyright 2019 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 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/doctor.dart';
import 'package:flutter_tools/src/web/chrome.dart';
import 'package:flutter_tools/src/web/web_validator.dart';
import 'package:mockito/mockito.dart';
import '../src/common.dart';
import '../src/testbed.dart';
void main() {
group('WebValidator', () {
Testbed testbed;
WebValidator webValidator;
MockPlatform mockPlatform;
setUp(() {
testbed = Testbed(setup: () {
fs.file(kMacOSExecutable).createSync(recursive: true);
fs.file('chrome_foo').createSync();
return null;
}, overrides: <Type, Generator>{
Platform: () => mockPlatform,
});
webValidator = const WebValidator();
mockPlatform = MockPlatform();
when(mockPlatform.isMacOS).thenReturn(true);
when(mockPlatform.isWindows).thenReturn(false);
when(mockPlatform.isLinux).thenReturn(false);
});
test('Can find macOS executable ', () => testbed.run(() async {
final ValidationResult result = await webValidator.validate();
expect(result.type, ValidationType.installed);
}));
test('Can notice missing macOS executable ', () => testbed.run(() async {
fs.file(kMacOSExecutable).deleteSync();
final ValidationResult result = await webValidator.validate();
expect(result.type, ValidationType.missing);
}));
});
}
class MockPlatform extends Mock implements Platform {
@override
Map<String, String> get environment => const <String, String>{};
}
// Copyright 2019 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 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/version.dart';
import 'package:flutter_tools/src/web/chrome.dart';
import 'package:flutter_tools/src/web/workflow.dart';
import 'package:mockito/mockito.dart';
import 'package:process/process.dart';
import '../src/common.dart';
import '../src/context.dart';
import '../src/testbed.dart';
void main() {
group('WebWorkflow', () {
Testbed testbed;
MockPlatform noEnvironment;
MockPlatform notSupported;
MockPlatform windows;
MockPlatform linux;
MockPlatform macos;
MockProcessManager mockProcessManager;
MockFlutterVersion unstable;
MockFlutterVersion stable;
WebWorkflow workflow;
setUpAll(() {
unstable = MockFlutterVersion(false);
stable = MockFlutterVersion(true);
noEnvironment = MockPlatform(environment: const <String, String>{});
notSupported = MockPlatform(linux: false, windows: false, macos: false);
windows = MockPlatform(windows: true);
linux = MockPlatform(linux: true);
macos = MockPlatform(macos: true);
workflow = const WebWorkflow();
mockProcessManager = MockProcessManager();
testbed = Testbed(setup: () async {
fs.file('chrome').createSync();
when(mockProcessManager.canRun('chrome')).thenReturn(true);
}, overrides: <Type, Generator>{
FlutterVersion: () => unstable,
ProcessManager: () => mockProcessManager,
});
});
test('does not apply if FLUTTER_WEB is not true', ()=> testbed.run(() {
expect(workflow.appliesToHostPlatform, false);
expect(workflow.canLaunchDevices, false);
expect(workflow.canListDevices, false);
expect(workflow.canListEmulators, false);
}, overrides: <Type, Generator>{
Platform: () => noEnvironment,
}));
test('Applies on Linux', () => testbed.run(() {
expect(workflow.appliesToHostPlatform, true);
expect(workflow.canLaunchDevices, true);
expect(workflow.canListDevices, true);
expect(workflow.canListEmulators, false);
}, overrides: <Type, Generator>{
Platform: () => linux,
}));
test('Applies on macOS', () => testbed.run(() {
expect(workflow.appliesToHostPlatform, true);
expect(workflow.canLaunchDevices, true);
expect(workflow.canListDevices, true);
expect(workflow.canListEmulators, false);
}, overrides: <Type, Generator>{
Platform: () => macos,
}));
test('Applies on Windows', () => testbed.run(() {
expect(workflow.appliesToHostPlatform, true);
expect(workflow.canLaunchDevices, true);
expect(workflow.canListDevices, true);
expect(workflow.canListEmulators, false);
}, overrides: <Type, Generator>{
Platform: () => windows,
}));
test('does not apply on other platforms', () => testbed.run(() {
expect(workflow.appliesToHostPlatform, false);
expect(workflow.canLaunchDevices, false);
expect(workflow.canListDevices, false);
expect(workflow.canListEmulators, false);
}, overrides: <Type, Generator>{
Platform: () => notSupported,
}));
test('does not apply on stable brnach', () => testbed.run(() {
expect(workflow.appliesToHostPlatform, false);
expect(workflow.canLaunchDevices, false);
expect(workflow.canListDevices, false);
expect(workflow.canListEmulators, false);
}, overrides: <Type, Generator>{
Platform: () => macos,
FlutterVersion: () => stable,
}));
});
}
class MockFlutterVersion extends Mock implements FlutterVersion {
MockFlutterVersion(this.isStable);
@override
final bool isStable;
}
class MockProcessManager extends Mock implements ProcessManager {}
class MockPlatform extends Mock implements Platform {
MockPlatform(
{this.windows = false,
this.macos = false,
this.linux = false,
this.environment = const <String, String>{
'FLUTTER_WEB': 'true',
kChromeEnvironment: 'chrome',
}});
final bool windows;
final bool macos;
final bool linux;
@override
final Map<String, String> environment;
@override
bool get isLinux => linux;
@override
bool get isMacOS => macos;
@override
bool get isWindows => windows;
}
...@@ -42,6 +42,6 @@ dependencies: ...@@ -42,6 +42,6 @@ dependencies:
vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies: dev_dependencies:
mockito: 4.0.0 mockito: 4.1.0
# PUBSPEC CHECKSUM: b48d # PUBSPEC CHECKSUM: ef8e
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment