前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【错误记录】Flutter 插件报错 ( Methods marked with @UiThread must be executed on the main thread. | 更新最新 SDK )

【错误记录】Flutter 插件报错 ( Methods marked with @UiThread must be executed on the main thread. | 更新最新 SDK )

作者头像
韩曙亮
发布2023-03-29 08:46:18
7960
发布2023-03-29 08:46:18
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、报错信息


在 Flutter 中使用 image_picker 插件时 , 如 【Flutter】Flutter 拍照示例 ( 拍照源码示例 ) 中选择照片后 , 报如下错误 :

代码语言:javascript
复制
W/Binder  (30392): Caught a RuntimeException from the binder stub implementation.
W/Binder  (30392): java.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread. Current thread: Binder:30392_2
W/Binder  (30392): 	at io.flutter.embedding.engine.FlutterJNI.ensureRunningOnMainThread(FlutterJNI.java:992)
W/Binder  (30392): 	at io.flutter.embedding.engine.FlutterJNI.invokePlatformMessageResponseCallback(FlutterJNI.java:779)
W/Binder  (30392): 	at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:144)
W/Binder  (30392): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:238)
W/Binder  (30392): 	at io.flutter.plugins.imagepicker.ImagePickerDelegate.finishWithSuccess(ImagePickerDelegate.java:540)
W/Binder  (30392): 	at io.flutter.plugins.imagepicker.ImagePickerDelegate.handleImageResult(ImagePickerDelegate.java:505)
W/Binder  (30392): 	at io.flutter.plugins.imagepicker.ImagePickerDelegate.access$000(ImagePickerDelegate.java:66)
W/Binder  (30392): 	at io.flutter.plugins.imagepicker.ImagePickerDelegate$4.onPathReady(ImagePickerDelegate.java:470)
W/Binder  (30392): 	at io.flutter.plugins.imagepicker.ImagePickerDelegate$3$1.onScanCompleted(ImagePickerDelegate.java:160)
W/Binder  (30392): 	at android.media.MediaScannerConnection$ClientProxy.onScanCompleted(MediaScannerConnection.java:204)
W/Binder  (30392): 	at android.media.MediaScannerConnection$1.scanCompleted(MediaScannerConnection.java:53)
W/Binder  (30392): 	at android.media.IMediaScannerListener$Stub.onTransact(IMediaScannerListener.java:61)
W/Binder  (30392): 	at android.os.Binder.execTransact(Binder.java:731)

二、问题分析


在 image_picker 的主页 , 已经对上述问题作出了说明 , 使用 image_picker 插件选择数据时 , 有时出现图像丢失的情况 , 此时使用 retrieveLostData 获取丢失的图像 ;

代码示例 :

代码语言:javascript
复制
Future<void> retrieveLostData() async {
  final LostData response =
      await picker.getLostData();
  if (response.isEmpty) {
    return;
  }
  if (response.file != null) {
    setState(() {
      if (response.type == RetrieveType.video) {
        _handleVideo(response.file);
      } else {
        _handleImage(response.file);
      }
    });
  } else {
    _handleError(response.exception);
  }
}

还有一个问题就是可能使用了过时的 Flutter 插件 ;

三、解决方案


更新 Flutter SDK 到最新版本 ;

https://flutter.dev/docs/development/tools/sdk/releases 页面下载最新的 Flutter SDK ;

下载完毕后 , 解压 , 放到一个目录中即可 ;

菜单栏 / File / Settings 对话框中设置最新的额 Flutter SDK 路径 ;

配置最新的 image_picker 插件 ;

代码语言:javascript
复制
dependencies:
  image_picker: ^0.7.2+1

使用最新版本的 image_picker 插件后 , 使用相应的图片获取方法 , 上述问题解决 ;

代码语言:javascript
复制
  Future getImage() async {
    final pickedFile = await picker.getImage(source: ImageSource.camera);

    setState(() {
      if (pickedFile != null) {
        _image = File(pickedFile.path);
      } else {
        print('No image selected.');
      }
    });
  }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、报错信息
  • 二、问题分析
  • 三、解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档