Hi, 我是鱼板伯爵这里我们要将Google登入与介面做连接,所以又要使用Bloc了,老样子按照着Event->State->Bloc的步骤建筑起来吧。
由於我只实作Google登入所以只有一个Google登入的事件,如果你有其他的可以继续扩充。
part of 'sign_in_bloc.dart';
abstract class SignInEvent extends Equatable {
const SignInEvent();
@override
List<Object> get props => [];
}
class LoginWithGooglePressed extends LoginEvent {}
状态分成三个登入成功、登入失败和登入中,如果你是使用输入帐密的登入话,还可以在里面加一些参数来检查是帐号没输入还是密码没输入等等,这样可以在UI上显示错误讯息。
part of 'sign_in_bloc.dart';
abstract class SignInState extends Equatable {
const SignInState();
@override
List<Object> get props => [];
}
class SignInStateInitial extends SignInState {}
class SignInStateLoading extends SignInState {}
class SignInStateFailure extends SignInState {}
class SignInStateSuccess extends SignInState {}
登入然後检查成功或失败,这就是等等我们按钮触发事件时会执行的任务。
import 'dart:async';
import 'dart:developer';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:stunning_tribble/infrastructure/auth/auth_repository.dart';
part 'sign_in_event.dart';
part 'sign_in_state.dart';
class SignInBloc extends Bloc<SignInEvent, SignInState> {
AuthRepository _userRepository;
SignInBloc({
required AuthRepository userRepository,
}) : _userRepository = userRepository,
super(SignInStateInitial());
@override
Stream<SignInState> mapEventToState(
SignInEvent event,
) async* {
if (event is SignInWithGooglePressed) {
yield* _mapLoginWithGooglePressedToState();
}
}
Stream<SignInState> _mapLoginWithGooglePressedToState() async* {
final user = await _userRepository.signInWithGoogle();
yield* user.fold(
(failure) async* {
log("$failure");
yield SignInStateFailure();
},
(success) async* {
yield SignInStateSuccess();
},
);
}
}
<<: 初学者跪着学JavaScript Day9 : 让我困惑的Literals
最近在看前端 3D 动画相关的技术,突然发现 Spline 这个设计工具,可以做出那种帅帅的3D&单...
阵列比较 C 语言没办法透过比较运算检查两个阵列(或字串)是否相等,必须要透过阵列对每个圆一个一个做...
DBA Bootcamp 前一阵子,发现一台 SQL Server 的 compute 效能好像不如...
tags: ItIron2021 Javascript 前言 前两天我们把重点放在by refere...
Odoo提供建立report的功能,透过wkhtmltopdf来输出pdf,我们来写一个简单的范例,...