#android #ios #flutter #dart
Вопрос:
Я пытаюсь отобразить изображение из виджета, содержащего другие изображения. Цель этого состоит в том, чтобы использовать эти сгенерированные изображения в качестве маркеров Google Maps.
В настоящее время я могу отображать изображение из виджета, но изображения(ресурсы) в этом виджете отсутствуют. Я заметил, что изображения в Flutter загружаются асинхронно, и у меня такое чувство, что такое поведение вызывает проблему — изображение виджета отображается до того, как активы успеют загрузиться. Однако я не смог решить эту проблему.
Код, который я использую для визуализации изображений:
class WidgetToImage {
static Future<ByteData?> generate(Widget widget) async {
final RenderRepaintBoundary repaintBoundary = RenderRepaintBoundary();
final RenderView renderView = RenderView(
child: RenderPositionedBox(
child: repaintBoundary,
alignment: Alignment.center,
),
configuration: ViewConfiguration(
size: ui.window.physicalSize / ui.window.devicePixelRatio,
devicePixelRatio: ui.window.devicePixelRatio,
),
window: ui.window,
);
final PipelineOwner pipelineOwner = PipelineOwner();
pipelineOwner.rootNode = renderView;
renderView.prepareInitialFrame();
BuildOwner buildOwner = BuildOwner(focusManager: FocusManager());
final rootElement = RenderObjectToWidgetAdapter<RenderBox>(
container: repaintBoundary,
child: Directionality(
textDirection: TextDirection.ltr,
child: Theme(
data: Appearances.lightTheme,
child: widget,
),
),
).attachToRenderTree(buildOwner);
buildOwner.buildScope(rootElement);
buildOwner.finalizeTree();
pipelineOwner.flushLayout();
pipelineOwner.flushCompositingBits();
pipelineOwner.flushPaint();
final image = await repaintBoundary.toImage(pixelRatio: ui.window.devicePixelRatio);
return image.toByteData(format: ui.ImageByteFormat.png);
}
}