'Null' 无法赋值给参数类型 'AccountType Function()'
'Null' can't be assigned to the parameter type 'AccountType Function()'
有没有人可以给我解释一下这是怎么回事。我对 flutter 和 dart 编程完全陌生,我在 youtube 上开始了一个使用 DDD 架构的视频教程,但我猜这个教程没有使用带有 null safety
功能的新版本的 flutter,我猜这可能测试未通过的原因。我只是按照教程中的方式进行操作,唯一的区别是 class 名称以及 flutter 和 dart 版本。
测试输出
The argument type 'Null' can't be assigned to the parameter type 'AccountType Function()'.
代码
import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:matcher/matcher.dart' as matcher;
void main() {
group('AccountType', () {
test('Should return Failure when the value is empty', () {
// arrange
var accountType = AccountType.create('')
.fold((err) => err, (accountType) => accountType);
// assert
expect(accountType, matcher.TypeMatcher<Failure>());
});
test('Should create accountType when value is not empty', () {
// arrange
String str = 'sender';
AccountType accountType = AccountType.create(str).getOrElse(null); <--- Here where the test fails.
// assert
expect(accountType.value, 'sender');
});
});
}
class AccountType extends Equatable {
final String? value;
AccountType._(this.value);
static Either<Failure, AccountType> create(String? value) {
if (value!.isEmpty) {
return Left(Failure('Account type can not be empty'));
} else {
return Right(AccountType._(value));
}
}
@override
List<Object?> get props => [value];
}
class Failure {
final String? message;
Failure(this.message);
}
有了 null 安全性,你真的不需要使用 getOrElse 或两个单独的函数
相反,您可以通过添加 ?对它
String? str = 'sender';
AccountType accountType = AccountType.create(str)
在您的函数中,我们可以使用 null safety 来检查它并在函数中适当地处理它
static Either<Failure, AccountType> create(String? value) {
if (value?.isEmpty) {
return Left(Failure('Account type can not be empty'));
} else {
return Right(AccountType._(value));
}
}
value?.isEmpty
等于
if(value != null && value.isEmpty) { return value.isEmpty } else { return null)
检查它是否为 null 我们可以使用 ??
value?.isEmpty ?? true
这意味着
if(isEmpty != null) { return isEmpty } else { return true }
有没有人可以给我解释一下这是怎么回事。我对 flutter 和 dart 编程完全陌生,我在 youtube 上开始了一个使用 DDD 架构的视频教程,但我猜这个教程没有使用带有 null safety
功能的新版本的 flutter,我猜这可能测试未通过的原因。我只是按照教程中的方式进行操作,唯一的区别是 class 名称以及 flutter 和 dart 版本。
测试输出
The argument type 'Null' can't be assigned to the parameter type 'AccountType Function()'.
代码
import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:matcher/matcher.dart' as matcher;
void main() {
group('AccountType', () {
test('Should return Failure when the value is empty', () {
// arrange
var accountType = AccountType.create('')
.fold((err) => err, (accountType) => accountType);
// assert
expect(accountType, matcher.TypeMatcher<Failure>());
});
test('Should create accountType when value is not empty', () {
// arrange
String str = 'sender';
AccountType accountType = AccountType.create(str).getOrElse(null); <--- Here where the test fails.
// assert
expect(accountType.value, 'sender');
});
});
}
class AccountType extends Equatable {
final String? value;
AccountType._(this.value);
static Either<Failure, AccountType> create(String? value) {
if (value!.isEmpty) {
return Left(Failure('Account type can not be empty'));
} else {
return Right(AccountType._(value));
}
}
@override
List<Object?> get props => [value];
}
class Failure {
final String? message;
Failure(this.message);
}
有了 null 安全性,你真的不需要使用 getOrElse 或两个单独的函数 相反,您可以通过添加 ?对它
String? str = 'sender';
AccountType accountType = AccountType.create(str)
在您的函数中,我们可以使用 null safety 来检查它并在函数中适当地处理它
static Either<Failure, AccountType> create(String? value) {
if (value?.isEmpty) {
return Left(Failure('Account type can not be empty'));
} else {
return Right(AccountType._(value));
}
}
value?.isEmpty
等于
if(value != null && value.isEmpty) { return value.isEmpty } else { return null)
检查它是否为 null 我们可以使用 ??
value?.isEmpty ?? true
这意味着
if(isEmpty != null) { return isEmpty } else { return true }