Я пытаюсь преобразовать виджет Flutter в изображение. Этот код работает правильно в режиме отладки APK, но показывает исAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Я пытаюсь преобразовать виджет Flutter в изображение. Этот код работает правильно в режиме отладки APK, но показывает ис

Сообщение Anonymous »

E/flutter (1555): [ОШИБКА:flutter/runtime/dart_vm_initializer.cc(41)] Необработанное исключение: LateInitializationError: Локальный «результат» не был инициализирован. E/flutter (1555): # 0 LateError._throwLocalNotInitialized (dart:_internal-patch/internal_patch.dart:190) E/flutter (1555): # 1 RenderObject.debugNeedsPaint (пакет: flutter/src/rendering/object.dart) E/flutter (1555): #2 _HomeScreenState._capturePng (пакет:geeta_gyandhara/screens/home/home_screen.dart:48) E/flutter (1555): #3 _HomeScreenState.buildShlokaCard. (пакет:geeta_gyandhara/screens /home/home_screen.dart:169) E/flutter (1555): #4 _InkResponseState.handleTap (пакет:flutter/src/material/ink_well.dart:1171) E/flutter (1555): #5 GestureRecouncer.invokeCallback (пакет :flutter/src/gestures/recouncer.dart:344) E/flutter ( 1555): #6 TapGestureRecouncer.handleTapUp (пакет:flutter/src/gestures/tap.dart:652) E/flutter ( 1555): #7 BaseTapGestureRecouncer ._checkUp (пакет:flutter/src/gestures/tap.dart:309) E/flutter (1555): #8 BaseTapGestureRecouncer.acceptGesture (пакет:flutter/src/gestures/tap.dart:279) E/flutter (1555) : #9 GestureArenaManager.sweep (пакет:flutter/src/gestures/arena.dart:167) E/flutter ( 1555): #10 GestureBinding.handleEvent (пакет:flutter/src/gestures/binding.dart:499) E/ flutter (1555): #11 GestureBinding.dispatchEvent (пакет:flutter/src/gestures/binding.dart:475) E/flutter (1555): #12 RendererBinding.dispatchEvent (пакет:flutter/src/rendering/binding.dart: 425) E/flutter (1555): #13 GestureBinding._handlePointerEventImmediately (пакет:flutter/src/gestures/binding.dart:420) E/flutter (1555): #14 GestureBinding.handlePointerEvent (пакет:flutter/src/gestures/ привязка.dart:383) E/flutter (1555): #15 GestureBinding._flushPointerEventQueue (пакет:flutter/src/gestures/binding.dart:330) E/flutter (1555): #16 GestureBinding._handlePointerDataPacket (пакет:flutter/ src/gestures/binding.dart:299) E/flutter (1555): #17 _invoke1 (dart:ui/hooks.dart:328) E/flutter (1555): #18 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher. dart:442) E/flutter (1555): #19 _dispatchPointerDataPacket (dart:ui/hooks.dart:262) E/flutter (1555):

Future _capturePng(GlobalKey key) async {
RenderRepaintBoundary? boundary =
key.currentContext!.findRenderObject() as RenderRepaintBoundary?;
if (boundary == null) {
print("Boundary is not available.");
return Future.delayed(const Duration(milliseconds: 20), () => _capturePng(key));
}

if (boundary.debugNeedsPaint) {
print("Waiting for boundary to be painted.");
await Future.delayed(const Duration(milliseconds: 20));
return _capturePng(key); // Recursively retry capturing
}

ui.Image image = await boundary.toImage(pixelRatio: 3.0);
ByteData? byteData = await image.toByteData(format: ui.ImageByteFormat.png);
if (byteData == null) {
throw 'Error converting image to ByteData';
}
return byteData.buffer.asUint8List();

}


Widget buildShlokaCard(
String hindiText, String englishText, String sanskritText, img,GlobalKey key) {
return RepaintBoundary(
key: key,
child: Container(
width: MediaQuery.sizeOf(context).width.w,
decoration: BoxDecoration(
color: colorWhite,
borderRadius: BorderRadius.circular(12.r),
),
padding: EdgeInsets.symmetric(horizontal: 10.w),
margin: EdgeInsets.symmetric(horizontal: 10.0.w),
child: Stack(
children: [
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextWidget(
text: hindiText,
color: Colors.black, // Adjust color as needed
fontWeight: FontWeight.bold,
fontSize: 18.0,
textAlign: TextAlign.center,
),
heightBox(10.h),
TextWidget(
text: englishText,
color: Colors.black, // Adjust color as needed
fontWeight: FontWeight.normal,
fontSize: 16.0,
textAlign: TextAlign.center,
),
heightBox(10.h),
TextWidget(
text: sanskritText,
color: Colors.black, // Adjust color as needed
fontWeight: FontWeight.normal,
fontSize: 16.0,
textAlign: TextAlign.center,
),
],
),

Positioned(
bottom: 0,
right: 0,
child: IconButton(onPressed: (){

_capturePng(key).then((imageBytes) {
if (imageBytes != null) {
// Handle captured image bytes here (e.g., save/share/etc.)
_shareImage(imageBytes);

} else {
print('Error capturing image');
}
});
}, icon: const Icon(Icons.share),),
)

],
),
),
);
}

void _shareImage(Uint8List imageBytes) async {
try {
final tempDir = await getTemporaryDirectory();
final file = await File('${tempDir.path}/shloka_image.png').create();
await file.writeAsBytes(imageBytes);

// Create an XFile instance from the file path
final xFile = XFile(file.path);

// Share the file
await Share.shareXFiles([xFile], text: 'Check out this shloka from Bhagavad Gita!');
} catch (e) {

print('Error sharing image: $e');
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... roperly-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»