android - 未处理的异常:未处理的错误 Null 检查运算符用于空值,发生在 Flutter 中的“AuthBloc”实例中
问题描述
我知道,很多人在这里问过类似的问题。但是没有解决方案对我有用,我无法理解解决方案。所以请有人帮助我。我将变量声明user
为非空(通过添加感叹号)。但不知何故,它返回 null。请有人通过追踪我如何得到这个空值来帮助我。
这是 auth_event.dart 文件 -
(第 17 行给出了错误(根据我的想法)。)
part of 'auth_bloc.dart';
abstract class AuthEvent extends Equatable {
const AuthEvent();
@override
// TODO: implement stringify
bool? get stringify => true;
@override
List<Object> get props => [];
}
class AuthUserChanged extends AuthEvent {
final auth.User? user; //Initial Value is null
const AuthUserChanged({required this.user}); //Now the value is changed
@override
List<Object> get props => [user!]; //Still, the value being shown is null
//TODO: List<Object> get props => [user??auth.User];
}
class AuthLogoutRequested extends AuthEvent {}
这是 auth_bloc.dart 文件 -
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:flutter/cupertino.dart';
import 'package:flutter_instagram_clone_final/blocs/blocs.dart';
import 'package:flutter_instagram_clone_final/repositories/auth/auth_repository.dart';
part 'auth_event.dart';
part 'auth_state.dart';
class AuthBloc extends Bloc<AuthEvent, AuthState> {
final AuthRepository? _authRepository;
StreamSubscription<auth.User?>? _userSubscription;
AuthBloc({
@required AuthRepository? authRepository
}) : _authRepository = authRepository, super(AuthState.unknown()){
_userSubscription = _authRepository!.user.listen((user) => add(AuthUserChanged(user: user)));
}
@override
Future<void> close() {
_userSubscription!.cancel();
return super.close();
}
@override
Stream<AuthState> mapEventToState (
AuthEvent event,
) async* {
if(event is AuthUserChanged) {
yield* _mapAuthUserChangedToState(event);
}
else if(event is AuthLogoutRequested) {
await _authRepository!.logOut();
}
}
Stream<AuthState> _mapAuthUserChangedToState(AuthUserChanged event) async*{
yield event.user != null
? AuthState.authenticate(user: event.user!)
: AuthState.unauthenticated();
}
}
如果需要更多信息,请评论出来,我会补充。
解决方案
您在事件类中处理空值很奇怪。
这是您的具有正确 null 处理的类:
class AuthUserChanged extends AuthEvent {
final auth.User user;
const AuthUserChanged({required this.user});
@override
List<Object> get props => [user];
}
该变量user
永远不能为空,因为您required
在构造函数中使用关键字对其进行了标记。现在从其余代码中删除任何!
与该变量有关的内容。user
你的其他代码看起来也很奇怪。就像一个知识太少的转换工具跑过它并做错了。发生了什么?也许您应该逐行查看您的代码并首先修复概念上的错误,然后再担心编译器和运行时。
推荐阅读
- java - 如何从 MySQL 中检索休眠中的多个图像?
- ruby-on-rails - 使用 Google OAuth 2 API 刷新令牌时如何修复“帐户已被删除”
- javascript - javascript中的平滑键盘输入
- reactjs - Nextjs 动态路由排除
- php - 在 WordPress 模板中,如何检测当前页面是 WooCommerce 购物车还是结帐页面?
- python - 使用 numpy 和 numba 提高 groupby-transform 操作的性能
- android - 如何从 Firebase 中检索数据并在 recyclerView 中一一显示孩子
- powershell - 每个文件压缩文件,同名
- flutter - Cloud Firestore 连接我的 Flutter Windows 应用
- swift - 停止 SKAudioNode 播放