我正在參加 Flutter 的課程,我認為該課程有點舊,我正在嘗試將舊代碼升級為空安全,但由于我剛剛開始學習空安全,我遇到了錯誤并且我不知道為什么,如果你能幫忙,我會很高興。
“身份驗證事件”
part of 'auth_bloc.dart';
abstract class AuthEvent extends Equatable {
const AuthEvent();
@override
bool? get stringify => true;
@override
List<User?> get props => [];
}
class AuthUserChanged extends AuthEvent {
final auth.User? user;
const AuthUserChanged({this.user});
@override
List<User?> get props => [user];
}
class AuthLogoutRequested extends AuthEvent {}
最終 auth.User?用戶;
背景關系:“用戶”指的是一個屬性,所以它不能被提升。
“身份驗證狀態”
part of 'auth_bloc.dart';
enum AuthStatus { unknown, authenticated, unauthenticated }
class AuthState extends Equatable {
final auth.User? user;
final AuthStatus status;
const AuthState({
this.user,
this.status = AuthStatus.unknown,
});
factory AuthState.unknown() => const AuthState();
factory AuthState.authenticated({required auth.User user}) {
return AuthState(user: user, status: AuthStatus.authenticated);
}
factory AuthState.unauthenticated() =>
const AuthState(status: AuthStatus.unauthenticated);
@override
bool? get stringify => true;
@override
List<Object?> get props => [user, status];
}
“auth_bloc”
import 'dart:async';
import 'package:basla/depolar/depolar.dart';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:firebase_auth/firebase_auth.dart';
import 'package:meta/meta.dart';
part 'auth_event.dart';
part 'auth_state.dart';
class AuthBloc extends Bloc<AuthEvent, AuthState> {
final AuthRepository _authRepository;
late 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.authenticated(user: event.user)
: AuthState.unauthenticated();
}
}
(用戶:event.user)
錯誤:引數型別“用戶?” 不能分配給引數型別“用戶”,因為“用戶?” 可以為空,而 'User' 不是。
- “用戶”來自“包:firebase_auth/firebase_auth.dart”
請提醒我需要編輯的代碼。
uj5u.com熱心網友回復:
問題是您的authenticated狀態被 not null 接受auth.User。因此,只需將其更新為:
factory AuthState.authenticated({required auth.User? user})
另一個解決方案是添加!到event.user:
yield event.user != null
? AuthState.authenticated(user: event.user!)
: AuthState.unauthenticated();
Anw,在您想進一步使用 flutter/dart 更新之前,您應該閱讀檔案:https ://dart.dev/null-safety/understanding-null-safety
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/398595.html
