blob: 13662b627b2a5ec8fdbff14e94d4753e67d02f3e [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
part of ui;
Future<void> webOnlyInitializePlatform({
engine.AssetManager? assetManager,
}) {
final Future<void> initializationFuture =
_initializePlatform(assetManager: assetManager);
scheduleMicrotask(() {
// Access [engine.lineLookup] to force the lazy unpacking of line break data
// now. Removing this line won't break anything. It's just an optimization
// to make the unpacking happen while we are waiting for network requests.
engine.lineLookup;
});
return initializationFuture;
}
Future<void> _initializePlatform({
engine.AssetManager? assetManager,
}) async {
engine.initializeEngine();
// This needs to be after `webOnlyInitializeEngine` because that is where the
// canvaskit script is added to the page.
if (engine.useCanvasKit) {
await engine.initializeCanvasKit();
}
assetManager ??= const engine.AssetManager();
await webOnlySetAssetManager(assetManager);
if (engine.useCanvasKit) {
await engine.skiaFontCollection.ensureFontsLoaded();
} else {
await _fontCollection!.ensureFontsLoaded();
}
_webOnlyIsInitialized = true;
}
// TODO(yjbanov): can we make this late non-null? See https://github.com/dart-lang/sdk/issues/42214
engine.AssetManager? _assetManager;
engine.FontCollection? _fontCollection;
bool _webOnlyIsInitialized = false;
bool get webOnlyIsInitialized => _webOnlyIsInitialized;
Future<void> webOnlySetAssetManager(engine.AssetManager assetManager) async {
// ignore: unnecessary_null_comparison
assert(assetManager != null,
'Cannot set assetManager to null');
if (assetManager == _assetManager) {
return;
}
_assetManager = assetManager;
if (engine.useCanvasKit) {
engine.ensureSkiaFontCollectionInitialized();
} else {
_fontCollection ??= engine.FontCollection();
_fontCollection!.clear();
}
if (_assetManager != null) {
if (engine.useCanvasKit) {
await engine.skiaFontCollection.registerFonts(_assetManager!);
} else {
await _fontCollection!.registerFonts(_assetManager!);
}
}
if (debugEmulateFlutterTesterEnvironment) {
if (engine.useCanvasKit) {
engine.skiaFontCollection.debugRegisterTestFonts();
} else {
_fontCollection!.debugRegisterTestFonts();
}
}
}
bool get debugEmulateFlutterTesterEnvironment =>
_debugEmulateFlutterTesterEnvironment;
set debugEmulateFlutterTesterEnvironment(bool value) {
_debugEmulateFlutterTesterEnvironment = value;
if (_debugEmulateFlutterTesterEnvironment) {
const Size logicalSize = Size(800.0, 600.0);
engine.window.webOnlyDebugPhysicalSizeOverride =
logicalSize * window.devicePixelRatio;
}
}
bool _debugEmulateFlutterTesterEnvironment = false;
engine.AssetManager get webOnlyAssetManager => _assetManager!;
engine.FontCollection get webOnlyFontCollection => _fontCollection!;