Виджет DefaultAssetBundle
Виджет DefaultAssetBundle принимает
AssetBundle
в параметре bundle и оборачивает child.
Внутри поддерева DefaultAssetBundle.of
и Image.asset
будут читать этот набор, а не
rootBundle.
Синтаксис
DefaultAssetBundle(
bundle: customBundle,
child: child,
)
Параметры
| Параметр | Описание |
|---|---|
bundle |
Набор активов для дочерних виджетов. Обязательный параметр. |
child |
Поддерево, которое получит новый AssetBundle.
Обязательный параметр.
|
Пример
Давайте явно передадим rootBundle дочернему Image:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: DefaultAssetBundle(
bundle: rootBundle,
child: Scaffold(
body: Center(
child: Image.asset('assets/pic.png', width: 120),
),
),
),
),
);
}
На экране картинка загрузится из того же набора, что и без обёртки, но путь к bundle задан явно.
Пример
Давайте прочитаем bundle из контекста через Builder:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: DefaultAssetBundle(
bundle: rootBundle,
child: Builder(
builder: (context) {
final same = DefaultAssetBundle.of(context);
return Scaffold(
body: Center(
child: Text('${identical(same, rootBundle)}'),
),
);
},
),
),
),
);
}
На экране текст 'true' покажет,
что контекст видит переданный rootBundle.
Смотрите также
-
константа
rootBundle,
которая хранит активы всего приложения -
класс
AssetBundle,
который описывает интерфейс чтения файлов -
метод
asset,
который берёт bundle из контекста -
класс
AssetImage,
который тоже использует bundle из контекста