【问题标题】:How do I add the ability to tag a person in a chat?如何添加在聊天中标记某人的功能?
【发布时间】:2021-01-31 06:39:24
【问题描述】:

我只是在 Firebase 上聊天。但我想添加在聊天中标记一个人的功能,然后通过推送通知向他发送通知。 颤振如何做到这一点? 这应该像任何聊天应用程序一样实现,例如:@Mike,你好吗?

【问题讨论】:

  • 您的问题除了为您编写整个功能外,没有其他人可以帮助您。尝试自己实现该功能,并在遇到特定问题时提出问题。
  • @BenediktJSchlegel 我正在考虑为我的应用程序实现一个类似的功能,所以这对我来说有点容易,是的,我必须实现整个功能;D

标签: flutter chat


【解决方案1】:

您需要使用以下步骤来完成它。尚未实现,但我计划为我的应用做类似的事情。

创建一个以用户名作为参数返回userId的future。

Future<String> getUserFromUsername(String word) async {

    final result = await FirebaseFirestore.instance
        .collection('users')
        .where('username', isEqualTo: word)
        .limit(1)
        .get();

    return result.docs.map((doc) => doc.data()['userID'].toString()).first;
  }

使用 RichText 为单独的单词使用单独的样式。

RichText(
        text: TextSpan(
        children: userData.wildestGoal.split(' ').map((word) {
                  
           if (word.startsWith('@')) {

                return TextSpan(
                            text: '$word ',
                            style: TextStyle(
                                      color: Theme.of(context).primaryColor,
                                      fontSize: 16.0
                                            ),
                            recognizer: TapGestureRecognizer()
                                    ..onTap = () async {
                                      
                                    final String userId =
                                          await FireStoreService(
                                                  userId: FirebaseAuth
                                                      .instance.currentUser.uid)
                                              .getUserFromUsername(word
                                                  .split('@')[1]
                                                  .toString());
                                      Navigator.push(
                                          context,
                                          MaterialPageRoute(
                                              builder: (context) =>
                                                  ProvidersForUserProfile(
                                                    userId: userId,
                                                  )
                                          )
                                       );
                                    }
                                 );
                         }
                        return TextSpan(
                            text: '$word ',
                            style: const TextStyle(fontSize: 16.0));
                      }).toList()),
                    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多