Compare commits

..
Author SHA1 Message Date
hugo 3f1c93c35f feat(authentication): add mock + local storage 2023-03-10 15:07:49 +01:00
hugo fcc439a311 docs(authentication): update example with multiple data sources 2023-03-08 12:57:56 +01:00
hugo 5a3eeed7b5 refactor(authentication)!: split data sources (cache, session, external) 2023-03-08 12:57:24 +01:00
hugo 0e5e2403ce style(authentication): dart format + add some docs 2023-03-08 12:55:30 +01:00
hugo 76a655ac63 fix(authentication): make sur access token is available on every steps 2023-02-08 16:09:26 +01:00
hugo b458f8c0c8 feat(authentication): remove session wrapper for AuthenticationSession 2023-02-08 13:37:52 +01:00
hugo 2e5aafdb5a docs(authentication): add full dartdoc 2023-02-07 14:55:28 +01:00
hugo fdd020f103 test(authentication): update tests 2023-02-07 14:55:28 +01:00
hugo 918215b5b8 docs: roolback and remove wiki 2023-02-07 14:55:28 +01:00
hugo b68e46c622 docs(authentication): add wiki script 2023-02-07 14:55:28 +01:00
hugo 305cddea19 docs(authentication): update example 2023-02-07 14:55:28 +01:00
hugo 50886d97b3 feat(authentication): add account edit cubit 2023-02-07 14:55:28 +01:00
hugo 692c255a19 feat(authentication): add custom routine, and documentation 2023-02-07 14:55:28 +01:00
hugo 4dc0b26e95 feat(authentication): add full event support 2023-02-07 14:55:28 +01:00
hugo bf1d8f188f test(authentication): fix tests 2023-02-07 14:54:39 +01:00
hugo a72babfafe fix(authentication): anonymous sign in event 2023-02-07 14:54:39 +01:00
hugo 830d32152b refactor(authentication): use custom user changes stream 2023-02-07 14:54:39 +01:00
hugo 7f0544d19c fix(authentication): initialize account stream transformer 2023-02-07 14:54:39 +01:00
hugo c005c3dc43 docs(authentication): update example 2023-02-07 14:54:39 +01:00
hugo 97c14c7a99 refactor(authentication)!: use mixins, and remove use of onSignUpSuccess 2023-02-07 14:54:39 +01:00
hugo f37babc084 feat(authentication)!: add event type on auth change 2023-02-07 14:54:38 +01:00
hugo e6c234f0ea refactor: make signup/in, passwordreset cubit extendable 2023-02-07 14:54:38 +01:00
hugo 2088e0e4bc fix(authentication): stream on null account 2023-02-07 14:54:38 +01:00
hugo 1e07b2ed1c fix(authentication): handle empty provider list (closes #113) 2023-02-07 14:54:38 +01:00
hugo 9339100399 chore(release): publish packages
continuous-integration/drone/push Build is failing
- wyatt_analysis@2.4.0
2023-02-07 14:46:21 +01:00
hugo 03725c25c7 feat(analysis): add new lint rules 2023-02-07 14:44:57 +01:00
hugo 588a09e0a1 docs(analysis): add instructions to create a new version (closes #104) 2023-02-07 14:43:52 +01:00
malo bd53d11e0d refactor(bloc_layout): migrate bloc layouts using copywith component method (close #121)
continuous-integration/drone/push Build is failing
2023-02-07 11:46:50 +01:00
malo ee8f08cc32 refactor(ui_layout): update exemple (close #116)
continuous-integration/drone/push Build is failing
2023-02-07 10:49:56 +01:00
malo 413589462b refactor(ui_layout): migrate layouts using copywith component method (#116) 2023-02-07 10:49:09 +01:00
malo ff3f2008de fix(ui_components): generate new files after generator fixes (close #118)
continuous-integration/drone/push Build is failing
2023-02-07 10:25:58 +01:00
malo 0b27a62669 fix(component_copy_with_gen): update example (#118) 2023-02-07 10:24:00 +01:00
malo 6c9b6e239b fix(component_copy_with_gen): copywith method takes non nullable fields too (#118) 2023-02-07 10:22:32 +01:00
malo 576a01512b refactor(ui_components): update example (close #115)
continuous-integration/drone/push Build is failing
2023-02-07 09:44:34 +01:00
malo cd3ed0fe69 refactor(ui_components): migrate components using code generator packages (#115) 2023-02-07 09:44:03 +01:00
AN12345 46c51525e8 feat: add generators for components proxy and mixins to enable copywith methods
continuous-integration/drone/push Build is failing
2023-02-06 18:42:34 +01:00
AN12345 b025247002 feat: add class annotation for component code generators 2023-02-06 18:41:54 +01:00
AN12345 c70d4c6650 build: update mason file to add new tempalte 2023-02-06 18:40:35 +01:00
AN12345 04a87fe32a feat(bloc_layout): make package compatible with crud cubit (close #111)
continuous-integration/drone/push Build is passing
2022-12-19 19:21:38 -05:00
AN12345 f8f367baf6 (feat): rething conception and add missing layouts (close #97)
continuous-integration/drone/push Build is passing
2022-12-13 18:50:47 -05:00
AN12345 e667aa06d0 feat(ui_layout): make field nullable & add new app bar fields (#97) 2022-12-13 18:49:28 -05:00
hugo f6ef5828bb chore(release): publish packages
continuous-integration/drone/push Build is passing
- wyatt_authentication_bloc@0.4.1
2022-12-13 17:29:38 -05:00
Malo Léon f22ba300cb Merge pull request 'authentication/feature/google_signin' (#105) from authentication/feature/google_signin into master
continuous-integration/drone/push Build is passing
Reviewed-on: #105
Reviewed-by: Malo Léon <malo.leon@wyattapp.io>
2022-12-13 22:07:16 +00:00
hugo 5f52b2fc3d refactor(authentication): use fromFirebaseUser factory to parse user 2022-12-13 17:00:26 -05:00
hugo f46707f5c1 style(authentication): Merge 'origin/master' into authentication/feature/google_signin 2022-12-13 16:42:50 -05:00
AN12345 17ff0f8ba1 clean(packages): apply dart fix (close #106)
continuous-integration/drone/push Build is passing
2022-12-13 13:52:49 -05:00
hugo 1a3631f691 feat(authentication): add google sign in in signIn cubit 2022-12-13 00:36:20 -05:00
hugo 197c5d54e6 feat(authentication): add google sign in parameter in firebase data source constructor 2022-12-12 23:47:29 -05:00
hugo c7b241de2d feat(authentication): add google sign_in support (closes #59) 2022-12-12 23:16:10 -05:00
hugo 94d573a584 refactor(authentication): update deps and re-export them 2022-12-12 23:14:55 -05:00
hugo 37e00fe9c4 style(analysis): dart format + follows wyatt analysis 2.3.0 2022-12-12 22:43:54 -05:00
hugo 3c8ff373a1 chore(release): publish packages
continuous-integration/drone/push Build is passing
- wyatt_analysis@2.3.0
2022-12-12 22:17:35 -05:00
hugo 640cfaf118 refactor(analysis): follow melos versioning
continuous-integration/drone/push Build is passing
2022-12-12 22:15:32 -05:00
hugo 7fc3736854 feat(analysis): exclude generated code, and add dart>2.16 rules
continuous-integration/drone/push Build is passing
2022-12-12 22:02:31 -05:00
hugo 29d8ec640f feat(analysis): add overwrite protection 2022-12-12 21:38:57 -05:00
hugo 7f9621b4f6 feat(analysis): add 2.2.2 files for archive 2022-12-12 21:37:20 -05:00
hugo 7b61f3f08a feat(analysis): add utils script to easely bump version 2022-12-12 21:36:39 -05:00
hugo 75a5facfdc fix(analysis): change file include to keep coherence 2022-12-12 21:30:22 -05:00
AN12345 c93b7fb5f7 feat(bloc_layout): export layout_package & adapt imports
continuous-integration/drone/push Build is passing
2022-12-12 20:32:29 -05:00
hugo aee7060a0b ci: fix http client test error
continuous-integration/drone/push Build is passing
2022-12-12 15:20:47 -05:00
AN12345 4f49f4931c refactor(ui_layout): update example (#92)
continuous-integration/drone/push Build is failing
2022-12-12 14:21:48 -05:00
AN12345 e8172004a3 refactor(ui_component): update example (#92) 2022-12-12 14:21:13 -05:00
AN12345 c6d8ca37fe refactor(bloc_layout): update example (#92) 2022-12-12 14:20:20 -05:00
AN12345 e01f47d41a refactor(ui_layout): update package using nullable component data (#92) 2022-12-12 14:14:15 -05:00
AN12345 7a24a36af0 refactor(bloc_layout): update package using nullable component data (#92) 2022-12-12 14:13:00 -05:00
AN12345 244a286509 refactor(ui_components): update example (#92) 2022-12-12 14:10:41 -05:00
AN12345 81a7ca5a1f feat(ui_components): make component data field nullable (#92) 2022-12-12 14:08:36 -05:00
AN12345 45c7bd6fca refactor(ui_layout): update example with components updates (close #90)
continuous-integration/drone/push Build is failing
2022-12-12 12:42:11 -05:00
AN12345 cd2806b07b refactor(bloc_layout): update example with new app bar entity (#90) 2022-12-12 12:36:40 -05:00
AN12345 dd275460f6 feat(ui_components): make app bar leading & actions customizable 2022-12-12 12:34:02 -05:00
AN12345 dc0f0c61c6 feat(bloc_layout): export useful packages (close #88)
continuous-integration/drone/push Build is failing
2022-12-12 11:25:40 -05:00
hugo 1e305c75bd docs: update readme with melos commands
continuous-integration/drone/push Build is failing
2022-12-11 21:28:47 -05:00
hugo 9af76b8e1f ci: add package tests and validation 2022-12-12 01:21:37 +00:00
hugo 5593620181 refactor: change quality check rule name 2022-12-12 01:21:37 +00:00
hugo a19d4bc5ce chore: update melos config 2022-12-12 01:21:37 +00:00
hugo 21b18054ba chore(package): clean unimplemented tests 2022-12-12 01:21:37 +00:00
AN12345 ff90af47cd fix(bloc_layout): update export file 2022-12-11 23:38:54 +00:00
AN12345 3bb57e65f8 fix(bloc_layout): rename file 2022-12-11 23:38:54 +00:00
AN12345 9d0aac7894 feat(bloc_layout): add all layout avalaible with crud bloc 2022-12-11 23:38:54 +00:00
AN12345 a561cbff23 feat(bloc_layout): link error widget to error state 2022-12-11 23:38:54 +00:00
AN12345 fafec78546 clean(bloc_layout): remove test folder 2022-12-11 23:38:54 +00:00
AN12345 feca378131 feat(bloc_layout): add new package to combine bloc_helper, crud_bloc, ui_components, and ui_layout 2022-12-11 23:38:54 +00:00
hugo f223811f4b chore(medium): remove unused package 2022-12-08 14:32:19 -05:00
hugo ed65489316 chore(cli): remove unused package 2022-12-08 14:31:57 -05:00
AN12345 33797e4dbf refactor(ui_layout): update appbar component (close #78) 2022-12-08 18:58:37 +00:00
AN12345 3aa6d03dd6 refactor(crud_bloc): update package using new architecture usecase execute method (close #77) 2022-12-08 13:29:01 -05:00
hugo bf03324fd0 chore: add pre-commit rule (see #72) 2022-12-08 03:46:10 +00:00
hugo 5e83c9e74e docs(auth): add correct header 2022-12-07 19:52:01 -05:00
hugo 672aba7084 fix(auth): fix mock on register 2022-12-07 19:52:00 -05:00
hugo 94d7efbe8c fix(form): fix textController rebuild 2022-12-07 19:51:59 -05:00
hugo 5298bd99ed feat(authentication): add reauthenticate, updateEmail and updatePassword 2022-12-07 19:50:19 -05:00
AN12345 d792f4cbe9 feat(ui_layout): update example & move configure function (#69) 2022-12-07 18:54:48 -05:00
AN12345 098ec9715e feat(ui_layout): add loading & error widget to component theme (close #69) 2022-12-07 18:20:04 -05:00
AN12345 6d3c64d17c feat(ui_layout): add frame layout (close #67) 2022-12-07 17:14:00 -05:00
AN12345 c615186f19 docs(ui_layout): update models 2022-12-07 15:44:05 -05:00
AN12345 55e24fb23b fix(ui_layout): fix emample after splititng packages 2022-12-07 15:37:46 -05:00
AN12345 4d04c3f446 doc: update readme(s) 2022-12-07 15:04:48 -05:00
AN12345 a20e4a1715 refractor: migrate components in right package 2022-12-07 14:56:05 -05:00
AN12345 cf9f1ddb65 feat: create new package to split components and layouts 2022-12-07 14:13:24 -05:00
AN12345 0c141c715e fix(ui_layout): remove unecessary dependencies 2022-12-07 02:38:14 +00:00
AN12345 d0f59bbf29 refactor(ui_layout): update field name 2022-12-07 02:38:14 +00:00
AN12345 562f84dd33 doc(ui_layout): add class models 2022-12-07 02:38:14 +00:00
AN12345 771f600eb7 feat(ui_layout): add new package for app compenant and start implementing layouts 2022-12-07 02:38:14 +00:00
hugo 7fcb9e8ac3 chore(release): publish packages
- wyatt_bloc_helper@2.0.0
 - wyatt_type_utils@0.0.4
 - wyatt_authentication_bloc@0.4.0+3
 - wyatt_crud_bloc@0.1.0+2
 - wyatt_architecture@0.1.0+1
 - wyatt_form_bloc@0.2.0+2
2022-12-04 21:08:15 -05:00
1027 changed files with 48965 additions and 6480 deletions
+36
View File
@@ -0,0 +1,36 @@
# Copyright (C) 2022 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/>.
kind: pipeline
type: docker
name: default
steps:
- name: quality-check
image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0
commands:
- melos run quality-check
- melos run publish:validate
- name: publish
image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0
commands:
- melos run publish:validate
trigger:
branch:
- master
event:
- push
+1 -6
View File
@@ -13,10 +13,6 @@ build/
# If you're building an application, you may want to check-in your pubspec.lock # If you're building an application, you may want to check-in your pubspec.lock
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 # dotenv environment variables file
.env* .env*
@@ -38,7 +34,6 @@ doc/api/
### Flutter ### ### Flutter ###
# Flutter/Dart/Pub related # Flutter/Dart/Pub related
**/doc/api/
.fvm/ .fvm/
.pub-cache/ .pub-cache/
.pub/ .pub/
@@ -200,4 +195,4 @@ google-services.json
pubspec_overrides.yaml pubspec_overrides.yaml
# Mason # Mason
.mason/ .mason/
+7
View File
@@ -0,0 +1,7 @@
repos:
- repo: https://github.com/compilerla/conventional-pre-commit
rev: v2.1.1
hooks:
- id: conventional-pre-commit
stages: [commit-msg]
args: [build, ci, docs, feat, fix, perf, refactor, style, test, chore]
+114
View File
@@ -3,6 +3,120 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## 2023-02-07
### Changes
---
Packages with breaking changes:
- There are no breaking changes in this release.
Packages with other changes:
- [`wyatt_analysis` - `v2.4.0`](#wyatt_analysis---v240)
---
#### `wyatt_analysis` - `v2.4.0`
- **FEAT**: add new lint rules.
- **DOCS**: add instructions to create a new version (closes #104).
## 2022-12-13
### Changes
---
Packages with breaking changes:
- There are no breaking changes in this release.
Packages with other changes:
- [`wyatt_authentication_bloc` - `v0.4.1`](#wyatt_authentication_bloc---v041)
---
#### `wyatt_authentication_bloc` - `v0.4.1`
- **REFACTOR**: use fromFirebaseUser factory to parse user.
- **REFACTOR**: update deps and re-export them.
- **FIX**: fix mock on register.
- **FEAT**: add google sign in in signIn cubit.
- **FEAT**: add google sign in parameter in firebase data source constructor.
- **FEAT**: add google sign_in support (closes #59).
- **FEAT**: add reauthenticate, updateEmail and updatePassword.
- **DOCS**: add correct header.
## 2022-12-12
### Changes
---
Packages with breaking changes:
- There are no breaking changes in this release.
Packages with other changes:
- [`wyatt_analysis` - `v2.3.0`](#wyatt_analysis---v230)
---
#### `wyatt_analysis` - `v2.3.0`
- **REFACTOR**: follow melos versioning.
- **FIX**: change file include to keep coherence.
- **FEAT**: exclude generated code, and add dart>2.16 rules.
- **FEAT**: add overwrite protection.
- **FEAT**: add 2.2.2 files for archive.
- **FEAT**: add utils script to easely bump version.
## 2022-12-04
### Changes
---
Packages with breaking changes:
- [`wyatt_bloc_helper` - `v2.0.0`](#wyatt_bloc_helper---v200)
Packages with other changes:
- [`wyatt_type_utils` - `v0.0.4`](#wyatt_type_utils---v004)
- [`wyatt_authentication_bloc` - `v0.4.0+3`](#wyatt_authentication_bloc---v0403)
- [`wyatt_crud_bloc` - `v0.1.0+2`](#wyatt_crud_bloc---v0102)
- [`wyatt_architecture` - `v0.1.0+1`](#wyatt_architecture---v0101)
- [`wyatt_form_bloc` - `v0.2.0+2`](#wyatt_form_bloc---v0202)
Packages with dependency updates only:
> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
- `wyatt_authentication_bloc` - `v0.4.0+3`
- `wyatt_crud_bloc` - `v0.1.0+2`
- `wyatt_architecture` - `v0.1.0+1`
- `wyatt_form_bloc` - `v0.2.0+2`
---
#### `wyatt_bloc_helper` - `v2.0.0`
- **BREAKING** **REFACTOR**: update onWrap label (close #46).
#### `wyatt_type_utils` - `v0.0.4`
- **FEAT**: add Result extension on FutureOr type (close #40).
## 2022-12-03 ## 2022-12-03
### Changes ### Changes
+8 -2
View File
@@ -171,10 +171,16 @@ Note that your issue will be close after merging on master.
Before closing the issue, please check tests and update coverage. You might run : Before closing the issue, please check tests and update coverage. You might run :
```shell ```shell
melos run test melos run test:all # this will run all tests in this project
melos run gen_coverage melos run gen-coverage # this will generate coverage report
melos run gen-class-models # this will generate plantuml class diagrams
melos run quality-check # this will run all targets generally expected in CI
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.
#### Merge your work #### 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. 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.
+1 -1
View File
@@ -1 +1 @@
{"bricks":{"wyatt_clean_code":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_clean_code","ref":"033baa65408ec6b68e6a2ef43e64c24708ef16a1"}},"wyatt_feature_brick":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_feature_brick","ref":"033baa65408ec6b68e6a2ef43e64c24708ef16a1"}},"wyatt_package":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_package","ref":"033baa65408ec6b68e6a2ef43e64c24708ef16a1"}}}} {"bricks":{"wyatt_clean_code":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_clean_code","ref":"5009f1ef21d8531b773298c0fc08704d8f69afd1"}},"wyatt_feature_brick":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_feature_brick","ref":"5009f1ef21d8531b773298c0fc08704d8f69afd1"}},"wyatt_package_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_package_template","ref":"5009f1ef21d8531b773298c0fc08704d8f69afd1"}}}}
+5 -5
View File
@@ -1,13 +1,13 @@
bricks: bricks:
wyatt_clean_code: wyatt_clean_code:
git: git:
url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git"
path: bricks/wyatt_clean_code path: bricks/wyatt_clean_code
wyatt_feature_brick: wyatt_feature_brick:
git: git:
url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git"
path: bricks/wyatt_feature_brick path: bricks/wyatt_feature_brick
wyatt_package: wyatt_package_template:
git: git:
url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git"
path: bricks/wyatt_package path: bricks/wyatt_package_template
+25 -6
View File
@@ -21,8 +21,7 @@ scripts:
analyze: analyze:
run: | run: |
melos exec -c 10 -- \ melos exec -c 1 -- flutter analyze --fatal-infos
flutter analyze --fatal-infos
description: Run `flutter analyze` for all packages. description: Run `flutter analyze` for all packages.
format: format:
@@ -38,18 +37,38 @@ scripts:
description: Clean things very deeply with `git clean`. description: Clean things very deeply with `git clean`.
test:selective_unit_test: test:selective_unit_test:
run: melos exec --dir-exists="test" -- flutter test --no-pub --coverage run: melos exec -- flutter test --no-pub --coverage
description: Run Flutter tests for a specific package in this project. description: Run Flutter tests for a specific package in this project.
select-package: select-package:
flutter: true dir-exists:
- test
ignore:
- '*example*'
test: test:all:
run: melos run test:selective_unit_test --no-select run: melos run test:selective_unit_test --no-select
description: Run all Flutter tests in this project. description: Run all Flutter tests in this project.
gen-coverage: melos exec -- sh "\$MELOS_ROOT_PATH/combine_coverage.sh" && genhtml coverage/lcov.info -o coverage/html gen-coverage: melos exec -- sh "\$MELOS_ROOT_PATH/combine_coverage.sh" && genhtml coverage/lcov.info -o coverage/html
gen-class-models: melos exec --scope="*wyatt_*" -- dart pub global run dcdg -o models/class-models.puml gen-class-models:
run: melos exec -- dart pub global run dcdg -o models/class-models.puml
select-package:
ignore:
- '*example*'
quality-check:
run: |
melos clean && \
melos bootstrap && \
melos run test:all
description: Run all targets generally expected in CI for a full local quality check.
publish:validate:
run: melos publish --diff="origin/$DRONE_COMMIT_BRANCH...HEAD" --yes
# publish:
# run: melos publish --diff="origin/$DRONE_COMMIT_BRANCH...HEAD" --no-dry-run --yes
# Additional cleanup lifecycle script, executed when `melos clean` is run. # Additional cleanup lifecycle script, executed when `melos clean` is run.
postclean: > postclean: >
+14
View File
@@ -1,3 +1,17 @@
## 2.4.0
- **FEAT**: add new lint rules.
- **DOCS**: add instructions to create a new version (closes #104).
## 2.3.0
- **REFACTOR**: follow melos versioning.
- **FIX**: change file include to keep coherence.
- **FEAT**: exclude generated code, and add dart>2.16 rules.
- **FEAT**: add overwrite protection.
- **FEAT**: add 2.2.2 files for archive.
- **FEAT**: add utils script to easely bump version.
## 2.2.2 ## 2.2.2
- **DOCS**: add publish_to self hosted pub server. - **DOCS**: add publish_to self hosted pub server.
+22 -15
View File
@@ -1,5 +1,5 @@
<!-- <!--
* Copyright (C) 2022 WYATT GROUP * Copyright (C) 2023 WYATT GROUP
* Please see the AUTHORS file for details. * Please see the AUTHORS file for details.
* *
* This program is free software: you can redistribute it and/or modify * 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 * the Free Software Foundation, either version 3 of the License, or
* any later version. * 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
@@ -20,24 +20,21 @@
![SDK: Dart & Flutter](https://img.shields.io/badge/SDK-Dart%20%7C%20Flutter-blue?style=flat-square) ![SDK: Dart & Flutter](https://img.shields.io/badge/SDK-Dart%20%7C%20Flutter-blue?style=flat-square)
This package provides lint rules for Dart and Flutter which are used at [Wyatt](https://wyattapp.io) and [Wyatt Studio](https://wyatt-studio.fr). For more information, see the complete list of options in **lib/analysis_options.2.0.0.yaml**. This package provides lint rules for Dart and Flutter which are used at [Wyatt](https://wyattapp.io) and [Wyatt Studio](https://wyatt-studio.fr). For more information, see the complete list of options in **lib/analysis_options.2.4.0.yaml**.
**Note**: This package was heavily inspired by [pedantic](https://github.com/dart-lang/pedantic), [Very Good Analysis](https://github.com/VeryGoodOpenSource/very_good_analysis) and the official [flutter_lints](https://pub.dev/packages/flutter_lints). **Note**: This package was heavily inspired by [pedantic](https://github.com/dart-lang/pedantic), [Very Good Analysis](https://github.com/VeryGoodOpenSource/very_good_analysis) and the official [flutter_lints](https://pub.dev/packages/flutter_lints).
## Usage ## Usage
To use the lints, add a dependency in your `pubspec.yaml`: To use the lints, add a dependency in your `pubspec.yaml` :
```yaml ```yaml
dev_dependencies: wyatt_analysis:
wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/
git: version: 2.4.0
url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages
ref: wyatt_analysis-v2.0.0
path: packages/wyatt_analysis
``` ```
Then, add an include in `analysis_options.yaml`: Then, add an include in `analysis_options.yaml` :
```yaml ```yaml
include: package:wyatt_analysis/analysis_options.yaml include: package:wyatt_analysis/analysis_options.yaml
@@ -52,13 +49,13 @@ include: package:wyatt_analysis/analysis_options.flutter.yaml
If you wish to restrict the lint version, specify a version of `analysis_options.yaml` instead: If you wish to restrict the lint version, specify a version of `analysis_options.yaml` instead:
```yaml ```yaml
include: package:wyatt_analysis/analysis_options.flutter.2.0.0.yaml include: package:wyatt_analysis/analysis_options.flutter.2.4.0.yaml
``` ```
If you just want **Dart** version: If you just want **Dart** version:
```yaml ```yaml
include: package:wyatt_analysis/analysis_options.2.0.0.yaml include: package:wyatt_analysis/analysis_options.2.4.0.yaml
``` ```
## Suppressing Lints ## Suppressing Lints
@@ -90,7 +87,7 @@ class B {}
### Project Level ### Project Level
To surpress a specific lint rule for an entire project, modify `analysis_options.yaml`: To surpress a specific lint rule for an entire project, modify `analysis_options.yaml` :
```yaml ```yaml
include: package:wyatt_analysis/analysis_options.yaml include: package:wyatt_analysis/analysis_options.yaml
@@ -107,6 +104,16 @@ To indicate your project is using `wyatt_analysis` → [![style: wyatt analysis]
[![style: wyatt analysis](https://img.shields.io/badge/Style-Wyatt%20Analysis-blue)](https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis) [![style: wyatt analysis](https://img.shields.io/badge/Style-Wyatt%20Analysis-blue)](https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis)
``` ```
## Development
When you want to create a new version of the plugin. Before any modification, execute the following command to create new files:
```sh
./new_version.sh <previous_version> <new_version>
```
> Where `<previous_version>` is 2.4.0
## Notes ## Notes
You can explore every lint rules [here](https://dart-lang.github.io/linter/lints/). You can explore every lint rules [here](https://dart-lang.github.io/linter/lints/).
@@ -0,0 +1,206 @@
# Copyright (C) 2022 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/>.
analyzer:
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
errors:
todo: ignore
close_sinks: ignore
missing_required_param: error
missing_return: error
exclude:
- example/**
- lib/l10n/**
- lib/generated/**
- lib/generated_plugin_registrant.dart
- test/.test_coverage.dart
linter:
rules:
- always_declare_return_types
- always_require_non_null_named_parameters
- always_put_control_body_on_new_line
- always_put_required_named_parameters_first
- always_use_package_imports
- annotate_overrides
- avoid_bool_literals_in_conditional_expressions
- avoid_catching_errors
- avoid_double_and_int_checks
- avoid_dynamic_calls
- avoid_empty_else
- avoid_equals_and_hash_code_on_mutable_classes
- avoid_escaping_inner_quotes
- avoid_field_initializers_in_const_classes
- avoid_function_literals_in_foreach_calls
- avoid_init_to_null
- avoid_js_rounded_ints
- avoid_null_checks_in_equality_operators
- avoid_positional_boolean_parameters
- avoid_private_typedef_functions
- avoid_redundant_argument_values
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null
- avoid_returning_null_for_future
- avoid_returning_null_for_void
- avoid_returning_this
- avoid_setters_without_getters
- avoid_shadowing_type_parameters
- avoid_single_cascade_in_expression_statements
- avoid_slow_async_io
- avoid_type_to_string
- avoid_types_as_parameter_names
- avoid_types_on_closure_parameters
- avoid_unused_constructor_parameters
- avoid_void_async
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
- cascade_invocations
- cast_nullable_to_non_nullable
- comment_references
- conditional_uri_does_not_exist
- constant_identifier_names
- control_flow_in_finally
- curly_braces_in_flow_control_structures
- depend_on_referenced_packages
- deprecated_consistency
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
- eol_at_end_of_file
- exhaustive_cases
- file_names
- flutter_style_todos
- hash_and_equals
- implementation_imports
- iterable_contains_unrelated_type
- join_return_with_assignment
- leading_newlines_in_multiline_strings
- library_names
- library_prefixes
- library_private_types_in_public_api
- lines_longer_than_80_chars
- list_remove_unrelated_type
- literal_only_boolean_expressions
- missing_whitespace_between_adjacent_strings
- no_adjacent_strings_in_list
- no_default_cases
- no_duplicate_case_values
- no_leading_underscores_for_local_identifiers
- no_runtimeType_toString
- non_constant_identifier_names
- noop_primitive_operations
- null_check_on_nullable_type_parameter
- null_closures
- one_member_abstracts
- only_throw_errors
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
- parameter_assignments
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_asserts_with_message
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_constructors_over_static_methods
- prefer_contains
- prefer_equal_for_default_values
- prefer_expression_function_bodies
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
- prefer_for_elements_to_map_fromIterable
- prefer_function_declarations_over_variables
- prefer_generic_function_type_aliases
- prefer_if_elements_to_conditional_expressions
- prefer_if_null_operators
- prefer_initializing_formals
- prefer_inlined_adds
- prefer_int_literals
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_is_not_operator
- prefer_iterable_whereType
- prefer_mixin
- prefer_null_aware_operators
- prefer_null_aware_method_calls
- prefer_single_quotes
- prefer_spread_collections
- prefer_typing_uninitialized_variables
- prefer_void_to_null
- provide_deprecation_message
- recursive_getters
- require_trailing_commas
- slash_for_doc_comments
- sort_unnamed_constructors_first
- test_types_in_equals
- throw_in_finally
- tighten_type_of_initializing_formals
- type_annotate_public_apis
- type_init_formals
- unawaited_futures
- unnecessary_await_in_return
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_constructor_name
- unnecessary_getters_setters
- unnecessary_lambdas
- unnecessary_late
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_checks
- unnecessary_null_in_if_null_operators
- unnecessary_nullable_for_final_variable_declarations
- unnecessary_overrides
- unnecessary_parenthesis
- unnecessary_raw_strings
- unnecessary_statements
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- unrelated_type_equality_checks
- unsafe_html
- use_enums
- use_function_type_syntax_for_parameters
- use_if_null_to_convert_nulls_to_bools
- use_is_even_rather_than_modulo
- use_late_for_private_fields_and_variables
- use_named_constants
- use_raw_strings
- use_rethrow_when_possible
- use_setters_to_change_properties
- use_string_buffers
- use_super_parameters
- use_test_throws_matchers
- use_to_and_as_if_applicable
- valid_regexps
- void_checks
@@ -0,0 +1,213 @@
# Copyright (C) 2022 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/>.
analyzer:
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
errors:
todo: info
close_sinks: ignore
missing_required_param: error
missing_return: error
exclude:
- lib/l10n/**
- lib/generated/**
- lib/gen/**
- lib/generated_plugin_registrant.dart
- test/.test_coverage.dart
- '**/*.g.dart'
- '**/*.freezed.dart'
linter:
rules:
- always_declare_return_types
- always_put_control_body_on_new_line
- always_put_required_named_parameters_first
- always_require_non_null_named_parameters
- always_use_package_imports
- annotate_overrides
- avoid_bool_literals_in_conditional_expressions
- avoid_catching_errors
- avoid_double_and_int_checks
- avoid_dynamic_calls
- avoid_empty_else
- avoid_equals_and_hash_code_on_mutable_classes
- avoid_escaping_inner_quotes
- avoid_field_initializers_in_const_classes
- avoid_final_parameters
- avoid_function_literals_in_foreach_calls
- avoid_init_to_null
- avoid_js_rounded_ints
- avoid_multiple_declarations_per_line
- avoid_null_checks_in_equality_operators
- avoid_positional_boolean_parameters
- avoid_private_typedef_functions
- avoid_redundant_argument_values
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null
- avoid_returning_null_for_future
- avoid_returning_null_for_void
- avoid_returning_this
- avoid_setters_without_getters
- avoid_shadowing_type_parameters
- avoid_single_cascade_in_expression_statements
- avoid_slow_async_io
- avoid_type_to_string
- avoid_types_as_parameter_names
- avoid_types_on_closure_parameters
- avoid_unused_constructor_parameters
- avoid_void_async
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
- cascade_invocations
- cast_nullable_to_non_nullable
- comment_references
- conditional_uri_does_not_exist
- constant_identifier_names
- control_flow_in_finally
- curly_braces_in_flow_control_structures
- depend_on_referenced_packages
- deprecated_consistency
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
- eol_at_end_of_file
- exhaustive_cases
- file_names
- flutter_style_todos
- hash_and_equals
- implementation_imports
- iterable_contains_unrelated_type
- join_return_with_assignment
- leading_newlines_in_multiline_strings
- library_names
- library_prefixes
- library_private_types_in_public_api
- lines_longer_than_80_chars
- list_remove_unrelated_type
- literal_only_boolean_expressions
- missing_whitespace_between_adjacent_strings
- no_adjacent_strings_in_list
- no_default_cases
- no_duplicate_case_values
- no_leading_underscores_for_library_prefixes
- no_leading_underscores_for_local_identifiers
- no_runtimeType_toString
- non_constant_identifier_names
- noop_primitive_operations
- null_check_on_nullable_type_parameter
- null_closures
- one_member_abstracts
- only_throw_errors
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
- parameter_assignments
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_asserts_with_message
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_constructors_over_static_methods
- prefer_contains
- prefer_equal_for_default_values
- prefer_expression_function_bodies
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
- prefer_for_elements_to_map_fromIterable
- prefer_function_declarations_over_variables
- prefer_generic_function_type_aliases
- prefer_if_elements_to_conditional_expressions
- prefer_if_null_operators
- prefer_initializing_formals
- prefer_inlined_adds
- prefer_int_literals
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_is_not_operator
- prefer_iterable_whereType
- prefer_mixin
- prefer_null_aware_method_calls
- prefer_null_aware_operators
- prefer_single_quotes
- prefer_spread_collections
- prefer_typing_uninitialized_variables
- prefer_void_to_null
- provide_deprecation_message
- recursive_getters
- require_trailing_commas
- slash_for_doc_comments
- sort_constructors_first
- sort_unnamed_constructors_first
- test_types_in_equals
- throw_in_finally
- tighten_type_of_initializing_formals
- type_annotate_public_apis
- type_init_formals
- unawaited_futures
- unnecessary_await_in_return
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_constructor_name
- unnecessary_getters_setters
- unnecessary_lambdas
- unnecessary_late
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_checks
- unnecessary_null_in_if_null_operators
- unnecessary_nullable_for_final_variable_declarations
- unnecessary_overrides
- unnecessary_parenthesis
- unnecessary_raw_strings
- unnecessary_statements
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- unnecessary_to_list_in_spreads
- unrelated_type_equality_checks
- unsafe_html
- use_enums
- use_function_type_syntax_for_parameters
- use_if_null_to_convert_nulls_to_bools
- use_is_even_rather_than_modulo
- use_late_for_private_fields_and_variables
- use_named_constants
- use_raw_strings
- use_rethrow_when_possible
- use_setters_to_change_properties
- use_string_buffers
- use_super_parameters
- use_test_throws_matchers
- use_to_and_as_if_applicable
- valid_regexps
- void_checks
@@ -0,0 +1,217 @@
# 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/>.
analyzer:
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
errors:
todo: info
close_sinks: ignore
missing_required_param: error
missing_return: error
exclude:
- lib/l10n/**
- lib/generated/**
- lib/gen/**
- lib/generated_plugin_registrant.dart
- test/.test_coverage.dart
- '**/*.g.dart'
- '**/*.freezed.dart'
linter:
rules:
- always_declare_return_types
- always_put_control_body_on_new_line
- always_put_required_named_parameters_first
- always_require_non_null_named_parameters
- always_use_package_imports
- annotate_overrides
- avoid_bool_literals_in_conditional_expressions
- avoid_catching_errors
- avoid_double_and_int_checks
- avoid_dynamic_calls
- avoid_empty_else
- avoid_equals_and_hash_code_on_mutable_classes
- avoid_escaping_inner_quotes
- avoid_field_initializers_in_const_classes
- avoid_final_parameters
- avoid_function_literals_in_foreach_calls
- avoid_init_to_null
- avoid_js_rounded_ints
- avoid_multiple_declarations_per_line
- avoid_null_checks_in_equality_operators
- avoid_positional_boolean_parameters
- avoid_private_typedef_functions
- avoid_redundant_argument_values
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null
- avoid_returning_null_for_future
- avoid_returning_null_for_void
- avoid_returning_this
- avoid_setters_without_getters
- avoid_shadowing_type_parameters
- avoid_single_cascade_in_expression_statements
- avoid_slow_async_io
- avoid_type_to_string
- avoid_types_as_parameter_names
- avoid_types_on_closure_parameters
- avoid_unused_constructor_parameters
- avoid_void_async
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
- cascade_invocations
- cast_nullable_to_non_nullable
- collection_methods_unrelated_type
- combinators_ordering
- comment_references
- conditional_uri_does_not_exist
- constant_identifier_names
- control_flow_in_finally
- curly_braces_in_flow_control_structures
- depend_on_referenced_packages
- deprecated_consistency
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
- eol_at_end_of_file
- exhaustive_cases
- file_names
- flutter_style_todos
- hash_and_equals
- implementation_imports
- implicit_call_tearoffs
- iterable_contains_unrelated_type
- join_return_with_assignment
- leading_newlines_in_multiline_strings
- library_names
- library_prefixes
- library_private_types_in_public_api
- lines_longer_than_80_chars
- list_remove_unrelated_type
- literal_only_boolean_expressions
- missing_whitespace_between_adjacent_strings
- no_adjacent_strings_in_list
- no_default_cases
- no_duplicate_case_values
- no_leading_underscores_for_library_prefixes
- no_leading_underscores_for_local_identifiers
- no_runtimeType_toString
- non_constant_identifier_names
- noop_primitive_operations
- null_check_on_nullable_type_parameter
- null_closures
- one_member_abstracts
- only_throw_errors
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
- parameter_assignments
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_asserts_with_message
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_constructors_over_static_methods
- prefer_contains
- prefer_equal_for_default_values
- prefer_expression_function_bodies
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
- prefer_for_elements_to_map_fromIterable
- prefer_function_declarations_over_variables
- prefer_generic_function_type_aliases
- prefer_if_elements_to_conditional_expressions
- prefer_if_null_operators
- prefer_initializing_formals
- prefer_inlined_adds
- prefer_int_literals
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_is_not_operator
- prefer_iterable_whereType
- prefer_mixin
- prefer_null_aware_method_calls
- prefer_null_aware_operators
- prefer_single_quotes
- prefer_spread_collections
- prefer_typing_uninitialized_variables
- prefer_void_to_null
- provide_deprecation_message
- recursive_getters
- require_trailing_commas
- slash_for_doc_comments
- sort_constructors_first
- sort_unnamed_constructors_first
- test_types_in_equals
- throw_in_finally
- tighten_type_of_initializing_formals
- type_annotate_public_apis
- type_init_formals
- unawaited_futures
- unnecessary_await_in_return
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_constructor_name
- unnecessary_getters_setters
- unnecessary_lambdas
- unnecessary_late
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_checks
- unnecessary_null_in_if_null_operators
- unnecessary_nullable_for_final_variable_declarations
- unnecessary_overrides
- unnecessary_parenthesis
- unnecessary_raw_strings
- unnecessary_statements
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- unnecessary_to_list_in_spreads
- unrelated_type_equality_checks
- unsafe_html
- use_enums
- use_function_type_syntax_for_parameters
- use_if_null_to_convert_nulls_to_bools
- use_is_even_rather_than_modulo
- use_late_for_private_fields_and_variables
- use_named_constants
- use_raw_strings
- use_rethrow_when_possible
- use_setters_to_change_properties
- use_string_buffers
- use_string_in_part_of_directives
- use_super_parameters
- use_test_throws_matchers
- use_to_and_as_if_applicable
- valid_regexps
- void_checks
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
include: package:wyatt_analysis/analysis_options.2.1.1.yaml include: package:wyatt_analysis/analysis_options.2.2.0.yaml
linter: linter:
rules: rules:
@@ -0,0 +1,32 @@
# Copyright (C) 2022 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/>.
include: package:wyatt_analysis/analysis_options.2.2.2.yaml
linter:
rules:
- avoid_print
- avoid_unnecessary_containers
- avoid_web_libraries_in_flutter
- no_logic_in_create_state
- sized_box_for_whitespace
- sized_box_shrink_expand
- sort_child_properties_last
- use_build_context_synchronously
- use_colored_box
- use_decorated_box
- use_full_hex_values_for_flutter_colors
- use_key_in_widget_constructors
@@ -0,0 +1,32 @@
# Copyright (C) 2022 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/>.
include: package:wyatt_analysis/analysis_options.2.3.0.yaml
linter:
rules:
- avoid_print
- avoid_unnecessary_containers
- avoid_web_libraries_in_flutter
- no_logic_in_create_state
- sized_box_for_whitespace
- sized_box_shrink_expand
- sort_child_properties_last
- use_build_context_synchronously
- use_colored_box
- use_decorated_box
- use_full_hex_values_for_flutter_colors
- use_key_in_widget_constructors
@@ -0,0 +1,32 @@
# 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/>.
include: package:wyatt_analysis/analysis_options.2.4.0.yaml
linter:
rules:
- avoid_print
- avoid_unnecessary_containers
- avoid_web_libraries_in_flutter
- no_logic_in_create_state
- sized_box_for_whitespace
- sized_box_shrink_expand
- sort_child_properties_last
- use_build_context_synchronously
- use_colored_box
- use_decorated_box
- use_full_hex_values_for_flutter_colors
- use_key_in_widget_constructors
@@ -1,4 +1,4 @@
# Copyright (C) 2022 WYATT GROUP # Copyright (C) 2023 WYATT GROUP
# Please see the AUTHORS file for details. # Please see the AUTHORS file for details.
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@@ -14,4 +14,5 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
include: package:wyatt_analysis/analysis_options.flutter.2.2.1.yaml include: package:wyatt_analysis/analysis_options.flutter.2.4.0.yaml
@@ -1,4 +1,4 @@
# Copyright (C) 2022 WYATT GROUP # Copyright (C) 2023 WYATT GROUP
# Please see the AUTHORS file for details. # Please see the AUTHORS file for details.
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@@ -14,4 +14,5 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
include: package:wyatt_analysis/analysis_options.2.2.1.yaml include: package:wyatt_analysis/analysis_options.2.4.0.yaml
@@ -1,4 +1,4 @@
// Copyright (C) 2022 WYATT GROUP // Copyright (C) 2023 WYATT GROUP
// Please see the AUTHORS file for details. // Please see the AUTHORS file for details.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
@@ -15,8 +15,7 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
/// Wyatt analyzer settings and best practices /// Wyatt analyzer settings and best practices
/// used internally at [Wyatt](https://wyattapp.io) /// used internally at [Wyatt Studio](https://wyatt-studio.fr).
/// and [Wyatt Studio](https://wyatt-studio.fr).
library wyatt_analysis; library wyatt_analysis;
const String wyattAnalysisVersion = '2.2.1'; const String wyattAnalysisVersion = '2.4.0';
+133
View File
@@ -0,0 +1,133 @@
#!/usr/bin/env sh
# Copyright (C) 2022 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/>.
usage="
usage:
$(basename "$0") <previous_version> <new_version> -- create new analyzer files.
where:
previous_version: last version, for example \`2.3.0\`
new_version: new version, for example \`2.4.0\`"
old=$1
new=$2
if [ -z "$old" ]; then
echo "previous_version cannot be null"
echo "${usage}"
exit 1
fi
if [ -z "$new" ]; then
echo "new_version cannot be null"
echo "${usage}"
exit 1
fi
SCRIPT_PATH="${BASH_SOURCE:-$0}"
ABS_SCRIPT_PATH="$(realpath "${SCRIPT_PATH}")"
ABS_DIRECTORY="$(dirname "${ABS_SCRIPT_PATH}")"
LIB="${ABS_DIRECTORY}/lib/wyatt_analysis.dart"
OPTIONS="${ABS_DIRECTORY}/lib/analysis_options.yaml"
OLD_OPTIONS="${ABS_DIRECTORY}/lib/analysis_options.${old}.yaml"
NEW_OPTIONS="${ABS_DIRECTORY}/lib/analysis_options.${new}.yaml"
OPTIONS_FLUTTER="${ABS_DIRECTORY}/lib/analysis_options.flutter.yaml"
OLD_OPTIONS_FLUTTER="${ABS_DIRECTORY}/lib/analysis_options.flutter.${old}.yaml"
NEW_OPTIONS_FLUTTER="${ABS_DIRECTORY}/lib/analysis_options.flutter.${new}.yaml"
if [ ! -e "$OLD_OPTIONS" ]; then
echo "analysis_options.${old}.yaml doesn't exists"
echo "${usage}"
exit 1
fi
if [ ! -e "$OLD_OPTIONS_FLUTTER" ]; then
echo "analysis_options.flutter.${old}.yaml doesn't exists"
echo "${usage}"
exit 1
fi
if [ -e "$NEW_OPTIONS" ]; then
echo "analysis_options.${new}.yaml already exists"
echo "${usage}"
exit 1
fi
if [ -e "$NEW_OPTIONS_FLUTTER" ]; then
echo "analysis_options.flutter.${old}.yaml already exists"
echo "${usage}"
exit 1
fi
# Copy previous version files
cp "${OLD_OPTIONS}" "${NEW_OPTIONS}"
cp "${OLD_OPTIONS_FLUTTER}" "${NEW_OPTIONS_FLUTTER}"
# Search and replace old version string occurences in new files
sed -e "s/${old}/${new}/g" "${NEW_OPTIONS_FLUTTER}" > tempfile.tmp
mv -f tempfile.tmp "${NEW_OPTIONS_FLUTTER}"
sed -e "s/${old}/${new}/g" "${LIB}" > tempfile.tmp
mv -f tempfile.tmp "${LIB}"
sed -e "s/${old}/${new}/g" "README.md" > tempfile.tmp
mv -f tempfile.tmp "README.md"
echo "
# Copyright (C) 2022 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/>.
include: package:wyatt_analysis/analysis_options.${new}.yaml
" > "${OPTIONS}"
echo "
# Copyright (C) 2022 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/>.
include: package:wyatt_analysis/analysis_options.flutter.${new}.yaml
" > "${OPTIONS_FLUTTER}"
exit 0
+18 -2
View File
@@ -1,7 +1,23 @@
# 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/>.
name: wyatt_analysis name: wyatt_analysis
description: Lint rules for Dart and Flutter used internally at Wyatt and Wyatt Studio. description: Lint rules for Dart and Flutter used internally at Wyatt Studio.
repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis
version: 2.2.2 version: 2.4.0
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
+4
View File
@@ -1,3 +1,7 @@
## 0.1.0+1
- Update a dependency to the latest release.
## 0.1.0 ## 0.1.0
> Note: This release has breaking changes. > Note: This release has breaking changes.
@@ -24,9 +24,8 @@ import 'package:wyatt_http_client/wyatt_http_client.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
class AlbumApiDataSourceImpl extends AlbumRemoteDataSource { class AlbumApiDataSourceImpl extends AlbumRemoteDataSource {
final MiddlewareClient _client;
AlbumApiDataSourceImpl(this._client); AlbumApiDataSourceImpl(this._client);
final MiddlewareClient _client;
@override @override
Future<Album> getAlbum(int id) async { Future<Album> getAlbum(int id) async {
@@ -24,9 +24,8 @@ import 'package:wyatt_http_client/wyatt_http_client.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
class PhotoApiDataSourceImpl extends PhotoRemoteDataSource { class PhotoApiDataSourceImpl extends PhotoRemoteDataSource {
final MiddlewareClient _client;
PhotoApiDataSourceImpl(this._client); PhotoApiDataSourceImpl(this._client);
final MiddlewareClient _client;
@override @override
Future<Photo> getPhoto(int id) async { Future<Photo> getPhoto(int id) async {
@@ -24,15 +24,15 @@ import 'package:wyatt_architecture/wyatt_architecture.dart';
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
class PhotoRepositoryImpl extends PhotoRepository { class PhotoRepositoryImpl extends PhotoRepository {
final PhotoRemoteDataSource _photoRemoteDataSource;
final AlbumRemoteDataSource _albumRemoteDataSource;
final FavoriteLocalDataSource _favoriteLocalDataSource;
PhotoRepositoryImpl( PhotoRepositoryImpl(
this._photoRemoteDataSource, this._photoRemoteDataSource,
this._albumRemoteDataSource, this._albumRemoteDataSource,
this._favoriteLocalDataSource, this._favoriteLocalDataSource,
); );
final PhotoRemoteDataSource _photoRemoteDataSource;
final AlbumRemoteDataSource _albumRemoteDataSource;
final FavoriteLocalDataSource _favoriteLocalDataSource;
@override @override
FutureOrResult<void> addPhotoToFavorites(Photo photo) => Result.tryCatchAsync( FutureOrResult<void> addPhotoToFavorites(Photo photo) => Result.tryCatchAsync(
@@ -21,9 +21,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
class AddPhotoToFavorites extends AsyncUseCase<Photo, List<Photo>> { class AddPhotoToFavorites extends AsyncUseCase<Photo, List<Photo>> {
final PhotoRepository _photoRepository;
AddPhotoToFavorites(this._photoRepository); AddPhotoToFavorites(this._photoRepository);
final PhotoRepository _photoRepository;
@override @override
FutureOrResult<List<Photo>> execute(Photo? params) async { FutureOrResult<List<Photo>> execute(Photo? params) async {
@@ -20,9 +20,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
class CheckIfPhotoIsInFavorites extends AsyncUseCase<int, bool> { class CheckIfPhotoIsInFavorites extends AsyncUseCase<int, bool> {
final PhotoRepository _photoRepository;
CheckIfPhotoIsInFavorites(this._photoRepository); CheckIfPhotoIsInFavorites(this._photoRepository);
final PhotoRepository _photoRepository;
@override @override
FutureOrResult<bool> execute(int? params) async => FutureOrResult<bool> execute(int? params) async =>
@@ -19,9 +19,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
class DisplayFavorites extends AsyncUseCase<NoParam, List<Photo>> { class DisplayFavorites extends AsyncUseCase<NoParam, List<Photo>> {
final PhotoRepository _photoRepository;
DisplayFavorites(this._photoRepository); DisplayFavorites(this._photoRepository);
final PhotoRepository _photoRepository;
@override @override
FutureOrResult<List<Photo>> execute(void params) { FutureOrResult<List<Photo>> execute(void params) {
@@ -21,9 +21,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
class DisplayPhoto extends AsyncUseCase<int, Photo> { class DisplayPhoto extends AsyncUseCase<int, Photo> {
final PhotoRepository _photoRepository;
DisplayPhoto(this._photoRepository); DisplayPhoto(this._photoRepository);
final PhotoRepository _photoRepository;
@override @override
FutureOrResult<Photo> execute(int? params) { FutureOrResult<Photo> execute(int? params) {
@@ -22,9 +22,9 @@ import 'package:architecture_example/domain/usecases/photos/params/query_paramet
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
class OpenAlbum extends AsyncUseCase<QueryParameters, List<Photo>> { class OpenAlbum extends AsyncUseCase<QueryParameters, List<Photo>> {
final PhotoRepository _photoRepository;
OpenAlbum(this._photoRepository); OpenAlbum(this._photoRepository);
final PhotoRepository _photoRepository;
@override @override
FutureOrResult<List<Photo>> execute(QueryParameters? params) { FutureOrResult<List<Photo>> execute(QueryParameters? params) {
@@ -15,9 +15,9 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
class QueryParameters { class QueryParameters {
QueryParameters(this.start, this.limit, {this.albumId = -1});
final int albumId; final int albumId;
final int? start; final int? start;
final int? limit; final int? limit;
QueryParameters(this.start, this.limit, {this.albumId = -1});
} }
@@ -21,9 +21,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
class RemovePhotoFromFavorites extends AsyncUseCase<int, List<Photo>> { class RemovePhotoFromFavorites extends AsyncUseCase<int, List<Photo>> {
final PhotoRepository _photoRepository;
RemovePhotoFromFavorites(this._photoRepository); RemovePhotoFromFavorites(this._photoRepository);
final PhotoRepository _photoRepository;
@override @override
FutureOrResult<List<Photo>> execute(int? params) async { FutureOrResult<List<Photo>> execute(int? params) async {
@@ -22,9 +22,9 @@ import 'package:architecture_example/domain/usecases/photos/params/query_paramet
import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart';
class RetrieveAllAlbums extends AsyncUseCase<QueryParameters, List<Album>> { class RetrieveAllAlbums extends AsyncUseCase<QueryParameters, List<Album>> {
final PhotoRepository _photoRepository;
RetrieveAllAlbums(this._photoRepository); RetrieveAllAlbums(this._photoRepository);
final PhotoRepository _photoRepository;
@override @override
FutureOrResult<List<Album>> execute(QueryParameters? params) { FutureOrResult<List<Album>> execute(QueryParameters? params) {
@@ -33,7 +33,6 @@ EventTransformer<E> throttleDroppable<E>(Duration duration) =>
(events, mapper) => droppable<E>().call(events.throttle(duration), mapper); (events, mapper) => droppable<E>().call(events.throttle(duration), mapper);
class AlbumBloc extends Bloc<AlbumEvent, AlbumState> { class AlbumBloc extends Bloc<AlbumEvent, AlbumState> {
final RetrieveAllAlbums _retrieveAllAlbums;
AlbumBloc(this._retrieveAllAlbums) : super(const AlbumState()) { AlbumBloc(this._retrieveAllAlbums) : super(const AlbumState()) {
on<AlbumFetched>( on<AlbumFetched>(
@@ -41,6 +40,7 @@ class AlbumBloc extends Bloc<AlbumEvent, AlbumState> {
transformer: throttleDroppable(throttleDuration), transformer: throttleDroppable(throttleDuration),
); );
} }
final RetrieveAllAlbums _retrieveAllAlbums;
Future<void> _onAlbumFetched( Future<void> _onAlbumFetched(
AlbumFetched event, AlbumFetched event,
@@ -26,19 +26,19 @@ abstract class PhotoDetailsState extends Equatable {
class PhotoDetailsInitial extends PhotoDetailsState {} class PhotoDetailsInitial extends PhotoDetailsState {}
class PhotoDetailsSuccess extends PhotoDetailsState { class PhotoDetailsSuccess extends PhotoDetailsState {
final Photo photo;
final bool isFavorite;
const PhotoDetailsSuccess(this.photo, {required this.isFavorite}); const PhotoDetailsSuccess(this.photo, {required this.isFavorite});
final Photo photo;
final bool isFavorite;
@override @override
List<Object> get props => [photo, isFavorite]; List<Object> get props => [photo, isFavorite];
} }
class PhotoDetailsFailure extends PhotoDetailsState { class PhotoDetailsFailure extends PhotoDetailsState {
final String error;
const PhotoDetailsFailure(this.error); const PhotoDetailsFailure(this.error);
final String error;
@override @override
List<Object> get props => [error]; List<Object> get props => [error];
@@ -23,10 +23,10 @@ import 'package:flutter_bloc/flutter_bloc.dart';
part 'favorite_checker_state.dart'; part 'favorite_checker_state.dart';
class FavoriteCheckerCubit extends Cubit<FavoriteCheckerState> { class FavoriteCheckerCubit extends Cubit<FavoriteCheckerState> {
final CheckIfPhotoIsInFavorites _checkIfPhotoIsInFavorites;
FavoriteCheckerCubit(this._checkIfPhotoIsInFavorites) FavoriteCheckerCubit(this._checkIfPhotoIsInFavorites)
: super(FavoriteCheckerInitial()); : super(FavoriteCheckerInitial());
final CheckIfPhotoIsInFavorites _checkIfPhotoIsInFavorites;
FutureOr<void> checkIfPhotoIsInFavorites(int photoId) async { FutureOr<void> checkIfPhotoIsInFavorites(int photoId) async {
final response = await _checkIfPhotoIsInFavorites.call(photoId); final response = await _checkIfPhotoIsInFavorites.call(photoId);
@@ -10,19 +10,19 @@ abstract class FavoriteCheckerState extends Equatable {
class FavoriteCheckerInitial extends FavoriteCheckerState {} class FavoriteCheckerInitial extends FavoriteCheckerState {}
class FavoriteCheckerSuccess extends FavoriteCheckerState { class FavoriteCheckerSuccess extends FavoriteCheckerState {
final int photoId;
final bool isFavorite;
const FavoriteCheckerSuccess(this.photoId, {required this.isFavorite}); const FavoriteCheckerSuccess(this.photoId, {required this.isFavorite});
final int photoId;
final bool isFavorite;
@override @override
List<Object> get props => [photoId, isFavorite]; List<Object> get props => [photoId, isFavorite];
} }
class FavoriteCheckerFailure extends FavoriteCheckerState { class FavoriteCheckerFailure extends FavoriteCheckerState {
final String error;
const FavoriteCheckerFailure(this.error); const FavoriteCheckerFailure(this.error);
final String error;
@override @override
List<Object> get props => [error]; List<Object> get props => [error];
@@ -33,7 +33,6 @@ EventTransformer<E> throttleDroppable<E>(Duration duration) =>
(events, mapper) => droppable<E>().call(events.throttle(duration), mapper); (events, mapper) => droppable<E>().call(events.throttle(duration), mapper);
class PhotoBloc extends Bloc<PhotoEvent, PhotoState> { class PhotoBloc extends Bloc<PhotoEvent, PhotoState> {
final OpenAlbum _openAlbum;
PhotoBloc(this._openAlbum) : super(const PhotoState()) { PhotoBloc(this._openAlbum) : super(const PhotoState()) {
on<PhotoFetched>( on<PhotoFetched>(
@@ -41,6 +40,7 @@ class PhotoBloc extends Bloc<PhotoEvent, PhotoState> {
transformer: throttleDroppable(throttleDuration), transformer: throttleDroppable(throttleDuration),
); );
} }
final OpenAlbum _openAlbum;
Future<void> _onPhotoFetched( Future<void> _onPhotoFetched(
PhotoFetched event, PhotoFetched event,
@@ -24,7 +24,7 @@ abstract class PhotoEvent extends Equatable {
} }
class PhotoFetched extends PhotoEvent { class PhotoFetched extends PhotoEvent {
final int albumId;
const PhotoFetched(this.albumId); const PhotoFetched(this.albumId);
final int albumId;
} }
@@ -36,7 +36,7 @@ dependencies:
wyatt_type_utils: wyatt_type_utils:
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
version: ^0.0.3+1 version: ^0.0.4
wyatt_http_client: wyatt_http_client:
git: git:
@@ -49,7 +49,7 @@ dependencies:
wyatt_bloc_helper: wyatt_bloc_helper:
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/
version: ^1.2.0 version: ^2.0.0
equatable: ^2.0.5 equatable: ^2.0.5
stream_transform: ^2.1.0 stream_transform: ^2.1.0
bloc_concurrency: ^0.2.0 bloc_concurrency: ^0.2.0
@@ -67,7 +67,7 @@ dev_dependencies:
wyatt_analysis: wyatt_analysis:
git: git:
url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages
ref: wyatt_analysis-v2.2.2 ref: wyatt_analysis-v2.4.0
path: packages/wyatt_analysis path: packages/wyatt_analysis
# For information on the generic Dart part of this file, see the # For information on the generic Dart part of this file, see the
@@ -17,9 +17,9 @@
import 'package:wyatt_type_utils/wyatt_type_utils.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart';
abstract class AppException implements Exception { abstract class AppException implements Exception {
final String? message;
AppException([this.message]); AppException([this.message]);
final String? message;
@override @override
String toString() { String toString() {
+3 -3
View File
@@ -1,7 +1,7 @@
name: wyatt_architecture name: wyatt_architecture
description: A new Wyatt package description: A new Wyatt package
repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_architecture repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_architecture
version: 0.1.0 version: 0.1.0+1
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
@@ -15,7 +15,7 @@ dependencies:
wyatt_type_utils: wyatt_type_utils:
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
version: ^0.0.3+1 version: ^0.0.4
dev_dependencies: dev_dependencies:
@@ -24,4 +24,4 @@ dev_dependencies:
wyatt_analysis: wyatt_analysis:
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
version: ^2.2.2 version: ^2.4.0
@@ -23,7 +23,6 @@
# Flutter/Dart/Pub related # Flutter/Dart/Pub related
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
/pubspec.lock /pubspec.lock
**/doc/api/
.dart_tool/ .dart_tool/
.packages .packages
build/ build/
@@ -1,3 +1,18 @@
## 0.4.1
- **REFACTOR**: use fromFirebaseUser factory to parse user.
- **REFACTOR**: update deps and re-export them.
- **FIX**: fix mock on register.
- **FEAT**: add google sign in in signIn cubit.
- **FEAT**: add google sign in parameter in firebase data source constructor.
- **FEAT**: add google sign_in support (closes #59).
- **FEAT**: add reauthenticate, updateEmail and updatePassword.
- **DOCS**: add correct header.
## 0.4.0+3
- Update a dependency to the latest release.
## 0.4.0+2 ## 0.4.0+2
- Update a dependency to the latest release. - Update a dependency to the latest release.
+186 -30
View File
@@ -1,5 +1,5 @@
<!-- <!--
* Copyright (C) 2022 WYATT GROUP * Copyright (C) 2023 WYATT GROUP
* Please see the AUTHORS file for details. * Please see the AUTHORS file for details.
* This program is free software: you can redistribute it and/or modify * 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 * the Free Software Foundation, either version 3 of the License, or
* any later version. * 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
@@ -19,9 +19,7 @@
# Flutter - Authentication BLoC # Flutter - Authentication BLoC
<p align="left"> <p align="left">
<a href="https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis"> <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/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" /> <img src="https://img.shields.io/badge/SDK-Flutter-blue?style=flat-square" alt="SDK: Flutter" />
</p> </p>
@@ -29,37 +27,195 @@ Authentication Bloc for Flutter.
## Features ## Features
- Wyatt Architecture * 🧐 Wyatt Architecture
- Entities: * 🧱 Entities
- Account : AccountModel -> Contains account information from provider - Account -> Contains account information from provider.
- AccountWrapper : AccountWrapperModel -> Contains account and extra data. - Session -> Contains account and associated data retrieved from an external source.
- Data Sources: - AuthenticationChangeEvent -> Describes an event in authentication change (sign in, sign up, sign out, etc...)
- Local: - SessionWrapper -> Contains latest authentication change event and session.
- Cached Authentication Data : AuthenticationCacheDataSourceImpl -> Provides a cache implementation * 🔑 Powerful and secured authentication repository
- Remote: * 🔥 Multiple data sources
- Remote Authentication Data : AuthenticationFirebaseDataSourceImpl -> Provides a proxy to FirebaseAuth - Mock
- Repositories: - Firebase
- AuthenticationRepository : AuthenticationRepositoryImpl -> Provides all authentication methods * 🧊 Cubits, why make it complicated when you can make it simple?
- Features: - Goes to the essential.
- Authentication: * 📐 Consistent
- AuthenticationBuilder : widget to build reactive view from authentication state - Every class have same naming convention
- AuthenticationCubit : tracks every auth changes, have sign out capability. * 🧪 Tested
- SignUp: * 📚 Documented: [available here](./doc/api/index.md)
- 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 ## Getting started
Simply add `wyatt_authentication_bloc` in `pubspec.yaml`, then Simply add `wyatt_authentication_bloc` in `pubspec.yaml` , then
```dart ```dart
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
``` ```
## Usage ### Data source
// TODO 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: ...
);
```
@@ -1,4 +1 @@
include: package:wyatt_analysis/analysis_options.flutter.yaml include: package:wyatt_analysis/analysis_options.flutter.yaml
analyzer:
exclude: "!example/**"
@@ -0,0 +1,6 @@
# 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).
@@ -0,0 +1 @@
[]
File diff suppressed because one or more lines are too long
@@ -0,0 +1,214 @@
# 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.
@@ -0,0 +1,6 @@
# 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).
@@ -0,0 +1,237 @@
# 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>_
@@ -0,0 +1,43 @@
# 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,
});
```
@@ -0,0 +1,34 @@
# 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;
```
@@ -0,0 +1,35 @@
# 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;
```
@@ -0,0 +1,35 @@
# 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;
```
@@ -0,0 +1,35 @@
# 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;
```
@@ -0,0 +1,34 @@
# 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;
```
@@ -0,0 +1,34 @@
# 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;
```
@@ -0,0 +1,34 @@
# 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;
```
@@ -0,0 +1,34 @@
# 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;
```
@@ -0,0 +1,36 @@
# 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;
```
@@ -0,0 +1,36 @@
# 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;
```
@@ -0,0 +1,55 @@
# 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,
];
```
@@ -0,0 +1,34 @@
# 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;
```
@@ -0,0 +1,34 @@
# 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;
```
@@ -0,0 +1,47 @@
# 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;
```
@@ -0,0 +1,247 @@
# 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>_
@@ -0,0 +1,51 @@
# 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');
}
}
```
@@ -0,0 +1,54 @@
# 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');
}
}
```
@@ -0,0 +1,41 @@
# 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;
```
@@ -0,0 +1,33 @@
# 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;
```
@@ -0,0 +1,137 @@
# 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>_
@@ -0,0 +1,49 @@
# 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.';
}
}
```
@@ -0,0 +1,31 @@
# 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.');
```
@@ -0,0 +1,139 @@
# 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>_
@@ -0,0 +1,31 @@
# 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();
```
@@ -0,0 +1,31 @@
# 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);
```
@@ -0,0 +1,122 @@
# 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>
@@ -0,0 +1,25 @@
# AuthFormField constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthFormField()
@@ -0,0 +1,34 @@
# 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';
```
@@ -0,0 +1,34 @@
# 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';
```
@@ -0,0 +1,34 @@
# 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';
```
@@ -0,0 +1,131 @@
# 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>
@@ -0,0 +1,25 @@
# AuthFormName constructor
*[<Null safety>](https://dart.dev/null-safety)*
AuthFormName()
@@ -0,0 +1,34 @@
# 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';
```
@@ -0,0 +1,34 @@
# 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';
```
@@ -0,0 +1,34 @@
# 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';
```
@@ -0,0 +1,34 @@
# 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';
```
@@ -0,0 +1,216 @@
# 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>_
@@ -0,0 +1,35 @@
# 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,
});
```
@@ -0,0 +1,36 @@
# 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;
```
@@ -0,0 +1,85 @@
# 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);
}
},
);
```
@@ -0,0 +1,33 @@
# 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;
```
@@ -0,0 +1,33 @@
# 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;
```
@@ -0,0 +1,137 @@
# 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>_
@@ -0,0 +1,30 @@
# AuthenticationChangeEvent constructor
*[<Null safety>](https://dart.dev/null-safety)*
const
AuthenticationChangeEvent()
## Implementation
```dart
const AuthenticationChangeEvent();
```
@@ -0,0 +1,42 @@
# 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 => [];
```
@@ -0,0 +1,47 @@
# 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;
```

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