国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flutter聊天界面-Text富文本表情emoji、url、號(hào)碼展示

這篇具有很好參考價(jià)值的文章主要介紹了flutter聊天界面-Text富文本表情emoji、url、號(hào)碼展示。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

flutter聊天界面-Text富文本表情emoji、url、號(hào)碼展示
Text富文本表情emoji展示,主要通過實(shí)現(xiàn)Text.rich展示文本、emoji、自定義表情、URL等
flutter聊天界面-Text富文本表情emoji、url、號(hào)碼展示,flutter開發(fā)實(shí)戰(zhàn),flutter,flutter,flutter聊天界面,flutter富文本

一、Text及TextSpan

Text用于顯示簡單樣式文本
TextSpan它代表文本的一個(gè)“片段”,不同“片段”可按照不同的樣式顯示。

示例片段

Text.rich(TextSpan(
    children: [
     TextSpan(
       text: "Home: "
     ),
     TextSpan(
       text: "https://flutterchina.club",
       style: TextStyle(
         color: Colors.blue
       ),  
       recognizer: _tapRecognizer
     ),
    ]
))

二、Text富文本表情emoji展示

Text富文本表情emoji展示主要通過RegExp匹配url、手機(jī)號(hào)碼

自定義表情的正則表達(dá)式:

String emojExpString = r"\[.{1,4}?\]";

鏈接URL的正則表達(dá)式:

String urlExpString =
        r"(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?";

具體實(shí)現(xiàn)代碼如下

// 富文本
class CommChatRichTextHelper {
  //圖文混排
  static getRichText(String text) {
    List<InlineSpan> textSapns = [];

    String urlExpString =
        r"(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?";
    String emojExpString = r"\[.{1,4}?\]";
    RegExp exp = RegExp('$urlExpString|$emojExpString');

    //正則表達(dá)式是否在字符串[input]中有匹配。
    if (exp.hasMatch(text)) {
      Iterable<RegExpMatch> matches = exp.allMatches(text);

      int index = 0;
      int count = 0;
      for (var matche in matches) {
        count++;
        String c = text.substring(matche.start, matche.end);
        //匹配到的東西,如表情在首位
        if (index == matche.start) {
          index = matche.end;
        }
        //匹配到的東西,如表情不在首位
        else if (index < matche.start) {
          String leftStr = text.substring(index, matche.start);
          index = matche.end;
          textSapns.add(
            TextSpan(
              text: spaceWord(leftStr),
              style: getDefaultTextStyle(),
            ),
          );
        }

        //匹配到的網(wǎng)址
        if (RegExp(urlExpString).hasMatch(c)) {
          textSapns.add(
            TextSpan(
              text: spaceWord(c),
              style:
                  TextStyle(color: ColorUtil.hexColor(0x3b93ff), fontSize: 16),
              recognizer: TapGestureRecognizer()
                ..onTap = () async {
                  //打開瀏覽器
                  print(c);
                },
            ),
          );
        }
        //匹配到的表情
        else if (RegExp(emojExpString).hasMatch(c)) {
          //[偷笑] 去掉[] = 偷笑
          String emojiString = c;
          textSapns.add(
            WidgetSpan(
              style: const TextStyle(height: 1.5),
              //判斷表情是否存在
              child: CommonChatEmoji.emojiIsContain(emojiString)
                  ? ImageHelper.imageNetwork(
                      imageUrl:
                          "${CommonChatEmoji.findEmojiItem(emojiString)?.url}",
                      width: 22,
                      height: 22,
                    )
                  : Text(
                      "${c}",
                      style: getDefaultTextStyle(),
                    ),
            ),
          );
        }

        //是否是最后一個(gè)表情,并且后面是否有字符串
        if (matches.length == count && text.length > index) {
          String rightStr = text.substring(index, text.length);
          textSapns.add(
            TextSpan(
              text: spaceWord(rightStr),
              style: getDefaultTextStyle(),
            ),
          );
        }
      }
    } else {
      textSapns.add(
        TextSpan(
          text: spaceWord(text),
          style: getDefaultTextStyle(),
        ),
      );
    }

    return Text.rich(TextSpan(children: textSapns));
  }

  static TextStyle getDefaultTextStyle() {
    return TextStyle(
      fontSize: 16,
      fontWeight: FontWeight.w400,
      fontStyle: FontStyle.normal,
      color: ColorUtil.hexColor(0x555555),
      decoration: TextDecoration.none,
    );
  }

