@@ -1 +1 @@ | |||||
{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"agora_rtc_engine","dependencies":[]},{"name":"amap_location","dependencies":[]},{"name":"android_intent","dependencies":[]},{"name":"app_installer","dependencies":[]},{"name":"apple_sign_in","dependencies":[]},{"name":"audioplayer","dependencies":[]},{"name":"auto_orientation","dependencies":[]},{"name":"city_pickers","dependencies":[]},{"name":"connectivity","dependencies":[]},{"name":"easy_contact_picker","dependencies":[]},{"name":"file_picker","dependencies":[]},{"name":"flutter_app_badger","dependencies":[]},{"name":"flutter_audio_recorder","dependencies":[]},{"name":"flutter_bugly","dependencies":[]},{"name":"flutter_facebook_login","dependencies":[]},{"name":"flutter_ijkplayer","dependencies":[]},{"name":"flutter_inapp_purchase","dependencies":[]},{"name":"flutter_local_notifications","dependencies":[]},{"name":"flutter_native_image","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_qr_reader","dependencies":["image_picker"]},{"name":"flutter_webview_plugin","dependencies":[]},{"name":"fluwx_no_pay","dependencies":[]},{"name":"geolocator","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","dependencies":[]},{"name":"google_maps_flutter","dependencies":[]},{"name":"image_cropper","dependencies":[]},{"name":"image_gallery_saver","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"jpush_flutter","dependencies":[]},{"name":"keyboard_utils","dependencies":[]},{"name":"location","dependencies":[]},{"name":"location_permissions","dependencies":[]},{"name":"open_file","dependencies":[]},{"name":"package_info","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"photo_manager","dependencies":[]},{"name":"receive_sharing_intent","dependencies":[]},{"name":"share","dependencies":[]},{"name":"share_extend","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]},{"name":"url_launcher","dependencies":[]},{"name":"video_player","dependencies":[]},{"name":"video_thumbnail","dependencies":[]},{"name":"wifi_info_plugin","dependencies":[]}]} | |||||
{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"agora_rtc_engine","dependencies":[]},{"name":"amap_location","dependencies":[]},{"name":"android_intent","dependencies":[]},{"name":"app_installer","dependencies":[]},{"name":"apple_sign_in","dependencies":[]},{"name":"audioplayer","dependencies":[]},{"name":"auto_orientation","dependencies":[]},{"name":"city_pickers","dependencies":[]},{"name":"connectivity","dependencies":[]},{"name":"easy_contact_picker","dependencies":[]},{"name":"file_picker","dependencies":[]},{"name":"flutter_app_badger","dependencies":[]},{"name":"flutter_audio_recorder","dependencies":[]},{"name":"flutter_bugly","dependencies":[]},{"name":"flutter_facebook_login","dependencies":[]},{"name":"flutter_ijkplayer","dependencies":[]},{"name":"flutter_inapp_purchase","dependencies":[]},{"name":"flutter_local_notifications","dependencies":[]},{"name":"flutter_native_image","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_qr_reader","dependencies":["image_picker"]},{"name":"flutter_webview_plugin","dependencies":[]},{"name":"fluwx_no_pay","dependencies":[]},{"name":"geolocator","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","dependencies":[]},{"name":"google_maps_flutter","dependencies":[]},{"name":"image_cropper","dependencies":[]},{"name":"image_gallery_saver","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"jpush_flutter","dependencies":[]},{"name":"keyboard_utils","dependencies":[]},{"name":"location","dependencies":[]},{"name":"location_permissions","dependencies":[]},{"name":"multi_image_picker","dependencies":[]},{"name":"open_file","dependencies":[]},{"name":"package_info","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"photo_manager","dependencies":[]},{"name":"receive_sharing_intent","dependencies":[]},{"name":"share","dependencies":[]},{"name":"share_extend","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]},{"name":"url_launcher","dependencies":[]},{"name":"video_player","dependencies":[]},{"name":"video_thumbnail","dependencies":[]},{"name":"wifi_info_plugin","dependencies":[]}]} |
@@ -56,9 +56,9 @@ android { | |||||
// manifestPlaceholders = [ | // manifestPlaceholders = [ | ||||
// AMAP_KEY : "1fd4e93e3b4b13747da41f484c955fe2", /// 高德地图key | // AMAP_KEY : "1fd4e93e3b4b13747da41f484c955fe2", /// 高德地图key | ||||
// ] | // ] | ||||
// ndk { | |||||
// abiFilters 'armeabi-v7a' | |||||
// } | |||||
// ndk { | |||||
// abiFilters 'armeabi-v7a' | |||||
// } | |||||
multiDexEnabled true | multiDexEnabled true | ||||
manifestPlaceholders = [ | manifestPlaceholders = [ | ||||
JPUSH_PKGNAME : 'com.cyhd.henhoandroid', | JPUSH_PKGNAME : 'com.cyhd.henhoandroid', | ||||
@@ -108,6 +108,11 @@ flutter { | |||||
} | } | ||||
subprojects { | subprojects { | ||||
if (project.hasProperty("android")) { | |||||
android { | |||||
compileSdkVersion 28 | |||||
} | |||||
} | |||||
project.configurations.all { | project.configurations.all { | ||||
resolutionStrategy.eachDependency { details -> | resolutionStrategy.eachDependency { details -> | ||||
if (details.requested.group == 'com.android.support' | if (details.requested.group == 'com.android.support' | ||||
@@ -125,7 +130,6 @@ subprojects { | |||||
dependencies { | dependencies { | ||||
testImplementation 'junit:junit:4.12' | testImplementation 'junit:junit:4.12' | ||||
androidTestImplementation 'com.android.support.test:runner:1.0.2' | androidTestImplementation 'com.android.support.test:runner:1.0.2' | ||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' | ||||
@@ -68,6 +68,9 @@ subprojects { | |||||
if (details.requested.group == 'androidx.annotation') { | if (details.requested.group == 'androidx.annotation') { | ||||
details.useVersion "1.1.0" | details.useVersion "1.1.0" | ||||
} | } | ||||
if (details.requested.group == 'androidx.cardview') { | |||||
details.useVersion "1.0.0" | |||||
} | |||||
} | } | ||||
@@ -1,8 +1,8 @@ | |||||
#!/bin/sh | #!/bin/sh | ||||
# This is a generated file; do not edit or check into version control. | # This is a generated file; do not edit or check into version control. | ||||
export "FLUTTER_ROOT=/Users/random/sdk/flutter_sdk" | export "FLUTTER_ROOT=/Users/random/sdk/flutter_sdk" | ||||
export "FLUTTER_APPLICATION_PATH=/Users/random/code/flutter/project/qunliao" | |||||
export "FLUTTER_TARGET=/Users/random/code/flutter/project/qunliao/lib/main.dart" | |||||
export "FLUTTER_APPLICATION_PATH=/Users/random/code/flutter/project/hibok" | |||||
export "FLUTTER_TARGET=/Users/random/code/flutter/project/hibok/lib/main.dart" | |||||
export "FLUTTER_BUILD_DIR=build" | export "FLUTTER_BUILD_DIR=build" | ||||
export "SYMROOT=${SOURCE_ROOT}/../build/ios" | export "SYMROOT=${SOURCE_ROOT}/../build/ios" | ||||
export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios" | export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios" | ||||
@@ -19,6 +19,11 @@ PODS: | |||||
- Flutter | - Flutter | ||||
- auto_orientation (0.0.1): | - auto_orientation (0.0.1): | ||||
- Flutter | - Flutter | ||||
- BSGridCollectionViewLayout (1.2.5) | |||||
- BSImagePicker (2.10.3): | |||||
- BSGridCollectionViewLayout (= 1.2.5) | |||||
- BSImageView (= 1.0.3) | |||||
- BSImageView (1.0.3) | |||||
- Bugly (2.5.2) | - Bugly (2.5.2) | ||||
- city_pickers (0.0.1): | - city_pickers (0.0.1): | ||||
- Flutter | - Flutter | ||||
@@ -112,6 +117,9 @@ PODS: | |||||
- Flutter | - Flutter | ||||
- location_permissions (2.0.3): | - location_permissions (2.0.3): | ||||
- Flutter | - Flutter | ||||
- multi_image_picker (4.6.4): | |||||
- BSImagePicker (~> 2.10.3) | |||||
- Flutter | |||||
- open_file (0.0.1): | - open_file (0.0.1): | ||||
- Flutter | - Flutter | ||||
- package_info (0.0.1): | - package_info (0.0.1): | ||||
@@ -127,6 +135,8 @@ PODS: | |||||
- Flutter | - Flutter | ||||
- share (0.5.2): | - share (0.5.2): | ||||
- Flutter | - Flutter | ||||
- share_extend (0.0.1): | |||||
- Flutter | |||||
- shared_preferences (0.0.1): | - shared_preferences (0.0.1): | ||||
- Flutter | - Flutter | ||||
- shared_preferences_macos (0.0.1): | - shared_preferences_macos (0.0.1): | ||||
@@ -182,6 +192,7 @@ DEPENDENCIES: | |||||
- keyboard_utils (from `.symlinks/plugins/keyboard_utils/ios`) | - keyboard_utils (from `.symlinks/plugins/keyboard_utils/ios`) | ||||
- location (from `.symlinks/plugins/location/ios`) | - location (from `.symlinks/plugins/location/ios`) | ||||
- location_permissions (from `.symlinks/plugins/location_permissions/ios`) | - location_permissions (from `.symlinks/plugins/location_permissions/ios`) | ||||
- multi_image_picker (from `.symlinks/plugins/multi_image_picker/ios`) | |||||
- open_file (from `.symlinks/plugins/open_file/ios`) | - open_file (from `.symlinks/plugins/open_file/ios`) | ||||
- package_info (from `.symlinks/plugins/package_info/ios`) | - package_info (from `.symlinks/plugins/package_info/ios`) | ||||
- path_provider (from `.symlinks/plugins/path_provider/ios`) | - path_provider (from `.symlinks/plugins/path_provider/ios`) | ||||
@@ -189,6 +200,7 @@ DEPENDENCIES: | |||||
- photo_manager (from `.symlinks/plugins/photo_manager/ios`) | - photo_manager (from `.symlinks/plugins/photo_manager/ios`) | ||||
- receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) | - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) | ||||
- share (from `.symlinks/plugins/share/ios`) | - share (from `.symlinks/plugins/share/ios`) | ||||
- share_extend (from `.symlinks/plugins/share_extend/ios`) | |||||
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) | - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) | ||||
- shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) | - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) | ||||
- shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`) | - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`) | ||||
@@ -203,6 +215,9 @@ SPEC REPOS: | |||||
- AgoraRtcEngine_iOS | - AgoraRtcEngine_iOS | ||||
- AMapFoundation | - AMapFoundation | ||||
- AMapLocation | - AMapLocation | ||||
- BSGridCollectionViewLayout | |||||
- BSImagePicker | |||||
- BSImageView | |||||
- Bugly | - Bugly | ||||
- FBSDKCoreKit | - FBSDKCoreKit | ||||
- FBSDKLoginKit | - FBSDKLoginKit | ||||
@@ -284,6 +299,8 @@ EXTERNAL SOURCES: | |||||
:path: ".symlinks/plugins/location/ios" | :path: ".symlinks/plugins/location/ios" | ||||
location_permissions: | location_permissions: | ||||
:path: ".symlinks/plugins/location_permissions/ios" | :path: ".symlinks/plugins/location_permissions/ios" | ||||
multi_image_picker: | |||||
:path: ".symlinks/plugins/multi_image_picker/ios" | |||||
open_file: | open_file: | ||||
:path: ".symlinks/plugins/open_file/ios" | :path: ".symlinks/plugins/open_file/ios" | ||||
package_info: | package_info: | ||||
@@ -298,6 +315,8 @@ EXTERNAL SOURCES: | |||||
:path: ".symlinks/plugins/receive_sharing_intent/ios" | :path: ".symlinks/plugins/receive_sharing_intent/ios" | ||||
share: | share: | ||||
:path: ".symlinks/plugins/share/ios" | :path: ".symlinks/plugins/share/ios" | ||||
share_extend: | |||||
:path: ".symlinks/plugins/share_extend/ios" | |||||
shared_preferences: | shared_preferences: | ||||
:path: ".symlinks/plugins/shared_preferences/ios" | :path: ".symlinks/plugins/shared_preferences/ios" | ||||
shared_preferences_macos: | shared_preferences_macos: | ||||
@@ -326,6 +345,9 @@ SPEC CHECKSUMS: | |||||
apple_sign_in: 7716c7ddfa195aeab7dec0dc374ef4ff45d1adb4 | apple_sign_in: 7716c7ddfa195aeab7dec0dc374ef4ff45d1adb4 | ||||
audioplayer: f4462b84216b9c55f02bbbdc7ab60eec7427b2d4 | audioplayer: f4462b84216b9c55f02bbbdc7ab60eec7427b2d4 | ||||
auto_orientation: 2941c44ebe5c3d41016001597ab03e81a92a26ce | auto_orientation: 2941c44ebe5c3d41016001597ab03e81a92a26ce | ||||
BSGridCollectionViewLayout: 333dcb457a5a3bdd9212607ab5756553dcfe06cb | |||||
BSImagePicker: 07404254f2fcdaf5a2eb403c0f8c337267ce8738 | |||||
BSImageView: a149459433a2687157d034c78e059d30ac7f2544 | |||||
Bugly: dbac48b55ad469a97cc4321045cd50df8f63d44f | Bugly: dbac48b55ad469a97cc4321045cd50df8f63d44f | ||||
city_pickers: b0370f4c35c201723b5b7fcce10ec29b59d5bc35 | city_pickers: b0370f4c35c201723b5b7fcce10ec29b59d5bc35 | ||||
connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75 | connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75 | ||||
@@ -362,6 +384,7 @@ SPEC CHECKSUMS: | |||||
libwebp: 057912d6d0abfb6357d8bb05c0ea470301f5d61e | libwebp: 057912d6d0abfb6357d8bb05c0ea470301f5d61e | ||||
location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740 | location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740 | ||||
location_permissions: 195ff2a1182fa9029ef3f2653156961ee5a1e40b | location_permissions: 195ff2a1182fa9029ef3f2653156961ee5a1e40b | ||||
multi_image_picker: 1651732277b2db3b09e83f3be8eb7ea65cf2a933 | |||||
open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d | open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d | ||||
package_info: 48b108e75b8802c2d5e126f208ef540561c98aef | package_info: 48b108e75b8802c2d5e126f208ef540561c98aef | ||||
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d | path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d | ||||
@@ -370,6 +393,7 @@ SPEC CHECKSUMS: | |||||
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 | Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 | ||||
receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1 | receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1 | ||||
share: bae0a282aab4483288913fc4dc0b935d4b491f2e | share: bae0a282aab4483288913fc4dc0b935d4b491f2e | ||||
share_extend: b6748dc53695587891126a89533b862b92548c7b | |||||
shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01 | shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01 | ||||
shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 | shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 | ||||
shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9 | shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9 | ||||
@@ -244,8 +244,8 @@ | |||||
9705A1C41CF9048500538489 /* Embed Frameworks */, | 9705A1C41CF9048500538489 /* Embed Frameworks */, | ||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */, | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, | ||||
74E44EF25DBCD813164B0D15 /* [CP] Embed Pods Frameworks */, | 74E44EF25DBCD813164B0D15 /* [CP] Embed Pods Frameworks */, | ||||
72C47CA77DA3D0C2C0859F91 /* [CP] Copy Pods Resources */, | |||||
5C95C0992406514F00CEBCE3 /* Embed App Extensions */, | 5C95C0992406514F00CEBCE3 /* Embed App Extensions */, | ||||
3DE22D2D9939DF611C2BA757 /* [CP] Copy Pods Resources */, | |||||
); | ); | ||||
buildRules = ( | buildRules = ( | ||||
); | ); | ||||
@@ -366,7 +366,7 @@ | |||||
shellPath = /bin/sh; | shellPath = /bin/sh; | ||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; | ||||
}; | }; | ||||
72C47CA77DA3D0C2C0859F91 /* [CP] Copy Pods Resources */ = { | |||||
3DE22D2D9939DF611C2BA757 /* [CP] Copy Pods Resources */ = { | |||||
isa = PBXShellScriptBuildPhase; | isa = PBXShellScriptBuildPhase; | ||||
buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
files = ( | files = ( | ||||
@@ -778,7 +778,7 @@ | |||||
CODE_SIGN_IDENTITY = "Apple Development"; | CODE_SIGN_IDENTITY = "Apple Development"; | ||||
CODE_SIGN_STYLE = Automatic; | CODE_SIGN_STYLE = Automatic; | ||||
CURRENT_PROJECT_VERSION = 12; | CURRENT_PROJECT_VERSION = 12; | ||||
DEVELOPMENT_TEAM = QJ9M3998Q6; | |||||
DEVELOPMENT_TEAM = ""; | |||||
ENABLE_BITCODE = NO; | ENABLE_BITCODE = NO; | ||||
FRAMEWORK_SEARCH_PATHS = ( | FRAMEWORK_SEARCH_PATHS = ( | ||||
"$(inherited)", | "$(inherited)", | ||||
@@ -1,5 +1,6 @@ | |||||
import 'dart:convert'; | import 'dart:convert'; | ||||
import 'dart:io'; | import 'dart:io'; | ||||
import 'package:chat/utils/upload_util.dart'; | |||||
import 'package:fixnum/fixnum.dart'; | import 'package:fixnum/fixnum.dart'; | ||||
import 'package:cached_network_image/cached_network_image.dart'; | import 'package:cached_network_image/cached_network_image.dart'; | ||||
import 'package:chat/chat/translate_state.dart'; | import 'package:chat/chat/translate_state.dart'; | ||||
@@ -215,7 +216,12 @@ class _ChatPageState extends State<ChatPage> { | |||||
MsgModel msg = MsgHandler.createSendMsg( | MsgModel msg = MsgHandler.createSendMsg( | ||||
ChatType.valueOf(originMsg.msgType), originMsg.msgContent); | ChatType.valueOf(originMsg.msgType), originMsg.msgContent); | ||||
msg.extraInfo = originMsg.extraInfo; | msg.extraInfo = originMsg.extraInfo; | ||||
msg.extraFile = originMsg.extraFile; | |||||
if(originMsg.extraFile==null ||originMsg.extraFile.contains('http')){ | |||||
msg.extraFile = originMsg.extraFile; | |||||
}else{ | |||||
msg.extraFile = UploadUtil().getFullUrl(originMsg.extraFile, originMsg.sessionId, originMsg.channelType); | |||||
} | |||||
msg.localFile = originMsg.localFile; | msg.localFile = originMsg.localFile; | ||||
msg.friendId = widget.friendId; | msg.friendId = widget.friendId; | ||||
if (msg.localFile != null) { | if (msg.localFile != null) { | ||||
@@ -1,4 +1,5 @@ | |||||
import 'dart:convert'; | import 'dart:convert'; | ||||
import 'dart:io'; | |||||
import 'dart:math'; | import 'dart:math'; | ||||
import 'dart:typed_data'; | import 'dart:typed_data'; | ||||
@@ -483,6 +484,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
_imgMsg(List<int> imgData) { | _imgMsg(List<int> imgData) { | ||||
var imgSize = _getImgSize(); | var imgSize = _getImgSize(); | ||||
ImageProvider provider = MemoryImage(widget.msg.localFile==null?Uint8List.fromList(imgData):File(widget.msg.localFile).readAsBytesSync()); | |||||
return GestureDetector( | return GestureDetector( | ||||
child: ClipRRect( | child: ClipRRect( | ||||
@@ -494,7 +496,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
width: imgSize.width, | width: imgSize.width, | ||||
child: Image( | child: Image( | ||||
fit: BoxFit.contain, | fit: BoxFit.contain, | ||||
image: MemoryImage(Uint8List.fromList(imgData)), | |||||
image: provider, | |||||
), | ), | ||||
)), | )), | ||||
borderRadius: BorderRadius.circular(5), | borderRadius: BorderRadius.circular(5), | ||||
@@ -629,7 +631,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
List<String> actions = [ | List<String> actions = [ | ||||
I18n.of(context).delete, | I18n.of(context).delete, | ||||
I18n.of(context).reply, | I18n.of(context).reply, | ||||
I18n.of(context).forward | |||||
]; | ]; | ||||
actionsFunc.add(() { | actionsFunc.add(() { | ||||
@@ -639,10 +641,25 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
print('发送引用的消息'); | print('发送引用的消息'); | ||||
MessageMgr().emit('Reply Select Message', widget.msg); | MessageMgr().emit('Reply Select Message', widget.msg); | ||||
}); | }); | ||||
actionsFunc.add(() { | |||||
print('转发消息'); | |||||
AppNavigator.pushForwardPage(context, widget.msg); | |||||
}); | |||||
///转发 | |||||
if (widget.msg.msgType == ChatType.TextChatType.value|| | |||||
widget.msg.msgType == ChatType.ImageChatType.value|| | |||||
widget.msg.msgType == ChatType.ShortVideoChatType.value|| | |||||
widget.msg.msgType == ChatType.PlaceChatType.value|| | |||||
widget.msg.msgType == ChatType.EmoticonType.value|| | |||||
widget.msg.msgType == ChatType.FileChatType.value | |||||
){ | |||||
actions.add( I18n.of(context).forward); | |||||
actionsFunc.add(() { | |||||
print('转发消息'); | |||||
AppNavigator.pushForwardPage(context, widget.msg); | |||||
}); | |||||
} | |||||
if (widget.msg.msgType == ChatType.FileChatType.value &&widget.msg.localFile!=null) { | if (widget.msg.msgType == ChatType.FileChatType.value &&widget.msg.localFile!=null) { | ||||
@@ -1016,22 +1033,30 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
} | } | ||||
_receiveImg(BuildContext context, List<int> imgData, {String downloadData}) { | _receiveImg(BuildContext context, List<int> imgData, {String downloadData}) { | ||||
ImageProvider provider = MemoryImage(Uint8List.fromList(imgData)); | |||||
ImageProvider provider = MemoryImage(widget.msg.localFile==null?Uint8List.fromList(imgData):File(widget.msg.localFile).readAsBytesSync()); | |||||
var imgSize = _getImgSize(); | var imgSize = _getImgSize(); | ||||
return GestureDetector( | |||||
child: Container( | |||||
width: imgSize.width, | |||||
height: imgSize.height, | |||||
child: ClipRRect( | |||||
child: Image( | |||||
image: provider ?? AssetImage(R.assetsImagesIcAlbum), | |||||
), | |||||
borderRadius: BorderRadius.circular(5), | |||||
)), | |||||
onTap: () async { | |||||
showFullImg(context, widget.msg); | |||||
}); | |||||
return DownloadItem( | |||||
isAutoDown: false, | |||||
msg: widget.msg, | |||||
onFinishTap: (){ | |||||
widget.hideKeyboard(); | |||||
showFullImg(context, widget.msg); | |||||
}, | |||||
child: Container( | |||||
width: imgSize.width, | |||||
height: imgSize.height, | |||||
child: ClipRRect( | |||||
child: Image( | |||||
image: provider ?? AssetImage(R.assetsImagesIcAlbum), | |||||
), | |||||
borderRadius: BorderRadius.circular(5), | |||||
), | |||||
), | |||||
); | |||||
} | } | ||||
_receiveVideo(BuildContext context, List<int> imgData, | _receiveVideo(BuildContext context, List<int> imgData, | ||||
@@ -13,6 +13,7 @@ import 'package:chat/proto/chat.pb.dart'; | |||||
import 'package:chat/r.dart'; | import 'package:chat/r.dart'; | ||||
import 'package:chat/utils/CustomUI.dart'; | import 'package:chat/utils/CustomUI.dart'; | ||||
import 'package:chat/utils/HttpUtil.dart'; | import 'package:chat/utils/HttpUtil.dart'; | ||||
import 'package:chat/utils/file_cache_mgr.dart'; | |||||
import 'package:chat/utils/image_util.dart'; | import 'package:chat/utils/image_util.dart'; | ||||
import 'package:chat/utils/keyboard_utils.dart'; | import 'package:chat/utils/keyboard_utils.dart'; | ||||
import 'package:chat/utils/msgHandler.dart'; | import 'package:chat/utils/msgHandler.dart'; | ||||
@@ -20,6 +21,7 @@ import 'package:chat/utils/screen.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||
import 'package:flutter_screenutil/flutter_screenutil.dart'; | import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||||
import 'package:multi_image_picker/multi_image_picker.dart'; | |||||
import 'package:oktoast/oktoast.dart'; | import 'package:oktoast/oktoast.dart'; | ||||
import 'package:photo_manager/photo_manager.dart'; | import 'package:photo_manager/photo_manager.dart'; | ||||
import 'package:chat/utils/MessageMgr.dart'; | import 'package:chat/utils/MessageMgr.dart'; | ||||
@@ -149,19 +151,52 @@ class _CompanyServerPageState extends State<CompanyServerPage> { | |||||
} | } | ||||
void _openPhotoView() async { | void _openPhotoView() async { | ||||
var photos = await PhotoPicker.pickAsset( | |||||
context: context, | |||||
themeColor: Color(0xFFF0F0F0), | |||||
textColor: Color(0xFF3F3F3F), | |||||
pickType: PickType.onlyImage); | |||||
if (photos != null && photos.length > 0) { | |||||
for (var i = 0; i < photos.length; i++) { | |||||
AssetEntity photoEntity = photos[i]; | |||||
var file = await photoEntity.file; | |||||
_sendPhotoFile(file); | |||||
List<Asset> resultList = List<Asset>(); | |||||
try { | |||||
resultList = await MultiImagePicker.pickImages( | |||||
maxImages: 9, | |||||
enableCamera: false, | |||||
selectedAssets: [], | |||||
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), | |||||
materialOptions: MaterialOptions( | |||||
actionBarColor: "#50A7F9", | |||||
actionBarTitle: "Hibok", | |||||
allViewTitle: "", | |||||
useDetailsView: false, | |||||
selectCircleStrokeColor: "#000000", | |||||
), | |||||
); | |||||
if (resultList != null && resultList.length > 0) { | |||||
for (var i = 0; i < resultList.length; i++) { | |||||
Asset photoEntity = resultList[i]; | |||||
ByteData byteData = await photoEntity.getByteData(); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
_sendPhotoFile(file); | |||||
} | |||||
} | } | ||||
} on Exception catch (e) { | |||||
print(e.toString()); | |||||
} | } | ||||
// var photos = await PhotoPicker.pickAsset( | |||||
// context: context, | |||||
// themeColor: Color(0xFFF0F0F0), | |||||
// textColor: Color(0xFF3F3F3F), | |||||
// pickType: PickType.onlyImage); | |||||
// | |||||
// if (photos != null && photos.length > 0) { | |||||
// for (var i = 0; i < photos.length; i++) { | |||||
// AssetEntity photoEntity = photos[i]; | |||||
// var file = await photoEntity.file; | |||||
// _sendPhotoFile(file); | |||||
// } | |||||
// } | |||||
} | } | ||||
void _sendPhotoFile(File imgFile) async { | void _sendPhotoFile(File imgFile) async { | ||||
@@ -178,7 +213,7 @@ class _CompanyServerPageState extends State<CompanyServerPage> { | |||||
if (imgSize > ImgSizeLimit) { | if (imgSize > ImgSizeLimit) { | ||||
print('图片大于 $ImgSizeLimit,压缩'); | print('图片大于 $ImgSizeLimit,压缩'); | ||||
//发送压缩图 | //发送压缩图 | ||||
sendImg = await WidgetUtil.getCompressImg(imgFile.absolute.path); | |||||
sendImg = await WidgetUtil.getCompressImg(imgFile.absolute.path ); | |||||
isNeedUpload = true; | isNeedUpload = true; | ||||
} else { | } else { | ||||
sendImg = imgFile.readAsBytesSync(); | sendImg = imgFile.readAsBytesSync(); | ||||
@@ -12,12 +12,14 @@ class DownloadItem extends StatefulWidget { | |||||
final bool isShowProgress; | final bool isShowProgress; | ||||
final bool isAutoDown; | final bool isAutoDown; | ||||
final Function onComplete; | final Function onComplete; | ||||
final Function onFinishTap; | |||||
DownloadItem( | DownloadItem( | ||||
{this.msg, | {this.msg, | ||||
this.child, | this.child, | ||||
this.isShowProgress = true, | this.isShowProgress = true, | ||||
this.isAutoDown = true, | this.isAutoDown = true, | ||||
this.onComplete}); | |||||
this.onComplete, | |||||
this.onFinishTap}); | |||||
@override | @override | ||||
_DownloadItemState createState() => _DownloadItemState(); | _DownloadItemState createState() => _DownloadItemState(); | ||||
} | } | ||||
@@ -129,7 +131,7 @@ class _DownloadItemState extends State<DownloadItem> { | |||||
(widget.msg.state != MsgState.Downloading && | (widget.msg.state != MsgState.Downloading && | ||||
widget.msg.state != MsgState.DownloadSuccess); | widget.msg.state != MsgState.DownloadSuccess); | ||||
return InkWell( | return InkWell( | ||||
onTap: isNeedDown ? downloadRes : null, | |||||
onTap: isNeedDown ? downloadRes : widget.onFinishTap, | |||||
child: Stack( | child: Stack( | ||||
alignment: Alignment.center, | alignment: Alignment.center, | ||||
children: <Widget>[widget.child, _downloadWidget()], | children: <Widget>[widget.child, _downloadWidget()], | ||||
@@ -56,7 +56,9 @@ class _PhotoPageState extends State<PhotoPage> | |||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
Uint8List fileData; | Uint8List fileData; | ||||
if (widget.msg.localFile != null) { | if (widget.msg.localFile != null) { | ||||
fileData = File(widget.msg.localFile).readAsBytesSync(); | fileData = File(widget.msg.localFile).readAsBytesSync(); | ||||
// print('本地了${fileData.lengthInBytes}'); | |||||
} else { | } else { | ||||
fileData = Uint8List.fromList(widget.msg.msgContent); | fileData = Uint8List.fromList(widget.msg.msgContent); | ||||
} | } | ||||
@@ -99,15 +101,17 @@ class _PhotoPageState extends State<PhotoPage> | |||||
Positioned( | Positioned( | ||||
right: 10, | right: 10, | ||||
bottom: 10, | bottom: 10, | ||||
child: InkWell( | |||||
child: Material(child: InkWell( | |||||
onTap: saveToGallery, | onTap: saveToGallery, | ||||
child: Container( | child: Container( | ||||
width: 50, | |||||
height: 50, | |||||
padding: EdgeInsets.all(5), | padding: EdgeInsets.all(5), | ||||
decoration: BoxDecoration( | decoration: BoxDecoration( | ||||
color: Colors.grey.withAlpha(150), | color: Colors.grey.withAlpha(150), | ||||
borderRadius: BorderRadius.circular(8)), | borderRadius: BorderRadius.circular(8)), | ||||
child: Icon(Icons.save_alt, color: Colors.white70), | child: Icon(Icons.save_alt, color: Colors.white70), | ||||
))) | |||||
)),)) | |||||
], | ], | ||||
))); | ))); | ||||
} | } | ||||
@@ -472,6 +472,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
_imgMsg(List<int> imgData) { | _imgMsg(List<int> imgData) { | ||||
var imgSize = _getImgSize(); | var imgSize = _getImgSize(); | ||||
ImageProvider provider = MemoryImage(widget.msg.localFile==null?Uint8List.fromList(imgData):File(widget.msg.localFile).readAsBytesSync()); | |||||
return GestureDetector( | return GestureDetector( | ||||
child: ClipRRect( | child: ClipRRect( | ||||
@@ -483,7 +484,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
width: imgSize.width, | width: imgSize.width, | ||||
child: Image( | child: Image( | ||||
fit: BoxFit.contain, | fit: BoxFit.contain, | ||||
image: MemoryImage(Uint8List.fromList(imgData)), | |||||
image:provider, | |||||
), | ), | ||||
)), | )), | ||||
borderRadius: BorderRadius.circular(5), | borderRadius: BorderRadius.circular(5), | ||||
@@ -574,7 +575,6 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
List<Function> actionsFunc = []; | List<Function> actionsFunc = []; | ||||
List<String> actions = [ | List<String> actions = [ | ||||
I18n.of(context).reply, | I18n.of(context).reply, | ||||
I18n.of(context).forward, | |||||
I18n.of(context).delete, | I18n.of(context).delete, | ||||
]; | ]; | ||||
@@ -582,16 +582,25 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
print('发送引用的消息'); | print('发送引用的消息'); | ||||
MessageMgr().emit('Reply Select Message', widget.msg); | MessageMgr().emit('Reply Select Message', widget.msg); | ||||
}); | }); | ||||
actionsFunc.add(() { | |||||
print('转发消息'); | |||||
AppNavigator.pushForwardPage(context, widget.msg); | |||||
}); | |||||
actionsFunc.add(() { | actionsFunc.add(() { | ||||
MessageMgr().emit('Delete Select Message', widget.msg); | MessageMgr().emit('Delete Select Message', widget.msg); | ||||
}); | }); | ||||
///转发 | |||||
if (widget.msg.msgType == ChatType.TextChatType.value|| | |||||
widget.msg.msgType == ChatType.ImageChatType.value|| | |||||
widget.msg.msgType == ChatType.ShortVideoChatType.value|| | |||||
widget.msg.msgType == ChatType.PlaceChatType.value|| | |||||
widget.msg.msgType == ChatType.EmoticonType.value|| | |||||
widget.msg.msgType == ChatType.FileChatType.value | |||||
){ | |||||
actions.add( I18n.of(context).forward); | |||||
actionsFunc.add(() { | |||||
print('转发消息'); | |||||
AppNavigator.pushForwardPage(context, widget.msg); | |||||
}); | |||||
} | |||||
if (widget.msg.msgType == ChatType.FileChatType.value &&widget.msg.localFile!=null) { | if (widget.msg.msgType == ChatType.FileChatType.value &&widget.msg.localFile!=null) { | ||||
@@ -1033,24 +1042,31 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
} | } | ||||
_receiveImg(BuildContext context, List<int> imgData, {String downloadData}) { | _receiveImg(BuildContext context, List<int> imgData, {String downloadData}) { | ||||
ImageProvider provider = MemoryImage(Uint8List.fromList(imgData)); | |||||
// ImageProvider provider = MemoryImage(Uint8List.fromList(imgData)); | |||||
ImageProvider provider = MemoryImage(widget.msg.localFile==null?Uint8List.fromList(imgData):File(widget.msg.localFile).readAsBytesSync()); | |||||
var imgSize = _getImgSize(); | var imgSize = _getImgSize(); | ||||
return GestureDetector( | |||||
child: Container( | |||||
alignment: Alignment.centerLeft, | |||||
width: imgSize.width, | |||||
height: imgSize.height, | |||||
child: ClipRRect( | |||||
child: Image( | |||||
image: provider ?? AssetImage(R.assetsImagesIcAlbum), | |||||
), | |||||
borderRadius: BorderRadius.circular(5), | |||||
)), | |||||
onTap: () async { | |||||
widget.hideKeyboard(); | |||||
showFullImg(context, widget.msg); | |||||
}); | |||||
return DownloadItem( | |||||
isAutoDown: false, | |||||
msg: widget.msg, | |||||
onFinishTap: (){ | |||||
widget.hideKeyboard(); | |||||
showFullImg(context, widget.msg); | |||||
}, | |||||
child: Container( | |||||
alignment: Alignment.centerLeft, | |||||
width: imgSize.width, | |||||
height: imgSize.height, | |||||
child: ClipRRect( | |||||
child: Image( | |||||
image: provider ?? AssetImage(R.assetsImagesIcAlbum), | |||||
), | |||||
borderRadius: BorderRadius.circular(5), | |||||
), | |||||
), | |||||
); | |||||
} | } | ||||
_receiveVideo(BuildContext context, List<int> imgData, | _receiveVideo(BuildContext context, List<int> imgData, | ||||
@@ -23,6 +23,7 @@ import 'package:chat/utils/screen.dart'; | |||||
import 'package:chat/utils/sound_util.dart'; | import 'package:chat/utils/sound_util.dart'; | ||||
import 'package:chat/utils/sp_utils.dart'; | import 'package:chat/utils/sp_utils.dart'; | ||||
import 'package:chat/utils/sql_util.dart'; | import 'package:chat/utils/sql_util.dart'; | ||||
import 'package:chat/utils/upload_util.dart'; | |||||
import 'package:extended_text/extended_text.dart'; | import 'package:extended_text/extended_text.dart'; | ||||
import 'package:flutter/cupertino.dart'; | import 'package:flutter/cupertino.dart'; | ||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
@@ -111,7 +112,12 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||||
ChatType.valueOf(originMsg.msgType), originMsg.msgContent, | ChatType.valueOf(originMsg.msgType), originMsg.msgContent, | ||||
channelType: ChatChannelType.Group); | channelType: ChatChannelType.Group); | ||||
msg.extraInfo = originMsg.extraInfo; | msg.extraInfo = originMsg.extraInfo; | ||||
msg.extraFile = originMsg.extraFile; | |||||
// msg.extraFile = originMsg.extraFile; | |||||
if(originMsg.extraFile==null ||originMsg.extraFile.contains('http')){ | |||||
msg.extraFile = originMsg.extraFile; | |||||
}else{ | |||||
msg.extraFile = UploadUtil().getFullUrl(originMsg.extraFile, originMsg.sessionId, originMsg.channelType); | |||||
} | |||||
msg.localFile = originMsg.localFile; | msg.localFile = originMsg.localFile; | ||||
if (msg.localFile != null) { | if (msg.localFile != null) { | ||||
msg.state = MsgState.Uploaded; | msg.state = MsgState.Uploaded; | ||||
@@ -18,6 +18,7 @@ import 'package:chat/photo/photo.dart'; | |||||
import 'package:chat/proto/all.pbserver.dart'; | import 'package:chat/proto/all.pbserver.dart'; | ||||
import 'package:chat/utils/CustomUI.dart'; | import 'package:chat/utils/CustomUI.dart'; | ||||
import 'package:chat/utils/MessageMgr.dart'; | import 'package:chat/utils/MessageMgr.dart'; | ||||
import 'package:chat/utils/file_cache_mgr.dart'; | |||||
import 'package:chat/utils/group_member_model.dart'; | import 'package:chat/utils/group_member_model.dart'; | ||||
import 'package:chat/utils/image_util.dart'; | import 'package:chat/utils/image_util.dart'; | ||||
import 'package:chat/utils/keyboard_utils.dart'; | import 'package:chat/utils/keyboard_utils.dart'; | ||||
@@ -28,6 +29,7 @@ import 'package:extended_text_field/extended_text_field.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||
import 'package:flutter_screenutil/flutter_screenutil.dart'; | import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||||
import 'package:multi_image_picker/multi_image_picker.dart'; | |||||
import 'package:oktoast/oktoast.dart'; | import 'package:oktoast/oktoast.dart'; | ||||
import 'package:photo_manager/photo_manager.dart'; | import 'package:photo_manager/photo_manager.dart'; | ||||
import 'package:provider/provider.dart'; | import 'package:provider/provider.dart'; | ||||
@@ -685,20 +687,51 @@ class InputBarState extends State<InputBar> | |||||
// Provider.of<KeyboardIndexProvider>(context, listen: false) | // Provider.of<KeyboardIndexProvider>(context, listen: false) | ||||
// .changeSelectIndex(4); | // .changeSelectIndex(4); | ||||
var photos = await PhotoPicker.pickAsset( | |||||
context: context, | |||||
themeColor: Color(0xFFF0F0F0), | |||||
textColor: Color(0xFF3F3F3F), | |||||
pickType: PickType.onlyImage); | |||||
if (photos != null && photos.length > 0) { | |||||
for (var i = 0; i < photos.length; i++) { | |||||
AssetEntity photoEntity = photos[i]; | |||||
var file = await photoEntity.file; | |||||
_sendPhotoFile(file); | |||||
List<Asset> resultList = List<Asset>(); | |||||
try { | |||||
resultList = await MultiImagePicker.pickImages( | |||||
maxImages: 9, | |||||
enableCamera: false, | |||||
selectedAssets: [], | |||||
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), | |||||
materialOptions: MaterialOptions( | |||||
actionBarColor: "#50A7F9", | |||||
actionBarTitle: "Hibok", | |||||
allViewTitle: "", | |||||
useDetailsView: false, | |||||
selectCircleStrokeColor: "#000000", | |||||
), | |||||
); | |||||
if (resultList != null && resultList.length > 0) { | |||||
for (var i = 0; i < resultList.length; i++) { | |||||
Asset photoEntity = resultList[i]; | |||||
ByteData byteData = await photoEntity.getByteData(); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
_sendPhotoFile(file); | |||||
} | |||||
} | } | ||||
} on Exception catch (e) { | |||||
print(e.toString()); | |||||
} | } | ||||
// var photos = await PhotoPicker.pickAsset( | |||||
// context: context, | |||||
// themeColor: Color(0xFFF0F0F0), | |||||
// textColor: Color(0xFF3F3F3F), | |||||
// pickType: PickType.onlyImage); | |||||
// | |||||
// if (photos != null && photos.length > 0) { | |||||
// for (var i = 0; i < photos.length; i++) { | |||||
// AssetEntity photoEntity = photos[i]; | |||||
// var file = await photoEntity.file; | |||||
// _sendPhotoFile(file); | |||||
// } | |||||
// } | |||||
///防止再点键盘不谈 | ///防止再点键盘不谈 | ||||
} | } | ||||
@@ -732,8 +765,8 @@ class InputBarState extends State<InputBar> | |||||
bool isNeedUpload = false; | bool isNeedUpload = false; | ||||
if (imgSize > ImgSizeLimit) { | if (imgSize > ImgSizeLimit) { | ||||
print('图片大于 $ImgSizeLimit,压缩'); | print('图片大于 $ImgSizeLimit,压缩'); | ||||
//发送压缩图 | |||||
sendImg = await WidgetUtil.getCompressImg(imgFile.absolute.path); | |||||
//发送压缩图 WidgetUtil.getCompressImg(path,quality: 80,percentage: 80); | |||||
sendImg = await WidgetUtil.getCompressImg(imgFile.absolute.path ); | |||||
isNeedUpload = true; | isNeedUpload = true; | ||||
} else { | } else { | ||||
sendImg = imgFile.readAsBytesSync(); | sendImg = imgFile.readAsBytesSync(); | ||||
@@ -392,7 +392,7 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||||
File file =await FileCacheMgr().writeFile(DateTime.now().millisecondsSinceEpoch.toString(),thumbnail); | File file =await FileCacheMgr().writeFile(DateTime.now().millisecondsSinceEpoch.toString(),thumbnail); | ||||
File compressedFile = await FlutterNativeImage.compressImage(file.path, | File compressedFile = await FlutterNativeImage.compressImage(file.path, | ||||
quality: 20, percentage: 10); | |||||
quality: 30, percentage: 40); | |||||
thumbnail =compressedFile.readAsBytesSync().toList(); | thumbnail =compressedFile.readAsBytesSync().toList(); | ||||
@@ -19,6 +19,7 @@ import 'package:chat/utils/CustomUI.dart'; | |||||
import 'package:chat/utils/HttpUtil.dart'; | import 'package:chat/utils/HttpUtil.dart'; | ||||
import 'package:chat/utils/MessageMgr.dart'; | import 'package:chat/utils/MessageMgr.dart'; | ||||
import 'package:chat/utils/PicSwiper.dart'; | import 'package:chat/utils/PicSwiper.dart'; | ||||
import 'package:chat/utils/file_cache_mgr.dart'; | |||||
import 'package:chat/utils/keyboard/bottom_area_avoider.dart'; | import 'package:chat/utils/keyboard/bottom_area_avoider.dart'; | ||||
import 'package:chat/utils/keyboard_utils.dart'; | import 'package:chat/utils/keyboard_utils.dart'; | ||||
import 'package:chat/utils/screen.dart'; | import 'package:chat/utils/screen.dart'; | ||||
@@ -27,6 +28,7 @@ import 'package:extended_text_field/extended_text_field.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||
import 'package:flutter_screenutil/flutter_screenutil.dart'; | import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||||
import 'package:multi_image_picker/multi_image_picker.dart'; | |||||
import 'package:oktoast/oktoast.dart'; | import 'package:oktoast/oktoast.dart'; | ||||
import 'package:photo_manager/photo_manager.dart'; | import 'package:photo_manager/photo_manager.dart'; | ||||
@@ -710,30 +712,68 @@ class _AddProgramState extends State<AddProgram> { | |||||
void _sendPicture() async { | void _sendPicture() async { | ||||
closeEmojiAction(); | closeEmojiAction(); | ||||
var photos = await PhotoPicker.pickAsset( | |||||
context: context, | |||||
themeColor: Color(0xFFF0F0F0), | |||||
maxSelected: Max_Img_Num - imgUrlList.length, | |||||
textColor: Color(0xFF3F3F3F), | |||||
pickType: PickType.onlyImage); | |||||
if (photos != null && photos.length > 0) { | |||||
List<File> fileList = []; | |||||
for (var i = 0; i < photos.length; i++) { | |||||
AssetEntity photoEntity = photos[i]; | |||||
fileList.add(await photoEntity.file); | |||||
} | |||||
Map data = {"type": 7, "userId": UserData().basicInfo.userId}; | |||||
data['sign'] = TokenMgr().getSign(data); | |||||
Response res = await HttpUtil().uploadFiles( | |||||
fileList, data, 'upload/post/postfiles', 'image', | |||||
isShowLoading: true); | |||||
var resData = res.data; | |||||
if (resData['code'] == 0 && resData['msg'] != null) { | |||||
imgUrlList.addAll(resData['msg'].split("|")); | |||||
setState(() {}); | |||||
List<Asset> resultList = List<Asset>(); | |||||
resultList = await MultiImagePicker.pickImages( | |||||
maxImages: Max_Img_Num - imgUrlList.length, | |||||
enableCamera: false, | |||||
selectedAssets: [], | |||||
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), | |||||
materialOptions: MaterialOptions( | |||||
actionBarColor: "#50A7F9", | |||||
actionBarTitle: "Hibok", | |||||
allViewTitle: "", | |||||
useDetailsView: false, | |||||
selectCircleStrokeColor: "#000000", | |||||
), | |||||
); | |||||
if (resultList != null && resultList.length > 0) { | |||||
List<File> fileList = []; | |||||
for (var i = 0; i < resultList.length; i++) { | |||||
Asset photoEntity = resultList[i]; | |||||
ByteData byteData = await photoEntity.getByteData(); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
fileList.add(file); | |||||
} | |||||
Map data = {"type": 7, "userId": UserData().basicInfo.userId}; | |||||
data['sign'] = TokenMgr().getSign(data); | |||||
Response res = await HttpUtil().uploadFiles( | |||||
fileList, data, 'upload/post/postfiles', 'image', | |||||
isShowLoading: true); | |||||
var resData = res.data; | |||||
if (resData['code'] == 0 && resData['msg'] != null) { | |||||
imgUrlList.addAll(resData['msg'].split("|")); | |||||
setState(() {}); | |||||
} | |||||
} | } | ||||
} | |||||
// var photos = await PhotoPicker.pickAsset( | |||||
// context: context, | |||||
// themeColor: Color(0xFFF0F0F0), | |||||
// maxSelected: Max_Img_Num - imgUrlList.length, | |||||
// textColor: Color(0xFF3F3F3F), | |||||
// pickType: PickType.onlyImage); | |||||
// | |||||
// if (photos != null && photos.length > 0) { | |||||
// List<File> fileList = []; | |||||
// for (var i = 0; i < photos.length; i++) { | |||||
// AssetEntity photoEntity = photos[i]; | |||||
// fileList.add(await photoEntity.file); | |||||
// } | |||||
// Map data = {"type": 3, "userId": UserData().basicInfo.userId}; | |||||
// data['sign'] = TokenMgr().getSign(data); | |||||
// Response res = await HttpUtil().uploadFiles( | |||||
// fileList, data, 'upload/post/postfiles', 'image', | |||||
// isShowLoading: true); | |||||
// var resData = res.data; | |||||
// if (resData['code'] == 0 && resData['msg'] != null) { | |||||
// imgUrlList.addAll(resData['msg'].split("|")); | |||||
// setState(() {}); | |||||
// } | |||||
// } | |||||
} | } | ||||
Widget _buildDynicContent() { | Widget _buildDynicContent() { | ||||
@@ -1,4 +1,5 @@ | |||||
import 'dart:io'; | import 'dart:io'; | ||||
import 'dart:typed_data'; | |||||
import 'package:cached_network_image/cached_network_image.dart'; | import 'package:cached_network_image/cached_network_image.dart'; | ||||
import 'package:chat/data/UserData.dart'; | import 'package:chat/data/UserData.dart'; | ||||
@@ -10,9 +11,11 @@ import 'package:chat/photo/photo.dart'; | |||||
import 'package:chat/utils/CustomUI.dart'; | import 'package:chat/utils/CustomUI.dart'; | ||||
import 'package:chat/utils/HttpUtil.dart'; | import 'package:chat/utils/HttpUtil.dart'; | ||||
import 'package:chat/utils/PicSwiper.dart'; | import 'package:chat/utils/PicSwiper.dart'; | ||||
import 'package:chat/utils/file_cache_mgr.dart'; | |||||
import 'package:chat/utils/screen.dart'; | import 'package:chat/utils/screen.dart'; | ||||
import 'package:dio/dio.dart'; | import 'package:dio/dio.dart'; | ||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:multi_image_picker/multi_image_picker.dart'; | |||||
import 'package:oktoast/oktoast.dart'; | import 'package:oktoast/oktoast.dart'; | ||||
import 'package:photo_manager/photo_manager.dart'; | import 'package:photo_manager/photo_manager.dart'; | ||||
@@ -179,18 +182,30 @@ class _InformUserPageState extends State<InformUserPage> { | |||||
} | } | ||||
void _sendPicture() async { | void _sendPicture() async { | ||||
var photos = await PhotoPicker.pickAsset( | |||||
context: context, | |||||
themeColor: Color(0xFFF0F0F0), | |||||
maxSelected: MaxImgNum - imgUrlList.length, | |||||
textColor: Color(0xFF3F3F3F), | |||||
pickType: PickType.onlyImage); | |||||
if (photos != null && photos.length > 0) { | |||||
List<Asset> resultList = List<Asset>(); | |||||
resultList = await MultiImagePicker.pickImages( | |||||
maxImages: MaxImgNum - imgUrlList.length, | |||||
enableCamera: false, | |||||
selectedAssets: [], | |||||
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), | |||||
materialOptions: MaterialOptions( | |||||
actionBarColor: "#50A7F9", | |||||
actionBarTitle: "Hibok", | |||||
allViewTitle: "", | |||||
useDetailsView: false, | |||||
selectCircleStrokeColor: "#000000", | |||||
), | |||||
); | |||||
if (resultList != null && resultList.length > 0) { | |||||
List<File> fileList = []; | List<File> fileList = []; | ||||
for (var i = 0; i < photos.length; i++) { | |||||
AssetEntity photoEntity = photos[i]; | |||||
fileList.add(await photoEntity.file); | |||||
for (var i = 0; i < resultList.length; i++) { | |||||
Asset photoEntity = resultList[i]; | |||||
ByteData byteData = await photoEntity.getByteData(); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
fileList.add(file); | |||||
} | } | ||||
Map data = {"type": 3, "userId": UserData().basicInfo.userId}; | Map data = {"type": 3, "userId": UserData().basicInfo.userId}; | ||||
data['sign'] = TokenMgr().getSign(data); | data['sign'] = TokenMgr().getSign(data); | ||||
@@ -203,6 +218,33 @@ class _InformUserPageState extends State<InformUserPage> { | |||||
setState(() {}); | setState(() {}); | ||||
} | } | ||||
} | } | ||||
// var photos = await PhotoPicker.pickAsset( | |||||
// context: context, | |||||
// themeColor: Color(0xFFF0F0F0), | |||||
// maxSelected: MaxImgNum - imgUrlList.length, | |||||
// textColor: Color(0xFF3F3F3F), | |||||
// pickType: PickType.onlyImage); | |||||
// | |||||
// if (photos != null && photos.length > 0) { | |||||
// List<File> fileList = []; | |||||
// for (var i = 0; i < photos.length; i++) { | |||||
// AssetEntity photoEntity = photos[i]; | |||||
// fileList.add(await photoEntity.file); | |||||
// } | |||||
// Map data = {"type": 3, "userId": UserData().basicInfo.userId}; | |||||
// data['sign'] = TokenMgr().getSign(data); | |||||
// Response res = await HttpUtil().uploadFiles( | |||||
// fileList, data, 'upload/post/postfiles', 'image', | |||||
// isShowLoading: true); | |||||
// var resData = res.data; | |||||
// if (resData['code'] == 0 && resData['msg'] != null) { | |||||
// imgUrlList.addAll(resData['msg'].split("|")); | |||||
// setState(() {}); | |||||
// } | |||||
// } | |||||
} | } | ||||
Widget _buildRadioButtom(str, radio, callback) { | Widget _buildRadioButtom(str, radio, callback) { | ||||
@@ -684,9 +684,10 @@ class MoneyPageState extends State<MoneyPage> | |||||
], | ], | ||||
), | ), | ||||
InkWell( | InkWell( | ||||
onTap: () { | onTap: () { | ||||
launch( | launch( | ||||
"https://datasm.chengyouhd.com/zh-CN/Home/WithdrawalRole?language=${UserData().language}"); | |||||
"http://datechatagent.chengyouhd.com/zh-CN/Home/WithdrawalRole?language=${UserData().language}"); | |||||
}, | }, | ||||
child: Container( | child: Container( | ||||
margin: EdgeInsets.only(top: 25, bottom: 10, left: 13.5), | margin: EdgeInsets.only(top: 25, bottom: 10, left: 13.5), | ||||
@@ -31,7 +31,7 @@ class ServiceMsgModel { | |||||
ServiceMsgModel({this.isMe, this.msg}); | ServiceMsgModel({this.isMe, this.msg}); | ||||
} | } | ||||
class ServiceCenterPage extends StatefulWidget { | |||||
class ServiceCenterPage extends StatefulWidget { | |||||
final int questionIndex; | final int questionIndex; | ||||
ServiceCenterPage({this.questionIndex = -1}); | ServiceCenterPage({this.questionIndex = -1}); | ||||
@@ -35,7 +35,7 @@ class FileCacheMgr { | |||||
return filePath; | return filePath; | ||||
} | } | ||||
Future<File> writeFile(String fileId, Uint8List fileBytes) async { | |||||
Future<File> writeFile(String fileId, fileBytes) async { | |||||
var path = p.join(await getFilePath(), fileId); | var path = p.join(await getFilePath(), fileId); | ||||
print('receive path : $path'); | print('receive path : $path'); | ||||
var folder = new File(path).parent; | var folder = new File(path).parent; | ||||
@@ -47,6 +47,8 @@ class FileCacheMgr { | |||||
return file; | return file; | ||||
} | } | ||||
Future<File> getFile(String fileId) async { | Future<File> getFile(String fileId) async { | ||||
var filePath = p.join(await getFilePath(), fileId); | var filePath = p.join(await getFilePath(), fileId); | ||||
var file = File(filePath); | var file = File(filePath); | ||||
@@ -85,6 +85,11 @@ class WidgetUtil { | |||||
return k; | return k; | ||||
} | } | ||||
///Get the coordinates of the widget on the screen.Widgets must be rendered completely. | ///Get the coordinates of the widget on the screen.Widgets must be rendered completely. | ||||
///获取widget在屏幕上的坐标,widget必须渲染完成 | ///获取widget在屏幕上的坐标,widget必须渲染完成 | ||||
static Offset getWidgetLocalToGlobal(BuildContext context) { | static Offset getWidgetLocalToGlobal(BuildContext context) { | ||||
@@ -199,7 +199,12 @@ class UploadUtil { | |||||
Future downloadFile(MsgModel msg, {CancelToken cancelToken}) async { | Future downloadFile(MsgModel msg, {CancelToken cancelToken}) async { | ||||
Response response; | Response response; | ||||
var fullUrl = getFullUrl(msg.extraFile, msg.sessionId, msg.channelType); | var fullUrl = getFullUrl(msg.extraFile, msg.sessionId, msg.channelType); | ||||
if(msg.extraFile.contains('http://')){ | |||||
fullUrl = msg.extraFile; | |||||
} | |||||
print('下载文件$fullUrl'); | print('下载文件$fullUrl'); | ||||
@@ -718,6 +718,13 @@ packages: | |||||
url: "https://pub.flutter-io.cn" | url: "https://pub.flutter-io.cn" | ||||
source: hosted | source: hosted | ||||
version: "0.9.6+3" | version: "0.9.6+3" | ||||
multi_image_picker: | |||||
dependency: "direct main" | |||||
description: | |||||
name: multi_image_picker | |||||
url: "https://pub.flutter-io.cn" | |||||
source: hosted | |||||
version: "4.6.4" | |||||
node_interop: | node_interop: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -1,7 +1,7 @@ | |||||
name: chat | name: chat | ||||
description: A new Flutter project. | description: A new Flutter project. | ||||
#修改版本号后get-clean | #修改版本号后get-clean | ||||
version: 1.0.5+6 | |||||
version: 1.0.9+13 | |||||
environment: | environment: | ||||
sdk: ">=2.1.0 <3.0.0" | sdk: ">=2.1.0 <3.0.0" | ||||
@@ -173,9 +173,10 @@ dependencies: | |||||
file_picker: ^1.4.3+2 | file_picker: ^1.4.3+2 | ||||
#文件打开 | #文件打开 | ||||
open_file: ^3.0.1 | open_file: ^3.0.1 | ||||
#文件分享 | |||||
share_extend: ^1.1.1 | share_extend: ^1.1.1 | ||||
#多图片选择 | |||||
multi_image_picker: ^4.6.4 | |||||
dev_dependencies: | dev_dependencies: | ||||
flutter_test: | flutter_test: | ||||