在我的示例项目中,我使用riverpod包和freezed. 在下面的代码中,我可以成功从服务器获取数据,但是当我尝试使用时model.fromJson出现此错误:
getting type 'Null' is not a subtype of type 'Map<String, dynamic>' in type cast
Run Code Online (Sandbox Code Playgroud)
服务器响应数据:
getting type 'Null' is not a subtype of type 'Map<String, dynamic>' in type cast
Run Code Online (Sandbox Code Playgroud)
login模型来转换服务器响应的数据和结构:
{
"message": "test message",
"statusCode": 1
}
Run Code Online (Sandbox Code Playgroud)
在LoginResponse类中,我定义了两个参数message,statusCode它们由服务器返回。当我尝试使用此请求时,例如:
LoginModel loginModelFromJson(Map<String, dynamic> str) => LoginModel.fromJson(str);
String loginModelToJson(LoginModel data) => json.encode(data.toJson());
@freezed
class LoginModel with _$LoginModel {
const factory LoginModel({
required LoginResponse response,
}) = _LoginModel;
factory …Run Code Online (Sandbox Code Playgroud) 在 null-safe dart 之前,以下是有效的语法:
final list = [1, 2, 3];
final x = list.firstWhere((element) => element > 3, orElse: () => null);
if (x == null) {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
现在,firstWhere需要orElse返回 an int,而不是 an int?,因此我不能返回 null。
如何从 返回 null orElse?
我一直在尝试使用从我的 auth 获得的uid创建到 Firestore 文档的流Provider:
class AuthService {
...
static final provider = StreamProvider.autoDispose((ref) => FirebaseAuth.instance.onAuthStateChanged);
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我正在努力创建一个StreamProvider对 auth 值的依赖Provider。
class User {
...
static final provider = StreamProvider((ref) {
final stream = ref.read(AuthService.provider);
// Returns AsyncValue<Stream<User>> instead of desired AsyncValue<User>
return stream.map((auth) => Service.user.stream(auth.uid));
});
...
}
Run Code Online (Sandbox Code Playgroud)
我还尝试使用Computed返回uid或流本身,但您无法Computed从 a 中读取a Provider(回想起来是有道理的)。
这个问题与此主题最相关,但它涉及 Provider,而不是 Riverpod。
PS 可以创建 Riverpod 标签吗?
编辑:
答案并不完全正确。在await for …