Flutter TLDTS解析插件tldts的使用

Flutter TLDTS 解析插件 tldts 的使用

tldts 是一个用于从 URL 中提取主机名、域名、公共后缀、顶级域名和子域的 Dart 库。它受到 JavaScript 版本的 tldts 库的启发。

特性

  1. 处理 URL 和主机名
  2. 完全支持 Unicode/IDNA
  3. 支持解析电子邮件地址
  4. 检测 IPv4 和 IPv6 地址
  5. 公共后缀列表持续更新

安装

dart pub add tldts

使用

import 'package:tldts/tldts.dart';
import 'package:test/test.dart';

void main() {
  test('parse url', () {
    final result = parse(
        "https://www.leetao.me/post/242/how-to-release-android-apk-without-sign-using-github-action");

    expect(result.domain, "leetao.me");
    expect(result.domainWithoutSuffix, "leetao");
    expect(result.hostname, "www.leetao.me");
    // expect(result.isIcann, true); # TODO: 一些问题与这个有关
    expect(result.isIp, false);
    expect(result.isPrivate, false);
    expect(result.publicSuffix, "me");
    expect(result.subdomain, "www");
  });
}

更多关于Flutter TLDTS解析插件tldts的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter TLDTS解析插件tldts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


tldts 是一个用于解析 URL 和域名的 JavaScript 库,它可以帮助你提取 URL 的不同部分,如域名、子域名、公共后缀等。在 Flutter 中,你可以通过 Dart 的 flutter_webview_plugin 或者 url_launcher 等插件来处理 URL,但如果需要更精细的 URL 解析功能,可以集成 JavaScript 的 tldts 库。

在 Flutter 中使用 tldts

由于 tldts 是一个 JavaScript 库,如果你想在 Flutter 中使用它,你需要通过 flutter_webview_plugin 或者 flutter_js 等插件来执行 JavaScript 代码。

步骤 1: 添加依赖

在你的 pubspec.yaml 文件中添加 flutter_webview_plugin 或者 flutter_js 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_webview_plugin: ^0.4.0  # 或者使用最新的版本
  # 或者
  flutter_js: ^0.5.0  # 或者使用最新的版本

步骤 2: 加载 tldts

你可以通过以下方式在 Flutter 中加载 tldts 库并使用它。

使用 flutter_webview_plugin 的示例
import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

class TLDTParser extends StatelessWidget {
  final flutterWebviewPlugin = FlutterWebviewPlugin();

  Future<String> parseUrl(String url) async {
    await flutterWebviewPlugin.launch('about:blank');
    await flutterWebviewPlugin.evalJavascript('''
      var tldts = require('tldts');
      var parsed = tldts.parse('$url');
      JSON.stringify(parsed);
    ''');

    String result = await flutterWebviewPlugin.evalJavascript('parsed');
    await flutterWebviewPlugin.close();
    return result;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('TLDTS Parser'),
      ),
      body: Center(
        child: FutureBuilder<String>(
          future: parseUrl('https://sub.example.co.uk'),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              return Text('Parsed URL: ${snapshot.data}');
            } else {
              return CircularProgressIndicator();
            }
          },
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: TLDTParser(),
));
使用 flutter_js 的示例
import 'package:flutter/material.dart';
import 'package:flutter_js/flutter_js.dart';

class TLDTParser extends StatelessWidget {
  final JavascriptRuntime jsRuntime = getJavascriptRuntime();

  Future<String> parseUrl(String url) async {
    String script = '''
      var tldts = require('tldts');
      var parsed = tldts.parse('$url');
      JSON.stringify(parsed);
    ''';

    var result = jsRuntime.evaluate(script);
    return result.stringResult;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('TLDTS Parser'),
      ),
      body: Center(
        child: FutureBuilder<String>(
          future: parseUrl('https://sub.example.co.uk'),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              return Text('Parsed URL: ${snapshot.data}');
            } else {
              return CircularProgressIndicator();
            }
          },
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: TLDTParser(),
));
回到顶部