#flutter #dart
Вопрос:
У меня есть одна проблема, нужна помощь, я хочу экспортировать виджет в Uint8List, используя параметр RepaintBoundary для BitmapDescriptor.fromBytes()
но это не работает, и это мой код
import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'dart:ui' as ui; import 'package:flutter/services.dart'; class MarkerWidget extends StatefulWidget { MarkerWidget({Key? key}) : super(key: key); GlobalKey widgetKey = GlobalKey(); @override _MarkerWidgetState createState() =gt; _MarkerWidgetState(); Futurelt;Uint8Listgt; captureWidget() async { final RenderRepaintBoundary boundary = widgetKey.currentContext!.findRenderObject()! as RenderRepaintBoundary; final ui.Image image = await boundary.toImage(); final ByteData? byteData = await image.toByteData(format: ui.ImageByteFormat.png); final Uint8List pngBytes = byteData!.buffer.asUint8List(); return pngBytes; } } class _MarkerWidgetState extends Statelt;MarkerWidgetgt; { @override Widget build(BuildContext context) { return RepaintBoundary( key: widget.widgetKey, child: SizedBox( width: 150, height: 50, child: Row( children: [ Image.asset("images/download.png", height: 45), Column( children: [ Row( children: const [ Text("Title"), Text("Sub title"), ], ), const Text("Other description"), ], ), ], ), ), ); } }
и это код вызывающего абонента
lt;codegt; Futurelt;voidgt; gotoNewPosition(CameraPosition cameraPosition) async { MarkerId mID = MarkerId(cameraPosition.target.latitude.toString()); MarkerWidget image = MarkerWidget(); print("before cupture widget "); Uint8List widgetByteData = await image.captureWidget(); print("after capture widget..."); //-- create marker Marker newMarker = Marker( markerId: mID, position: cameraPosition.target, visible: true, icon: BitmapDescriptor.fromBytes(widgetByteData), infoWindow: InfoWindow( title: cameraPosition.target.latitude.toString(), snippet: "marker desc", onTap: () { print("tab on " cameraPosition.target.latitude.toString() " marker..."); } )); //-- marker _mapController! .animateCamera(CameraUpdate.newCameraPosition(cameraPosition)); setState(() { myMarkers.add(newMarker); }); } lt;codegt;
Это возвращает это сообщение об ошибке [ОШИБКА:flutter/lib/ui/ui_dart_state.cc(209)] Необработанное исключение: оператор проверки Null, используемый для нулевого значения
Как я могу решить эту проблему, спасибо вам. Пурипат.