Flutter高仿微信-第33篇-单聊-图片

news2025/8/8 4:17:14

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。

 详情请查看

效果图:

详情请参考 Flutter高仿微信-第29篇-单聊 , 这里只是提取图片实现的部分代码。

实现代码:

//打开相册权限
void _openAblumPermission() async {
  bool isPhotosGranted = await Permission.photos.isGranted;
  bool isPhotosDenied = await Permission.photos.isDenied;
  if(isPhotosGranted){
    _openAblum();
  } else {
    if(isPhotosDenied){
      _openAblum();
    } else {
      //跳转到设置页面提示
      _showPhotosConfirmationAlert(context);
    }
  }
}

// 为正常拍摄,请前往设备中的【设置】> 【隐私】> 【相机】中允许无他相机使用
_showPhotosConfirmationAlert(BuildContext context) {
  showPlatformDialog(
    context: context,
    builder: (_) => BasicDialogAlert(
      title: Text("无法使用相册"),
      content: Text("为编辑照片,请前往设备中的【设置】> 【隐私】> 【照片】中允许${AppManager.getInstance().appName}使用"),
      actions: <Widget>[
        BasicDialogAction(
          title: Text("知道了"),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
        BasicDialogAction(
          title: Text("去设置"),
          onPressed: () {
            // 跳转到系统设置页
            AppSettings.openAppSettings();
          },
        ),
      ],
    ),
  );
}

//打开相册
void _openAblum() {
  List<AssetEntity> selectedAssets = [];
  AssetPicker.pickAssets(
    context,
    pickerConfig: AssetPickerConfig(
      maxAssets: 1,
      selectedAssets: selectedAssets,
    ),
  ).then((imageList) {
    if(imageList == null){
      return;
    }
    imageList as List<AssetEntity>;
    for(int i = 0; i < imageList.length; i++){
      AssetEntity ae = imageList[i];
      ae.file.then((file) async {
        String resultFilePath = file?.path??"";
        _processVideoAndPicture(resultFilePath);
      });
    }
  });
}

//处理图片和小视频(相册、拍照)
void _processVideoAndPicture(String resultFilePath) async {

  if(resultFilePath == null || "" == resultFilePath){
    return;
  }

  String messageId = UUID.getUUID();

  if(CommonUtils.isImage(resultFilePath)){
    //压缩图片完成再发送
    String compressImagePath = await CompressImageUtils.compressFile(fileName: resultFilePath);
    widget.sendMedialCallback(CommonUtils.CHAT_CONTENT_TYPE_IMG, compressImagePath,0 ,messageId);
    widget.refreshMediaCallback(CommonUtils.CHAT_CONTENT_TYPE_IMG, compressImagePath, "",0, messageId);
  } 

}

接收到消息:

String serverImagePath = CommonUtils.BASE_URL_UPLOAD + content;
String localImagePath = await FileUtils.getBaseFile("${DateUtil.getNowDateMs()}.jpg");
//先下载图片
await DownloadUtils.getInstance().downloadFile(serverImagePath, localImagePath);
chatBean.imgPath = serverImagePath;
chatBean.imgPathLocal = localImagePath;
//通知栏提示
NotificationUtils.getInstance().showNotification(chatBean);
//插入本地数据库
ChatRepository.getInstance().insertChat(chatBean);
//EventBus刷新页面
eventBus.emit(chatBean);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

更简洁的参数校验,使用 SpringBoot Validation 对参数进行校验

在开发接口时&#xff0c;如果要对参数进行校验&#xff0c;你会怎么写&#xff1f;编写 if-else 吗&#xff1f;虽然也能达到效果&#xff0c;但是不够优雅。 今天&#xff0c;推荐一种更简洁的写法&#xff0c;使用 SpringBoot Validation 对方法参数进行校验&#xff0c;特…

k8s dashboard安装部署实战详细手册

文章目录一、k8s dashboard搭建1.选择版本2.下载yaml3.执行yaml4.访问dashboard5.token登录6.配置权限结尾一、k8s dashboard搭建 1.选择版本 dashboard和k8s存在版本对应关系&#xff0c;具体可以去github查找https://github.com/kubernetes/dashboard/releases 由于我的k8s…

亮相2022南京软博会,创邻科技携Galaxybase图平台展现信创硬核实力

11月23日&#xff0c;2022中国&#xff08;南京&#xff09;国际软件产品和信息服务交易博览会&#xff08;以下简称”软博会“&#xff09;在南京博览中心隆重开幕。此次展会以“软件赋能 数智转型”为主题&#xff0c;由江苏省工业和信息化厅、南京市人民政府、中国工业技术软…

iwebsec靶场 数据库漏洞通关1-MySQL数据库漏洞

iwebsec靶场的数据库漏洞第一项内容为MySQL弱口令漏洞渗透&#xff0c;如下所示我们可以使用kali的msf模块对其进行渗透。 一、获取iwebsec虚拟机环境的MySQL服务映射的端口号 由于iwebsec靶场是通过docker搭建在ubuntu这个宿主虚拟机中 接下来在机器在ubuntu64位这台虚拟机里…

基于JAVA的物流信息管理平台【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86406113 摘要 随着全球供应链持续受到 COVID-19 的影响&#xff0c;许多物流公司正在考虑如何重构新常态运营环境&#xff0c;实现降本增效。对于业务网点遍布全球的物流公司而言&#xff0…

【看球和学Go】错误和异常、CGO、fallthrough

这篇文章将详解「Go必知必会」的知识点&#xff1a; 错误和异常的对比、发生panic后如何执行代码&#xff1f;会执行到defer代码段吗&#xff1f;CGO是什么&#xff1f;CGO的作用是什么&#xff1f;switch中的fallthrough 错误&异常 错误指的是可能出现问题的地方出现了…

云原生系列 六【轻松入门容器基础操作】

✅作者简介&#xff1a; CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 最近云原生领域热火朝天&#xff0c;那么云原生是什么&#xff1f;何为云原生&a…

深度学习第一次作业 - 波士顿房价预测

文章目录划分训练集和测试集建立线性回归模型特征选择重建模型尝试使用GradientBoostingimport pandas as pd import numpy as np import seaborn as sns from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklea…

第一个SpringBoot项目的创建

目录 一、SpringBoot是什么&#xff1f; 初识springboot springboot的优点 二、SpringBoot项目的创建与简单运行 &#x1f351;使用idea创建springboot项目 &#x1f351; Spring Boot 项目目录介绍 &#x1f351;springboot项目的简单运行与使用 一、SpringBoot是什么&a…

emq证书过期问题

近期在进行远程漏洞扫描后发现&#xff0c;有存在服务器证书过期的情况&#xff0c;可以通过以下步骤进行问题的处理&#xff1a; 1、先根据对应出现漏洞的端口进行检查&#xff0c;看端口对应的服务是哪个服务&#xff1a; netstat -tunlp|grep 端口号 2、通过命令&#xf…

40 - 前置操作符和后置操作符

---- 整理自狄泰软件唐佐林老师课程 问题 下面代码的区别&#xff1f;why&#xff1f; 1.1 编程实验 汇编中的处理是一样的&#xff0c;所以不可能从编译后的二进制程序还原 i 还是 i 1.2 事实 现代编译器产品会对代码进行优化优化使得最终的二进制程序更加高效优化后的二…

[附源码]java毕业设计渔具店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Linux】系统编程之网络编程(socket)

目录一、Socket编程1、TCP/UDP&#xff08;1&#xff09;TCP/UDP区别&#xff08;2&#xff09;TCP/UDP服务端和客户端的通信流程2、IP地址和端口号&#xff08;1&#xff09;IP地址&#xff08;2&#xff09;端口号二、字节序1、字节系相关概念2、有关字节序转换的函数&#x…

小小王总,如何变成任正非、化腾、强东这样的巨人!

原创&#xff1a;小姐姐味道&#xff08;微信公众号ID&#xff1a;xjjdog&#xff09;&#xff0c;欢迎分享&#xff0c;非公众号转载保留此声明。王总特别迷信外面的企业培训。当遇到问题时&#xff0c;他喜欢去取经。这个经不像唐僧取经一样&#xff0c;需要历经九九八十一难…

ImmunoChemistry艾美捷通用阻断ELISA阻断缓冲液说明书

ImmunoChemistry艾美捷通用阻断ELISA阻断缓冲液包含适用于大多数抗体捕获ELISA格式和肽或蛋白质抗原下调ELISA格式的哺乳动物蛋白质阻断剂。这种封闭缓冲液为干燥的抗原或抗体外壳蛋白提供了长期稳定的环境&#xff0c;并使测定过程中的非特异性结合相互作用最小化。 General B…

中石油测井-技术研发岗回顾

前提&#xff1a; 时间&#xff1a;2022年11月25日 结果&#xff1a;暂未可知 阶段&#xff1a;面试结束 等结果 整个过程中&#xff0c;注意查看官网 中石油招聘 投递之前关注一下基本要求&#xff08;学历-专业&#xff09; 招聘人数&#xff1a;应聘人数 &#xff08;通过能…

【富文本编辑器】Ueditor的demo——创建、修改——代码使用

文章目录富文本编辑器简述&#xff1a;使用&#xff1a;1.下载的demo&#xff1a;2.项目创建&#xff1a;3.修改代码&#xff1a;4.使用富文本编辑器&#xff1a;示例&#xff1a;富文本编辑器 Ueditor的资源官网&#xff1a;http://fex.baidu.com/ueditor/ 资源下载官网&…

【Linux】进程优先级(PRI,NI)和进程切换

1、进程优先级 无论是外设还是CPU&#xff0c;所能提供给操作系统的资源很少&#xff0c;而操作系统中的进程又非常多&#xff0c;安排谁先使用资源&#xff0c;就需要进程优先级的存在。   查看进程优先级 ps -al 查看当前运行进程的优先级信息。 ps -al | grep test 配合…

卫龙食品冲刺港股:上半年经调整利润超4亿 高瓴与红杉是股东

雷帝网 雷建平 11月24日卫龙食品日前更新招股书&#xff0c;准备在香港上市。这是卫龙食品通过聆讯后第二次更新招股书。卫龙食品的前身可追溯到20多年前。当年&#xff0c;卫龙食品创办人刘卫平下了火车&#xff0c;找到一个简陋的小旅馆休息&#xff0c;天亮后&#xff0c;就…

DirectX12 - Swap Chain(交换链)

这里是SunshineBooming&#xff0c;GPU公司一枚小小的Driver工程师&#xff0c;主要工作是写DirectX12 Driver&#xff0c;我会持续更新这个DX12 Spec系列&#xff0c;可能比较冷门&#xff0c;但是都是干货和工作中的心得体会&#xff0c;有任何GPU相关的问题都可以在评论区互…