Flutter适配器插件adapters_flutter的使用
Flutter适配器插件adapters_flutter的使用
开始使用
要求
sdk: '>=3.0.0 <4.0.0'
flutter: '>=3.10.0'
安装
通过Dart安装:
dart pub add adapters_flutter
通过Flutter安装:
flutter pub add adapters_flutter
兼容性
Test IT | adapters_flutter |
---|---|
5.0 | 2.1.9+ |
使用方法
配置
以下是一些配置选项及其描述:
描述 | 文件属性 | 环境变量 | 命令行参数 |
---|---|---|---|
适配器模式。默认值为0。适配器支持以下模式: 0 - 在此模式下,适配器仅发送在测试运行中找到的自动测试结果。 1 - 在此模式下,适配器将发送所有结果到测试运行。 2 - 在此模式下,适配器将创建一个新的测试运行并发送所有结果到它。 |
adapterMode |
TMS_ADAPTER_MODE |
tmsAdapterMode |
自动创建测试用例的模式(可选)。默认值为false。适配器支持以下模式: true - 在此模式下,适配器将创建一个与创建的自动测试关联的测试用例(而不是更新的自动测试) false - 在此模式下,适配器不会创建测试用例。 |
automaticCreationTestCases |
TMS_AUTOMATIC_CREATION_TEST_CASES |
tmsAutomaticCreationTestCases |
自动更新测试用例链接的模式(可选)。默认值为false。适配器支持以下模式: true - 在此模式下,适配器将更新测试用例链接。 false - 在此模式下,适配器不会更新测试用例链接。 |
automaticUpdationLinksToTestCases |
TMS_AUTOMATIC_UPDATION_LINKS_TO_TEST_CASES |
tmsAutomaticUpdationLinksToTestCases |
启用/禁用证书验证(可选)。默认值为true。 | certValidation |
TMS_CERT_VALIDATION |
tmsCertValidation |
配置文件名称。如果未提供,则使用默认文件名(可选)。 | - | TMS_CONFIG_FILE |
tmsConfigFile |
在TMS实例中的配置ID。如何获取配置ID? | configurationId |
TMS_CONFIGURATION_ID |
tmsConfigurationId |
启用调试日志(可选)。默认值为false。 | isDebug |
TMS_IS_DEBUG |
tmsIsDebug |
API密钥 | privateToken |
TMS_PRIVATE_TOKEN |
tmsPrivateToken |
在TMS实例中的项目ID。如何获取项目ID? | projectId |
TMS_PROJECT_ID |
tmsProjectId |
启用/禁用TMS集成(可选)。默认值为true。 | testIt |
TMS_TEST_IT |
tmsTestIt |
在TMS实例中创建的测试运行ID。对于adapterMode 0或1时必需。 |
testRunId |
TMS_TEST_RUN_ID |
tmsTestRunId |
指定TMS实例中测试运行名称的参数(可选)。如果没有提供,将自动生成。 | testRunName |
TMS_TEST_RUN_NAME |
tmsTestRunName |
TMS实例的URL | url |
TMS_URL |
tmsUrl |
文件
在项目的根目录中创建名为testit.properties
的文件:
adapterMode={%ADAPTER_MODE%}
automaticCreationTestCases={%AUTOMATIC_CREATION_TESTCASES%}
automaticUpdationLinksToTestCases={%AUTOMATIC_UPDATION_LINKS_TO_TESTCASES%}
certValidation={%CERTIFICATE_VALIDATION%}
configurationId={%CONFIGURATION_ID%}
isDebug={%IS_DEBUG%}
privateToken={%USER_PRIVATE_TOKEN%}
projectId={%PROJECT_ID%}
testIt={%TEST_IT%}
testRunId={%TEST_RUN_ID%}
testRunName={%TEST_RUN_NAME%}
url={%URL%}
命令行
flutter test --dart-define=tmsAdapterMode={%ADAPTER_MODE%} --dart-define=tmsAutomaticCreationTestCases={%AUTOMATIC_CREATION_TESTCASES%} --dart-define=tmsAutomaticUpdationLinksToTestCases={%AUTOMATIC_UPDATION_LINKS_TO_TESTCASES%} --dart-define=tmsCertValidation={%CERTIFICATE_VALIDATION%} --dart-define=tmsConfigFile={%CONFIG_FILE%} --dart-define=tmsConfigurationId={%CONFIGURATION_ID%} --dart-define=tmsIsDebug={%IS_DEBUG%} --dart-define=tmsPrivateToken={%USER_PRIVATE_TOKEN%} --dart-define=tmsProjectId={%PROJECT_ID%} --dart-define=tmsTestIt={%TEST_IT%} --dart-define=tmsTestRunId={%TEST_RUN_ID%} --dart-define=tmsTestRunName={%TEST_RUN_NAME%} --dart-define=tmsUrl={%URL%}
自动测试元数据
使用元数据指定有关自动测试的信息。
测试参数描述
description
- 在自动测试卡片中指定的自动测试描述。externalId
- 唯一的内部自动测试ID(用于Test IT)。links
- 列在自动测试卡片中的链接。tags
- 列在自动测试卡片中的标签。title
- 在自动测试卡片中指定的自动测试名称。如果未指定,则使用测试名称。workItemsIds
- 一种将自动测试与手动测试关联的方法。接收一组手动测试的ID。
函数描述
addAttachment
- 将单个附件添加到自动测试结果中。addAttachments
- 将多个附件添加到自动测试结果中。addLink
- 将单个链接添加到自动测试结果中。addLinks
- 将多个链接添加到自动测试结果中。addMessage
- 将消息添加到自动测试结果中。
步骤描述
step
- 实现自动测试步骤。
示例代码
以下是一个完整的示例代码:
#!/usr/bin/env dart
[@Tags](/user/Tags)(['suite_tag'])
import 'package:adapters_flutter/adapters_flutter.dart';
import 'package:universal_io/io.dart';
void main() {
group('example group', () {
setUpAll(() async {
HttpOverrides.global = null;
await step('setup all step', () {
expect(0, 0);
});
});
setUp(() async {
await step('setup step', () {
expect(0, 0);
});
});
tmsTest('example test',
externalId: 'example_externalId',
links: {Link('https://www.example.org/')},
tags: {'example_tag'},
title: 'example_title',
workItemsIds: {'47100'}, () async {
await step('success step', () {
expect(0, 0);
});
await step('success step with attachment', () async {
await addAttachment('avatar.png');
});
await step('success step with link', () async {
await addLink('https://www.example.org/');
});
await step('success step with message', () async {
await addMessage('example message');
});
final actual = await step('success step with return value', () {
return 0;
});
expect(actual, 0);
await step('success root step', () async {
await step('success child step', () {
expect(0, 0);
});
});
await step('failed step', () {
throw Exception('example exception.');
});
});
tmsTestWidgets('example widgets test',
externalId: 'example_widgets_externalId',
links: {Link('https://www.example.org/')},
tags: {'example_tag_widgets'},
title: 'example_title_widgets',
workItemsIds: {'47100'}, (tester) async {
await step('success step', () {
expect(0, 0);
});
await step('success step with attachment', () async {
await addAttachment('avatar.png');
});
await step('success step with link', () async {
await addLink('https://www.example.org/');
});
await step('success step with message', () async {
await addMessage('example message');
});
final actual = await step('success step with return value', () {
return 0;
});
expect(actual, 0);
await step('success root step', () async {
await step('success child step', () {
expect(0, 0);
});
});
await step('failed step', () {
throw Exception('example exception.');
});
});
tearDown(() async {
await step('teardown step', () {
expect(0, 0);
});
});
tearDownAll(() async {
await step('teardown all step', () {
expect(0, 0);
});
});
});
}
更多关于Flutter适配器插件adapters_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter适配器插件adapters_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用适配器插件(如adapters_flutter
)通常是为了将原生平台(iOS和Android)的特定功能或数据格式适配到Flutter层。不过,需要注意的是,adapters_flutter
并不是一个官方的或广泛认可的Flutter插件名称,可能是一个自定义或特定项目的插件。因此,我将给出一个通用的适配器插件使用示例,你可以根据具体插件的文档进行调整。
假设我们有一个自定义的Flutter插件my_adapters_flutter
,它提供了对原生平台功能的访问。以下是如何在Flutter项目中集成和使用这个插件的示例。
1. 添加插件依赖
首先,你需要在pubspec.yaml
文件中添加插件依赖。如果插件已经在Pub仓库中发布,你可以这样添加:
dependencies:
flutter:
sdk: flutter
my_adapters_flutter: ^x.y.z # 替换为实际的版本号
如果插件是私有的或者还没有发布到Pub仓库,你可能需要配置.pub-cache
或使用其他方式将其包含在你的项目中。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:my_adapters_flutter/my_adapters_flutter.dart';
3. 使用插件
假设my_adapters_flutter
插件提供了一个方法来获取原生平台的数据,并将其转换为Flutter可以使用的格式。下面是一个简单的使用示例:
import 'package:flutter/material.dart';
import 'package:my_adapters_flutter/my_adapters_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Adapter Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String platformData = 'Loading...';
@override
void initState() {
super.initState();
// 调用插件方法来获取平台数据
_fetchPlatformData();
}
Future<void> _fetchPlatformData() async {
try {
// 假设插件提供了一个名为fetchData的方法
String data = await MyAdaptersFlutter.fetchData();
// 更新UI
setState(() {
platformData = data;
});
} catch (e) {
// 处理错误
print('Error fetching platform data: $e');
setState(() {
platformData = 'Error fetching data';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Adapter Example'),
),
body: Center(
child: Text(platformData),
),
);
}
}
4. 原生平台实现
在原生平台(iOS和Android)上,你需要实现插件的接口。这通常涉及到创建插件的MethodChannel,并在原生代码中处理从Flutter层传来的方法调用。
iOS:
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
class MyAdaptersFlutterPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "my_adapters_flutter", binaryMessenger: registrar.messenger())
let instance = MyAdaptersFlutterPlugin()
instance.setup(channel: channel, registrar: registrar)
}
private func setup(channel: FlutterMethodChannel, registrar: FlutterPluginRegistrar) {
channel.setMethodCallHandler({
(call: FlutterMethodCall, result: @escaping FlutterResult) in
if call.method == "fetchData" {
// 在这里获取平台数据并返回给Flutter
let platformData = "Hello from iOS!"
result(platformData)
} else {
result(FlutterMethodNotImplemented)
}
})
}
}
Android:
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
import androidx.annotation.NonNull;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "my_adapters_flutter";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if (call.method.equals("fetchData")) {
// 在这里获取平台数据并返回给Flutter
String platformData = "Hello from Android!";
result.success(platformData);
} else {
result.notImplemented();
}
}
);
}
}
以上代码是一个基本的示例,展示了如何在Flutter项目中集成和使用一个自定义的适配器插件。根据adapters_flutter
插件的实际API和文档,你可能需要对代码进行调整。