You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用Sendbird SDK发送文件遇RequestFailedException(800220)错误求助

问题

在Flutter中使用Sendbird聊天SDK发送文件时,调用voidSendFile()函数触发以下错误:

RequestFailedException(800220): Null check operator used on a null value when sending file using flutter chat sdk

错误由代码中的print("Error here $e");语句输出。已确认groupChannel和channelUrl不为空,该功能在安卓真机上运行正常,但在模拟器调试时出现此问题。

核心代码如下:

GroupChannel? groupChannel;
final channelUrl = Get.parameters['channel_url']!;
@override
  void initState() {
    super.initState();
    GroupChannel.getChannel(channelUrl).then((channel) {
      groupChannel = channel;
    });
  }

voidSendFile() {
    try {
      FileMessageCreateParams? params;
      params = FileMessageCreateParams.withFile(
        File(filePath!),
        fileName: textEditingController.text,
      );

      if (params != null) {
        groupChannel!.sendFileMessage(
          params,
          handler: (message, e) async {
            print("Error here $e"); //error here
          },
          progressHandler: (sentBytes, totalBytes) {
            print("progress $sentBytes $totalBytes");
            setState(() {
              uploadProgressValue = (sentBytes / totalBytes);
            });
          },
        );
      }
    } catch (err) {
      print("this is error voidSendFile $err");
    }
  }

解决方案

  • 验证文件路径与模拟器权限
    模拟器的文件系统权限逻辑和真机存在差异,先打印filePath的具体值,手动在模拟器的文件管理器中确认该路径下的文件真实存在,同时确保应用已申请并获得文件读取权限。
  • 修复异步初始化的竞态问题
    模拟器网络请求速度通常慢于真机,可能导致调用voidSendFile()时,GroupChannel.getChannel()的异步操作还未完成。修改初始化逻辑,确保频道加载完成后再允许发送文件:
    @override
    void initState() {
      super.initState();
      _loadChannel();
    }
    
    Future<void> _loadChannel() async {
      groupChannel = await GroupChannel.getChannel(channelUrl);
      setState(() {});
    }
    
    在voidSendFile()中先检查频道状态:
    void voidSendFile() {
      if (groupChannel == null) {
        print("频道尚未初始化完成");
        return;
      }
      // 原文件发送逻辑
    }
    
  • 升级Sendbird SDK版本
    部分旧版SDK在模拟器环境下存在空值处理的兼容性bug,将Sendbird Flutter SDK升级到最新稳定版本,大概率能解决此类问题。
  • 调整文件对象的构造方式
    模拟器中直接使用File(filePath!)可能存在路径解析异常,尝试替换为File.fromUri(Uri.parse(filePath!))来构造文件对象,确保文件实例正确初始化。

内容的提问来源于stack exchange,提问作者wahyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:51:07