Flutter高仿微信-第33篇-单聊-图片
创始人
2024-02-14 09:29:10

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: [BasicDialogAction(title: Text("知道了"),onPressed: () {Navigator.pop(context);},),BasicDialogAction(title: Text("去设置"),onPressed: () {// 跳转到系统设置页AppSettings.openAppSettings();},),],),);
}

//打开相册
void _openAblum() {List selectedAssets = [];AssetPicker.pickAssets(context,pickerConfig: AssetPickerConfig(maxAssets: 1,selectedAssets: selectedAssets,),).then((imageList) {if(imageList == null){return;}imageList as List;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);

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...