Flutter Gherkin测试中FlutterDriver可空类型赋值报错
Flutter Gherkin测试中FlutterDriver空安全适配问题
问题场景
执行Gherkin测试命令:
dart test_driver/app_test.dart --feature="counter_button.feature"
触发空安全错误:
Error: The argument type 'FlutterDriver?' can't be assigned to the parameter type 'FlutterDriver' because 'FlutterDriver?' is nullable and 'FlutterDriver' isn't. - 'FlutterDriver' is from 'package:flutter_driver/src/driver/driver.dart' ('../../Downloads/flutter/packages/flutter_driver/lib/src/driver/driver.dart'). var counterVal = await FlutterDriverUtils.getText(world.driver, locator);
仅getText方法出现该问题,isPresent和tap方法无此报错。
解决方案
问题根源是world.driver为可空类型FlutterDriver?,但FlutterDriverUtils.getText的参数要求非空的FlutterDriver。可通过以下方式解决:
- 非空断言(快速处理)
在world.driver后添加!断言其非空:
var counterVal = await FlutterDriverUtils.getText(world.driver!, locator);
- 判空校验(更安全)
先检查驱动实例是否初始化,再执行操作:
if (world.driver == null) { throw Exception("FlutterDriver 未初始化"); } var counterVal = await FlutterDriverUtils.getText(world.driver!, locator);
修改后的CounterValueStep代码示例
class CounterValueStep extends And1WithWorld<int, FlutterWorld> { @override Future<void> executeStep(int expectedVal) async { final locator = find.byValueKey('counter-val-key'); // 添加非空断言解决空安全问题 var counterVal = await FlutterDriverUtils.getText(world.driver!, locator); expectMatch(expectedVal, int.parse(counterVal)); } @override RegExp get pattern => RegExp(r"the counter value is at {int}"); }
补充说明
isPresent和tap方法未报错,是因为这两个方法的参数签名已适配空安全(接受FlutterDriver?类型),而getText方法的签名尚未更新,因此需要手动处理可空类型。
内容的提问来源于stack exchange,提问作者prottegus
相关产品推荐
相关产品推荐

