[Day24] Flutter - Application Login (part8)

前言

Hi, 我是鱼板伯爵这里我们要将Google登入与介面做连接,所以又要使用Bloc了,老样子按照着Event->State->Bloc的步骤建筑起来吧。

完整程序码

需要具备的知识

Login:Event

由於我只实作Google登入所以只有一个Google登入的事件,如果你有其他的可以继续扩充。

part of 'sign_in_bloc.dart';

abstract class SignInEvent extends Equatable {
  const SignInEvent();

  @override
  List<Object> get props => [];
}

class LoginWithGooglePressed extends LoginEvent {}

Login:State

状态分成三个登入成功、登入失败和登入中,如果你是使用输入帐密的登入话,还可以在里面加一些参数来检查是帐号没输入还是密码没输入等等,这样可以在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 {}

Login:Bloc

登入然後检查成功或失败,这就是等等我们按钮触发事件时会执行的任务。

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

>>:  Day18 订单 -- 优惠项目

绘制 3D 图片的工具|Spline

最近在看前端 3D 动画相关的技术,突然发现 Spline 这个设计工具,可以做出那种帅帅的3D&单...

30天学会C语言: Day 22-阵列处理

阵列比较 C 语言没办法透过比较运算检查两个阵列(或字串)是否相等,必须要透过阵列对每个圆一个一个做...

SQL Server VM 常见的 CPU 设定问题 - 心得分享

DBA Bootcamp 前一阵子,发现一台 SQL Server 的 compute 效能好像不如...

每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day15

tags: ItIron2021 Javascript 前言 前两天我们把重点放在by refere...

Day16 Let's ODOO: Report

Odoo提供建立report的功能,透过wkhtmltopdf来输出pdf,我们来写一个简单的范例,...