TIMUIKitNewContact-Implementation

功能介绍

新的联系人列表组件

参数详解

参数名称 参数类型 是否必填 平台 描述
onAccept void Function(V2TimFriendApplication applicationInfo) 全部 在用户接受好友请求后的回调函数
onRefuse void Function(V2TimFriendApplication applicationInfo) 全部 在用户拒绝好友请求后的回调函数
emptyBuilder Widget Function(BuildContext context) 全部 无好友请求时的样式构造器
itemBuilder Widget Function( BuildContext context, V2TimFriendApplication applicationInfo) 全部 用于自定义构建好友请求的样式构造器
lifeCycle NewContactLifeCycle 全部 对新的联系人操作时的钩子函数

代码示例

emptyBuilder的案例

emptyBuilder决定了当新的联系人列表为空时黑名单列表页面的样式。.

代码示例为使用自定义emptyBuilder展示暂无新的联系人的页面样式。.

/// @title:"emptyBuilder决定了当新的联系人列表为空时黑名单列表页面的样式。."
/// @title:"代码示例为使用自定义emptyBuilder展示暂无新的联系人的页面样式。."
/// @picture:"https://qcloudimg.tencent-cloud.cn/raw/e3f3cc0cf023ead8884542b8263ff286.jpg"
@override
Widget build(BuildContext context) {
  final theme = Provider.of<DefaultThemeData>(context).theme;
  return Scaffold(
    appBar: AppBar(
        title: Text(
          imt("新的联系人"),
          style: const TextStyle(color: Colors.white, fontSize: 17),
        ),
        shadowColor: Colors.white,
        flexibleSpace: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(colors: [
              theme.lightPrimaryColor ?? CommonColor.lightPrimaryColor,
              theme.primaryColor ?? CommonColor.primaryColor
            ]),
          ),
        ),
        iconTheme: const IconThemeData(
          color: Colors.white,
        )),
    body: TIMUIKitNewContact(
      emptyBuilder: (c) {
        return Center(
          child: Text(imt("暂无新联系人")),
        );
      },
    ),
  );
}

itemBuilder的案例

itemBuilder为用于自定义构建新的联系人用户模块的构造器.

代码示例为使用自定义itemBuilder展示新的联系人用户信息.

/// @title:"itemBuilder为用于自定义构建新的联系人用户模块的构造器."
/// @title:"代码示例为使用自定义itemBuilder展示新的联系人用户信息."
/// @picture:"https://qcloudimg.tencent-cloud.cn/raw/079930644efdbfc2ac628420afab6bd9.jpg"
@override
Widget build(BuildContext context) {
  final theme = Provider.of<DefaultThemeData>(context).theme;
  late TUIFriendShipViewModel model = serviceLocator<TUIFriendShipViewModel>();
  _getShowName(V2TimFriendApplication item) {
    final nickName = item.nickname ?? "";
    final userID = item.userID;
    return nickName != "" ? nickName : userID;
  }

  Widget _itemBuilder(
      BuildContext context, V2TimFriendApplication applicationInfo) {
    final theme = Provider.of<TUIThemeViewModel>(context).theme;
    final showName = _getShowName(applicationInfo);
    final faceUrl = applicationInfo.faceUrl ?? "";
    return Container(
      padding: const EdgeInsets.only(top: 10, left: 16),
      child: Row(
        children: [
          Container(
            padding: const EdgeInsets.only(bottom: 12),
            margin: const EdgeInsets.only(right: 12),
            child: SizedBox(
              height: 40,
              width: 40,
              child: Avatar(faceUrl: faceUrl, showName: showName),
            ),
          ),
          Expanded(
              child: Container(
            padding: const EdgeInsets.only(top: 10, bottom: 20),
            decoration: BoxDecoration(
                border: Border(
                    bottom: BorderSide(
                        color: theme.weakDividerColor ??
                            CommonColor.weakDividerColor))),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(
                  showName,
                  style: const TextStyle(color: Colors.black, fontSize: 18),
                ),
                Expanded(child: Container()),
                Container(
                  margin: const EdgeInsets.only(right: 8),
                  child: InkWell(
                    child: Container(
                      padding: const EdgeInsets.symmetric(
                          horizontal: 14, vertical: 6),
                      decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(8),
                          color: theme.primaryColor,
                          border: Border.all(
                              width: 1,
                              color: theme.weakTextColor ??
                                  CommonColor.weakTextColor)),
                      child: Text(
                        TIM_t("同意"),
                        style: const TextStyle(
                          color: Colors.white,
                        ),
                      ),
                    ),
                    onTap: () async {
                      await model.acceptFriendApplication(
                        applicationInfo.userID,
                        applicationInfo.type,
                      );
                      model.loadData();
                    },
                  ),
                ),
                Container(
                    margin: const EdgeInsets.only(right: 8),
                    child: InkWell(
                      child: Container(
                        decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(8),
                            color: Colors.white,
                            border: Border.all(
                                width: 1,
                                color: theme.weakTextColor ??
                                    CommonColor.weakTextColor)),
                        padding: const EdgeInsets.symmetric(
                            horizontal: 14, vertical: 6),
                        child: Text(
                          TIM_t("拒绝"),
                          style: TextStyle(
                            color: theme.primaryColor,
                          ),
                        ),
                      ),
                      onTap: () async {
                        await model.refuseFriendApplication(
                          applicationInfo.userID,
                          applicationInfo.type,
                        );
                        model.loadData();
                      },
                    ))
              ],
            ),
          ))
        ],
      ),
    );
  }

  return Scaffold(
    appBar: AppBar(
        title: Text(
          imt("新的联系人"),
          style: const TextStyle(color: Colors.white, fontSize: 17),
        ),
        shadowColor: Colors.white,
        flexibleSpace: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(colors: [
              theme.lightPrimaryColor ?? CommonColor.lightPrimaryColor,
              theme.primaryColor ?? CommonColor.primaryColor
            ]),
          ),
        ),
        iconTheme: const IconThemeData(
          color: Colors.white,
        )),
    body: TIMUIKitNewContact(
      itemBuilder: _itemBuilder,
      emptyBuilder: (c) {
        return Center(
          child: Text(imt("暂无新联系人")),
        );
      },
    ),
  );
}

