diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..30994f67 --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# fvm +.fvm/flutter_sdk \ No newline at end of file diff --git a/JJH_CHANGELOG.md b/JJH_CHANGELOG.md new file mode 100644 index 00000000..646d4459 --- /dev/null +++ b/JJH_CHANGELOG.md @@ -0,0 +1,63 @@ +# 改动说明 +扩展仓库: https://github.com/JiangJuHong/chat-uikit-flutter +fork来源:https://github.com/TencentCloud/chat-uikit-flutter + +此仓库:在原有基础上增加通用性适配扩展,此改动不涉及到具体项目业务,尽可能的在原有基础上增加通用适配性,适应更多场景,改动说明参考以下内容: + +## 改动明细 +### [tim_uikit_conversation_item.dart](lib%2Fui%2Fviews%2FTIMUIKitConversation%2Ftim_uikit_conversation_item.dart) +* feat 增加参数:`avatarBuilder`,使用时可直接传入该构建器替换默认头像显示组件 +* feat 修改参数:`nickName` 从 string 类型替换为 Widget 类型,并增加DefaultTextStyle保持原有样式不变 +* feat 将 边框提取到 [tim_uikit_conversation.dart](lib%2Fui%2Fviews%2FTIMUIKitConversation%2Ftim_uikit_conversation.dart) 组件中 +* feat 增加 avatarSize 属性,可以自定义会话组件头像区域大小 + +### [tim_uikit_conversation.dart](lib%2Fui%2Fviews%2FTIMUIKitConversation%2Ftim_uikit_conversation.dart) +* feat 将 ListView.builder 修改为 ListView.separated +* feat 增加属性 separatorBuilder,可通过外部传入自定义分割线样式 + +### [tim_uikit_conversation_draft_text.dart](lib%2Fui%2Fviews%2FTIMUIKitConversation%2Ftim_uikit_conversation_draft_text.dart) +* feat 以Rich的方式完全重写内容展示格式,解决:草稿字样和内容未对齐问题、显示草稿时和不显示草稿时样式有细微差别的问题 + +### [tim_uikit_conversation_last_msg.dart](lib%2Fui%2Fviews%2FTIMUIKitConversation%2Ftim_uikit_conversation_last_msg.dart) +* feat 以Rich的方式完全重写内容展示格式,解决显示草稿时和不显示草稿时样式有细微差别的问题,调整行高和草稿时的一致,均为1.0 +* fix 修复草稿内容不显示问题 + +### [tim_uikit_chat.dart](lib%2Fui%2Fviews%2FTIMUIKitChat%2Ftim_uikit_chat.dart) +* feat 增加参数:`inputPanelBackgroundColor`,设置输入框区域的背景颜色(注:此属性实际上应该放在TUITheme中,但是此开源库无修改TUITheme的权限,故而提取为组件参数) +* feat 增加参数:`inputIconColor`,设置输入框区域的图标颜色(注:此属性实际上应该放在TUITheme中,但是此开源库无修改TUITheme的权限,故而提取为组件参数) +* feat 增加参数:`inputSoundBuilder`,语音组件显示构建器 +* feat 增加参数:`inputDecoration`,自定义输入框的Decoration +* feat 增加参数:`stickerPanelBackgroundColor`,设置表情面板背景颜色 +* feat 增加参数:`stickerPanelPadding`,设置表情面板内边距 +* feat 增加参数:`morePanelBorder`,设置更多面板的边框 + +### [narrow.dart](lib%2Fui%2Fviews%2FTIMUIKitChat%2FTIMUIKitTextField%2Ftim_uikit_text_field_layout%2Fnarrow.dart) +* feat 增加参数:`iconColor`,设置图标颜色(注:此属性实际上应该放在TUITheme中,但是此开源库无修改TUITheme的权限,故而提取为组件参数) +* feat 增加参数:`soundBuilder`,语音组件显示构建器 +* feat 增加参数:`inputDecoration`,自定义输入框的Decoration +* feat 增加参数:`stickerPanelBackgroundColor`,设置表情面板背景颜色 +* feat 增加参数:`stickerPanelPadding`,设置表情面板内边距 +* feat 增加参数:`morePanelBorder`,设置更多面板的边框 + +### [tim_uikit_text_field.dart](lib%2Fui%2Fviews%2FTIMUIKitChat%2FTIMUIKitTextField%2Ftim_uikit_text_field.dart) +* feat 增加参数:`iconColor`,设置图标颜色(注:此属性实际上应该放在TUITheme中,但是此开源库无修改TUITheme的权限,故而提取为组件参数) +* feat 增加参数:`soundBuilder`,语音组件显示构建器 +* feat 增加参数:`inputDecoration`,自定义输入框的Decoration +* feat 增加参数:`stickerPanelBackgroundColor`,设置表情面板背景颜色 +* feat 增加参数:`stickerPanelPadding`,设置表情面板内边距 +* feat 增加参数:`morePanelBorder`,设置更多面板的边框 + +### [tim_uikit_send_sound_message.dart](lib%2Fui%2Fviews%2FTIMUIKitChat%2FTIMUIKitTextField%2Ftim_uikit_send_sound_message.dart) +* feat 增加参数:`builder`,可由用户自定义组件渲染 + +### [tim_uikit_more_panel.dart](lib%2Fui%2Fviews%2FTIMUIKitChat%2FTIMUIKitTextField%2Ftim_uikit_more_panel.dart) +* feat 增加参数:`border`,可由用户自定义边框 + +### [tim_uikit_multi_select_panel.dart](lib%2Fui%2Fviews%2FTIMUIKitChat%2Ftim_uikit_multi_select_panel.dart) +* fix 修复image图片大小设置不生效的问题:引用: [https://github.com/flutter/flutter/issues/137580](https://github.com/flutter/flutter/issues/137580) + +### [image_screen.dart](lib%2Fui%2Fwidgets%2Fimage_screen.dart) +* fix 修复image图片大小设置不生效的问题:引用: [https://github.com/flutter/flutter/issues/137580](https://github.com/flutter/flutter/issues/137580) + +### [center_play_button.dart](lib%2Fui%2Fwidgets%2Fcenter_play_button.dart)[image_screen.dart](lib%2Fui%2Fwidgets%2Fimage_screen.dart) +* fix 修复image图片大小设置不生效的问题:引用: [https://github.com/flutter/flutter/issues/137580](https://github.com/flutter/flutter/issues/137580) \ No newline at end of file diff --git a/example/lib/TIMUIKitChatExample.dart b/example/lib/TIMUIKitChatExample.dart index d82bb9f8..4217e8a0 100644 --- a/example/lib/TIMUIKitChatExample.dart +++ b/example/lib/TIMUIKitChatExample.dart @@ -64,7 +64,6 @@ class TIMUIKitChatExample extends StatelessWidget { config: const TIMUIKitChatConfig( // 仅供演示,非全部配置项,实际使用中,可只传和默认项不同的参数,无需传入所有开关 isAllowClickAvatar: true, - isUseDefaultEmoji: true, isAllowLongPressMessage: true, isShowReadingStatus: true, isShowGroupReadingStatus: true, diff --git a/example/lib/main.dart b/example/lib/main.dart index 20268ac8..c7e26194 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -5,10 +5,13 @@ import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'TIMUIKitAddFriendExample.dart'; import 'TIMUIKitAddGroupExample.dart'; import 'TIMUIKitBlackListExample.dart'; +import 'TIMUIKitChatExample.dart'; import 'TIMUIKitContactExample.dart'; +import 'TIMUIKitConversationExample.dart'; import 'TIMUIKitGroupExample.dart'; import 'TIMUIKitGroupProfileExample.dart'; import 'TIMUIKitNewContactExample.dart'; +import 'TIMUIKitProfileExample.dart'; import 'TIMUIKitSearchExample.dart'; void main() { diff --git a/example/pubspec.yaml b/example/pubspec.yaml index f19a45a0..eaa16cd7 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 tencent_cloud_chat_uikit: - path: ../../tim_ui_kit + path: ../ tencent_im_sdk_plugin_web: ^0.3.9 archive: ^3.3.0 tencent_im_sdk_plugin_desktop: ^0.1.13 diff --git a/lib/business_logic/life_cycle/chat_life_cycle.dart b/lib/business_logic/life_cycle/chat_life_cycle.dart index cf65dd72..ec8888ac 100644 --- a/lib/business_logic/life_cycle/chat_life_cycle.dart +++ b/lib/business_logic/life_cycle/chat_life_cycle.dart @@ -1,6 +1,8 @@ import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/base_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; +typedef FutureVoidCallback = Future Function(); + class ChatLifeCycle { /// Before a new message will be added to historical message list from long connection. /// You may not render this message by return null. @@ -11,7 +13,7 @@ class ChatLifeCycle { /// Before a new message will be sent. /// Returns null can block the message from sending. - // Future Function(V2TimMessage message, [V2TimMessage? repliedMessage]) messageWillSend; + FutureVoidCallback? messageWillSend; /// After a new message been sent. MessageFunctionNullCallback messageDidSend; @@ -43,7 +45,7 @@ class ChatLifeCycle { this.shouldDeleteMessage = DefaultLifeCycle.defaultAsyncBooleanSolution, this.messageDidSend = DefaultLifeCycle.defaultNullCallbackSolution, this.didGetHistoricalMessageList = DefaultLifeCycle.defaultMessageListSolution, - // this.messageWillSend = DefaultLifeCycle.defaultTwoMessagesSolution, + this.messageWillSend, this.modifiedMessageWillMount = DefaultLifeCycle.defaultMessageSolution, this.newMessageWillMount = DefaultLifeCycle.defaultMessageSolution, this.messageShouldMount = DefaultLifeCycle.defaultBooleanSolution, diff --git a/lib/business_logic/separate_models/tui_chat_separate_view_model.dart b/lib/business_logic/separate_models/tui_chat_separate_view_model.dart index 7b6e5028..a00e94e0 100644 --- a/lib/business_logic/separate_models/tui_chat_separate_view_model.dart +++ b/lib/business_logic/separate_models/tui_chat_separate_view_model.dart @@ -685,6 +685,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { String? localCustomData, bool? isEditStatusMessage = false, }) async { + if (lifeCycle?.messageWillSend != null) await lifeCycle!.messageWillSend!(); String receiver = convType == ConvType.c2c ? convID : ''; String groupID = convType == ConvType.group ? convID : ''; if (convType == ConvType.group && _groupType == null) { @@ -1149,6 +1150,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { sendForwardMessage({ required List conversationList, }) async { + if (lifeCycle?.messageWillSend != null) await lifeCycle!.messageWillSend!(); final selectedMessages = getSelectedMessageList(); for (var conversation in conversationList) { final convID = conversation.groupID ?? conversation.userID ?? ""; @@ -1195,6 +1197,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { required List abstractList, required BuildContext context, }) async { + if (lifeCycle?.messageWillSend != null) await lifeCycle!.messageWillSend!(); final List msgIDList = getSelectedMessageList() .map((e) => e.msgID ?? "") .where((element) => element != "") diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart index ae8cbaa4..a9d1940a 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart @@ -76,13 +76,17 @@ class MorePanel extends StatefulWidget { /// 会话类型 final ConvType conversationType; + /// 边框 + final BoxBorder? border; + final MorePanelConfig? morePanelConfig; const MorePanel( {required this.conversationID, required this.conversationType, Key? key, - this.morePanelConfig}) + this.morePanelConfig, + this.border}) : super(key: key); @override @@ -726,7 +730,7 @@ class _MorePanelState extends TIMUIKitState { height: 248, decoration: BoxDecoration( // color: hexToColor("EBF0F6"), - border: Border( + border: widget.border ?? Border( top: BorderSide(width: 1, color: Colors.grey.shade300), ), ), diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_send_sound_message.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_send_sound_message.dart index 98d9aef3..60af33ee 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_send_sound_message.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_send_sound_message.dart @@ -17,6 +17,9 @@ import 'package:tencent_cloud_chat_uikit/ui/utils/sound_record.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/logger.dart'; +/// 内容构建器 +typedef SoundBuilderCallback = Widget Function(BuildContext context, bool isRecording); + class SendSoundMessage extends StatefulWidget { /// conversation ID final String conversationID; @@ -27,11 +30,15 @@ class SendSoundMessage extends StatefulWidget { /// the conversation type final ConvType conversationType; + /// 构建器 + final SoundBuilderCallback? builder; + const SendSoundMessage( {required this.conversationID, required this.conversationType, Key? key, - required this.onDownBottom}) + required this.onDownBottom, + this.builder}) : super(key: key); @override @@ -301,7 +308,7 @@ class _SendSoundMessageState extends TIMUIKitState { onLongPressMoveUpdate: onLongPressUpdate, onLongPressEnd: onLongPressEnd, onLongPressCancel: onLonePressCancel, - child: Container( + child: widget.builder != null ? widget.builder!(context, isRecording) : Container( height: 35, color: isRecording ? theme.weakBackgroundColor : Colors.white, alignment: Alignment.center, diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart index f323a0a3..306a3f1e 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart @@ -24,6 +24,8 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/wide.dart'; +import 'tim_uikit_send_sound_message.dart'; + enum MuteStatus { none, me, all } typedef CustomStickerPanel = Widget Function({ @@ -100,6 +102,24 @@ class TIMUIKitInputTextField extends StatefulWidget { final String? groupID; + /// 图标颜色 + final Color? iconColor; + + /// 语音组件构建器 + final SoundBuilderCallback? soundBuilder; + + /// 自定义输入框的 Decoration + final InputDecoration? inputDecoration; + + /// 表情面板背景颜色 + final Color? stickerPanelBackgroundColor; + + /// 表情面板内边距 + final EdgeInsetsGeometry? stickerPanelPadding; + + /// 更多面板边框 + final BoxBorder? morePanelBorder; + const TIMUIKitInputTextField( {Key? key, required this.conversationID, @@ -122,7 +142,13 @@ class TIMUIKitInputTextField extends StatefulWidget { this.groupType, this.atMemberPanelScroll, this.groupID, - this.chatConfig}) + this.chatConfig, + this.iconColor, + this.soundBuilder, + this.inputDecoration, + this.stickerPanelBackgroundColor, + this.stickerPanelPadding, + this.morePanelBorder}) : super(key: key); @override @@ -999,6 +1025,11 @@ class _InputTextFieldState extends TIMUIKitState { return TUIKitScreenUtils.getDeviceWidget( context: context, defaultWidget: TIMUIKitTextFieldLayoutNarrow( + morePanelBorder: widget.morePanelBorder, + stickerPanelPadding: widget.stickerPanelPadding, + stickerPanelBackgroundColor: widget.stickerPanelBackgroundColor, + inputDecoration: widget.inputDecoration, + soundBuilder: widget.soundBuilder, stickerPackageList: stickerPackageList, onEmojiSubmitted: _onEmojiSubmitted, onCustomEmojiFaceSubmitted: _onCustomEmojiFaceSubmitted, @@ -1008,6 +1039,7 @@ class _InputTextFieldState extends TIMUIKitState { onChanged: widget.onChanged, onDeleteText: _onDeleteText, backgroundColor: widget.backgroundColor, + iconColor: widget.iconColor, morePanelConfig: widget.morePanelConfig, repliedMessage: value, currentCursor: currentCursor, diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart index a20c97d2..ff4c7336 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart @@ -98,6 +98,24 @@ class TIMUIKitTextFieldLayoutNarrow extends StatefulWidget { final List stickerPackageList; + /// 图标颜色 + final Color? iconColor; + + /// 语音组件构建器 + final SoundBuilderCallback? soundBuilder; + + /// 自定义输入框的 Decoration + final InputDecoration? inputDecoration; + + /// 表情面板背景颜色 + final Color? stickerPanelBackgroundColor; + + /// 表情面板内边距 + final EdgeInsetsGeometry? stickerPanelPadding; + + /// 更多面板边框 + final BoxBorder? morePanelBorder; + const TIMUIKitTextFieldLayoutNarrow( {Key? key, this.customStickerPanel, @@ -132,7 +150,13 @@ class TIMUIKitTextFieldLayoutNarrow extends StatefulWidget { this.hintText, required this.customEmojiStickerList, this.controller, - required this.stickerPackageList}) + required this.stickerPackageList, + this.iconColor, + this.soundBuilder, + this.inputDecoration, + this.stickerPanelBackgroundColor, + this.stickerPanelPadding, + this.morePanelBorder}) : super(key: key); @override @@ -224,6 +248,8 @@ class _TIMUIKitTextFieldLayoutNarrowState extends TIMUIKitState? groupMemberList; + /// 输入框区域背景颜色 + final Color? inputPanelBackgroundColor; + + /// 输入框区域图标颜色 + final Color? inputIconColor; + + /// 语音组件构建器 + final SoundBuilderCallback? inputSoundBuilder; + + /// 自定义输入框的 Decoration + final InputDecoration? inputDecoration; + + /// 表情面板背景颜色 + final Color? stickerPanelBackgroundColor; + + /// 表情面板内边距 + final EdgeInsetsGeometry? stickerPanelPadding; + + /// 更多面板边框 + final BoxBorder? morePanelBorder; + TIMUIKitChat( {Key? key, this.groupID, @@ -206,7 +229,14 @@ class TIMUIKitChat extends StatefulWidget { this.customAppBar, this.inputTopBuilder, this.onSecondaryTapAvatar, - this.customMessageHoverBarOnDesktop}) + this.customMessageHoverBarOnDesktop, + this.inputPanelBackgroundColor, + this.inputIconColor, + this.inputSoundBuilder, + this.inputDecoration, + this.stickerPanelBackgroundColor, + this.stickerPanelPadding, + this.morePanelBorder}) : super(key: key) { startTime = DateTime.now().millisecondsSinceEpoch; } @@ -577,6 +607,13 @@ class _TUIChatState extends TIMUIKitState { : (widget.textFieldBuilder != null ? widget.textFieldBuilder!(context) : TIMUIKitInputTextField( + morePanelBorder: widget.morePanelBorder, + stickerPanelPadding: widget.stickerPanelPadding, + stickerPanelBackgroundColor: widget.stickerPanelBackgroundColor, + inputDecoration: widget.inputDecoration, + soundBuilder: widget.inputSoundBuilder, + backgroundColor: widget.inputPanelBackgroundColor, + iconColor: widget.inputIconColor, chatConfig: widget.config, groupID: widget.groupID, atMemberPanelScroll: diff --git a/lib/ui/views/TIMUIKitChat/tim_uikit_multi_select_panel.dart b/lib/ui/views/TIMUIKitChat/tim_uikit_multi_select_panel.dart index 06d92afe..432e9ab9 100644 --- a/lib/ui/views/TIMUIKitChat/tim_uikit_multi_select_panel.dart +++ b/lib/ui/views/TIMUIKitChat/tim_uikit_multi_select_panel.dart @@ -233,7 +233,7 @@ class MultiSelectPanel extends TIMUIKitStatelessWidget { children: [ IconButton( icon: Image.asset('images/forward.png', - package: 'tencent_cloud_chat_uikit', color: theme.selectPanelTextIconColor), + package: 'tencent_cloud_chat_uikit', color: theme.selectPanelTextIconColor, width: 40, height: 40), iconSize: 40, onPressed: () { _handleForwardMessage(context, false, model); @@ -247,7 +247,7 @@ class MultiSelectPanel extends TIMUIKitStatelessWidget { children: [ IconButton( icon: Image.asset('images/merge_forward.png', - package: 'tencent_cloud_chat_uikit', color: theme.selectPanelTextIconColor), + package: 'tencent_cloud_chat_uikit', color: theme.selectPanelTextIconColor, width: 40, height: 40), iconSize: 40, onPressed: () { _handleForwardMessage(context, true, model); @@ -263,7 +263,7 @@ class MultiSelectPanel extends TIMUIKitStatelessWidget { children: [ IconButton( icon: Image.asset('images/delete.png', - package: 'tencent_cloud_chat_uikit', color: theme.selectPanelTextIconColor), + package: 'tencent_cloud_chat_uikit', color: theme.selectPanelTextIconColor, width: 40, height: 40), iconSize: 40, onPressed: () { showCupertinoModalPopup( diff --git a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart index aa784d30..588fc28b 100644 --- a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart +++ b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart @@ -67,6 +67,9 @@ class TIMUIKitConversation extends StatefulWidget { /// Control if shows the identifier that the conversation has a draft text, inputted in previous. final bool isShowDraft; + /// 自定义分割线样式 + final IndexedWidgetBuilder? separatorBuilder; + const TIMUIKitConversation( {Key? key, this.lifeCycle, @@ -79,7 +82,8 @@ class TIMUIKitConversation extends StatefulWidget { this.conversationCollector, this.emptyBuilder, this.lastMessageBuilder, - this.isShowOnlineStatus = true}) + this.isShowOnlineStatus = true, + this.separatorBuilder}) : super(key: key); @override @@ -358,10 +362,11 @@ class _TIMUIKitConversationState extends TIMUIKitState { Widget conversationList() { return filteredConversationList.isNotEmpty - ? ListView.builder( + ? ListView.separated( controller: _autoScrollController, shrinkWrap: true, itemCount: filteredConversationList.length, + separatorBuilder: widget.separatorBuilder ?? (context,index) => Container(height: 1,color: theme.conversationItemBorderColor ?? CommonColor.weakDividerColor), itemBuilder: (context, index) { if (index == filteredConversationList.length - 1) { if (haveMoreData) { @@ -401,11 +406,11 @@ class _TIMUIKitConversationState extends TIMUIKitState { isCurrent: isCurrent, lastMessageBuilder: widget.lastMessageBuilder, faceUrl: conversationItem.faceUrl ?? "", - nickName: conversationItem.showName ?? "", + nickName: Text(conversationItem.showName ?? ""), isDisturb: - (conversationItem.groupType == "Meeting" - ? false - : conversationItem.recvOpt != 0), + (conversationItem.groupType == "Meeting" + ? false + : conversationItem.recvOpt != 0), lastMsg: conversationItem.lastMessage, isPined: isPined, groupAtInfoList: diff --git a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_draft_text.dart b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_draft_text.dart index ff1dc941..bf5dbe92 100644 --- a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_draft_text.dart +++ b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_draft_text.dart @@ -25,22 +25,21 @@ class TIMUIKitDraftText extends TIMUIKitStatelessWidget { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final TUITheme theme = value.theme; - return Row(children: [ - Text(_getDraftShowText(), - style: TextStyle( - color: theme.conversationItemDraftTextColor, - )), - Expanded( - child: Text( - draftText, - softWrap: true, - overflow: TextOverflow.ellipsis, - maxLines: 1, + return RichText( + softWrap: true, + overflow: TextOverflow.ellipsis, + maxLines: 1, + text: TextSpan( + children: [ + TextSpan(text: _getDraftShowText(), style: TextStyle(color: theme.conversationItemDraftTextColor)), + TextSpan(text: draftText), + ], style: TextStyle( - height: 1.5, - color: theme.conversationItemLastMessageTextColor, - fontSize: fontSize), - )), - ]); + height: 1, + color: theme.conversationItemLastMessageTextColor, + fontSize: fontSize, + ), + ), + ); } } diff --git a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart index a3230849..8ccfa843 100644 --- a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart +++ b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart @@ -13,12 +13,14 @@ import 'package:tencent_cloud_chat_uikit/ui/widgets/avatar.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/unread_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; +typedef AvatarBuilder = Widget Function(); + typedef LastMessageBuilder = Widget? Function( V2TimMessage? lastMsg, List groupAtInfoList); class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { final String faceUrl; - final String nickName; + final Widget nickName; final V2TimMessage? lastMsg; final int unreadCount; final bool isPined; @@ -27,9 +29,11 @@ class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { final int? draftTimestamp; final bool isDisturb; final LastMessageBuilder? lastMessageBuilder; + final AvatarBuilder? avatarBuilder; final V2TimUserStatus? onlineStatus; final int? convType; final bool isCurrent; + final double? avatarSize; TIMUIKitConversationItem({ Key? key, @@ -45,7 +49,9 @@ class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { this.draftText, this.draftTimestamp, this.lastMessageBuilder, + this.avatarBuilder, this.convType, + this.avatarSize, }) : super(key: key); Widget _getShowMsgWidget(BuildContext context) { @@ -102,31 +108,23 @@ class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return Container( padding: const EdgeInsets.only(top: 6, bottom: 6, left: 16, right: 16), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: theme.conversationItemBorderColor ?? - CommonColor.weakDividerColor, - width: 1, - ), - ), - ), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( padding: const EdgeInsets.only(top: 0, bottom: 2, right: 0), child: SizedBox( - width: isDesktopScreen ? 40 : 44, - height: isDesktopScreen ? 40 : 44, + width: avatarSize ?? (isDesktopScreen ? 40 : 44), + height: avatarSize ?? (isDesktopScreen ? 40 : 44), child: Stack( fit: StackFit.expand, clipBehavior: Clip.none, children: [ - Avatar( + if(avatarBuilder != null) avatarBuilder!(), + if(avatarBuilder == null) Avatar( onlineStatus: onlineStatus, faceUrl: faceUrl, - showName: nickName, + showName: "avatar", type: convType), if (unreadCount != 0) Positioned( @@ -155,19 +153,15 @@ class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( - child: Text( - nickName, - softWrap: true, - textAlign: TextAlign.left, - overflow: TextOverflow.ellipsis, - maxLines: 1, - style: TextStyle( - height: 1, - color: theme.conversationItemTitleTextColor, - fontSize: isDesktopScreen ? 14 : 18, - fontWeight: FontWeight.w400, - ), - )), + child: DefaultTextStyle( + softWrap: true, + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis, + maxLines: 1, + style: TextStyle(height: 1, color: theme.conversationItemTitleTextColor, fontSize: isDesktopScreen ? 14 : 18, fontWeight: FontWeight.w400), + child: nickName, + ), + ), _getTimeStringForChatWidget(context, theme), ], ), diff --git a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart index 9347f076..74506137 100644 --- a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart +++ b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart @@ -118,7 +118,7 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { Future _getLastMsgShowText( V2TimMessage? message, BuildContext context) async { - final msgType = message!.elemType; + final msgType = message?.elemType; switch (msgType) { case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM: return TIM_t("[自定义]"); @@ -149,7 +149,7 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { } Icon? _getIconByMsgStatus(BuildContext context) { - final msgStatus = widget.lastMsg!.status; + final msgStatus = widget.lastMsg?.status; final theme = Provider.of(context).theme; if (msgStatus == MessageStatus.V2TIM_MSG_STATUS_SEND_FAIL) { return Icon(Icons.error, color: theme.cautionColor, size: 16); @@ -191,7 +191,7 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { String _getDraftShowText() { final draftShowText = TIM_t("草稿"); - return '[$draftShowText]'; + return '[$draftShowText] '; } @override @@ -222,7 +222,7 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { color: theme.weakTextColor, fontSize: widget.fontSize)), if (widget.draftText != null && widget.draftText != "") Expanded( - child: ExtendedText(groupTipsAbstractText, + child: ExtendedText(widget.draftText, softWrap: true, maxLines: 1, overflow: TextOverflow.ellipsis, diff --git a/lib/ui/widgets/center_play_button.dart b/lib/ui/widgets/center_play_button.dart index ffe7fa2e..0adee50c 100644 --- a/lib/ui/widgets/center_play_button.dart +++ b/lib/ui/widgets/center_play_button.dart @@ -27,7 +27,7 @@ class CenterPlayButton extends TIMUIKitStatelessWidget { child: GestureDetector( child: IconButton( iconSize: 86, - icon: Image.asset('images/play.png', package: 'tencent_cloud_chat_uikit'), + icon: Image.asset('images/play.png', package: 'tencent_cloud_chat_uikit',width: 86, height: 86), onPressed: onPressed, ), ), diff --git a/pubspec.lock b/pubspec.lock index 80b3f01d..5f9c07ba 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -165,10 +165,10 @@ packages: dependency: transitive description: name: camera_android - sha256: f43d07f9d7228ea1ca87d22e30881bd68da4b78484a1fbd1f1408b412a41cefb + sha256: "19b7226387218864cb2388e1ad5db7db50d065222f5511254b03fc397dd21a5e" url: "https://pub.dev" source: hosted - version: "0.10.8+3" + version: "0.10.9+17" camera_avfoundation: dependency: transitive description: @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: camera_platform_interface - sha256: "60fa0bb62a4f3bf3a7c413e31e4cd01b69c779ccc8e4668904a24581b86c316b" + sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061 url: "https://pub.dev" source: hosted - version: "2.5.1" + version: "2.8.0" camera_web: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: "direct main" description: name: chewie - sha256: "8bc4ac4cf3f316e50a25958c0f5eb9bb12cf7e8308bb1d74a43b230da2cfc144" + sha256: "335df378c025588aef400c704bd71f0daea479d4cd57c471c88c056c1144e7cd" url: "https://pub.dev" source: hosted - version: "1.7.5" + version: "1.8.5" clock: dependency: transitive description: @@ -301,10 +301,10 @@ packages: dependency: transitive description: name: dart_internal - sha256: "17ad5e3da43df562bb98ca0d88e9f32aeb16c97ec33dee822b21c3b2d0875726" + sha256: "781e0d03812e5b52fdc3f71540b178245021be64d22cbc88da2aee6b45705183" url: "https://pub.dev" source: hosted - version: "0.2.12" + version: "0.2.13" dart_style: dependency: transitive description: @@ -333,18 +333,18 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "2c35b6d1682b028e42d07b3aee4b98fa62996c10bc12cb651ec856a80d6a761b" + sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 url: "https://pub.dev" source: hosted - version: "9.0.2" + version: "10.1.2" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.2" diff_match_patch: dependency: "direct main" description: @@ -365,34 +365,34 @@ packages: dependency: "direct main" description: name: extended_image - sha256: d7f091d068fcac7246c4b22a84b8dac59a62e04d29a5c172710c696e67a22f94 + sha256: "93890a88d89ce017789f6c031c32ad8d2c685f1a5c25c169550746d973ca5e44" url: "https://pub.dev" source: hosted - version: "8.2.0" + version: "9.0.9" extended_image_library: dependency: transitive description: name: extended_image_library - sha256: "9b55fc5ebc65fad984de66b8f177a1bef2a84d79203c9c213f75ff83c2c29edd" + sha256: "9a94ec9314aa206cfa35f16145c3cd6e2c924badcc670eaaca8a3a8063a68cd7" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.5" extended_text: dependency: "direct main" description: name: extended_text - sha256: "7f382de3af12992e34bd72ddd36becf90c4720900af126cb9859f0189af71ffe" + sha256: b0cdd240b4ddf61d18d7e33e7775195971f2d033bd69706fa897446dc96c3b81 url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.1.0" extended_text_field: dependency: "direct main" description: name: extended_text_field - sha256: "954c7eea1e82728a742f7ddf09b9a51cef087d4f52b716ba88cb3eb78ccd7c6e" + sha256: "3996195c117c6beb734026a7bc0ba80d7e4e84e4edd4728caa544d8209ab4d7d" url: "https://pub.dev" source: hosted - version: "15.0.0" + version: "16.0.2" extended_text_library: dependency: transitive description: @@ -413,18 +413,18 @@ packages: dependency: "direct main" description: name: fc_native_video_thumbnail - sha256: "6c029f017702435aabe96bd2f60be9a2415e62fe0b2f0ce31a51d7cd4b51f674" + sha256: "61836a6fd34bb0cbda48d7ba7cd7a23242468886d4c68017ae59b9791fb42d2a" url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.16.1" ffi: dependency: transitive description: name: ffi - sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.3" file: dependency: transitive description: @@ -506,10 +506,50 @@ packages: dependency: "direct main" description: name: flutter_image_compress - sha256: "37f1b26399098e5f97b74c1483f534855e7dff68ead6ddaccf747029fb03f29f" + sha256: "45a3071868092a61b11044c70422b04d39d4d9f2ef536f3c5b11fb65a1e7dd90" + url: "https://pub.dev" + source: hosted + version: "2.3.0" + flutter_image_compress_common: + dependency: transitive + description: + name: flutter_image_compress_common + sha256: "7f79bc6c8a363063620b4e372fa86bc691e1cb28e58048cd38e030692fbd99ee" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + flutter_image_compress_macos: + dependency: transitive + description: + name: flutter_image_compress_macos + sha256: "26df6385512e92b3789dc76b613b54b55c457a7f1532e59078b04bf189782d47" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + flutter_image_compress_ohos: + dependency: transitive + description: + name: flutter_image_compress_ohos + sha256: e76b92bbc830ee08f5b05962fc78a532011fcd2041f620b5400a593e96da3f51 + url: "https://pub.dev" + source: hosted + version: "0.0.3" + flutter_image_compress_platform_interface: + dependency: transitive + description: + name: flutter_image_compress_platform_interface + sha256: "579cb3947fd4309103afe6442a01ca01e1e6f93dc53bb4cbd090e8ce34a41889" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + flutter_image_compress_web: + dependency: transitive + description: + name: flutter_image_compress_web + sha256: f02fe352b17f82b72f481de45add240db062a2585850bea1667e82cc4cd6c311 url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "0.1.4+1" flutter_lints: dependency: "direct dev" description: @@ -538,18 +578,18 @@ packages: dependency: "direct main" description: name: flutter_plugin_record_plus - sha256: "6e515bb54b996b64d177d7e8d252e0b03109e70f38b11bc1172aa56f530950c9" + sha256: c650fd6ce831e8379af8f4481c35df724c34ba8159b3136ea75b1d19b68ba7ce url: "https://pub.dev" source: hosted - version: "0.0.16" - flutter_slidable: + version: "0.0.19" + flutter_slidable_plus_plus: dependency: "direct main" description: - name: flutter_slidable - sha256: "19ed4813003a6ff4e9c6bcce37e792a2a358919d7603b2b31ff200229191e44c" + name: flutter_slidable_plus_plus + sha256: d2ceb3a0b2079e8faa23630c3faeee3055024ba0ab303462007f950803c3c29a url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "0.1.0" flutter_svg: dependency: "direct main" description: @@ -635,22 +675,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - image_clipboard: + image_gallery_saver_plus: dependency: "direct main" description: - name: image_clipboard - sha256: "1939365dc3b65acd3b1199176a330180075f4e803a6512f5622d050b62e7eff4" + name: image_gallery_saver_plus + sha256: "05a5dfd60b0ecd9f990f578f4ff55fe2b6df57a03bb34e3d0963639584d76153" url: "https://pub.dev" source: hosted - version: "1.0.0+2" - image_gallery_saver: - dependency: "direct main" - description: - name: image_gallery_saver - sha256: "0aba74216a4d9b0561510cb968015d56b701ba1bd94aace26aacdd8ae5761816" - url: "https://pub.dev" - source: hosted - version: "2.0.3" + version: "3.0.5" image_picker: dependency: "direct main" description: @@ -719,10 +751,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -839,18 +871,18 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" mime: dependency: transitive description: @@ -903,18 +935,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: ceb027f6bc6a60674a233b4a90a7658af1aebdea833da0b5b53c1e9821a78c7b + sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "8.1.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.2" pasteboard: dependency: "direct main" description: @@ -927,10 +959,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.1" path_drawing: dependency: transitive description: @@ -1047,18 +1079,18 @@ packages: dependency: transitive description: name: photo_manager - sha256: "8aca19e47804e99abec5dff8ea59c684181fb2b6ebbcdd3557a2b4fb8d5deae6" + sha256: dc26184676b26d722d656073ca8fe29203d7631ec613aed1a9679de3aa1f52c2 url: "https://pub.dev" source: hosted - version: "3.0.0-dev.2" + version: "3.6.3" photo_manager_image_provider: dependency: transitive description: name: photo_manager_image_provider - sha256: c187f60c3fdbe5630735d9a0bccbb071397ec03dcb1ba6085c29c8adece798a0 + sha256: b6015b67b32f345f57cf32c126f871bced2501236c405aafaefa885f7c821e4f url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" platform: dependency: transitive description: @@ -1071,10 +1103,10 @@ packages: dependency: transitive description: name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.8" pool: dependency: transitive description: @@ -1095,10 +1127,10 @@ packages: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -1151,18 +1183,18 @@ packages: dependency: transitive description: name: sensors_plus - sha256: a1e461f28a8e8d3f81feb07d5c4e87e948379ea91f0b5131266bb79f72b38acb + sha256: "905282c917c6bb731c242f928665c2ea15445aa491249dea9d98d7c79dc8fd39" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "6.1.1" sensors_plus_platform_interface: dependency: transitive description: name: sensors_plus_platform_interface - sha256: "95f0cc08791b8bf0c41c5fa99c84be2a7d5bf60a811ddc17e1438b1e68caf0d3" + sha256: "58815d2f5e46c0c41c40fb39375d3f127306f7742efe3b891c0b1c87e2b5cd5d" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "2.0.1" shared_preferences: dependency: "direct main" description: @@ -1372,10 +1404,10 @@ packages: dependency: "direct main" description: name: tim_ui_kit_sticker_plugin - sha256: "723152d3c67636c25b3d14eaca2f81a5e2b75b85603a62ddbe0480db0a9d6488" + sha256: "4e5524956159a7a93154797d57dbb18dc5bca416b829e8f9ac0d3569117c63e8" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.1" timing: dependency: transitive description: @@ -1532,10 +1564,10 @@ packages: dependency: "direct main" description: name: video_player - sha256: "3fd106c74da32f336dc7feb65021da9b0207cb3124392935f1552834f7cce822" + sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.9.2" video_player_android: dependency: transitive description: @@ -1548,42 +1580,50 @@ packages: dependency: transitive description: name: video_player_avfoundation - sha256: "4c274e439f349a0ee5cb3c42978393ede173a443b98f50de6ffe6900eaa19216" + sha256: "33224c19775fd244be2d6e3dbd8e1826ab162877bd61123bf71890772119a2b7" url: "https://pub.dev" source: hosted - version: "2.4.6" + version: "2.6.5" video_player_platform_interface: dependency: transitive description: name: video_player_platform_interface - sha256: a8c4dcae2a7a6e7cc1d7f9808294d968eca1993af34a98e95b9bdfa959bec684 + sha256: "229d7642ccd9f3dc4aba169609dd6b5f3f443bb4cc15b82f7785fcada5af9bbb" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "6.2.3" video_player_web: dependency: transitive description: name: video_player_web - sha256: "44ce41424d104dfb7cf6982cc6b84af2b007a24d126406025bf40de5d481c74c" + sha256: "881b375a934d8ebf868c7fb1423b2bfaa393a0a265fa3f733079a86536064a10" url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.3.3" + visibility_detector: + dependency: "direct main" + description: + name: visibility_detector + sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 + url: "https://pub.dev" + source: hosted + version: "0.4.0+2" wakelock_plus: dependency: transitive description: name: wakelock_plus - sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d + sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.2.10" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "40fabed5da06caff0796dc638e1f07ee395fb18801fbff3255a2372db2d80385" + sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.2" watcher: dependency: transitive description: @@ -1596,10 +1636,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.1.0" web_socket_channel: dependency: transitive description: @@ -1612,26 +1652,34 @@ packages: dependency: "direct main" description: name: wechat_assets_picker - sha256: "9934724a45fdb2b12e332d8190c58713e6675c37c630d53608e0f50167215c9f" + sha256: fe1dc02e68f9aabbfc63023f868f284fca3bd81d4e132a45292065e9b1de32a2 url: "https://pub.dev" source: hosted - version: "8.9.0-dev.1" + version: "9.4.2" wechat_camera_picker: dependency: "direct main" description: name: wechat_camera_picker - sha256: "5d80afaec8b2cbcfd98d9feeee1737689e04c4151a7bd67a6efac83064beca86" + sha256: f53eb68486676f27b538cb90213532394df9efd1344b47ec242c1003ef5aa18c + url: "https://pub.dev" + source: hosted + version: "4.3.6" + wechat_picker_library: + dependency: transitive + description: + name: wechat_picker_library + sha256: a42e09cb85b15fc9410f6a69671371cc60aa99c4a1f7967f6593a7f665f6f47a url: "https://pub.dev" source: hosted - version: "4.2.0-dev.2" + version: "1.0.5" win32: dependency: transitive description: name: win32 - sha256: dfdf0136e0aa7a1b474ea133e67cb0154a0acd2599c4f3ada3b49d38d38793ee + sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69" url: "https://pub.dev" source: hosted - version: "5.0.5" + version: "5.9.0" win32_registry: dependency: transitive description: @@ -1665,5 +1713,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <3.6.0" - flutter: ">=3.22.0" + dart: ">=3.5.0 <3.7.0" + flutter: ">=3.24.0"