Allow flutter web to be compiled with flutter (#32360)
This commit is contained in:
parent
e8c5c98132
commit
4d3b51e284
16
examples/flutter_gallery/lib/main_web.dart
Normal file
16
examples/flutter_gallery/lib/main_web.dart
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
// Thanks for checking out Flutter!
|
||||||
|
// Like what you see? Tweet us @FlutterDev
|
||||||
|
|
||||||
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'gallery/app.dart';
|
||||||
|
|
||||||
|
Future<void> main() async {
|
||||||
|
await ui.webOnlyInitializePlatform(); // ignore: undefined_function
|
||||||
|
runApp(const GalleryApp());
|
||||||
|
}
|
12
examples/flutter_gallery/web/index.html
Normal file
12
examples/flutter_gallery/web/index.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!-- 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. -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Flutter Gallery</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="main.dart.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -49,16 +49,22 @@ enum TargetPlatform {
|
|||||||
// and we'd never be able to introduce dedicated behavior for that platform
|
// and we'd never be able to introduce dedicated behavior for that platform
|
||||||
// (since doing so would be a big breaking change).
|
// (since doing so would be a big breaking change).
|
||||||
TargetPlatform get defaultTargetPlatform {
|
TargetPlatform get defaultTargetPlatform {
|
||||||
|
// TODO(jonahwilliams): consider where this constant should live.
|
||||||
|
const bool kIsWeb = identical(1, 1.0);
|
||||||
TargetPlatform result;
|
TargetPlatform result;
|
||||||
if (Platform.isIOS) {
|
if (kIsWeb) {
|
||||||
result = TargetPlatform.iOS;
|
|
||||||
} else if (Platform.isAndroid) {
|
|
||||||
result = TargetPlatform.android;
|
result = TargetPlatform.android;
|
||||||
} else if (Platform.isFuchsia) {
|
} else {
|
||||||
result = TargetPlatform.fuchsia;
|
if (Platform.isIOS) {
|
||||||
|
result = TargetPlatform.iOS;
|
||||||
|
} else if (Platform.isAndroid) {
|
||||||
|
result = TargetPlatform.android;
|
||||||
|
} else if (Platform.isFuchsia) {
|
||||||
|
result = TargetPlatform.fuchsia;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
assert(() {
|
assert(() {
|
||||||
if (Platform.environment.containsKey('FLUTTER_TEST'))
|
if (!kIsWeb && Platform.environment.containsKey('FLUTTER_TEST'))
|
||||||
result = TargetPlatform.android;
|
result = TargetPlatform.android;
|
||||||
return true;
|
return true;
|
||||||
}());
|
}());
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
import '../application_package.dart';
|
import '../application_package.dart';
|
||||||
|
import '../asset.dart';
|
||||||
|
import '../base/common.dart';
|
||||||
import '../base/context.dart';
|
import '../base/context.dart';
|
||||||
import '../base/file_system.dart';
|
import '../base/file_system.dart';
|
||||||
import '../base/io.dart';
|
import '../base/io.dart';
|
||||||
@ -10,6 +12,7 @@ import '../base/logger.dart';
|
|||||||
import '../base/platform.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 '../device.dart';
|
import '../device.dart';
|
||||||
import '../globals.dart';
|
import '../globals.dart';
|
||||||
import '../project.dart';
|
import '../project.dart';
|
||||||
@ -111,6 +114,13 @@ class WebDevice extends Device {
|
|||||||
printError('Failed to compile ${package.name} to JavaScript');
|
printError('Failed to compile ${package.name} to JavaScript');
|
||||||
return LaunchResult.failed();
|
return LaunchResult.failed();
|
||||||
}
|
}
|
||||||
|
final AssetBundle assetBundle = AssetBundleFactory.instance.createBundle();
|
||||||
|
final int build = await assetBundle.build();
|
||||||
|
if (build != 0) {
|
||||||
|
throwToolExit('Error: Failed to build asset bundle');
|
||||||
|
}
|
||||||
|
await writeBundle(fs.directory(getAssetBuildDirectory()), assetBundle.entries);
|
||||||
|
|
||||||
_package = package;
|
_package = package;
|
||||||
_server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
|
_server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
|
||||||
_server.listen(_basicAssetServer);
|
_server.listen(_basicAssetServer);
|
||||||
@ -141,7 +151,7 @@ class WebDevice extends Device {
|
|||||||
await request.response.close();
|
await request.response.close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Resolve all get requests to the build/web/asset directory.
|
// Resolve all get requests to the build/web/ or build/flutter_assets directory.
|
||||||
final Uri uri = request.uri;
|
final Uri uri = request.uri;
|
||||||
File file;
|
File file;
|
||||||
String contentType;
|
String contentType;
|
||||||
@ -152,8 +162,9 @@ class WebDevice extends Device {
|
|||||||
file = fs.file(fs.path.join(getWebBuildDirectory(), 'main.dart.js'));
|
file = fs.file(fs.path.join(getWebBuildDirectory(), 'main.dart.js'));
|
||||||
contentType = 'text/javascript';
|
contentType = 'text/javascript';
|
||||||
} else {
|
} else {
|
||||||
file = fs.file(fs.path.join(getAssetBuildDirectory(), uri.path));
|
file = fs.file(fs.path.join(getAssetBuildDirectory(), uri.path.replaceFirst('/assets/', '')));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file.existsSync()) {
|
if (!file.existsSync()) {
|
||||||
request.response.statusCode = HttpStatus.notFound;
|
request.response.statusCode = HttpStatus.notFound;
|
||||||
await request.response.close();
|
await request.response.close();
|
||||||
@ -201,7 +212,7 @@ class ChromeLauncher {
|
|||||||
|
|
||||||
Future<void> launch(String host) async {
|
Future<void> launch(String host) async {
|
||||||
if (platform.isMacOS) {
|
if (platform.isMacOS) {
|
||||||
await processManager.start(<String>[
|
return processManager.start(<String>[
|
||||||
_kMacosLocation,
|
_kMacosLocation,
|
||||||
host,
|
host,
|
||||||
]);
|
]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user