[web] Migrate web-only initialization APIs (#129856)

- `ui_web.warmupEngine`
- `ui_web.setPluginHandler`
- `ui_web.debugEmulateFlutterTesterEnvironment`
This commit is contained in:
Mouad Debbar 2023-07-13 16:12:10 -04:00 committed by GitHub
parent 157660afc1
commit 87d5214da6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 21 additions and 23 deletions

View file

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:ui' as ui;
import 'dart:ui_web' as ui_web;
import '../services/dom.dart';
@ -23,9 +23,7 @@ platform.TargetPlatform get defaultTargetPlatform {
final platform.TargetPlatform? _testPlatform = () {
platform.TargetPlatform? result;
assert(() {
// This member is only available in the web's dart:ui implementation.
// ignore: undefined_prefixed_name
if (ui.debugEmulateFlutterTesterEnvironment as bool) {
if (ui_web.debugEmulateFlutterTesterEnvironment) {
result = platform.TargetPlatform.android;
}
return true;

View file

@ -219,6 +219,7 @@ String generateTestEntrypoint({
// @dart = ${languageVersion.major}.${languageVersion.minor}
import 'org-dartlang-app:///$relativeTestPath' as test;
import 'dart:ui' as ui;
import 'dart:ui_web' as ui_web;
import 'dart:html';
import 'dart:js';
${testConfigPath != null ? "import '${Uri.file(testConfigPath)}' as test_config;" : ""}
@ -227,7 +228,7 @@ String generateTestEntrypoint({
import 'package:test_api/backend.dart';
Future<void> main() async {
ui.debugEmulateFlutterTesterEnvironment = true;
ui_web.debugEmulateFlutterTesterEnvironment = true;
await ui.webOnlyInitializePlatform();
webGoldenComparator = DefaultWebGoldenComparator(Uri.parse('${Uri.file(absolutePath)}'));
(ui.window as dynamic).debugOverrideDevicePixelRatio(3.0);

View file

@ -19,7 +19,7 @@ String generateMainDartFile(String appEntrypoint, {
'',
'// ignore_for_file: type=lint',
'',
"import 'dart:ui' as ui;",
"import 'dart:ui_web' as ui_web;",
"import 'dart:async';",
'',
"import '$appEntrypoint' as entrypoint;",
@ -29,7 +29,7 @@ String generateMainDartFile(String appEntrypoint, {
'typedef _NullaryFunction = dynamic Function();',
'',
'Future<void> main() async {',
' await ui.webOnlyWarmupEngine(',
' await ui_web.bootstrapEngine(',
' runApp: () {',
' if (entrypoint.main is _UnaryFunction) {',
' return (entrypoint.main as _UnaryFunction)(<String>[]);',

View file

@ -118,7 +118,7 @@ void main() {
expect(generated, contains("import 'package:foo/main.dart' as entrypoint;"));
// Main
expect(generated, contains('ui.webOnlyWarmupEngine('));
expect(generated, contains('ui_web.bootstrapEngine('));
expect(generated, contains('entrypoint.main as _'));
}, overrides: <Type, Generator>{
TemplateRenderer: () => const MustacheTemplateRenderer(),
@ -270,7 +270,7 @@ void main() {
expect(generated, contains("import 'package:foo/main.dart' as entrypoint;"));
// Main
expect(generated, contains('ui.webOnlyWarmupEngine('));
expect(generated, contains('ui_web.bootstrapEngine('));
expect(generated, contains('entrypoint.main as _'));
}, overrides: <Type, Generator>{
Platform: () => windows,
@ -295,7 +295,7 @@ void main() {
expect(generated, contains("import 'package:foo/main.dart' as entrypoint;"));
// Main
expect(generated, contains('ui.webOnlyWarmupEngine('));
expect(generated, contains('ui_web.bootstrapEngine('));
expect(generated, contains('entrypoint.main as _'));
}, overrides: <Type, Generator>{
TemplateRenderer: () => const MustacheTemplateRenderer(),
@ -351,7 +351,7 @@ void main() {
expect(generated, contains("import 'package:foo/main.dart' as entrypoint;"));
// Main
expect(generated, contains('ui.webOnlyWarmupEngine('));
expect(generated, contains('ui_web.bootstrapEngine('));
expect(generated, contains('entrypoint.main as _'));
}, overrides: <Type, Generator>{
TemplateRenderer: () => const MustacheTemplateRenderer(),

View file

@ -730,8 +730,8 @@ void main() {
final String entrypointContents =
fileSystem.file(webDevFS.mainUri).readAsStringSync();
expect(entrypointContents, contains('// Flutter web bootstrap script'));
expect(entrypointContents, contains("import 'dart:ui' as ui;"));
expect(entrypointContents, contains('await ui.webOnlyWarmupEngine('));
expect(entrypointContents, contains("import 'dart:ui_web' as ui_web;"));
expect(entrypointContents, contains('await ui_web.bootstrapEngine('));
expect(logger.statusText, contains('Restarted application in'));
expect(result.code, 0);

View file

@ -4,6 +4,7 @@
import 'dart:async';
import 'dart:ui' as ui;
import 'dart:ui_web' as ui_web;
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
@ -57,13 +58,11 @@ class Registrar extends BinaryMessenger {
/// previously-registered handler and replaces it with the handler
/// from this object.
///
/// This method uses a function called `webOnlySetPluginHandler` in
/// the [dart:ui] library. That function is only available when
/// This method uses a function called `setPluginHandler` in
/// the [dart:ui_web] library. That function is only available when
/// compiling for the web.
void registerMessageHandler() {
// The `ui.webOnlySetPluginHandler` function below is only defined in the Web dart:ui.
// ignore: undefined_function, avoid_dynamic_calls
ui.webOnlySetPluginHandler(handleFrameworkMessage);
ui_web.setPluginHandler(handleFrameworkMessage);
}
/// Receives a platform message from the framework.
@ -101,7 +100,7 @@ class Registrar extends BinaryMessenger {
/// the following:
///
/// ```dart
/// ui.webOnlySetPluginHandler(webPluginRegistrar.handleFrameworkMessage);
/// ui_web.setPluginHandler(handleFrameworkMessage);
/// ```
Future<void> handleFrameworkMessage(
String channel,

View file

@ -6,7 +6,7 @@
library;
import 'dart:async';
import 'dart:ui' as ui;
import 'dart:ui_web' as ui_web;
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@ -14,7 +14,7 @@ import 'package:flutter_web_plugins/flutter_web_plugins.dart';
void main() {
// Disabling tester emulation because this test relies on real message channel communication.
ui.debugEmulateFlutterTesterEnvironment = false; // ignore: undefined_prefixed_name
ui_web.debugEmulateFlutterTesterEnvironment = false;
group('Plugin Event Channel', () {
setUp(() {

View file

@ -5,7 +5,7 @@
@TestOn('chrome') // Uses web-only Flutter SDK
library;
import 'dart:ui' as ui;
import 'dart:ui_web' as ui_web;
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@ -31,7 +31,7 @@ class TestPlugin {
void main() {
// Disabling tester emulation because this test relies on real message channel communication.
ui.debugEmulateFlutterTesterEnvironment = false; // ignore: undefined_prefixed_name
ui_web.debugEmulateFlutterTesterEnvironment = false;
group('Plugin Registry', () {
setUp(() {