Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit dc71256

Browse files
authored
[web] Move webOnlyAssetManager to dart:ui_web (#42642)
Moving `webOnlyAssetManager` to `dart:ui_web` and renaming it to simply `assetManager`. This will make it easier for plugins and apps to get a hold of the asset manager without doing `dart:ui` shims or other shenanigans. Part of flutter/flutter#126831
1 parent eb372db commit dc71256

File tree

16 files changed

+65
-58
lines changed

16 files changed

+65
-58
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,7 +1893,6 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/semantics.dart + ../../../flutter/LICENS
18931893
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine.dart + ../../../flutter/LICENSE
18941894
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/alarm_clock.dart + ../../../flutter/LICENSE
18951895
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/app_bootstrap.dart + ../../../flutter/LICENSE
1896-
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/assets.dart + ../../../flutter/LICENSE
18971896
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/browser_detection.dart + ../../../flutter/LICENSE
18981897
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvas_pool.dart + ../../../flutter/LICENSE
18991898
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/canvas.dart + ../../../flutter/LICENSE
@@ -2109,6 +2108,7 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/text.dart + ../../../flutter/LICENSE
21092108
ORIGIN: ../../../flutter/lib/web_ui/lib/tile_mode.dart + ../../../flutter/LICENSE
21102109
ORIGIN: ../../../flutter/lib/web_ui/lib/ui.dart + ../../../flutter/LICENSE
21112110
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web.dart + ../../../flutter/LICENSE
2111+
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/asset_manager.dart + ../../../flutter/LICENSE
21122112
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/navigation/platform_location.dart + ../../../flutter/LICENSE
21132113
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/navigation/url_strategy.dart + ../../../flutter/LICENSE
21142114
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/platform_view_registry.dart + ../../../flutter/LICENSE
@@ -4572,7 +4572,6 @@ FILE: ../../../flutter/lib/web_ui/lib/semantics.dart
45724572
FILE: ../../../flutter/lib/web_ui/lib/src/engine.dart
45734573
FILE: ../../../flutter/lib/web_ui/lib/src/engine/alarm_clock.dart
45744574
FILE: ../../../flutter/lib/web_ui/lib/src/engine/app_bootstrap.dart
4575-
FILE: ../../../flutter/lib/web_ui/lib/src/engine/assets.dart
45764575
FILE: ../../../flutter/lib/web_ui/lib/src/engine/browser_detection.dart
45774576
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvas_pool.dart
45784577
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/canvas.dart
@@ -4788,6 +4787,7 @@ FILE: ../../../flutter/lib/web_ui/lib/text.dart
47884787
FILE: ../../../flutter/lib/web_ui/lib/tile_mode.dart
47894788
FILE: ../../../flutter/lib/web_ui/lib/ui.dart
47904789
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web.dart
4790+
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/asset_manager.dart
47914791
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/navigation/platform_location.dart
47924792
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/navigation/url_strategy.dart
47934793
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/platform_view_registry.dart

lib/web_ui/lib/initialization.dart

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,18 @@ set debugEmulateFlutterTesterEnvironment(bool value) {
111111
bool _debugEmulateFlutterTesterEnvironment = false;
112112

113113
/// Provides the asset manager.
114-
// TODO(yjbanov): this function should not return a private type. Instead, we
115-
// should create a public interface for the returned value that's
116-
// implemented by the engine.
117-
// https://github.com/flutter/flutter/issues/100394
118-
engine.AssetManager get webOnlyAssetManager => engine.assetManager;
114+
// TODO(mdebbar): Deprecate this and remove it.
115+
// https://github.com/flutter/flutter/issues/127395
116+
ui_web.AssetManager get webOnlyAssetManager {
117+
assert(() {
118+
engine.printWarning(
119+
'The webOnlyAssetManager getter is deprecated and will be removed in a '
120+
'future release. Please use `assetManager` from `dart:ui_web` instead.',
121+
);
122+
return true;
123+
}());
124+
return ui_web.assetManager;
125+
}
119126

120127
/// Sets the handler that forwards platform messages to web plugins.
121128
///

lib/web_ui/lib/src/engine.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ library engine;
1717

1818
export 'engine/alarm_clock.dart';
1919
export 'engine/app_bootstrap.dart';
20-
export 'engine/assets.dart';
2120
export 'engine/browser_detection.dart';
2221
export 'engine/canvas_pool.dart';
2322
export 'engine/canvaskit/canvas.dart';

lib/web_ui/lib/src/engine/canvaskit/fonts.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:async';
66
import 'dart:typed_data';
77

88
import 'package:ui/src/engine.dart';
9+
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
910

1011
// This URL was found by using the Google Fonts Developer API to find the URL
1112
// for Roboto. The API warns that this URL is not stable. In order to update
@@ -109,7 +110,7 @@ class SkiaFontCollection implements FlutterFontCollection {
109110
loadedRoboto = true;
110111
}
111112
for (final FontAsset fontAsset in family.fontAssets) {
112-
final String url = assetManager.getAssetUrl(fontAsset.asset);
113+
final String url = ui_web.assetManager.getAssetUrl(fontAsset.asset);
113114
pendingDownloads.add(_downloadFont(fontAsset.asset, url, family.name));
114115
}
115116
}

lib/web_ui/lib/src/engine/canvaskit/renderer.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'dart:typed_data';
88

99
import 'package:ui/src/engine.dart';
1010
import 'package:ui/ui.dart' as ui;
11+
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
1112

1213
enum CanvasKitVariant {
1314
/// The appropriate variant is chosen based on the browser.
@@ -384,7 +385,7 @@ class CanvasKitRenderer implements Renderer {
384385
if (_programs.containsKey(assetKey)) {
385386
return _programs[assetKey]!;
386387
}
387-
return _programs[assetKey] = assetManager.load(assetKey).then((ByteData data) {
388+
return _programs[assetKey] = ui_web.assetManager.load(assetKey).then((ByteData data) {
388389
return CkFragmentProgram.fromBytes(assetKey, data.buffer.asUint8List());
389390
});
390391
}

lib/web_ui/lib/src/engine/fonts.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'dart:js_interop';
88
import 'dart:typed_data';
99

1010
import 'package:ui/src/engine.dart';
11+
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
1112

1213
class FontAsset {
1314
FontAsset(this.asset, this.descriptors);
@@ -29,8 +30,8 @@ class FontManifest {
2930
final List<FontFamily> families;
3031
}
3132

32-
Future<FontManifest> fetchFontManifest(AssetManager assetManager) async {
33-
final HttpFetchResponse response = await assetManager.loadAsset('FontManifest.json');
33+
Future<FontManifest> fetchFontManifest(ui_web.AssetManager assetManager) async {
34+
final HttpFetchResponse response = await assetManager.loadAsset('FontManifest.json') as HttpFetchResponse;
3435
if (!response.hasPayload) {
3536
printWarning('Font manifest does not exist at `${response.url}` - ignoring.');
3637
return FontManifest(<FontFamily>[]);

lib/web_ui/lib/src/engine/initialization.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'dart:js_interop';
88

99
import 'package:ui/src/engine.dart';
1010
import 'package:ui/ui.dart' as ui;
11+
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
1112
import 'package:web_test_fonts/web_test_fonts.dart';
1213

1314
/// The mode the app is running in.
@@ -56,7 +57,7 @@ void debugEmulateHotRestart() {
5657

5758
/// Fully initializes the engine, including services and UI.
5859
Future<void> initializeEngine({
59-
AssetManager? assetManager,
60+
ui_web.AssetManager? assetManager,
6061
}) async {
6162
await initializeEngineServices(assetManager: assetManager);
6263
await initializeEngineUi();
@@ -114,7 +115,7 @@ void debugResetEngineInitializationState() {
114115
/// * [initializeEngineUi], which is typically called after this function, and
115116
/// puts UI elements on the page.
116117
Future<void> initializeEngineServices({
117-
AssetManager? assetManager,
118+
ui_web.AssetManager? assetManager,
118119
JsFlutterConfiguration? jsConfiguration
119120
}) async {
120121
if (_initializationState != DebugEngineInitializationState.uninitialized) {
@@ -193,7 +194,7 @@ Future<void> initializeEngineServices({
193194
}
194195
};
195196

196-
assetManager ??= AssetManager(assetBase: configuration.assetBase);
197+
assetManager ??= ui_web.AssetManager(assetBase: configuration.assetBase);
197198
_setAssetManager(assetManager);
198199

199200
Future<void> initializeRendererCallback () async => renderer.initialize();
@@ -229,10 +230,10 @@ Future<void> initializeEngineUi() async {
229230
_initializationState = DebugEngineInitializationState.initialized;
230231
}
231232

232-
AssetManager get assetManager => _assetManager!;
233-
AssetManager? _assetManager;
233+
ui_web.AssetManager get engineAssetManager => _assetManager!;
234+
ui_web.AssetManager? _assetManager;
234235

235-
void _setAssetManager(AssetManager assetManager) {
236+
void _setAssetManager(ui_web.AssetManager assetManager) {
236237
if (assetManager == _assetManager) {
237238
return;
238239
}
@@ -253,7 +254,7 @@ Future<void> _downloadAssetFonts() async {
253254
}
254255

255256
if (_assetManager != null) {
256-
await renderer.fontCollection.loadAssetFonts(await fetchFontManifest(assetManager));
257+
await renderer.fontCollection.loadAssetFonts(await fetchFontManifest(ui_web.assetManager));
257258
}
258259
}
259260

lib/web_ui/lib/src/engine/platform_dispatcher.dart

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,10 @@ import 'dart:convert';
77
import 'dart:js_interop';
88
import 'dart:typed_data';
99

10-
import 'package:ui/src/engine/canvaskit/renderer.dart';
11-
import 'package:ui/src/engine/renderer.dart';
1210
import 'package:ui/ui.dart' as ui;
11+
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
1312

14-
import '../engine.dart' show flutterViewEmbedder, platformViewManager, registerHotRestartListener;
15-
import 'clipboard.dart';
16-
import 'dom.dart';
17-
import 'mouse_cursor.dart';
18-
import 'platform_views/message_handler.dart';
19-
import 'plugins.dart';
20-
import 'safe_browser_api.dart';
21-
import 'semantics.dart';
22-
import 'services.dart';
23-
import 'text_editing/text_editing.dart';
24-
import 'util.dart';
25-
import 'window.dart';
13+
import '../engine.dart';
2614

2715
/// Requests that the browser schedule a frame.
2816
///
@@ -688,7 +676,7 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher {
688676

689677
Future<void> _handleFlutterAssetsMessage(String url, ui.PlatformMessageResponseCallback? callback) async {
690678
try {
691-
final HttpFetchResponse response = await ui.webOnlyAssetManager.loadAsset(url);
679+
final HttpFetchResponse response = await ui_web.assetManager.loadAsset(url) as HttpFetchResponse;
692680
final ByteBuffer assetData = await response.asByteBuffer();
693681
replyToPlatformMessage(callback, assetData.asByteData());
694682
} catch (error) {

lib/web_ui/lib/src/engine/skwasm/skwasm_impl/font_collection.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'dart:typed_data';
1010

1111
import 'package:ui/src/engine.dart';
1212
import 'package:ui/src/engine/skwasm/skwasm_impl.dart';
13+
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
1314

1415
// This URL was found by using the Google Fonts Developer API to find the URL
1516
// for Roboto. The API warns that this URL is not stable. In order to update
@@ -99,12 +100,12 @@ class SkwasmFontCollection implements FlutterFontCollection {
99100
Future<FontLoadError?> _downloadFontAsset(FontAsset asset, String family) async {
100101
final HttpFetchResponse response;
101102
try {
102-
response = await assetManager.loadAsset(asset.asset);
103+
response = await ui_web.assetManager.loadAsset(asset.asset) as HttpFetchResponse;
103104
} catch (error) {
104-
return FontDownloadError(assetManager.getAssetUrl(asset.asset), error);
105+
return FontDownloadError(ui_web.assetManager.getAssetUrl(asset.asset), error);
105106
}
106107
if (!response.hasPayload) {
107-
return FontNotFoundError(assetManager.getAssetUrl(asset.asset));
108+
return FontNotFoundError(ui_web.assetManager.getAssetUrl(asset.asset));
108109
}
109110
int length = 0;
110111
final List<JSUint8Array> chunks = <JSUint8Array>[];
@@ -128,7 +129,7 @@ class SkwasmFontCollection implements FlutterFontCollection {
128129
skStringFree(familyNameHandle);
129130
return null;
130131
} else {
131-
return FontInvalidDataError(assetManager.getAssetUrl(asset.asset));
132+
return FontInvalidDataError(ui_web.assetManager.getAssetUrl(asset.asset));
132133
}
133134
}
134135

lib/web_ui/lib/src/engine/skwasm/skwasm_impl/renderer.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'dart:typed_data';
1010
import 'package:ui/src/engine.dart';
1111
import 'package:ui/src/engine/skwasm/skwasm_impl.dart';
1212
import 'package:ui/ui.dart' as ui;
13+
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
1314

1415
class SkwasmRenderer implements Renderer {
1516
late DomCanvasElement sceneElement;
@@ -438,7 +439,7 @@ class SkwasmRenderer implements Renderer {
438439
if (_programs.containsKey(assetKey)) {
439440
return _programs[assetKey]!;
440441
}
441-
return _programs[assetKey] = assetManager.load(assetKey).then((ByteData data) {
442+
return _programs[assetKey] = ui_web.assetManager.load(assetKey).then((ByteData data) {
442443
return SkwasmFragmentProgram.fromBytes(assetKey, data.buffer.asUint8List());
443444
});
444445
}

0 commit comments

Comments
 (0)