Flutter -我想检测是否在TextField中输入了任何URL,并在输入URL时显示URL的预览

ygya80vv  于 2022-12-24  发布在  Flutter
关注(0)|答案(2)|浏览(201)

如果用户在文本字段中键入描述时输入了任何URL,并且我希望检测到该URL并显示该URL的预览。
有人对如何实现这一目标有什么想法吗?

jk9hmnmh

jk9hmnmh1#

您可以监听TextEditingController以在打印时检测它,在我的示例中,我将识别包含“http”文本的URL:
StatefulWidget中:

late TextEditingController _controller;

  @override
  void initState() {
    _controller = TextEditingController();
    _controller.addListener(() {
      if (_controller.text.contains("http")) {
        print("link detected :");
        print(_controller.text.split(' ').firstWhere(
              (element) => element.startsWith("http"),
            ));
      }
    });
    super.initState();
  }

TextField小部件:

TextField(
      controller: _controller, // assign that controller
    );

在热启动之后,当您键入TextField时,如果一些文本以“http”(即URL)开头,侦听器将打印它。
你可以用它来实现你的目标。

biswetbf

biswetbf2#

您可以使用anylink包:

on TextField(
  onChange: (url){
    bool isValidUrl = AnyLinkPreview.isValidLink(
      url,
      protocols: ['http', 'https'],
      hostWhitelist: ['https://youtube.com/'],
      hostBlacklist: ['https://facebook.com/'],
    );
   if(isValidUrl){
     setState((){
      _currentUrl = url;
   })

}
  }
) 


AnyLinkPreview(
...
   link: _currentUrl,
..

相关问题