LogIn Redux Cycle

Let's wire up a button in our app that logs in a user with Firebase.

1. Add a new auth_actions file.

2. Add relevant actions:

// actions/auth_actions.dart
import 'package:firebase_auth/firebase_auth.dart';
// gives us access to `@required`
import 'package:flutter/foundation.dart';
class LogIn {}
class LogInSuccessful {
  final FirebaseUser user;
  LogInSuccessful({  this.user});
  
  String toString() {
    return 'LogIn{user: $user}';
  }
}
class LogInFail {
  final dynamic error;
  LogInFail(this.error);
  
  String toString() {
    return 'LogIn{There was an error loggin in: $error}';
  }
}
class LogOut {}
class LogOutSuccessful {
  LogOutSuccessful();
  
  String toString() {
    return 'LogOut{user: null}';
  }
}

These are our basic actions. From here, we need to write our first middleware. That takes a bit of an aside, and then we'll return to our Redux cycle.