Flutter URI转换插件uri_converter的使用

Flutter URI转换插件uri_converter的使用

在Flutter开发中,有时我们需要将数据模型与URI之间进行相互转换。uri_converter 插件可以帮助我们轻松实现这一功能。


功能说明

uri_converter 插件的主要功能是将数据模型转换为URI,或者从URI解析回数据模型。以下是其核心特性:

  1. 数据模型必须能够序列化为JSON。
  2. 转换后的JSON必须包含一个顶层的 "path" 键,该键将对应于URI的路径。其他字段将以查询参数的形式表示。
  3. freezed 插件配合使用效果更佳,只需在数据模型类上添加 @Freezed(unionKey: 'path') 注解即可。
  4. 返回的URI不包含模式(schema)或域名,你需要手动添加这些信息。

使用示例

以下是一个完整的示例,展示如何使用 uri_converter 插件将数据模型转换为URI,并从中解析回数据模型。

1. 添加依赖

pubspec.yaml 文件中添加 uri_converter 依赖:

dependencies:
  uri_converter: ^1.0.0

然后运行 flutter pub get 安装依赖。


2. 定义数据模型

假设我们有一个简单的数据模型 MyDataModel,它包含两个字段:idname。我们可以使用 freezed 来定义该模型。

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:uri_converter/uri_converter.dart';

part 'my_data_model.freezed.dart';

@freezed
class MyDataModel with _$MyDataModel {
  const factory MyDataModel({
    required String id,
    required String name,
  }) = _MyDataModel;
}

3. 将数据模型转换为URI

我们将 MyDataModel 转换为URI,并添加基础URL。

void main() {
  // 创建数据模型实例
  final myDataModel = MyDataModel(id: '123', name: 'John Doe');

  // 转换数据模型为URI
  final req = convertDataModelToUri(myDataModel);

  // 设置基础URL
  final _baseUrl = Uri.parse('http://localhost:8080');

  // 构建完整的URI
  final uri = _baseUrl.replace(
    path: req.path,
    queryParameters: req.queryParameters,
  );

  print('生成的URI: $uri');
}

输出示例:

生成的URI: http://localhost:8080/?id=123&name=John%20Doe

4. 从URI解析回数据模型

接下来,我们将URI解析回 MyDataModel

void main() {
  // 基础URL
  final _baseUrl = Uri.parse('http://localhost:8080');

  // 假设这是从服务器获取的URI
  final uri = Uri.parse('?id=123&name=John%20Doe');

  // 解析URI并生成数据模型
  final myDataModel = convertUriToDataModel<MyDataModel>(_baseUrl.resolve(uri));

  print('解析后的数据模型: $myDataModel');
}

输出示例:

解析后的数据模型: MyDataModel(id: 123, name: John Doe)

更多关于Flutter URI转换插件uri_converter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


在Flutter中,uri_converter 插件用于处理URI的转换和解析。它可以帮助你将URI字符串转换为Uri对象,或者将Uri对象转换为字符串。这个插件在处理网络请求、深度链接等场景时非常有用。

安装插件

首先,你需要在pubspec.yaml文件中添加uri_converter插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  uri_converter: ^latest_version

然后运行 flutter pub get 来安装插件。

使用插件

1. 将字符串转换为Uri

你可以使用 UriConverter 类的 parse 方法将字符串转换为 Uri 对象。

import 'package:uri_converter/uri_converter.dart';

void main() {
  String uriString = "https://example.com/path?query=123";
  Uri uri = UriConverter.parse(uriString);

  print(uri); // 输出: https://example.com/path?query=123
  print(uri.scheme); // 输出: https
  print(uri.host); // 输出: example.com
  print(uri.path); // 输出: /path
  print(uri.query); // 输出: query=123
}

2. 将Uri转换为字符串

你可以使用 UriConverter 类的 toString 方法将 Uri 对象转换为字符串。

import 'package:uri_converter/uri_converter.dart';

void main() {
  Uri uri = Uri(
    scheme: 'https',
    host: 'example.com',
    path: '/path',
    queryParameters: {'query': '123'},
  );

  String uriString = UriConverter.toString(uri);

  print(uriString); // 输出: https://example.com/path?query=123
}

3. 解析和构建URI

uri_converter 还提供了一些其他方法来解析和构建URI,例如:

  • UriConverter.resolveUri: 解析相对URI。
  • UriConverter.resolve: 解析相对路径。
  • UriConverter.normalize: 标准化URI路径。
import 'package:uri_converter/uri_converter.dart';

void main() {
  Uri baseUri = Uri.parse("https://example.com/path/");
  Uri relativeUri = Uri.parse("subpath?query=123");

  Uri resolvedUri = UriConverter.resolveUri(baseUri, relativeUri);

  print(resolvedUri); // 输出: https://example.com/path/subpath?query=123
}
回到顶部