Flutter 实现从输入的聊天文本根据@符号查询出@的人

335 阅读1分钟

输入的文本 可能随机点击进行编辑过 发送前需要校验一下需要@的人是否正确,此示例 是比较简单的一种做法,可能不适合较为复杂的场景

        List<String> atUser = [];
        List<String> listUser = ["张三", "李四", "王五", "赵四"];
        var inputText = "唐王: 大唐盛世诗人作诗大会今天18:00开始, 诗人@李白以及粉丝@张三 @李四 @王五 @杜甫 请前来欣赏";
        int atIndex = -1;
        for (int i = 0; i < inputText.characters.length; i++) {
          // 已经找到@下标 找到空格截止位置
          if (inputText.characters.elementAt(i) == " " && atIndex != -1) {
            // 截取到用户名
            var getName = inputText.substring(atIndex + 1, i);
            var searchaUser = listUser.where((ename) => getName == ename).toList();
            if (searchaUser.isNotEmpty) {
              // 复原下标
              atIndex = -1; 
              atUser.add(searchaUser.first);
              print("他在群里=> $getName");
            } else {
              print("他不在群里 => $getName");
            }
          }
          // 存在@符号 判断是否@了人
          if (text.characters.elementAt(i) == "@") {
            atIndex = i;
          }
        }
        print("\n我要艾特他们$atUser");
        // print => 我要艾特他们[李四, 王五, 杜甫]

示例中没有艾特到李白 是因为@李白 并不是以空格结尾,substring截取规则 @开头,空格结尾,然后根据截取的字符从群用户中查询是否存在此人,存在则存入 atUser数组中。