我知道,很多人在这里问过类似的问题。但是没有解决方案对我有用,我无法理解解决方案。所以请有人帮助我。我将变量 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();
}
}
如果需要更多信息,请评论,我会补充。
答案 0 :(得分:0)
您在事件类中处理空值很奇怪。
这是具有适当空值处理的类:
class AuthUserChanged extends AuthEvent {
final auth.User user;
const AuthUserChanged({required this.user});
@override
List<Object> get props => [user];
}
变量 user
永远不能为空,因为您在构造函数中用 required
关键字标记了它。现在从其余代码中删除与变量 !
相关的任何 user
。
你的其他代码看起来也很奇怪。就像一个知识太少的转换工具跑过它并做错了。发生了什么?也许您应该逐行查看代码并首先修复概念错误,然后再担心编译器和运行时。