Compare commits

..
Author SHA1 Message Date
hugo c2f588d96e feat(deferred): (wip) add generator package 2023-02-10 14:40:31 +01:00
hugo 4441ddeb33 feat(deferred): (wip) add annotations package 2023-02-10 14:40:14 +01:00
malo a563bd1fe3 style(ui_kit): add macos platform in example
continuous-integration/drone/push Build is failing
2023-02-10 14:19:32 +01:00
malo 5464cd1d40 feat(ui_kit): implement information card (#126)
continuous-integration/drone/push Build is failing
2023-02-10 14:08:04 +01:00
malo ba1c1016e5 style(ui_kit): remove default files 2023-02-10 11:35:51 +01:00
malo 23b608ed10 feat(ui_components): add gradient attribut to text wrapper
continuous-integration/drone/push Build is failing
2023-02-10 11:25:39 +01:00
hugo 44b2b7c27d chore(ui_kit): create package template
continuous-integration/drone/push Build is failing
2023-02-09 18:10:11 +01:00
hugo 6bad9a8a05 fix(ui_layout): fix textwrapper 2023-02-09 18:09:45 +01:00
hugo 5d8f94bee8 fix(cw_gen): fix textwrapper 2023-02-09 18:09:14 +01:00
hugo 75cb341447 fix(bloc_layout): fix textwrapper 2023-02-09 18:08:49 +01:00
hugo efa7ca09dd feat(ui_component): add string extension to easely wrap text 2023-02-09 18:08:03 +01:00
malo ac432f6dc8 feat(ui_components): export cards #126
continuous-integration/drone/push Build is failing
2023-02-09 16:50:48 +00:00
malo 6c85faba82 feat(ui_components): add portfolio & skill cards #126 2023-02-09 16:50:48 +00:00
malo dd75ecfc7a feat: make text wrapper constructor constant 2023-02-09 16:50:48 +00:00
malo 0132771e17 feat(ui_components): add text wrapper instead of String/Widget for Texts 2023-02-09 16:50:48 +00:00
malo 5d5ae145aa feat(ui_components): make fields nullable and not required in quote card 2023-02-09 16:50:48 +00:00
malo 07428a5215 fix(ui_components): remove darkmode enable field in cards 2023-02-09 16:50:48 +00:00
malo c994c822b0 feat(ui_components): export components and add license header 2023-02-09 16:50:48 +00:00
malo bde54e0cf5 feat(ui_components): add information_card & quote_card (#126) 2023-02-09 16:50:48 +00:00
malo f3c3939ba1 docs: update readme
continuous-integration/drone/push Build is failing
2023-02-07 14:26:53 +00:00
813 changed files with 7602 additions and 39315 deletions
+6 -1
View File
@@ -13,6 +13,10 @@ build/
# If you're building an application, you may want to check-in your pubspec.lock
pubspec.lock
# Directory created by dartdoc
# If you don't generate documentation locally you can remove this line.
doc/api/
# dotenv environment variables file
.env*
@@ -34,6 +38,7 @@ pubspec.lock
### Flutter ###
# Flutter/Dart/Pub related
**/doc/api/
.fvm/
.pub-cache/
.pub/
@@ -195,4 +200,4 @@ google-services.json
pubspec_overrides.yaml
# Mason
.mason/
.mason/
+44 -50
View File
@@ -17,11 +17,7 @@
-->
<p align="center">
<a href="https://wyattapp.io">
<img width="150px" src="resources/wyatt-campus-logo.png">
</a>
<a href="https://wyatt-studio.fr">
<a href="https://wyatt-studio.fr">
<img width="150px" src="resources/wyatt-studio-logo.png">
</a>
<h1 align="center">Wyatt Packages</h1>
@@ -44,10 +40,9 @@
## About
Here is it a set of [Flutter plugins](https://flutter.io/platform-plugins/) that power up your applications.
Here is a set of [Flutter plugins](https://flutter.io/platform-plugins/) that enhance your applications.
[Flutter](https://flutter.dev) is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. Flutter is used by developers and organizations around the world, and is free
and open source.
[Flutter](https://flutter.dev) is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop using a single codebase. It is used by developers and organizations worldwide and is free and open-source.
---
@@ -61,21 +56,21 @@ git clone ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git
### Prerequisite
- [Flutter](https://github.com/flutter/flutter).
1. [Flutter](https://github.com/flutter/flutter). It is a UI toolkit developed by Google for building beautiful and natively compiled applications for mobile, web, and desktop from a single codebase.
- [Melos](https://github.com/invertase/melos). Used to manage Dart projects with multiple packages.
2. [Melos](https://github.com/invertase/melos). Melos is a tool that helps in managing Dart projects that have multiple packages. It can be installed using the following command:
```shell
dart pub global activate melos
```
- [Mason](https://github.com/felangel/mason). Used for code generation.
3. [Mason](https://github.com/felangel/mason). Mason is used for code generation purposes. It can be installed by running the following command:
```shell
dart pub global activate mason_cli
```
- [Lcov](https://github.com/linux-test-project/lcov). Used to generate coverage data.
4. [Lcov](https://github.com/linux-test-project/lcov). Lcov is a tool used to generate coverage data. It can be installed on macOS by running the following command:
```shell
# on macos
@@ -84,38 +79,39 @@ brew install lcov
- genhtml. Used to convert coverage data into html pages.
After installing all these packages, bootstrap with `melos bs`.
After installation of all these packages, the project can be bootstrapped using the command `melos bs`.
### Create a new package
Create a new package in `packages/` folder.
To create a new package in the packages/ folder, run the following command in the terminal:
```shell
mason make wyatt_package --package_name wyatt_<name> --description A new Wyatt package --flutter_only false
```
Then bootstrap project with `melos bs` command.
The <name> variable in the above command is important and must be clear and understandable.
After creating the package, bootstrap the project with the `melos bs` command.
#### Naming
In the previous instructions `<name>` variable is important.
It have to be clear and intelligible.
You **MUST** use underscores.
1. You must use underscores in the name.
2. You must use the wyatt prefix for the package name.
3. You must name the example with a specific name.
You **MUST** use `wyatt` prefix for package.
For example, if the name is "CRUD BLOC," the following naming conventions should be used:
You **MUST** name example with specific name.
For example, if name is CRUD BLOC
- name will be crud_bloc
- so the package will be: `wyatt_crud_bloc`
- and the example will be: `crud_bloc_example`
1. name: crud_bloc
2. package name: wyatt_crud_bloc
3. example name: crud_bloc_example
### Create issues
Add the issues directly related to what you want to develop and label them correctly.
Create an issue for each specific feature or task you want to work on and label it correctly using the following format:
```
Type(scope): issue.
@@ -128,18 +124,18 @@ For example, on notification bloc package :
### Branches
Master is protected. You can't push on it. Please develop your feature on another branch. The name of your branch has to match with the issue opened.
The master branch is protected and cannot be pushed to directly. Please create a separate branch for each feature or task, with a name that corresponds to the related issue. The branch name should follow this format:
`type(scope):issue`
Example :
Issue :
For the issue:
- `Feature(notification_bloc): add firebase messaging data source.`
Branch related to this issue :
The related branch should be named:
- `feature(notification_bloc)/add_firebase_messaging_data_source`
- `notification_bloc/feat/add_firebase_messaging_data_source`
### Commits
@@ -163,12 +159,11 @@ Some examples :
- `docs: update readme.` = update **this** readme file.
- `fix(crud)!: fix bug in awesome() function. (#32)` = fix a bug, `!` is important and indicate `BREAKING CHANGES` linked with the 32nd issue.
When you have finished developing, and are ready to close the issue, close it via your commit :
When you have completed your development work and are ready to resolve the related issue, you can close it via your commit message by including (close #issue_number). For example:
`feat(auth): add AWS support. (close #31)`
Note that your issue will be close after merging on master.
Before closing the issue, please check tests and update coverage. You might run :
```shell
feat(auth): add AWS support. (close #31)
```
```shell
melos run test:all # this will run all tests in this project
@@ -179,45 +174,44 @@ melos run publish:validate # this will run a validation before publish packages
melos run publish # this will publish packages
```
> Note that only modified package will be verified and published.
Please note that the issue will only be closed after it has been merged into the master branch. Before closing the issue, it is important to verify that all tests have been run and that coverage has been updated.
#### Merge your work
After closing your issue, some work may have been done on master in the meantime. To keep a clean git history, please rebase before opening a change request.
When you have completed your work and closed the related issue, it's possible that some changes may have been made to the master branch in the meantime. To maintain a clean Git history, it's recommended to rebase before creating a change request (pull request).
Two situations :
- You have not yet created your branch and have committed locally :
- You haven't created a branch yet and have made local commits:
```shell
git pull --rebase
```
- You are already working on your branch :
- You are already working on a branch:
```shell
git rebase -i master
```
If possible, please use `--fixup` on your commit in interactive rebase.
It's recommended to use the `--fixup` option during the interactive rebase to keep the Git history clean.
Then, opend your PR, get the necessary approval and merge your work. Then you're done ✅.
Once you have rebased, you can create a pull request, receive the necessary approvals, and then merge your work. And with that, you're done! 🎉
#### Update version.
Once your work is on the master, you can update your package version. Please filter packages to update only your package. `--scope` is used to do it.
For example, after merging changes on `wyatt_otification_bloc` package, you might run :
When your work has been merged into the master branch, it's time to update the package version. To update only your specific package, use the --scope option. For example, after merging changes into the `wyatt_notification_bloc` package, you can run the following command:
```shell
melos version --scope="*wyatt_notification_bloc*"
```
In fact, melos will filter all packages that match the `wyatt_notification_block` pattern.
This will filter all packages that match the `wyatt_notification_bloc` pattern and update only that package.
You can update check all packages tests by running :
You can then verify that all packages and their tests are working correctly by running:
```shell
melos run test
melos run test:all
```
#### Publish your package
@@ -265,14 +259,14 @@ Here you can change `package name` and `package version`.
---
## Status
![Status: Experimental](https://img.shields.io/badge/Status-WIP-red?style=flat-square)
This repository is maintained by Wyatt Studio but work is in progress.
## Simple work flow diagramm
To sum up, here a simple work flow diagramm.
![Dev Wokflow](doc/workflow.svg)
## Status
![Status: Experimental](https://img.shields.io/badge/Status-WIP-red?style=flat-square)
This repository is maintained by Wyatt Studio but work is in progress.
@@ -23,6 +23,7 @@
# Flutter/Dart/Pub related
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
/pubspec.lock
**/doc/api/
.dart_tool/
.packages
build/
+30 -186
View File
@@ -1,5 +1,5 @@
<!--
* Copyright (C) 2023 WYATT GROUP
* Copyright (C) 2022 WYATT GROUP
* Please see the AUTHORS file for details.
* This program is free software: you can redistribute it and/or modify
@@ -7,7 +7,7 @@
* the Free Software Foundation, either version 3 of the License, or
* any later version.
* This program is distributed in the hope that it will be useful,
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
@@ -19,7 +19,9 @@
# Flutter - Authentication BLoC
<p align="left">
<a href="https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis"><img src="https://img.shields.io/badge/Style-Wyatt%20Analysis-blue.svg?style=flat-square" alt="Style: Wyatt Analysis" /></a>
<a href="https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis">
<img src="https://img.shields.io/badge/Style-Wyatt%20Analysis-blue.svg?style=flat-square" alt="Style: Wyatt Analysis" />
</a>
<img src="https://img.shields.io/badge/SDK-Flutter-blue?style=flat-square" alt="SDK: Flutter" />
</p>
@@ -27,195 +29,37 @@ Authentication Bloc for Flutter.
## Features
* 🧐 Wyatt Architecture
* 🧱 Entities
- Account -> Contains account information from provider.
- Session -> Contains account and associated data retrieved from an external source.
- AuthenticationChangeEvent -> Describes an event in authentication change (sign in, sign up, sign out, etc...)
- SessionWrapper -> Contains latest authentication change event and session.
* 🔑 Powerful and secured authentication repository
* 🔥 Multiple data sources
- Mock
- Firebase
* 🧊 Cubits, why make it complicated when you can make it simple?
- Goes to the essential.
* 📐 Consistent
- Every class have same naming convention
* 🧪 Tested
* 📚 Documented: [available here](./doc/api/index.md)
- Wyatt Architecture
- Entities:
- Account : AccountModel -> Contains account information from provider
- AccountWrapper : AccountWrapperModel -> Contains account and extra data.
- Data Sources:
- Local:
- Cached Authentication Data : AuthenticationCacheDataSourceImpl -> Provides a cache implementation
- Remote:
- Remote Authentication Data : AuthenticationFirebaseDataSourceImpl -> Provides a proxy to FirebaseAuth
- Repositories:
- AuthenticationRepository : AuthenticationRepositoryImpl -> Provides all authentication methods
- Features:
- Authentication:
- AuthenticationBuilder : widget to build reactive view from authentication state
- AuthenticationCubit : tracks every auth changes, have sign out capability.
- SignUp:
- SignUpCubit: implementation of a FormDataCubit from `wyatt_form_bloc` for the sign up
- SignIn:
- SignUpCubit: implementation of a FormDataCubit from `wyatt_form_bloc` for the sign in
- Consistent
* Every class have same naming convention
- Tested
## Getting started
Simply add `wyatt_authentication_bloc` in `pubspec.yaml` , then
Simply add `wyatt_authentication_bloc` in `pubspec.yaml`, then
```dart
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
```
### Data source
## Usage
The first step is to provide a data source.
```dart
getIt.registerLazySingleton<AuthenticationRemoteDataSource<int>>(
() => AuthenticationFirebaseDataSourceImpl<int>(
firebaseAuth: FirebaseAuth.instance,
googleSignIn:
GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)),
);
```
> Here we use GetIt (see example project)
### Repository
Then you can configure your repository.
```dart
final AuthenticationRepository<int> authenticationRepository = AuthenticationRepositoryImpl(
authenticationRemoteDataSource:
getIt<AuthenticationRemoteDataSource<int>>(),
customPasswordValidator: const CustomPassword.pure(),
extraSignUpInputs: [
FormInput(
AuthFormField.confirmPassword,
const ConfirmedPassword.pure(),
metadata: const FormInputMetadata<void>(export: false),
),
],
);
```
> Here we pass some extra inputs for the sign up, and a custom password validator.
### Cubits
It is necessary to implement each cubit. Don't panic, most of the work is already done 😊 you just have to customize the logic of these.
In each of these cubits it is necessary to overload the various callbacks.
> Here the associated data `Data` is a `int`
#### Authentication
In the authentication are managed, the refresh, the deletion of account or the disconnection.
```dart
class ExampleAuthenticationCubit extends AuthenticationCubit<int> {
ExampleAuthenticationCubit({required super.authenticationRepository});
@override
FutureOrResult<int?> onReauthenticate(Result<Account, AppException> result) async {
// TODO
}
@override
FutureOrResult<int?> onRefresh(Result<Account, AppException> result) {
// TODO
}
@override
FutureOrResult<int?> onSignInFromCache(SessionWrapper<int> wrapper) {
// TODO
}
@override
FutureOrResult<void> onSignOut() {
// TODO
}
@override
FutureOrResult<void> onDelete() {
// TODO
}
}
```
#### Sign Up
```dart
class ExampleSignUpCubit extends SignUpCubit<int> {
ExampleSignUpCubit({
required super.authenticationRepository,
});
@override
FutureOrResult<int?> onSignUpWithEmailAndPassword(Result<Account, AppException> result, WyattForm form) async {
// TODO
}
}
```
#### Sign In
```dart
class ExampleSignInCubit extends SignInCubit<int> {
ExampleSignInCubit({
required super.authenticationRepository,
});
@override
FutureOrResult<int?> onSignInWithEmailAndPassword(Result<Account, AppException> result, WyattForm form) {
// TODO
}
@override
FutureOrResult<int?> onSignInAnonymously(Result<Account, AppException> result, WyattForm form) {
// TODO
}
@override
FutureOrResult<int?> onSignInWithGoogle(Result<Account, AppException> result, WyattForm form) {
// TODO
}
}
```
After setting up all these cubits you can provide them in the application. And that's it!
```dart
BlocProvider<SignUpCubit<int>>(
create: (_) => ExampleSignUpCubit(
authenticationRepository: authenticationRepository,
),
),
BlocProvider<SignInCubit<int>>(
create: (_) => ExampleSignInCubit(
authenticationRepository: authenticationRepository,
),
),
```
### Widgets
Widgets are provided to make your life easier. Starting with the `AuthenticationBuilder` which allows you to build according to the authentication state.
```dart
AuthenticationBuilder<int>(
authenticated: (context, sessionWrapper) => Text(
'Logged as ${sessionWrapper.session?.account.email} | GeneratedId is ${sessionWrapper.session?.data}'),
unauthenticated: (context) =>
const Text('Not logged (unauthenticated)'),
unknown: (context) => const Text('Not logged (unknown)'),
),
```
A `BuildContext` extension is also available to access certain attributes more quickly.
```dart
Text('Home | ${context.account<AuthenticationCubit<int>, int>()?.email}'),
```
Listeners are used to listen to the status of the sign in and sign up forms.
```dart
return SignInListener<int>(
onError: (context, status, errorMessage) => ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(
SnackBar(content: Text(errorMessage ?? 'Sign In Failure')),
),
child: ...
);
```
// TODO
@@ -1,6 +0,0 @@
# 404
Oops, something's gone wrong :-(
You've tried to visit a page that doesn't exist. Luckily this site has other
[pages](index.md).
@@ -1 +0,0 @@
[]
File diff suppressed because one or more lines are too long
@@ -1,214 +0,0 @@
# wyatt_authentication_bloc - Dart API docs
<!--
* Copyright (C) 2023 WYATT GROUP
* Please see the AUTHORS file for details.
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<h1 id="flutter---authentication-bloc">Flutter - Authentication BLoC</h1><p align="left">
<a href="https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis"><img src="https://img.shields.io/badge/Style-Wyatt%20Analysis-blue.svg?style=flat-square" alt="Style: Wyatt Analysis"></a>
<img src="https://img.shields.io/badge/SDK-Flutter-blue?style=flat-square" alt="SDK: Flutter">
</p>
<p>Authentication Bloc for Flutter.</p>
<h2 id="features">Features</h2>
<ul>
<li>🧐 Wyatt Architecture</li>
<li>🧱 Entities
<ul>
<li>Account -&gt; Contains account information from provider.</li>
<li>Session -&gt; Contains account and associated data retrieved from an external source.</li>
<li>AuthenticationChangeEvent -&gt; Describes an event in authentication change (sign in, sign up, sign out, etc...)</li>
<li>SessionWrapper -&gt; Contains latest authentication change event and session.</li>
</ul>
</li>
<li>🔑 Powerful and secured authentication repository</li>
<li>🔥 Multiple data sources
<ul>
<li>Mock</li>
<li>Firebase</li>
</ul>
</li>
<li>🧊 Cubits, why make it complicated when you can make it simple?
<ul>
<li>Goes to the essential.</li>
</ul>
</li>
<li>📐 Consistent
<ul>
<li>Every class have same naming convention</li>
</ul>
</li>
<li>🧪 Tested</li>
<li>📚 Documented: <a href="./doc/api/index.md">available here</a></li>
</ul>
<h2 id="getting-started">Getting started</h2>
<p>Simply add <code>wyatt_authentication_bloc</code> in <code>pubspec.yaml</code> , then</p>
<pre class="language-dart"><code class="language-dart">import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
</code></pre>
<h3 id="data-source">Data source</h3>
<p>The first step is to provide a data source.</p>
<pre class="language-dart"><code class="language-dart">getIt.registerLazySingleton&lt;AuthenticationRemoteDataSource&lt;int&gt;&gt;(
() =&gt; AuthenticationFirebaseDataSourceImpl&lt;int&gt;(
firebaseAuth: FirebaseAuth.instance,
googleSignIn:
GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)),
);
</code></pre>
<blockquote>
<p>Here we use GetIt (see example project)</p>
</blockquote>
<h3 id="repository">Repository</h3>
<p>Then you can configure your repository.</p>
<pre class="language-dart"><code class="language-dart">final AuthenticationRepository&lt;int&gt; authenticationRepository = AuthenticationRepositoryImpl(
authenticationRemoteDataSource:
getIt&lt;AuthenticationRemoteDataSource&lt;int&gt;&gt;(),
customPasswordValidator: const CustomPassword.pure(),
extraSignUpInputs: [
FormInput(
AuthFormField.confirmPassword,
const ConfirmedPassword.pure(),
metadata: const FormInputMetadata&lt;void&gt;(export: false),
),
],
);
</code></pre>
<blockquote>
<p>Here we pass some extra inputs for the sign up, and a custom password validator.</p>
</blockquote>
<h3 id="cubits">Cubits</h3>
<p>It is necessary to implement each cubit. Don't panic, most of the work is already done 😊 you just have to customize the logic of these.</p>
<p>In each of these cubits it is necessary to overload the various callbacks.</p>
<blockquote>
<p>Here the associated data <code>Data</code> is a <code>int</code></p>
</blockquote>
<h4 id="authentication">Authentication</h4>
<p>In the authentication are managed, the refresh, the deletion of account or the disconnection.</p>
<pre class="language-dart"><code class="language-dart">class ExampleAuthenticationCubit extends AuthenticationCubit&lt;int&gt; {
ExampleAuthenticationCubit({required super.authenticationRepository});
@override
FutureOrResult&lt;int?&gt; onReauthenticate(Result&lt;Account, AppException&gt; result) async {
// TODO
}
@override
FutureOrResult&lt;int?&gt; onRefresh(Result&lt;Account, AppException&gt; result) {
// TODO
}
@override
FutureOrResult&lt;int?&gt; onSignInFromCache(SessionWrapper&lt;int&gt; wrapper) {
// TODO
}
@override
FutureOrResult&lt;void&gt; onSignOut() {
// TODO
}
@override
FutureOrResult&lt;void&gt; onDelete() {
// TODO
}
}
</code></pre>
<h4 id="sign-up">Sign Up</h4>
<pre class="language-dart"><code class="language-dart">class ExampleSignUpCubit extends SignUpCubit&lt;int&gt; {
ExampleSignUpCubit({
required super.authenticationRepository,
});
@override
FutureOrResult&lt;int?&gt; onSignUpWithEmailAndPassword(Result&lt;Account, AppException&gt; result, WyattForm form) async {
// TODO
}
}
</code></pre>
<h4 id="sign-in">Sign In</h4>
<pre class="language-dart"><code class="language-dart">class ExampleSignInCubit extends SignInCubit&lt;int&gt; {
ExampleSignInCubit({
required super.authenticationRepository,
});
@override
FutureOrResult&lt;int?&gt; onSignInWithEmailAndPassword(Result&lt;Account, AppException&gt; result, WyattForm form) {
// TODO
}
@override
FutureOrResult&lt;int?&gt; onSignInAnonymously(Result&lt;Account, AppException&gt; result, WyattForm form) {
// TODO
}
@override
FutureOrResult&lt;int?&gt; onSignInWithGoogle(Result&lt;Account, AppException&gt; result, WyattForm form) {
// TODO
}
}
</code></pre>
<p>After setting up all these cubits you can provide them in the application. And that's it!</p>
<pre class="language-dart"><code class="language-dart">BlocProvider&lt;SignUpCubit&lt;int&gt;&gt;(
create: (_) =&gt; ExampleSignUpCubit(
authenticationRepository: authenticationRepository,
),
),
BlocProvider&lt;SignInCubit&lt;int&gt;&gt;(
create: (_) =&gt; ExampleSignInCubit(
authenticationRepository: authenticationRepository,
),
),
</code></pre>
<h3 id="widgets">Widgets</h3>
<p>Widgets are provided to make your life easier. Starting with the <code>AuthenticationBuilder</code> which allows you to build according to the authentication state.</p>
<pre class="language-dart"><code class="language-dart">AuthenticationBuilder&lt;int&gt;(
authenticated: (context, sessionWrapper) =&gt; Text(
'Logged as ${sessionWrapper.session?.account.email} | GeneratedId is ${sessionWrapper.session?.data}'),
unauthenticated: (context) =&gt;
const Text('Not logged (unauthenticated)'),
unknown: (context) =&gt; const Text('Not logged (unknown)'),
),
</code></pre>
<p>A <code>BuildContext</code> extension is also available to access certain attributes more quickly.</p>
<pre class="language-dart"><code class="language-dart">Text('Home | ${context.account&lt;AuthenticationCubit&lt;int&gt;, int&gt;()?.email}'),
</code></pre>
<p>Listeners are used to listen to the status of the sign in and sign up forms.</p>
<pre class="language-dart"><code class="language-dart">return SignInListener&lt;int&gt;(
onError: (context, status, errorMessage) =&gt; ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(
SnackBar(content: Text(errorMessage ?? 'Sign In Failure')),
),
child: ...
);
</code></pre>
## Libraries
##### [wyatt_authentication_bloc](wyatt_authentication_bloc/wyatt_authentication_bloc-library.md)
An authentication library for BLoC.
@@ -1,6 +0,0 @@
# 404
Oops, something's gone wrong :-(
You've tried to visit a page that doesn't exist. Luckily this site has other
[pages](index.md).
@@ -1,237 +0,0 @@
# Account class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Represents a user <a href="../wyatt_authentication_bloc/Account-class.md">Account</a> in the
various identity provisioning systems.</p>
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [Equatable](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable-class.html)
- Account
**Implementers**
- [AccountModel](../wyatt_authentication_bloc/AccountModel-class.md)
## Constructors
[Account](../wyatt_authentication_bloc/Account/Account.md) ({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) id, required [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isAnonymous, required [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) emailVerified, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) providerId, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? email, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? phoneNumber, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? photoURL, [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? creationTime, [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? lastSignInTime, [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isNewUser, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? accessToken, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? refreshToken})
_const_
## Properties
##### [accessToken](../wyatt_authentication_bloc/Account/accessToken.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
The user access token
_<span class="feature">final</span>_
##### [creationTime](../wyatt_authentication_bloc/Account/creationTime.md) &#8594; [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)?
Returns the users account creation time.
_<span class="feature">final</span>_
##### [email](../wyatt_authentication_bloc/Account/email.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
The users email address.
_<span class="feature">final</span>_
##### [emailVerified](../wyatt_authentication_bloc/Account/emailVerified.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
Returns whether the users email address has been verified.
_<span class="feature">final</span>_
##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [id](../wyatt_authentication_bloc/Account/id.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
The user's unique ID.
_<span class="feature">final</span>_
##### [isAnonymous](../wyatt_authentication_bloc/Account/isAnonymous.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
Returns whether the user is a anonymous.
_<span class="feature">final</span>_
##### [isNewUser](../wyatt_authentication_bloc/Account/isNewUser.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)?
Whether the user account has been recently created.
_<span class="feature">final</span>_
##### [lastSignInTime](../wyatt_authentication_bloc/Account/lastSignInTime.md) &#8594; [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)?
When the user last signed in as dictated by the server clock.
_<span class="feature">final</span>_
##### [phoneNumber](../wyatt_authentication_bloc/Account/phoneNumber.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
Returns the users phone number.
_<span class="feature">final</span>_
##### [photoURL](../wyatt_authentication_bloc/Account/photoURL.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
Returns a photo URL for the user.
_<span class="feature">final</span>_
##### [props](../wyatt_authentication_bloc/Account/props.md) &#8594; [List](https://api.flutter.dev/flutter/dart-core/List-class.html)&lt;[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?>
The list of properties that will be used to determine whether
two instances are equal.
_<span class="feature">read-only</span><span class="feature">override</span>_
##### [providerId](../wyatt_authentication_bloc/Account/providerId.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
The provider ID for the user.
_<span class="feature">final</span>_
##### [refreshToken](../wyatt_authentication_bloc/Account/refreshToken.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
The user refresh token
_<span class="feature">final</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [stringify](../wyatt_authentication_bloc/Account/stringify.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
If set to <code>true</code>, the <a href="https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html">toString</a> method will be overridden to output
this instance's <a href="../wyatt_authentication_bloc/Account/props.md">props</a>.
_<span class="feature">read-only</span><span class="feature">override</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,43 +0,0 @@
# Account constructor
*[<Null safety>](https://dart.dev/null-safety)*
const
Account({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) id, required [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isAnonymous, required [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) emailVerified, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) providerId, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? email, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? phoneNumber, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? photoURL, [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? creationTime, [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? lastSignInTime, [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isNewUser, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? accessToken, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? refreshToken})
## Implementation
```dart
const Account({
required this.id,
required this.isAnonymous,
required this.emailVerified,
required this.providerId,
this.email,
this.phoneNumber,
this.photoURL,
this.creationTime,
this.lastSignInTime,
this.isNewUser,
this.accessToken,
this.refreshToken,
});
```
@@ -1,34 +0,0 @@
# accessToken property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? accessToken
_<span class="feature">final</span>_
<p>The user access token</p>
## Implementation
```dart
final String? accessToken;
```
@@ -1,35 +0,0 @@
# creationTime property
*[<Null safety>](https://dart.dev/null-safety)*
[DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? creationTime
_<span class="feature">final</span>_
<p>Returns the users account creation time.</p>
<p>When this account was created as dictated by the server clock.</p>
## Implementation
```dart
final DateTime? creationTime;
```
@@ -1,35 +0,0 @@
# email property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? email
_<span class="feature">final</span>_
<p>The users email address.</p>
<p>Will be <code>null</code> if signing in anonymously.</p>
## Implementation
```dart
final String? email;
```
@@ -1,35 +0,0 @@
# emailVerified property
*[<Null safety>](https://dart.dev/null-safety)*
[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) emailVerified
_<span class="feature">final</span>_
<p>Returns whether the users email address has been verified.</p>
<p>To send a verification email, see <code>SendEmailVerification</code>.</p>
## Implementation
```dart
final bool emailVerified;
```
@@ -1,34 +0,0 @@
# id property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) id
_<span class="feature">final</span>_
<p>The user's unique ID.</p>
## Implementation
```dart
final String id;
```
@@ -1,34 +0,0 @@
# isAnonymous property
*[<Null safety>](https://dart.dev/null-safety)*
[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isAnonymous
_<span class="feature">final</span>_
<p>Returns whether the user is a anonymous.</p>
## Implementation
```dart
final bool isAnonymous;
```
@@ -1,34 +0,0 @@
# isNewUser property
*[<Null safety>](https://dart.dev/null-safety)*
[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isNewUser
_<span class="feature">final</span>_
<p>Whether the user account has been recently created.</p>
## Implementation
```dart
final bool? isNewUser;
```
@@ -1,34 +0,0 @@
# lastSignInTime property
*[<Null safety>](https://dart.dev/null-safety)*
[DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? lastSignInTime
_<span class="feature">final</span>_
<p>When the user last signed in as dictated by the server clock.</p>
## Implementation
```dart
final DateTime? lastSignInTime;
```
@@ -1,36 +0,0 @@
# phoneNumber property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? phoneNumber
_<span class="feature">final</span>_
<p>Returns the users phone number.</p>
<p>This property will be <code>null</code> if the user has not signed in or been has
their phone number linked.</p>
## Implementation
```dart
final String? phoneNumber;
```
@@ -1,36 +0,0 @@
# photoURL property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? photoURL
_<span class="feature">final</span>_
<p>Returns a photo URL for the user.</p>
<p>This property will be populated if the user has signed in or been linked
with a 3rd party OAuth provider (such as Google).</p>
## Implementation
```dart
final String? photoURL;
```
@@ -1,55 +0,0 @@
# props property
*[<Null safety>](https://dart.dev/null-safety)*
**Annotations**
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[List](https://api.flutter.dev/flutter/dart-core/List-class.html)&lt;[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props
_<span class="feature">override</span>_
<p>The list of properties that will be used to determine whether
two instances are equal.</p>
## Implementation
```dart
@override
List<Object?> get props => [
id,
isAnonymous,
email,
emailVerified,
phoneNumber,
photoURL,
creationTime,
lastSignInTime,
providerId,
isNewUser,
accessToken,
refreshToken,
];
```
@@ -1,34 +0,0 @@
# providerId property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) providerId
_<span class="feature">final</span>_
<p>The provider ID for the user.</p>
## Implementation
```dart
final String providerId;
```
@@ -1,34 +0,0 @@
# refreshToken property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? refreshToken
_<span class="feature">final</span>_
<p>The user refresh token</p>
## Implementation
```dart
final String? refreshToken;
```
@@ -1,47 +0,0 @@
# stringify property
*[<Null safety>](https://dart.dev/null-safety)*
**Annotations**
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) stringify
_<span class="feature">override</span>_
<p>If set to <code>true</code>, the <a href="https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html">toString</a> method will be overridden to output
this instance's <a href="../../wyatt_authentication_bloc/Account/props.md">props</a>.</p>
<p>A global default value for <a href="../../wyatt_authentication_bloc/Account/stringify.md">stringify</a> can be set using
<code>EquatableConfig.stringify</code>.</p>
<p>If this instance's <a href="../../wyatt_authentication_bloc/Account/stringify.md">stringify</a> is set to null, the value of
<code>EquatableConfig.stringify</code> will be used instead. This defaults to
<code>false</code>.</p>
## Implementation
```dart
@override
bool get stringify => true;
```
@@ -1,247 +0,0 @@
# AccountModel class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Account Model to parse Firebase User data</p>
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [Equatable](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable-class.html)
- [Account](../wyatt_authentication_bloc/Account-class.md)
- AccountModel
## Constructors
[AccountModel.fromFirebaseUser](../wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md) ([User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)? user, {[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? accessToken})
_factory_
[AccountModel.fromFirebaseUserCredential](../wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md) ([UserCredential](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/UserCredential-class.html)? userCredential)
_factory_
## Properties
##### [accessToken](../wyatt_authentication_bloc/Account/accessToken.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
The user access token
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [creationTime](../wyatt_authentication_bloc/Account/creationTime.md) &#8594; [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)?
Returns the users account creation time.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [email](../wyatt_authentication_bloc/Account/email.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
The users email address.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [emailVerified](../wyatt_authentication_bloc/Account/emailVerified.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
Returns whether the users email address has been verified.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [id](../wyatt_authentication_bloc/Account/id.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
The user's unique ID.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [isAnonymous](../wyatt_authentication_bloc/Account/isAnonymous.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
Returns whether the user is a anonymous.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [isNewUser](../wyatt_authentication_bloc/Account/isNewUser.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)?
Whether the user account has been recently created.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [lastSignInTime](../wyatt_authentication_bloc/Account/lastSignInTime.md) &#8594; [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)?
When the user last signed in as dictated by the server clock.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [phoneNumber](../wyatt_authentication_bloc/Account/phoneNumber.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
Returns the users phone number.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [photoURL](../wyatt_authentication_bloc/Account/photoURL.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
Returns a photo URL for the user.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [props](../wyatt_authentication_bloc/Account/props.md) &#8594; [List](https://api.flutter.dev/flutter/dart-core/List-class.html)&lt;[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?>
The list of properties that will be used to determine whether
two instances are equal.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [providerId](../wyatt_authentication_bloc/Account/providerId.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
The provider ID for the user.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [refreshToken](../wyatt_authentication_bloc/AccountModel/refreshToken.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)?
The user refresh token
_<span class="feature">read-only</span><span class="feature">override</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [stringify](../wyatt_authentication_bloc/Account/stringify.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
If set to <code>true</code>, the <a href="https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html">toString</a> method will be overridden to output
this instance's <a href="../wyatt_authentication_bloc/Account/props.md">props</a>.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [user](../wyatt_authentication_bloc/AccountModel/user.md) &#8594; [User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)?
_<span class="feature">final</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,51 +0,0 @@
# AccountModel.fromFirebaseUser constructor
*[<Null safety>](https://dart.dev/null-safety)*
AccountModel.fromFirebaseUser([User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)? user, {[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? accessToken})
## Implementation
```dart
factory AccountModel.fromFirebaseUser(User? user, {String? accessToken}) {
if (user != null) {
final providerId =
(user.providerData.isEmpty) ? '' : user.providerData.first.providerId;
return AccountModel._(
user: user,
id: user.uid,
emailVerified: user.emailVerified,
isAnonymous: user.isAnonymous,
providerId: providerId,
creationTime: user.metadata.creationTime,
lastSignInTime: user.metadata.lastSignInTime,
isNewUser: false,
email: user.email,
phoneNumber: user.phoneNumber,
photoURL: user.photoURL,
accessToken: accessToken,
);
} else {
throw ModelParsingFailureFirebase('null-user', 'User cannot be null');
}
}
```
@@ -1,54 +0,0 @@
# AccountModel.fromFirebaseUserCredential constructor
*[<Null safety>](https://dart.dev/null-safety)*
AccountModel.fromFirebaseUserCredential([UserCredential](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/UserCredential-class.html)? userCredential)
## Implementation
```dart
factory AccountModel.fromFirebaseUserCredential(
UserCredential? userCredential,
) {
final user = userCredential?.user;
if (user != null) {
final providerId =
(user.providerData.isEmpty) ? '' : user.providerData.first.providerId;
return AccountModel._(
user: user,
id: user.uid,
emailVerified: user.emailVerified,
isAnonymous: user.isAnonymous,
providerId: providerId,
creationTime: user.metadata.creationTime,
lastSignInTime: user.metadata.lastSignInTime,
isNewUser: userCredential?.additionalUserInfo?.isNewUser,
email: user.email,
phoneNumber: user.phoneNumber,
photoURL: user.photoURL,
accessToken: userCredential?.credential?.accessToken,
);
} else {
throw ModelParsingFailureFirebase('null-user', 'User cannot be null');
}
}
```
@@ -1,41 +0,0 @@
# refreshToken property
*[<Null safety>](https://dart.dev/null-safety)*
**Annotations**
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? refreshToken
_<span class="feature">override</span>_
<p>The user refresh token</p>
## Implementation
```dart
@override
String? get refreshToken => user?.refreshToken;
```
@@ -1,33 +0,0 @@
# user property
*[<Null safety>](https://dart.dev/null-safety)*
[User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)? user
_<span class="feature">final</span>_
## Implementation
```dart
final User? user;
```
@@ -1,137 +0,0 @@
# ApplyActionCodeFailureFirebase class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Thrown if during the apply action code process if a failure occurs.</p>
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md)
- [ApplyActionCodeFailureInterface](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md)
- ApplyActionCodeFailureFirebase
## Constructors
[ApplyActionCodeFailureFirebase](../wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md) ([[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? msg])
[ApplyActionCodeFailureFirebase.fromCode](../wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code)
## Properties
##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) &#8596; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read / write</span><span class="feature">inherited</span>_
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) &#8596; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read / write</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,49 +0,0 @@
# ApplyActionCodeFailureFirebase.fromCode constructor
*[<Null safety>](https://dart.dev/null-safety)*
ApplyActionCodeFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code)
## Implementation
```dart
ApplyActionCodeFailureFirebase.fromCode(String code) : super.fromCode(code) {
switch (code) {
case 'expired-action-code':
msg = 'Action code has expired.';
break;
case 'invalid-action-code':
msg = 'Action code is invalid.';
break;
case 'user-disabled':
msg = 'This user has been disabled. Please contact support for help.';
break;
case 'user-not-found':
msg = 'Email is not found, please create an account.';
break;
default:
this.code = 'unknown';
msg = 'An unknown error occurred.';
}
}
```
@@ -1,31 +0,0 @@
# ApplyActionCodeFailureFirebase constructor
*[<Null safety>](https://dart.dev/null-safety)*
ApplyActionCodeFailureFirebase([[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? msg])
## Implementation
```dart
ApplyActionCodeFailureFirebase([String? code, String? msg])
: super(code ?? 'unknown', msg ?? 'An unknown error occurred.');
```
@@ -1,139 +0,0 @@
# ApplyActionCodeFailureInterface class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Thrown if during the apply action code process if a failure occurs.</p>
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md)
- ApplyActionCodeFailureInterface
**Implementers**
- [ApplyActionCodeFailureFirebase](../wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md)
## Constructors
[ApplyActionCodeFailureInterface](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg)
Thrown if during the apply action code process if a failure occurs.
[ApplyActionCodeFailureInterface.fromCode](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code)
Thrown if during the apply action code process if a failure occurs.
## Properties
##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) &#8596; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read / write</span><span class="feature">inherited</span>_
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) &#8596; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read / write</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,31 +0,0 @@
# ApplyActionCodeFailureInterface.fromCode constructor
*[<Null safety>](https://dart.dev/null-safety)*
ApplyActionCodeFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code)
<p>Thrown if during the apply action code process if a failure occurs.</p>
## Implementation
```dart
ApplyActionCodeFailureInterface.fromCode(super.code) : super.fromCode();
```
@@ -1,31 +0,0 @@
# ApplyActionCodeFailureInterface constructor
*[<Null safety>](https://dart.dev/null-safety)*
ApplyActionCodeFailureInterface([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg)
<p>Thrown if during the apply action code process if a failure occurs.</p>
## Implementation
```dart
ApplyActionCodeFailureInterface(super.code, super.msg);
```
@@ -1,122 +0,0 @@
# AuthFormField class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Default authentication form fields name</p>
## Constructors
[AuthFormField](../wyatt_authentication_bloc/AuthFormField/AuthFormField.md) ()
## Properties
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
## Constants
##### [confirmPassword](../wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Confirm Password field: <code>wyattConfirmPasswordField</code>
##### [email](../wyatt_authentication_bloc/AuthFormField/email-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Email field: <code>wyattEmailField</code>
##### [password](../wyatt_authentication_bloc/AuthFormField/password-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Password field: <code>wyattPasswordField</code>
@@ -1,25 +0,0 @@
# AuthFormField constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthFormField()
@@ -1,34 +0,0 @@
# confirmPassword constant
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const confirmPassword
<p>Confirm Password field: <code>wyattConfirmPasswordField</code></p>
## Implementation
```dart
static const confirmPassword = 'wyattConfirmPasswordField';
```
@@ -1,34 +0,0 @@
# email constant
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const email
<p>Email field: <code>wyattEmailField</code></p>
## Implementation
```dart
static const email = 'wyattEmailField';
```
@@ -1,34 +0,0 @@
# password constant
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const password
<p>Password field: <code>wyattPasswordField</code></p>
## Implementation
```dart
static const password = 'wyattPasswordField';
```
@@ -1,131 +0,0 @@
# AuthFormName class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Default authentication form name</p>
## Constructors
[AuthFormName](../wyatt_authentication_bloc/AuthFormName/AuthFormName.md) ()
## Properties
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
## Constants
##### [editAccountForm](../wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Edit account form: <code>wyattEditAccountForm</code>
##### [passwordResetForm](../wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Password reset form: <code>wyattPasswordResetForm</code>
##### [signInForm](../wyatt_authentication_bloc/AuthFormName/signInForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Sign In form: <code>wyattSignInForm</code>
##### [signUpForm](../wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Sign Up form: <code>wyattSignUpForm</code>
@@ -1,25 +0,0 @@
# AuthFormName constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthFormName()
@@ -1,34 +0,0 @@
# editAccountForm constant
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const editAccountForm
<p>Edit account form: <code>wyattEditAccountForm</code></p>
## Implementation
```dart
static const String editAccountForm = 'wyattEditAccountForm';
```
@@ -1,34 +0,0 @@
# passwordResetForm constant
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const passwordResetForm
<p>Password reset form: <code>wyattPasswordResetForm</code></p>
## Implementation
```dart
static const String passwordResetForm = 'wyattPasswordResetForm';
```
@@ -1,34 +0,0 @@
# signInForm constant
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const signInForm
<p>Sign In form: <code>wyattSignInForm</code></p>
## Implementation
```dart
static const String signInForm = 'wyattSignInForm';
```
@@ -1,34 +0,0 @@
# signUpForm constant
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const signUpForm
<p>Sign Up form: <code>wyattSignUpForm</code></p>
## Implementation
```dart
static const String signUpForm = 'wyattSignUpForm';
```
@@ -1,216 +0,0 @@
# AuthenticationBuilder&lt;Data> class
*[<Null safety>](https://dart.dev/null-safety)*
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [DiagnosticableTree](https://api.flutter.dev/flutter/foundation/DiagnosticableTree-class.html)
- [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html)
- [StatelessWidget](https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html)
- AuthenticationBuilder
## Constructors
[AuthenticationBuilder](../wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) authenticated([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> sessionWrapper), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) unauthenticated([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) unknown([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key})
_const_
## Properties
##### [authenticated](../wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md) &#8594; [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> sessionWrapper)
_<span class="feature">final</span>_
##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) &#8594; [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)?
Controls how one widget replaces another widget in the tree.
_<span class="feature">final</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [unauthenticated](../wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md) &#8594; [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)
_<span class="feature">final</span>_
##### [unknown](../wyatt_authentication_bloc/AuthenticationBuilder/unknown.md) &#8594; [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)
_<span class="feature">final</span>_
## Methods
##### [build](../wyatt_authentication_bloc/AuthenticationBuilder/build.md)([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html)
Describes the part of the user interface represented by this widget.
_<span class="feature">override</span>_
##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html)
Creates a <a href="https://api.flutter.dev/flutter/widgets/StatelessElement-class.html">StatelessElement</a> to manage this widget's location in the tree.
_<span class="feature">inherited</span>_
##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)&lt;[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)>
Returns a list of <code>DiagnosticsNode</code> objects describing this node's
children.
_<span class="feature">inherited</span>_
##### [debugFillProperties](https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html)([DiagnosticPropertiesBuilder](https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html) properties) void
Add additional properties associated with the node.
_<span class="feature">inherited</span>_
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toDiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html)({[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? name, [DiagnosticsTreeStyle](https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html)? style}) [DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
_<span class="feature">inherited</span>_
##### [toString](https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html)({[DiagnosticLevel](https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html) minLevel = DiagnosticLevel.info}) [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
##### [toStringDeep](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html)({[String](https://api.flutter.dev/flutter/dart-core/String-class.html) prefixLineOne = '', [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? prefixOtherLines, [DiagnosticLevel](https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html) minLevel = DiagnosticLevel.debug}) [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Returns a string representation of this node and its descendants.
_<span class="feature">inherited</span>_
##### [toStringShallow](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html)({[String](https://api.flutter.dev/flutter/dart-core/String-class.html) joiner = ', ', [DiagnosticLevel](https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html) minLevel = DiagnosticLevel.debug}) [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
Returns a one-line detailed description of the object.
_<span class="feature">inherited</span>_
##### [toStringShort](https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A short, textual description of this widget.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,35 +0,0 @@
# AuthenticationBuilder&lt;Data> constructor
*[<Null safety>](https://dart.dev/null-safety)*
const
AuthenticationBuilder&lt;Data>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) authenticated([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> sessionWrapper), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) unauthenticated([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) unknown([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key})
## Implementation
```dart
const AuthenticationBuilder({
required this.authenticated,
required this.unauthenticated,
required this.unknown,
super.key,
});
```
@@ -1,36 +0,0 @@
# authenticated property
*[<Null safety>](https://dart.dev/null-safety)*
[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> sessionWrapper) authenticated
_<span class="feature">final</span>_
## Implementation
```dart
final Widget Function(
BuildContext context,
SessionWrapper<Data> sessionWrapper,
) authenticated;
```
@@ -1,85 +0,0 @@
# build method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) build
([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)
_<span class="feature">override</span>_
<p>Describes the part of the user interface represented by this widget.</p>
<p>The framework calls this method when this widget is inserted into the tree
in a given <a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a> and when the dependencies of this widget change
(e.g., an <a href="https://api.flutter.dev/flutter/widgets/InheritedWidget-class.html">InheritedWidget</a> referenced by this widget changes). This
method can potentially be called in every frame and should not have any side
effects beyond building a widget.</p>
<p>The framework replaces the subtree below this widget with the widget
returned by this method, either by updating the existing subtree or by
removing the subtree and inflating a new subtree, depending on whether the
widget returned by this method can update the root of the existing
subtree, as determined by calling <a href="https://api.flutter.dev/flutter/widgets/Widget/canUpdate.html">Widget.canUpdate</a>.</p>
<p>Typically implementations return a newly created constellation of widgets
that are configured with information from this widget's constructor and
from the given <a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a>.</p>
<p>The given <a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a> contains information about the location in the
tree at which this widget is being built. For example, the context
provides the set of inherited widgets for this location in the tree. A
given widget might be built with multiple different <a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a>
arguments over time if the widget is moved around the tree or if the
widget is inserted into the tree in multiple places at once.</p>
<p>The implementation of this method must only depend on:</p>
<ul>
<li>the fields of the widget, which themselves must not change over time,
and</li>
<li>any ambient state obtained from the <code>context</code> using
<a href="https://api.flutter.dev/flutter/widgets/BuildContext/dependOnInheritedWidgetOfExactType.html">BuildContext.dependOnInheritedWidgetOfExactType</a>.</li>
</ul>
<p>If a widget's <a href="../../wyatt_authentication_bloc/AuthenticationBuilder/build.md">build</a> method is to depend on anything else, use a
<a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a> instead.</p>
<p>See also:</p>
<ul>
<li><a href="https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html">StatelessWidget</a>, which contains the discussion on performance considerations.</li>
</ul>
## Implementation
```dart
@override
Widget build(BuildContext context) =>
BlocBuilder<AuthenticationCubit<Data>, AuthenticationState<Data>>(
builder: (context, state) {
if (state.status == AuthenticationStatus.authenticated) {
if (state.wrapper != null) {
return authenticated(context, state.wrapper!);
} else {
return unauthenticated(context);
}
} else if (state.status == AuthenticationStatus.unauthenticated) {
return unauthenticated(context);
} else {
return unknown(context);
}
},
);
```
@@ -1,33 +0,0 @@
# unauthenticated property
*[<Null safety>](https://dart.dev/null-safety)*
[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) unauthenticated
_<span class="feature">final</span>_
## Implementation
```dart
final Widget Function(BuildContext context) unauthenticated;
```
@@ -1,33 +0,0 @@
# unknown property
*[<Null safety>](https://dart.dev/null-safety)*
[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) unknown
_<span class="feature">final</span>_
## Implementation
```dart
final Widget Function(BuildContext context) unknown;
```
@@ -1,137 +0,0 @@
# AuthenticationChangeEvent class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Represents an event initiated by a change in
the user's authentication status.</p>
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [Equatable](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable-class.html)
- AuthenticationChangeEvent
**Implementers**
- [DeletedEvent](../wyatt_authentication_bloc/DeletedEvent-class.md)
- [ReauthenticatedEvent](../wyatt_authentication_bloc/ReauthenticatedEvent-class.md)
- [RefreshedEvent](../wyatt_authentication_bloc/RefreshedEvent-class.md)
- [SignedInEvent](../wyatt_authentication_bloc/SignedInEvent-class.md)
- [SignedInFromCacheEvent](../wyatt_authentication_bloc/SignedInFromCacheEvent-class.md)
- [SignedOutEvent](../wyatt_authentication_bloc/SignedOutEvent-class.md)
- [SignedUpEvent](../wyatt_authentication_bloc/SignedUpEvent-class.md)
- [UnknownAuthenticationEvent](../wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md)
- [UpdatedEvent](../wyatt_authentication_bloc/UpdatedEvent-class.md)
## Constructors
[AuthenticationChangeEvent](../wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md) ()
_const_
## Properties
##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) &#8594; [List](https://api.flutter.dev/flutter/dart-core/List-class.html)&lt;[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?>
The list of properties that will be used to determine whether
two instances are equal.
_<span class="feature">read-only</span><span class="feature">override</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
If set to <code>true</code>, the <a href="https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html">toString</a> method will be overridden to output
this instance's <a href="../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md">props</a>.
_<span class="feature">read-only</span><span class="feature">override</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,30 +0,0 @@
# AuthenticationChangeEvent constructor
*[<Null safety>](https://dart.dev/null-safety)*
const
AuthenticationChangeEvent()
## Implementation
```dart
const AuthenticationChangeEvent();
```
@@ -1,42 +0,0 @@
# props property
*[<Null safety>](https://dart.dev/null-safety)*
**Annotations**
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[List](https://api.flutter.dev/flutter/dart-core/List-class.html)&lt;[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props
_<span class="feature">override</span>_
<p>The list of properties that will be used to determine whether
two instances are equal.</p>
## Implementation
```dart
@override
List<Object?> get props => [];
```
@@ -1,47 +0,0 @@
# stringify property
*[<Null safety>](https://dart.dev/null-safety)*
**Annotations**
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) stringify
_<span class="feature">override</span>_
<p>If set to <code>true</code>, the <a href="https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/toString.html">toString</a> method will be overridden to output
this instance's <a href="../../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md">props</a>.</p>
<p>A global default value for <a href="../../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md">stringify</a> can be set using
<code>EquatableConfig.stringify</code>.</p>
<p>If this instance's <a href="../../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md">stringify</a> is set to null, the value of
<code>EquatableConfig.stringify</code> will be used instead. This defaults to
<code>false</code>.</p>
## Implementation
```dart
@override
bool get stringify => true;
```
@@ -1,292 +0,0 @@
# AuthenticationCubit&lt;Data> class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Abstract authentication cubit class needs to be implemented in application.</p>
<p>This cubit is in charge of managing the global authentication state of
the application.</p>
<p>Its here you can override every callbacks and add your custom logic.</p>
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)&lt;[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)&lt;Data>>
- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)&lt;[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)&lt;Data>>
- AuthenticationCubit
## Constructors
[AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)&lt;Data> authenticationRepository})
## Properties
##### [authenticationRepository](../wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md) &#8594; [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)&lt;Data>
_<span class="feature">final</span>_
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) &#8594; [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
Whether the bloc is closed.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) &#8594; [AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)&lt;Data>
The current <a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html">state</a>.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) &#8594; [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)&lt;[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)&lt;Data>>
The current <a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html">stream</a> of states.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void
Reports an <code>error</code> which triggers <a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html">onError</a> with an optional <a href="https://api.flutter.dev/flutter/dart-core/StackTrace-class.html">StackTrace</a>.
_<span class="feature">inherited</span>_
##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
Closes the instance.
This method should be called when the instance is no longer needed.
Once <a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html">close</a> is called, the instance can no longer be used.
_<span class="feature">inherited</span>_
##### [currentSession](../wyatt_authentication_bloc/AuthenticationCubit/currentSession.md)() [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data>?
Returns latest session wrapper.
##### [delete](../wyatt_authentication_bloc/AuthenticationCubit/delete.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void>
Delete account.
##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)&lt;Data> state) void
Updates the <code>state</code> to the provided <code>state</code>.
<a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html">emit</a> does nothing if the <code>state</code> being emitted
is equal to the current <code>state</code>.
_<span class="feature">inherited</span>_
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)&lt;[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)&lt;Data>> change) void
Called whenever a <code>change</code> occurs with the given <code>change</code>.
A <code>change</code> occurs when a new <code>state</code> is emitted.
<a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html">onChange</a> is called before the <code>state</code> of the <code>cubit</code> is updated.
<a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html">onChange</a> is a great spot to add logging/analytics for a specific <code>cubit</code>.
_<span class="feature">inherited</span>_
##### [onDelete](../wyatt_authentication_bloc/AuthenticationCubit/onDelete.md)() FutureOrResult&lt;void>
This callback is triggered when the current account is deleted from
the remote.
##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void
Called whenever an <code>error</code> occurs and notifies <a href="https://pub.dev/documentation/bloc/8.1.0/bloc/BlocObserver/onError.html">BlocObserver.onError</a>.
_<span class="feature">inherited</span>_
##### [onReauthenticate](../wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md)(Result&lt;[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result) FutureOrResult&lt;Data?>
This callback is triggered when the account is re-authenticated
##### [onRefresh](../wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md)(Result&lt;[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result) FutureOrResult&lt;Data?>
This callback is triggered when the account is refreshed.
##### [onSignInFromCache](../wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> wrapper) FutureOrResult&lt;Data?>
This callback is triggered when the user is automaticcaly logged in from
the cache.
##### [onSignOut](../wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md)() FutureOrResult&lt;void>
This callback is triggered when the user is logged out.
##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void>
Some security-sensitive actions—such as deleting an account,
setting a primary email address, and changing a password—require that
the user has recently signed in.
##### [refresh](../wyatt_authentication_bloc/AuthenticationCubit/refresh.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void>
Refreshes the current user, if signed in.
##### [signOut](../wyatt_authentication_bloc/AuthenticationCubit/signOut.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void>
Signs out the current user.
It also clears the cache and the associated data.
##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,34 +0,0 @@
# AuthenticationCubit&lt;Data> constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthenticationCubit&lt;Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)&lt;Data> authenticationRepository})
## Implementation
```dart
AuthenticationCubit({
required this.authenticationRepository,
}) : super(const AuthenticationState.unknown()) {
_listenForAuthenticationChanges();
}
```
@@ -1,33 +0,0 @@
# authenticationRepository property
*[<Null safety>](https://dart.dev/null-safety)*
[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)&lt;Data> authenticationRepository
_<span class="feature">final</span>_
## Implementation
```dart
final AuthenticationRepository<Data> authenticationRepository;
```
@@ -1,37 +0,0 @@
# currentSession method
*[<Null safety>](https://dart.dev/null-safety)*
[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data>? currentSession
()
<p>Returns latest session wrapper.</p>
<p>Contains latest event and latest session data (account + extra data)</p>
## Implementation
```dart
SessionWrapper<Data>? currentSession() => _latestSession;
```
@@ -1,44 +0,0 @@
# delete method
*[<Null safety>](https://dart.dev/null-safety)*
[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void> delete
()
<p>Delete account.</p>
<p>Throws a DeleteAccountFailureInterface if
an exception occurs.</p>
## Implementation
```dart
FutureOr<void> delete() async => CustomRoutine<void, void>(
routine: authenticationRepository.delete,
attachedLogic: (routineResult) => onDelete(),
onError: addError,
onSuccess: (result, data) => authenticationRepository
.addSession(SessionWrapper<Data>(event: const DeletedEvent())),
).call();
```
@@ -1,38 +0,0 @@
# onDelete method
*[<Null safety>](https://dart.dev/null-safety)*
FutureOrResult&lt;void> onDelete
()
<p>This callback is triggered when the current account is deleted from
the remote.</p>
<p>For example: when the user wants to delete his account from Firebase</p>
## Implementation
```dart
FutureOrResult<void> onDelete();
```
@@ -1,38 +0,0 @@
# onReauthenticate method
*[<Null safety>](https://dart.dev/null-safety)*
FutureOrResult&lt;Data?> onReauthenticate
(Result&lt;[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result)
<p>This callback is triggered when the account is re-authenticated</p>
<p>For example: when the user is logged in and sign in
from an another provider</p>
## Implementation
```dart
FutureOrResult<Data?> onReauthenticate(Result<Account, AppException> result);
```
@@ -1,37 +0,0 @@
# onRefresh method
*[<Null safety>](https://dart.dev/null-safety)*
FutureOrResult&lt;Data?> onRefresh
(Result&lt;[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result)
<p>This callback is triggered when the account is refreshed.</p>
<p>For example: when the access token is refreshed.</p>
## Implementation
```dart
FutureOrResult<Data?> onRefresh(Result<Account, AppException> result);
```
@@ -1,38 +0,0 @@
# onSignInFromCache method
*[<Null safety>](https://dart.dev/null-safety)*
FutureOrResult&lt;Data?> onSignInFromCache
([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> wrapper)
<p>This callback is triggered when the user is automaticcaly logged in from
the cache.</p>
<p>For example: when the user is sign in from the Firebase cache.</p>
## Implementation
```dart
FutureOrResult<Data?> onSignInFromCache(SessionWrapper<Data> wrapper);
```
@@ -1,37 +0,0 @@
# onSignOut method
*[<Null safety>](https://dart.dev/null-safety)*
FutureOrResult&lt;void> onSignOut
()
<p>This callback is triggered when the user is logged out.</p>
<p>For example: when the user clicks on the logout button.</p>
## Implementation
```dart
FutureOrResult<void> onSignOut();
```
@@ -1,53 +0,0 @@
# reauthenticate method
*[<Null safety>](https://dart.dev/null-safety)*
[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void> reauthenticate
()
<p>Some security-sensitive actions—such as deleting an account,
setting a primary email address, and changing a password—require that
the user has recently signed in.</p>
<p>Throws a ReauthenticateFailureInterface if
an exception occurs.</p>
## Implementation
```dart
FutureOr<void> reauthenticate() async => CustomRoutine<Account, Data?>(
routine: authenticationRepository.reauthenticate,
attachedLogic: onReauthenticate,
onError: addError,
onSuccess: (result, data) => authenticationRepository.addSession(
SessionWrapper(
event: ReauthenticatedEvent(account: result),
session: Session<Data>(
account: result,
data: data,
),
),
),
).call();
```
@@ -1,49 +0,0 @@
# refresh method
*[<Null safety>](https://dart.dev/null-safety)*
[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void> refresh
()
<p>Refreshes the current user, if signed in.</p>
## Implementation
```dart
FutureOr<void> refresh() async => CustomRoutine<Account, Data?>(
routine: authenticationRepository.refresh,
attachedLogic: onRefresh,
onError: addError,
onSuccess: (result, data) => authenticationRepository.addSession(
SessionWrapper(
event: RefreshedEvent(account: result),
session: Session<Data>(
account: result,
data: data,
),
),
),
).call();
```
@@ -1,43 +0,0 @@
# signOut method
*[<Null safety>](https://dart.dev/null-safety)*
[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)&lt;void> signOut
()
<p>Signs out the current user.
It also clears the cache and the associated data.</p>
## Implementation
```dart
FutureOr<void> signOut() async => CustomRoutine<void, void>(
routine: authenticationRepository.signOut,
attachedLogic: (routineResult) => onSignOut(),
onError: addError,
onSuccess: (result, data) => authenticationRepository
.addSession(SessionWrapper<Data>(event: const SignedOutEvent())),
).call();
```
@@ -1,159 +0,0 @@
# AuthenticationFailureInterface class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Base exception used in Wyatt Authentication</p>
**Implemented types**
- [Exception](https://api.flutter.dev/flutter/dart-core/Exception-class.html)
**Implementers**
- [ApplyActionCodeFailureInterface](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md)
- [ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md)
- [DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md)
- [FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md)
- [ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface-class.md)
- [ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md)
- [RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface-class.md)
- [SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md)
- [SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md)
- [SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md)
- [SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md)
- [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md)
- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md)
- [SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md)
- [SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md)
- [SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md)
- [SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md)
- [SignInWithTwitterFailureInterface](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md)
- [SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface-class.md)
- [SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md)
- [UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md)
- [UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md)
- [VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md)
## Constructors
[AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg)
[AuthenticationFailureInterface.fromCode](../wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code)
## Properties
##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) &#8596; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read / write</span>_
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) &#8594; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read-only</span>_
##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) &#8596; [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
_<span class="feature">read / write</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,31 +0,0 @@
# AuthenticationFailureInterface.fromCode constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthenticationFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code)
## Implementation
```dart
AuthenticationFailureInterface.fromCode(this.code)
: msg = 'An unknown error occurred.';
```
@@ -1,30 +0,0 @@
# AuthenticationFailureInterface constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthenticationFailureInterface([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg)
## Implementation
```dart
AuthenticationFailureInterface(this.code, this.msg);
```
@@ -1,33 +0,0 @@
# code property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) code
_<span class="feature">read / write</span>_
## Implementation
```dart
String code;
```
@@ -1,40 +0,0 @@
# message property
*[<Null safety>](https://dart.dev/null-safety)*
**Annotations**
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) message
## Implementation
```dart
@override
String get message => msg;
```
@@ -1,33 +0,0 @@
# msg property
*[<Null safety>](https://dart.dev/null-safety)*
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg
_<span class="feature">read / write</span>_
## Implementation
```dart
String msg;
```
@@ -1,53 +0,0 @@
# toString method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString
()
_<span class="feature">inherited</span>_
<p>A string representation of this object.</p>
<p>Some classes have a default textual representation,
often paired with a static <code>parse</code> function (like <a href="https://api.flutter.dev/flutter/dart-core/int/parse.html">int.parse</a>).
These classes will provide the textual representation as
their string representation.</p>
<p>Other classes have no meaningful textual representation
that a program will care about.
Such classes will typically override <code>toString</code> to provide
useful information when inspecting the object,
mainly for debugging or logging.</p>
## Implementation
```dart
@override
String toString() {
if (message.isNotNullOrEmpty) {
return '$runtimeType: $message';
} else {
return '$runtimeType: An exception occured';
}
}
```
@@ -1,251 +0,0 @@
# AuthenticationFirebaseDataSourceImpl&lt;Data> class
*[<Null safety>](https://dart.dev/null-safety)*
**Inheritance**
- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)
- [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)&lt;Data>
- AuthenticationFirebaseDataSourceImpl
## Constructors
[AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md) ({[FirebaseAuth](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/FirebaseAuth-class.html)? firebaseAuth, [GoogleSignIn](https://pub.dev/documentation/google_sign_in/5.4.2/google_sign_in/GoogleSignIn-class.html)? googleSignIn})
## Properties
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [addSession](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> wrapper) void
Add a new authentication event.
_<span class="feature">override</span>_
##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
Confirms the password reset with the provided <code>newPassword</code> and <code>code</code>.
_<span class="feature">override</span>_
##### [delete](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
Delete account.
_<span class="feature">override</span>_
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Some security-sensitive actions—such as deleting an account,
setting a primary email address, and changing a password—require that
the user has recently signed in.
_<span class="feature">override</span>_
##### [refresh](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Refreshes the current user, if signed in.
_<span class="feature">override</span>_
##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
Sends verification email to the account email.
_<span class="feature">override</span>_
##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
Sends a password reset email to the provided <code>email</code>.
_<span class="feature">override</span>_
##### [sessionStream](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)&lt;[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data>>
Authentication state change event stream.
_<span class="feature">override</span>_
##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Sign in anonymously.
_<span class="feature">override</span>_
##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Signs in with the provided <code>email</code> and <code>password</code>.
_<span class="feature">override</span>_
##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Starts the Sign In with Google Flow.
_<span class="feature">override</span>_
##### [signOut](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
Signs out the current user.
It also clears the cache and the associated data.
_<span class="feature">override</span>_
##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Creates a new user with the provided <code>email</code> and <code>password</code>.
_<span class="feature">override</span>_
##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
##### [updateEmail](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Update or add <code>email</code>.
_<span class="feature">override</span>_
##### [updatePassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
Update or add <code>password</code>.
_<span class="feature">override</span>_
##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)>
Verify password reset code.
_<span class="feature">override</span>_
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,40 +0,0 @@
# AuthenticationFirebaseDataSourceImpl&lt;Data> constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthenticationFirebaseDataSourceImpl&lt;Data>({[FirebaseAuth](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/FirebaseAuth-class.html)? firebaseAuth, [GoogleSignIn](https://pub.dev/documentation/google_sign_in/5.4.2/google_sign_in/GoogleSignIn-class.html)? googleSignIn})
## Implementation
```dart
AuthenticationFirebaseDataSourceImpl({
FirebaseAuth? firebaseAuth,
GoogleSignIn? googleSignIn,
}) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance,
_googleSignIn = googleSignIn ?? GoogleSignIn() {
_latestCredentials = BehaviorSubject();
_sessionStream = BehaviorSubject();
// Check for account in memory (persistence)
_checkForCachedAccount();
}
```
@@ -1,40 +0,0 @@
# addSession method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
void addSession
([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> wrapper)
_<span class="feature">override</span>_
<p>Add a new authentication event.</p>
## Implementation
```dart
@override
void addSession(SessionWrapper<Data> wrapper) {
_sessionStream.add(wrapper);
}
```
@@ -1,53 +0,0 @@
# confirmPasswordReset method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void> confirmPasswordReset
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword})
_<span class="feature">override</span>_
<p>Confirms the password reset with the provided <code>newPassword</code> and <code>code</code>.</p>
<p>Throws a ConfirmPasswordResetFailureInterface if an exception occurs.</p>
## Implementation
```dart
@override
Future<void> confirmPasswordReset({
required String code,
required String newPassword,
}) async {
try {
await _firebaseAuth.confirmPasswordReset(
code: code,
newPassword: newPassword,
);
} on FirebaseAuthException catch (e) {
throw ConfirmPasswordResetFailureFirebase.fromCode(e.code);
} catch (_) {
throw ConfirmPasswordResetFailureFirebase();
}
}
```
@@ -1,48 +0,0 @@
# delete method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void> delete
()
_<span class="feature">override</span>_
<p>Delete account.</p>
<p>Throws a DeleteAccountFailureInterface if
an exception occurs.</p>
## Implementation
```dart
@override
Future<void> delete() async {
try {
await _firebaseAuth.currentUser!.delete();
} on FirebaseAuthException catch (e) {
throw DeleteAccountFailureFirebase.fromCode(e.code);
} catch (_) {
throw DeleteAccountFailureFirebase();
}
}
```
@@ -1,61 +0,0 @@
# reauthenticate method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate
()
_<span class="feature">override</span>_
<p>Some security-sensitive actions—such as deleting an account,
setting a primary email address, and changing a password—require that
the user has recently signed in.</p>
<p>Throws a ReauthenticateFailureInterface if
an exception occurs.</p>
## Implementation
```dart
@override
Future<Account> reauthenticate() async {
final latestCreds =
await _latestCredentials.stream.asBroadcastStream().last;
try {
if (latestCreds?.credential != null) {
await _firebaseAuth.currentUser
?.reauthenticateWithCredential(latestCreds!.credential!);
} else {
throw Exception(); // Get caught just after.
}
final account = AccountModel.fromFirebaseUser(_firebaseAuth.currentUser);
return account;
} on FirebaseAuthException catch (e) {
throw ReauthenticateFailureFirebase.fromCode(e.code);
} catch (_) {
throw ReauthenticateFailureFirebase();
}
}
```
@@ -1,52 +0,0 @@
# refresh method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh
()
_<span class="feature">override</span>_
<p>Refreshes the current user, if signed in.</p>
## Implementation
```dart
@override
Future<Account> refresh() async {
try {
final jwt = await _firebaseAuth.currentUser?.getIdToken(true);
final account = AccountModel.fromFirebaseUser(
_firebaseAuth.currentUser,
accessToken: jwt,
);
return account;
} on FirebaseAuthException catch (e) {
throw RefreshFailureFirebase.fromCode(e.code);
} catch (_) {
throw RefreshFailureFirebase();
}
}
```
@@ -1,47 +0,0 @@
# sendEmailVerification method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void> sendEmailVerification
()
_<span class="feature">override</span>_
<p>Sends verification email to the account email.</p>
<p>Throws a SendEmailVerificationFailureInterface if an exception occurs.</p>
## Implementation
```dart
@override
Future<void> sendEmailVerification() async {
try {
await _firebaseAuth.currentUser!.sendEmailVerification();
} on FirebaseAuthException catch (e) {
throw SendEmailVerificationFailureFirebase.fromCode(e.code);
} catch (_) {
throw SendEmailVerificationFailureFirebase();
}
}
```
@@ -1,47 +0,0 @@
# sendPasswordResetEmail method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void> sendPasswordResetEmail
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email})
_<span class="feature">override</span>_
<p>Sends a password reset email to the provided <code>email</code>.</p>
<p>Throws a SendPasswordResetEmailFailureInterface if an exception occurs.</p>
## Implementation
```dart
@override
Future<void> sendPasswordResetEmail({required String email}) async {
try {
await _firebaseAuth.sendPasswordResetEmail(email: email);
} on FirebaseAuthException catch (e) {
throw SendPasswordResetEmailFailureFirebase.fromCode(e.code);
} catch (_) {
throw SendPasswordResetEmailFailureFirebase();
}
}
```
@@ -1,39 +0,0 @@
# sessionStream method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)&lt;[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data>> sessionStream
()
_<span class="feature">override</span>_
<p>Authentication state change event stream.</p>
## Implementation
```dart
@override
Stream<SessionWrapper<Data>> sessionStream() =>
_sessionStream.stream.asBroadcastStream();
```
@@ -1,54 +0,0 @@
# signInAnonymously method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously
()
_<span class="feature">override</span>_
<p>Sign in anonymously.</p>
<p>Throws a SignInAnonymouslyFailureInterface if an exception occurs.</p>
## Implementation
```dart
@override
Future<Account> signInAnonymously() async {
try {
final userCredential = await _firebaseAuth.signInAnonymously();
return _addToStream(
userCredential,
(account) => SignedInEvent(
account: account,
),
);
} on FirebaseAuthException catch (e) {
throw SignInAnonymouslyFailureFirebase.fromCode(e.code);
} catch (_) {
throw SignInAnonymouslyFailureFirebase();
}
}
```
@@ -1,61 +0,0 @@
# signInWithEmailAndPassword method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password})
_<span class="feature">override</span>_
<p>Signs in with the provided <code>email</code> and <code>password</code>.</p>
<p>Throws a SignInWithEmailAndPasswordFailureInterface if
an exception occurs.</p>
## Implementation
```dart
@override
Future<Account> signInWithEmailAndPassword({
required String email,
required String password,
}) async {
try {
final userCredential = await _firebaseAuth.signInWithEmailAndPassword(
email: email,
password: password,
);
return _addToStream(
userCredential,
(account) => SignedInEvent(
account: account,
),
);
} on FirebaseAuthException catch (e) {
throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code);
} catch (_) {
throw SignInWithEmailAndPasswordFailureFirebase();
}
}
```
@@ -1,68 +0,0 @@
# signInWithGoogle method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle
()
_<span class="feature">override</span>_
<p>Starts the Sign In with Google Flow.</p>
<p>Throws a SignInWithGoogleFailureInterface if an exception occurs.</p>
## Implementation
```dart
@override
Future<Account> signInWithGoogle() async {
try {
// Trigger the authentication flow
final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
// Obtain the auth details from the request
final GoogleSignInAuthentication? googleAuth =
await googleUser?.authentication;
// Create a new credential
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth?.accessToken,
idToken: googleAuth?.idToken,
);
final userCredential =
await _firebaseAuth.signInWithCredential(credential);
return _addToStream(
userCredential,
(account) => SignedInEvent(
account: account,
),
);
} on FirebaseAuthException catch (e) {
throw SignInWithGoogleFailureFirebase.fromCode(e.code);
} catch (_) {
throw SignInWithGoogleFailureFirebase();
}
}
```
@@ -1,46 +0,0 @@
# signOut method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void> signOut
()
_<span class="feature">override</span>_
<p>Signs out the current user.
It also clears the cache and the associated data.</p>
## Implementation
```dart
@override
Future<void> signOut() async {
try {
_latestCredentials.add(null);
await _firebaseAuth.signOut();
} catch (_) {
throw SignOutFailureFirebase();
}
}
```
@@ -1,62 +0,0 @@
# signUpWithEmailAndPassword method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password})
_<span class="feature">override</span>_
<p>Creates a new user with the provided <code>email</code> and <code>password</code>.</p>
<p>Returns the newly created user's unique identifier.</p>
<p>Throws a SignUpWithEmailAndPasswordFailureInterface if
an exception occurs.</p>
## Implementation
```dart
@override
Future<Account> signUpWithEmailAndPassword({
required String email,
required String password,
}) async {
try {
final userCredential = await _firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
);
return _addToStream(
userCredential,
(account) => SignedUpEvent(
account: account,
),
);
} on FirebaseAuthException catch (e) {
throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code);
} catch (_) {
throw SignUpWithEmailAndPasswordFailureFirebase();
}
}
```
@@ -1,55 +0,0 @@
# updateEmail method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email})
_<span class="feature">override</span>_
<p>Update or add <code>email</code>.</p>
<p>Throws a UpdateEmailFailureInterface if
an exception occurs.</p>
## Implementation
```dart
@override
Future<Account> updateEmail({required String email}) async {
try {
await _firebaseAuth.currentUser!.updateEmail(email);
final jwt = await _firebaseAuth.currentUser!.getIdToken(true);
final account = AccountModel.fromFirebaseUser(
_firebaseAuth.currentUser,
accessToken: jwt,
);
return account;
} on FirebaseAuthException catch (e) {
throw UpdateEmailFailureFirebase.fromCode(e.code);
} catch (_) {
throw UpdateEmailFailureFirebase();
}
}
```
@@ -1,55 +0,0 @@
# updatePassword method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password})
_<span class="feature">override</span>_
<p>Update or add <code>password</code>.</p>
<p>Throws a UpdatePasswordFailureInterface if
an exception occurs.</p>
## Implementation
```dart
@override
Future<Account> updatePassword({required String password}) async {
try {
await _firebaseAuth.currentUser!.updatePassword(password);
final jwt = await _firebaseAuth.currentUser!.getIdToken(true);
final account = AccountModel.fromFirebaseUser(
_firebaseAuth.currentUser,
accessToken: jwt,
);
return account;
} on FirebaseAuthException catch (e) {
throw UpdatePasswordFailureFirebase.fromCode(e.code);
} catch (_) {
throw UpdatePasswordFailureFirebase();
}
}
```
@@ -1,48 +0,0 @@
# verifyPasswordResetCode method
*[<Null safety>](https://dart.dev/null-safety)*
- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html)
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code})
_<span class="feature">override</span>_
<p>Verify password reset code.</p>
<p>Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.</p>
## Implementation
```dart
@override
Future<bool> verifyPasswordResetCode({required String code}) async {
try {
final email = await _firebaseAuth.verifyPasswordResetCode(code);
return email.isNotNullOrEmpty;
} on FirebaseAuthException catch (e) {
throw VerifyPasswordResetCodeFailureFirebase.fromCode(e.code);
} catch (_) {
throw VerifyPasswordResetCodeFailureFirebase();
}
}
```
@@ -1,247 +0,0 @@
# AuthenticationRemoteDataSource&lt;Data> class
*[<Null safety>](https://dart.dev/null-safety)*
<p>Is responsible for abstracting the provenance of the data.</p>
**Implementers**
- [AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md)
## Constructors
[AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md) ()
## Properties
##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) &#8594; [int](https://api.flutter.dev/flutter/dart-core/int-class.html)
The hash code for this object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) &#8594; [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html)
A representation of the runtime type of the object.
_<span class="feature">read-only</span><span class="feature">inherited</span>_
## Methods
##### [addSession](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> wrapper) void
##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
##### [delete](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic
Invoked when a non-existent method or property is accessed.
_<span class="feature">inherited</span>_
##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [refresh](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
##### [sessionStream](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)&lt;[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data>>
##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [signOut](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void>
##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html)
A string representation of this object.
_<span class="feature">inherited</span>_
##### [updateEmail](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [updatePassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[Account](../wyatt_authentication_bloc/Account-class.md)>
##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)>
## Operators
##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)
The equality operator.
_<span class="feature">inherited</span>_
@@ -1,25 +0,0 @@
# AuthenticationRemoteDataSource&lt;Data> constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthenticationRemoteDataSource&lt;Data>()
@@ -1,35 +0,0 @@
# addSession method
*[<Null safety>](https://dart.dev/null-safety)*
void addSession
([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)&lt;Data> wrapper)
## Implementation
```dart
void addSession(SessionWrapper<Data> wrapper);
```
@@ -1,38 +0,0 @@
# confirmPasswordReset method
*[<Null safety>](https://dart.dev/null-safety)*
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void> confirmPasswordReset
({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword})
## Implementation
```dart
Future<void> confirmPasswordReset({
required String code,
required String newPassword,
});
```
@@ -1,35 +0,0 @@
# delete method
*[<Null safety>](https://dart.dev/null-safety)*
[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)&lt;void> delete
()
## Implementation
```dart
Future<void> delete();
```

Some files were not shown because too many files have changed in this diff Show More