[CP] Migrate web-only initialization APIs (#133891)

This CP lands PR https://github.com/flutter/flutter/pull/129856 into `stable`.

The PR above was part of a engine+framework change that got split in half during the stable cut, so now users are seeing some warnings that they can't act on.

(Those warnings were only intended for people who were using our methods manually, rather than using normal flutter tooling).

## Issues

Fixes https://github.com/flutter/flutter/issues/133069
This commit is contained in:
David Iglesias 2023-09-05 18:44:49 -07:00 committed by GitHub
parent 441432b5be
commit ad5235b4e4
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(() {