Unverified Commit 4d3b51e2 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Allow flutter web to be compiled with flutter (#32360)

parent e8c5c981
// 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());
}
<!-- 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>
\ No newline at end of file
......@@ -49,16 +49,22 @@ enum TargetPlatform {
// and we'd never be able to introduce dedicated behavior for that platform
// (since doing so would be a big breaking change).
TargetPlatform get defaultTargetPlatform {
// TODO(jonahwilliams): consider where this constant should live.
const bool kIsWeb = identical(1, 1.0);
TargetPlatform result;
if (Platform.isIOS) {
result = TargetPlatform.iOS;
} else if (Platform.isAndroid) {
if (kIsWeb) {
result = TargetPlatform.android;
} else if (Platform.isFuchsia) {
result = TargetPlatform.fuchsia;
} else {
if (Platform.isIOS) {
result = TargetPlatform.iOS;
} else if (Platform.isAndroid) {
result = TargetPlatform.android;
} else if (Platform.isFuchsia) {
result = TargetPlatform.fuchsia;
}
}
assert(() {
if (Platform.environment.containsKey('FLUTTER_TEST'))
if (!kIsWeb && Platform.environment.containsKey('FLUTTER_TEST'))
result = TargetPlatform.android;
return true;
}());
......
......@@ -3,6 +3,8 @@
// found in the LICENSE file.
import '../application_package.dart';
import '../asset.dart';
import '../base/common.dart';
import '../base/context.dart';
import '../base/file_system.dart';
import '../base/io.dart';
......@@ -10,6 +12,7 @@ import '../base/logger.dart';
import '../base/platform.dart';
import '../base/process_manager.dart';
import '../build_info.dart';
import '../bundle.dart';
import '../device.dart';
import '../globals.dart';
import '../project.dart';
......@@ -111,6 +114,13 @@ class WebDevice extends Device {
printError('Failed to compile ${package.name} to JavaScript');
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;
_server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
_server.listen(_basicAssetServer);
......@@ -141,7 +151,7 @@ class WebDevice extends Device {
await request.response.close();
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;
File file;
String contentType;
......@@ -152,8 +162,9 @@ class WebDevice extends Device {
file = fs.file(fs.path.join(getWebBuildDirectory(), 'main.dart.js'));
contentType = 'text/javascript';
} else {
file = fs.file(fs.path.join(getAssetBuildDirectory(), uri.path));
file = fs.file(fs.path.join(getAssetBuildDirectory(), uri.path.replaceFirst('/assets/', '')));
}
if (!file.existsSync()) {
request.response.statusCode = HttpStatus.notFound;
await request.response.close();
......@@ -201,7 +212,7 @@ class ChromeLauncher {
Future<void> launch(String host) async {
if (platform.isMacOS) {
await processManager.start(<String>[
return processManager.start(<String>[
_kMacosLocation,
host,
]);
......
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