lifeCycle的案例

lifeCycle为添加群组操作时的钩子函数.

代码示例为使用shouldAcceptContactApplication做到接受好友申请前跳出弹窗的案例。.

/// @title:"lifeCycle为添加群组操作时的钩子函数."
/// @title:"代码示例为使用shouldAcceptContactApplication做到接受好友申请前跳出弹窗的案例。."
/// @picture:"https://qcloudimg.tencent-cloud.cn/raw/968d2061df7eb69ad62da3d49941b14e.gif"
@override
Widget build(BuildContext context) {
  final theme = Provider.of<DefaultThemeData>(context).theme;
  NewContactLifeCycle lifeCycle = NewContactLifeCycle(
    shouldAcceptContactApplication: (String userID) async {
      // 接受好友申请前的逻辑
      // 弹出对话框
      Future<bool?> shouldAcceptContactApplicationDialog() {
        return showDialog<bool>(
          context: context,
          builder: (context) {
            return AlertDialog(
              title: const Text("提示"),
              content: const Text("您确定要接受此用户的好友申请吗?"),
              actions: <Widget>[
                TextButton(
                  child: const Text("取消"),
                  onPressed: () => Navigator.of(context).pop(), // 关闭对话框
                ),
                TextButton(
                  child: const Text("确定"),
                  onPressed: () {
                    //关闭对话框并返回true
                    Navigator.of(context).pop(true);
                  },
                ),
              ],
            );
          },
        );
      }

      bool? isAccept = await shouldAcceptContactApplicationDialog();
      return isAccept ?? false;
    },
    shouldRefuseContactApplication: (String userID) async {
      // 拒绝好友申请前的逻辑
      return true;
    },
  );
  return Scaffold(
    appBar: AppBar(
        title: Text(
          imt("新的联系人"),
          style: const TextStyle(color: Colors.white, fontSize: 17),
        ),
        shadowColor: Colors.white,
        flexibleSpace: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(colors: [
              theme.lightPrimaryColor ?? CommonColor.lightPrimaryColor,
              theme.primaryColor ?? CommonColor.primaryColor
            ]),
          ),
        ),
        iconTheme: const IconThemeData(
          color: Colors.white,
        )),
    body: TIMUIKitNewContact(
      lifeCycle: lifeCycle,
      emptyBuilder: (c) {
        return Center(
          child: Text(imt("暂无新联系人")),
        );
      },
    ),
  );
}

onAcceptAndonRefuse的案例

onAccept与onRefuse为在用户接受或拒绝好友请求后的回调函数.

代码示例为使用onAccept做到当用户同意好友申请后出现提示框.

/// @title:"onAccept与onRefuse为在用户接受或拒绝好友请求后的回调函数."
/// @title:"代码示例为使用onAccept做到当用户同意好友申请后出现提示框."
/// @picture:"https://qcloudimg.tencent-cloud.cn/raw/0ed45ebe9b982fec00becc259719866b.gif"
@override
Widget build(BuildContext context) {
  final theme = Provider.of<DefaultThemeData>(context).theme;
  return Scaffold(
    appBar: AppBar(
        title: Text(
          imt("新的联系人"),
          style: const TextStyle(color: Colors.white, fontSize: 17),
        ),
        shadowColor: Colors.white,
        flexibleSpace: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(colors: [
              theme.lightPrimaryColor ?? CommonColor.lightPrimaryColor,
              theme.primaryColor ?? CommonColor.primaryColor
            ]),
          ),
        ),
        iconTheme: const IconThemeData(
          color: Colors.white,
        )),
    body: TIMUIKitNewContact(
      onAccept: (V2TimFriendApplication applicationInfo) {
        Utils.toast('你已经添加${applicationInfo.userID}为好友');
      },
      emptyBuilder: (c) {
        return Center(
          child: Text(imt("暂无新联系人")),
        );
      },
    ),
  );
}

results matching ""

    No results matching ""