update flutter uikit to 1.2.0

This commit is contained in:
anonymous 2023-01-06 15:08:58 +08:00
parent 5cba5b30cf
commit cf7633aa02
13 changed files with 197 additions and 106 deletions

View File

@ -1,4 +1,10 @@
## 1.1.0
## 1.2.0
* Fix: The issue of input area not showing, when switching from recording to keyboard, on `TIMUIKitChat`.
* Fix: Only the first receiver can receive the merged multiple forward messages.
* Optimize: `MessageItemBuilder` can now be used for shows on the merger message screen.
## 1.1.0 And 1.1.0+1
* Add: Supports two new languages, Japanese and Korean.
* Add: Supports adding new other languages, apart from our default ones, including English, Chinese(Simplified and Traditional), Japanese and Korean, or modifying the translations, refers to [this documentation](https://www.tencentcloud.com/document/product/1047/52154).

View File

@ -45,7 +45,7 @@
</a>
</p>
<h1 align="center">Tencent Cloud Chat UIKIt</h1>
<h1 align="center">Tencent Cloud Chat UIKit</h1>
<br>

View File

@ -963,14 +963,14 @@ packages:
name: tencent_cloud_chat_sdk
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.6"
version: "5.0.7"
tencent_cloud_chat_uikit:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "1.1.0"
version: "1.2.0"
tencent_extended_text:
dependency: transitive
description:
@ -998,7 +998,7 @@ packages:
name: tencent_im_base
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.14"
version: "1.0.17"
tencent_im_sdk_plugin_platform_interface:
dependency: transitive
description:

View File

@ -982,10 +982,10 @@ class TUIChatSeparateViewModel extends ChangeNotifier {
lifeCycleMsg =
await lifeCycle?.messageWillSend(messageInfoWithSender);
if (lifeCycleMsg == null) {
return null;
continue;
}
}
return _sendMessage(
_sendMessage(
id: mergerMessageInfo.id!,
convID: convID,
convType: convType == 1 ? ConvType.c2c : ConvType.group,

View File

@ -1,7 +1,6 @@
// ignore_for_file: unused_import
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
@ -19,9 +18,9 @@ class PermissionRequestInfo extends StatefulWidget {
const PermissionRequestInfo(
{Key? key,
required this.removeOverLay,
required this.permissionType,
required this.appName})
required this.removeOverLay,
required this.permissionType,
required this.appName})
: super(key: key);
@override
@ -205,11 +204,11 @@ class Permissions {
}
static Future<bool> checkPermission(
BuildContext context,
int value, [
TUITheme? theme,
bool isShowPermissionPage = true,
]) async {
BuildContext context,
int value, [
TUITheme? theme,
bool isShowPermissionPage = true,
]) async {
final status = await Permission.byValue(value).status;
if (status.isGranted || status.isLimited) {
return true;
@ -256,7 +255,11 @@ class Permissions {
static Future<bool?> showPermissionConfirmDialog(BuildContext context, value,
[TUITheme? theme, bool isShowPermissionPage = true]) async {
final platformUtils = PlatformUtils();
//
if (!await checkPermissionSetBefore(value)) {
await setLocalPermission(value);
if (platformUtils.isAndroid && isShowPermissionPage) {
showPermissionRequestInfoDialog(context, value);
}
return true;
@ -280,54 +283,54 @@ class Permissions {
builder: (context) {
return platformUtils.isIOS
? CupertinoAlertDialog(
title: Text("$appName" +
TIM_t_para(" 想访问您的{{option2}}", " 想访问您的$option2")(
option2: option2)),
content: Text(permissionText),
actions: <Widget>[
CupertinoDialogAction(
child: Text(TIM_t("以后再说")),
onPressed: closeDialog, //
),
CupertinoDialogAction(
child: Text(TIM_t("去开启")),
onPressed: getPermission,
),
],
)
title: Text("$appName" +
TIM_t_para(" 想访问您的{{option2}}", " 想访问您的$option2")(
option2: option2)),
content: Text(permissionText),
actions: <Widget>[
CupertinoDialogAction(
child: Text(TIM_t("以后再说")),
onPressed: closeDialog, //
),
CupertinoDialogAction(
child: Text(TIM_t("去开启")),
onPressed: getPermission,
),
],
)
: AlertDialog(
content: Text(permissionText),
actions: <Widget>[
const Divider(),
SizedBox(
height: 48,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Expanded(
child: TextButton(
child: Text(TIM_t("以后再说"),
style: TextStyle(
color: theme?.black ?? Colors.black,
)),
onPressed: closeDialog, //
),
),
const VerticalDivider(),
Expanded(
child: TextButton(
child: Text(TIM_t("去开启"),
style: TextStyle(
color: theme?.black ?? Colors.black,
)),
onPressed: getPermission,
),
)
],
content: Text(permissionText),
actions: <Widget>[
const Divider(),
SizedBox(
height: 48,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Expanded(
child: TextButton(
child: Text(TIM_t("以后再说"),
style: TextStyle(
color: theme?.black ?? Colors.black,
)),
onPressed: closeDialog, //
),
),
const VerticalDivider(),
Expanded(
child: TextButton(
child: Text(TIM_t("去开启"),
style: TextStyle(
color: theme?.black ?? Colors.black,
)),
onPressed: getPermission,
),
)
],
);
),
)
],
);
},
);
}

View File

@ -520,6 +520,7 @@ class _TIMUIKItHistoryMessageListItemState
)!;
}
return TIMUIKitMergerElem(
messageItemBuilder: messageItemBuilder,
model: model,
isShowJump: isShowJump,
clearJump: clearJump,

View File

@ -5,6 +5,7 @@ import 'dart:math';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/permission.dart';
import 'package:tencent_open_file/tencent_open_file.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:permission_handler/permission_handler.dart';
@ -15,10 +16,7 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart';
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/permission.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_wrapper.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_file_icon.dart';
import 'package:tencent_cloud_chat_uikit/ui/widgets/textSize.dart';

View File

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart';
import 'package:tencent_cloud_chat_uikit/ui/widgets/merger_message_screen.dart';
@ -21,6 +22,7 @@ class TIMUIKitMergerElem extends StatefulWidget {
final V2TimMessage message;
final bool? isShowMessageReaction;
final TUIChatSeparateViewModel model;
final MessageItemBuilder? messageItemBuilder;
const TIMUIKitMergerElem(
{Key? key,
@ -31,7 +33,7 @@ class TIMUIKitMergerElem extends StatefulWidget {
this.isShowMessageReaction,
required this.messageID,
required this.isShowJump,
this.clearJump})
this.clearJump, this.messageItemBuilder})
: super(key: key);
@override
@ -71,6 +73,7 @@ class TIMUIKitMergerElemState extends TIMUIKitState<TIMUIKitMergerElem> {
context,
MaterialPageRoute(
builder: (context) => MergerMessageScreen(
messageItemBuilder: widget.messageItemBuilder,
model: model, msgID: widget.messageID),
));
}

View File

@ -795,8 +795,8 @@ class _InputTextFieldState extends TIMUIKitState<TIMUIKitInputTextField> {
forbiddenText == null)
InkWell(
onTap: () async {
showKeyboard = showSendSoundText;
if (showSendSoundText) {
showKeyboard = true;
focusNode.requestFocus();
}
if (await Permissions.checkPermission(
@ -806,7 +806,6 @@ class _InputTextFieldState extends TIMUIKitState<TIMUIKitInputTextField> {
)) {
setState(() {
showEmojiPanel = false;
showKeyboard = false;
showMore = false;
showSendSoundText = !showSendSoundText;
});

View File

@ -10,12 +10,10 @@ import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/chat_life_cyc
import 'package:tencent_cloud_chat_uikit/business_logic/listener_model/tui_group_listener_model.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart';
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart';
import 'package:tencent_cloud_chat_uikit/ui/controller/tim_uikit_chat_controller.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/frame.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/optimize_utils.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/tim_uikit_multi_select_panel.dart';

View File

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:provider/provider.dart';
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart';
import 'package:tencent_im_base/tencent_im_base.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart';
@ -18,9 +19,13 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart';
class MergerMessageScreen extends StatefulWidget {
final TUIChatSeparateViewModel model;
final String msgID;
final MessageItemBuilder? messageItemBuilder;
const MergerMessageScreen(
{Key? key, required this.model, required this.msgID})
{Key? key,
required this.model,
required this.msgID,
this.messageItemBuilder})
: super(key: key);
@override
@ -39,7 +44,8 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
}
void initMessageList() async {
final mergerMessageList = await _messageService.downloadMergerMessage(msgID: widget.msgID);
final mergerMessageList =
await _messageService.downloadMergerMessage(msgID: widget.msgID);
setState(() {
messageList = mergerMessageList ?? [];
});
@ -51,7 +57,7 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
if (hasCustomData) {
try {
final CloudCustomData messageCloudCustomData =
CloudCustomData.fromJson(json.decode(message.cloudCustomData!));
CloudCustomData.fromJson(json.decode(message.cloudCustomData!));
if (messageCloudCustomData.messageReply != null) {
MessageRepliedData.fromJson(messageCloudCustomData.messageReply!);
return true;
@ -70,8 +76,22 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
switch (type) {
case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM:
if (widget.messageItemBuilder?.customMessageItemBuilder != null) {
return widget.messageItemBuilder!.customMessageItemBuilder!(
message,
false,
() {},
)!;
}
return Text(TIM_t("[自定义]"));
case MessageElemType.V2TIM_ELEM_TYPE_SOUND:
if (widget.messageItemBuilder?.soundMessageItemBuilder != null) {
return widget.messageItemBuilder!.soundMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitSoundElem(
chatModel: widget.model,
isShowMessageReaction: false,
@ -82,6 +102,13 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
localCustomInt: message.localCustomInt);
case MessageElemType.V2TIM_ELEM_TYPE_TEXT:
if (isReplyMessage(message)) {
if (widget.messageItemBuilder?.textReplyMessageItemBuilder != null) {
return widget.messageItemBuilder!.textReplyMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitReplyElem(
isShowMessageReaction: false,
chatModel: widget.model,
@ -89,14 +116,29 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
scrollToIndex: () {},
clearJump: () {});
}
return Text(
message.textElem!.text!,
softWrap: true,
style: const TextStyle(fontSize: 16),
if (widget.messageItemBuilder?.textMessageItemBuilder != null) {
return widget.messageItemBuilder!.textMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitTextElem(
chatModel: widget.model,
message: message,
isFromSelf: message.isSelf ?? false,
clearJump: (){},
isShowJump: false,
isShowMessageReaction: false,
);
// return Text(message.textElem!.text!);
case MessageElemType.V2TIM_ELEM_TYPE_FACE:
if (widget.messageItemBuilder?.faceMessageItemBuilder != null) {
return widget.messageItemBuilder!.faceMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitFaceElem(
model: widget.model,
isShowJump: false,
@ -104,6 +146,13 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
path: message.faceElem?.data ?? "",
message: message);
case MessageElemType.V2TIM_ELEM_TYPE_FILE:
if (widget.messageItemBuilder?.fileMessageItemBuilder != null) {
return widget.messageItemBuilder!.fileMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitFileElem(
chatModel: widget.model,
isShowMessageReaction: false,
@ -113,6 +162,13 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
isSelf: isFromSelf,
isShowJump: false);
case MessageElemType.V2TIM_ELEM_TYPE_IMAGE:
if (widget.messageItemBuilder?.imageMessageItemBuilder != null) {
return widget.messageItemBuilder!.imageMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitImageElem(
chatModel: widget.model,
isShowMessageReaction: false,
@ -121,12 +177,34 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
key: Key("${message.seq}_${message.timestamp}"),
);
case MessageElemType.V2TIM_ELEM_TYPE_VIDEO:
if (widget.messageItemBuilder?.videoMessageItemBuilder != null) {
return widget.messageItemBuilder!.videoMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitVideoElem(message,
chatModel: widget.model,
isFrom: "merger", isShowMessageReaction: false);
isFrom: "merger",
isShowMessageReaction: false);
case MessageElemType.V2TIM_ELEM_TYPE_LOCATION:
if (widget.messageItemBuilder?.locationMessageItemBuilder != null) {
return widget.messageItemBuilder!.locationMessageItemBuilder!(
message,
false,
() {},
)!;
}
return Text(TIM_t("[位置]"));
case MessageElemType.V2TIM_ELEM_TYPE_MERGER:
if (widget.messageItemBuilder?.mergerMessageItemBuilder != null) {
return widget.messageItemBuilder!.mergerMessageItemBuilder!(
message,
false,
() {},
)!;
}
return TIMUIKitMergerElem(
model: widget.model,
isShowJump: false,
@ -204,31 +282,36 @@ class MergerMessageScreenState extends TIMUIKitState<MergerMessageScreen> {
iconTheme: const IconThemeData(
color: Colors.white,
)),
body: messageList.isEmpty ? Row(children: [
Expanded(child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
LoadingAnimationWidget.staggeredDotsWave(
color: theme.weakTextColor ?? Colors.grey,
size: 48,
body: messageList.isEmpty
? Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
LoadingAnimationWidget.staggeredDotsWave(
color: theme.weakTextColor ?? Colors.grey,
size: 48,
),
const SizedBox(height: 20),
Text(TIM_t("消息列表加载中"))
],
))
],
)
: Padding(
padding: const EdgeInsets.all(16),
child: ListView.builder(
shrinkWrap: true,
itemCount: messageList.length,
itemBuilder: (context, index) {
final message = messageList[index];
return _itemBuilder(message, context);
},
),
),
const SizedBox(height: 20),
Text(TIM_t("消息列表加载中"))
],
))
],) : Padding(
padding: const EdgeInsets.all(16),
child: ListView.builder(
shrinkWrap: true,
itemCount: messageList.length,
itemBuilder: (context, index) {
final messageItem = messageList[index];
return _itemBuilder(messageItem, context);
},
),
),
);
}
}

View File

@ -1063,7 +1063,7 @@ packages:
name: tencent_cloud_chat_sdk
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.6"
version: "5.0.7"
tencent_extended_text:
dependency: "direct main"
description:
@ -1091,7 +1091,7 @@ packages:
name: tencent_im_base
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.14"
version: "1.0.17"
tencent_im_sdk_plugin_platform_interface:
dependency: transitive
description:

View File

@ -1,6 +1,6 @@
name: tencent_cloud_chat_uikit
description: UI components library and basic chat business logic for Tencent Cloud Chat service, helping you build In-APP Chat module easily.
version: 1.1.0
version: 1.2.0
homepage: https://www.tencentcloud.com/products/im?from=pub
repository: https://github.com/TencentCloud/tc-chat-uikit-flutter
documentation: https://comm.qq.com/im/doc/flutter/en/TUIKit/readme.html
@ -62,7 +62,7 @@ dependencies:
url_launcher: ^6.1.4
universal_html: ^2.0.8
link_preview_generator: ^1.2.0
tencent_im_base: ^1.0.14
tencent_im_base: ^1.0.17
disk_space: ^0.2.1
http: ^0.13.5
crypto: ^3.0.2