Flutter 识别文字中的url并添加点击事件,识别

 正则判断截取url地址,剩余的需要自己拼接

更换了正则,判断末尾是中文字符和空格

List<InlineSpan> _getContentSpan(String text) {
    List<InlineSpan> _contentList = [];

    RegExp exp =
        //new RegExp(r'(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+');
    new RegExp(r'(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?');
     // text = "如果www.baidu.com这是一段文本但是里面包含了连接";
    Iterable<RegExpMatch> matches = exp.allMatches(text);

    int index=0;
    matches.forEach((match) {
      /// start 0  end 8
      /// start 10 end 12
      String c = text.substring(match.start, match.end);

      // print('---地址-url:--$c');
      if(match.start==index){
        index=match.end;
      }
      if(index<match.start){
        String a=text.substring(index+1,match.start);
        // print('---地址-内容AAAA--$a');
        index=match.end;
        _contentList.add(
          TextSpan(text: a),
        );
      }

      if (RegexUtil.isURL(c)) {
        _contentList.add(TextSpan(
            text: c,
            style: TextStyle(color: Colors.blue),
            recognizer: new TapGestureRecognizer()
              ..onTap = () {
                Get.to(WebViewExample(
                  url: text.substring(match.start, match.end),
                ));
              }));
      } else {
        _contentList.add(
          TextSpan(text: c),
        );
      }
    });
    if(index<text.length){
      String a=text.substring(index,text.length);
      // print('---地址-内容BBBB--$a');
      _contentList.add(
        TextSpan(text: a),
      );

    }


    return _contentList;
  }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值