  static String spaceWord(String text) {
    if (text.isEmpty) return text;
    String spaceWord = '';
    for (var element in text.runes) {
      spaceWord += String.fromCharCode(element);
      spaceWord += '\u200B';
    }
    return spaceWord;
  }
}

使用Text.rich的Widget的聊天文本氣泡

class ChatCellTextElem extends StatefulWidget {
  const ChatCellTextElem({
    Key? key,
    required this.chatMessage,
  }) : super(key: key);

  final CommonChatMessage chatMessage;

  
  State<ChatCellTextElem> createState() => _ChatCellTextElemState();
}

class _ChatCellTextElemState extends State<ChatCellTextElem> {
  
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(10.0),
      child: buildTextContent(),
    );
  }

  Widget buildTextContent() {
    // 富文本
    return CommChatRichTextHelper.getRichText("${widget.chatMessage.text ?? ""}");
  }
}

三、小結(jié)

flutter聊天界面-Text富文本表情emoji、url、號(hào)碼展示,主要實(shí)現(xiàn)Text富文本表情emoji展示主要通過RegExp匹配url、手機(jī)號(hào)碼等

學(xué)習(xí)記錄,每天不停進(jìn)步。文章來源地址http://www.zghlxwxcb.cn/news/detail-532699.html

到了這里,關(guān)于flutter聊天界面-Text富文本表情emoji、url、號(hào)碼展示的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • flutter聊天界面-TextField輸入框buildTextSpan實(shí)現(xiàn)@功能展示高亮功能

    flutter聊天界面-TextField輸入框buildTextSpan實(shí)現(xiàn)@功能展示高亮功能

    flutter聊天界面-TextField輸入框buildTextSpan實(shí)現(xiàn)@功能展示高亮功能 最近有位朋友討論的時(shí)候,提到了輸入框的高亮展示。在flutter TextField中需要插入特殊樣式的標(biāo)簽,比如:“請(qǐng) @張三 回答一下”,這一串字符在TextField中輸入,當(dāng)輸入@時(shí) 彈出好友列表選擇,然后將 “@張三”高

    2024年02月07日
    瀏覽(38)
  • iOS開發(fā)-聊天emoji表情與自定義動(dòng)圖表情左右滑動(dòng)控件

    iOS開發(fā)-聊天emoji表情與自定義動(dòng)圖表情左右滑動(dòng)控件

    iOS開發(fā)-聊天emoji表情與自定義動(dòng)圖表情左右滑動(dòng)控件 之前開發(fā)中遇到需要實(shí)現(xiàn)聊天emoji表情與自定義動(dòng)圖表情左右滑動(dòng)控件。使用UICollectionView實(shí)現(xiàn)。 UICollectionView是一種類似于UITableView但又比UITableView功能更強(qiáng)大、更靈活的視圖,這是源于它將UICollectionView對(duì)cell的布局交給了

    2024年02月15日
    瀏覽(25)
  • Flutter中系統(tǒng)Emoji通過substring裁切后無法識(shí)別導(dǎo)致渲染錯(cuò)誤

    Flutter中系統(tǒng)Emoji通過substring裁切后無法識(shí)別導(dǎo)致渲染錯(cuò)誤

    在發(fā)布文章的時(shí)候,有標(biāo)題和內(nèi)容,標(biāo)題可為空,在沒有標(biāo)題的情況下,截取部分內(nèi)容當(dāng)作標(biāo)題。 內(nèi)容列表顯示的時(shí)候,某些特殊的情況下(并不重要),我們就需要裁切文章標(biāo)題。 當(dāng)文章標(biāo)題中有文字 + 系統(tǒng)自帶的 emoji 的時(shí)候,我們?nèi)ゲ们袠?biāo)題就會(huì)出現(xiàn)無法識(shí)別渲染出來

    2024年02月09日
    瀏覽(18)
  • uniapp - [全端兼容] 詳細(xì)使用 emoji 表情包,在輸入框中發(fā)送及顯示 emoji 表情(全平臺(tái)小程序/ H5 / App通用,類似微信聊天的小表情,支持文字與表情混合在一起,后端易存儲(chǔ))

    uniapp - [全端兼容] 詳細(xì)使用 emoji 表情包,在輸入框中發(fā)送及顯示 emoji 表情(全平臺(tái)小程序/ H5 / App通用,類似微信聊天的小表情,支持文字與表情混合在一起,后端易存儲(chǔ))

    網(wǎng)上的教程都太亂了,各平臺(tái)之間不兼容、各種顯示表情的 BUG 一大堆問題,很難進(jìn)行復(fù)制使用。 本文 實(shí)現(xiàn)了在 uniapp 全端兼容(h5網(wǎng)頁 / 小程序 / 安卓蘋果app / nvue等)項(xiàng)目開發(fā)中,詳細(xì)引入并使用 emoji 表情庫插件,支持表情的自定義增刪、表情樣式控制等, 全平臺(tái)通用插

    2024年02月15日
    瀏覽(170)
  • Flutter Text 自動(dòng)換行

    在 Flutter 中,可以使用 Text 組件來顯示文本。默認(rèn)情況下, Text 組件會(huì)自動(dòng)換行,只要文本內(nèi)容超過其容器的寬度。 你可以使用 Text 組件的 softWrap 屬性來控制文本是否自動(dòng)換行。設(shè)置 softWrap 為 true (默認(rèn)值),文本就會(huì)自動(dòng)換行;設(shè)置 softWrap 為 false ,文本就不會(huì)自動(dòng)換行,而

    2024年02月11日
    瀏覽(26)
  • 【Flutter】Flutter 實(shí)現(xiàn) Text 自動(dòng)換行 解決長文本溢出問題

    你是否渴望成為 Flutter 的專家,掌握更多的技巧和最佳實(shí)踐?我們有個(gè)好消息要告訴你! Flutter 從零到一 基礎(chǔ)入門到應(yīng)用上線全攻略 正在等待你的加入!這個(gè)專欄包含了你需要的所有 Flutter 學(xué)習(xí)資源,包括代碼示例和深度解析。專欄內(nèi)容會(huì)持續(xù)更新,價(jià)格也會(huì)隨之上漲?,F(xiàn)

    2024年02月12日
    瀏覽(27)
  • 如何在Unity中實(shí)現(xiàn)聊天文本,控制Text文本長度,自動(dòng)換行

    如何在Unity中實(shí)現(xiàn)聊天文本,控制Text文本長度,自動(dòng)換行

    ?? ? RectTransform中有個(gè)方法SetSizeWithCurrentAnchors,可以設(shè)置這個(gè)RectTransform的長度或者寬度。 大于你要的長度時(shí),設(shè)置成最大長度,否則設(shè)置成當(dāng)前長度。 imgRect是用來設(shè)置聊天背景圖片的。 ? 這時(shí)會(huì)發(fā)現(xiàn)有一個(gè)問題,當(dāng)內(nèi)容不足時(shí),不是向左對(duì)齊的 ,而是居中縮放。 這是因

    2024年02月05日
    瀏覽(23)
  • 【Flutter】Flutter Text 控件實(shí)現(xiàn)下劃線、刪除線、虛線、加粗、斜體

    在 Flutter 開發(fā)中,我們經(jīng)常需要對(duì) Text 控件進(jìn)行各種樣式的設(shè)置,包括但不限于下劃線、刪除線、虛線、加粗和斜體等。這些樣式的設(shè)置可以幫助我們更好地展示文本內(nèi)容,提升用戶體驗(yàn)。本文將詳細(xì)介紹如何在 Flutter 3.10.0 或更高版本中實(shí)現(xiàn)這些效果。閱讀本文后,你將掌握

    2024年02月06日
    瀏覽(18)
  • 【Flutter】flutter_tts 語音播放文本 Text-to-Speech

    在移動(dòng)應(yīng)用開發(fā)中,文本到語音(Text-to-Speech,簡稱 TTS)的功能越來越常見。它可以幫助我們實(shí)現(xiàn)語音播報(bào)、語音提示等功能,極大地豐富了應(yīng)用的交互方式。 本文將介紹如何在 Flutter 中實(shí)現(xiàn) TTS 功能,我們將使用一個(gè)名為 flutter_tts 的插件來完成這個(gè)任務(wù)。 本文的重點(diǎn)包括

    2024年02月08日
    瀏覽(81)
  • flutter 網(wǎng)絡(luò)地址URL轉(zhuǎn)file

    方法1 方法2 方法3

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包