From 6d3c64d17c410090479669ec3f1741888e2c5677 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Wed, 7 Dec 2022 17:14:00 -0500 Subject: [PATCH 001/320] feat(ui_layout): add frame layout (close #67) --- packages/wyatt_ui_layout/README.md | 1 + .../presentation/layouts/frame_layout.dart | 41 +++++++++++++++++++ .../lib/src/presentation/presentation.dart | 1 + 3 files changed, 43 insertions(+) create mode 100644 packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart diff --git a/packages/wyatt_ui_layout/README.md b/packages/wyatt_ui_layout/README.md index 7f0c4c68..2cbb1aab 100644 --- a/packages/wyatt_ui_layout/README.md +++ b/packages/wyatt_ui_layout/README.md @@ -32,3 +32,4 @@ Wyatt Ui Layout for Flutter - Layouts : - App Bar Layout - Bottom Navigation Bar Layout + - Frame Layout (wrapp both appbar & bottom bar) diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart new file mode 100644 index 00000000..ebe8f13b --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -0,0 +1,41 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; + +class FrameLayout extends Layout { + final String title; + final Widget body; + final int currentIndex; + + const FrameLayout({ + required this.title, + required this.body, + required this.currentIndex, + super.key, + }); + + @override + Widget build(BuildContext context) => Scaffold( + appBar: context.components.appBar.configure(title: title), + body: body, + bottomNavigationBar: context.components.bottomNavigationBar.configure( + currentIndex: currentIndex, + ), + ); +} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart b/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart index b9ee6729..a1bff66c 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart @@ -1,2 +1,3 @@ export 'layouts/app_bar_layout.dart'; export 'layouts/bottom_navigation_bar_layout.dart'; +export 'layouts/frame_layout.dart'; -- 2.47.2 From 098ec9715eb0ef705df5eda90bf0f9ac6251b3c2 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Wed, 7 Dec 2022 18:20:04 -0500 Subject: [PATCH 002/320] feat(ui_layout): add loading & error widget to component theme (close #69) --- .../lib/src/domain/entities/component.dart | 5 +++++ .../lib/src/domain/entities/components.dart | 20 ++++++++++++------- .../src/features/component_theme_data.dart | 4 ++++ 3 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/component.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart new file mode 100644 index 00000000..0a2f8205 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart @@ -0,0 +1,5 @@ +import 'package:flutter/material.dart'; + +abstract class Component extends StatelessWidget { + const Component({super.key}); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart index 496f50ce..105753c3 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart @@ -15,19 +15,16 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/src/domain/entities/component.dart'; -abstract class AppBarComponent extends PreferredSize { +abstract class AppBarComponent extends Component { final String? title; - const AppBarComponent({this.title, super.key}) - : super( - preferredSize: const Size.fromHeight(60), - child: const SizedBox.shrink(), - ); + const AppBarComponent({this.title, super.key}); AppBarComponent configure({String? title}); } -abstract class BottomNavigationBarComponent extends StatelessWidget { +abstract class BottomNavigationBarComponent extends Component { final int currentIndex; final void Function(BuildContext, int)? onTap; const BottomNavigationBarComponent({ @@ -41,3 +38,12 @@ abstract class BottomNavigationBarComponent extends StatelessWidget { int currentIndex = 0, }); } + +abstract class ErrorWidget extends Component { + final String error; + const ErrorWidget({required this.error, super.key}); +} + +abstract class LoadingWidget extends Component { + const LoadingWidget({super.key}); +} diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index 0e6ddf34..79594623 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -19,9 +19,13 @@ import 'package:wyatt_ui_components/src/domain/entities/components.dart'; class ComponentThemeData { final AppBarComponent appBar; final BottomNavigationBarComponent bottomNavigationBar; + final ErrorWidget errorWidget; + final LoadingWidget loadingWidget; const ComponentThemeData.raw({ required this.appBar, required this.bottomNavigationBar, + required this.errorWidget, + required this.loadingWidget, }); } -- 2.47.2 From d792f4cbe97b8265215093fdc66db305825c539f Mon Sep 17 00:00:00 2001 From: AN12345 Date: Wed, 7 Dec 2022 18:54:48 -0500 Subject: [PATCH 003/320] feat(ui_layout): update example & move configure function (#69) --- .../example/lib/component_theme.dart | 14 ++++++ .../lib/components/custom_app_bar.dart | 16 +++++++ .../lib/components/custom_bottom_bar.dart | 40 ++++++++++++++++ .../lib/components/custom_error_widget.dart | 16 +++++++ .../lib/components/custom_loading_widget.dart | 18 +++++++ .../wyatt_ui_components/example/lib/main.dart | 48 +++++++++++++++---- .../lib/src/domain/entities/component.dart | 2 + .../lib/src/domain/entities/components.dart | 19 ++++++-- .../src/features/component_theme_data.dart | 4 +- 9 files changed, 161 insertions(+), 16 deletions(-) create mode 100644 packages/wyatt_ui_components/example/lib/component_theme.dart create mode 100644 packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart create mode 100644 packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart create mode 100644 packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart create mode 100644 packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart diff --git a/packages/wyatt_ui_components/example/lib/component_theme.dart b/packages/wyatt_ui_components/example/lib/component_theme.dart new file mode 100644 index 00000000..1cf944bf --- /dev/null +++ b/packages/wyatt_ui_components/example/lib/component_theme.dart @@ -0,0 +1,14 @@ +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_components_example/components/custom_app_bar.dart'; +import 'package:wyatt_ui_components_example/components/custom_bottom_bar.dart'; +import 'package:wyatt_ui_components_example/components/custom_error_widget.dart'; +import 'package:wyatt_ui_components_example/components/custom_loading_widget.dart'; + +class AppThemeComponent { + static ComponentThemeData get components => const ComponentThemeData.raw( + appBar: CustomAppBar(), + bottomNavigationBar: CustomBottomNavigationBar(), + errorWidget: CustomErrorWidget(), + loadingWidget: CustomLoadingWidget(), + ); +} diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart new file mode 100644 index 00000000..8bac84a7 --- /dev/null +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class CustomAppBar extends AppBarComponent { + const CustomAppBar({super.title, super.key}); + + @override + Widget build(BuildContext context) => AppBar( + title: Text(super.title ?? ''), + ); + + @override + AppBarComponent configure({String? title}) => CustomAppBar( + title: title ?? this.title, + ); +} diff --git a/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart new file mode 100644 index 00000000..d3c13033 --- /dev/null +++ b/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class CustomBottomNavigationBar extends BottomNavigationBarComponent { + const CustomBottomNavigationBar({ + super.currentIndex, + super.onTap, + super.key, + }); + + @override + Widget build(BuildContext context) => BottomNavigationBar( + currentIndex: currentIndex, + onTap: (index) => super.onTap?.call(context, index), + items: const [ + BottomNavigationBarItem( + label: 'Icon 1', + icon: Icon( + Icons.nearby_off, + ), + ), + BottomNavigationBarItem( + label: 'Icon 2', + icon: Icon( + Icons.dangerous, + ), + ), + ], + ); + + @override + CustomBottomNavigationBar configure({ + void Function(BuildContext, int)? onTap, + int currentIndex = 0, + }) => + CustomBottomNavigationBar( + onTap: onTap ?? this.onTap, + currentIndex: currentIndex, + ); +} diff --git a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart new file mode 100644 index 00000000..8b2a9b5a --- /dev/null +++ b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class CustomErrorWidget extends ErrorWidgetComponent { + const CustomErrorWidget({super.error, super.key}); + + @override + Widget build(BuildContext context) => ColoredBox( + color: Colors.red, + child: Center(child: Text(error ?? 'Error')), + ); + + @override + ErrorWidgetComponent configure({String? error}) => + CustomErrorWidget(error: error ?? this.error); +} diff --git a/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart new file mode 100644 index 00000000..912312fe --- /dev/null +++ b/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class CustomLoadingWidget extends LoadingWidgetComponent { + const CustomLoadingWidget({super.color, super.key}); + + @override + Widget build(BuildContext context) => Center( + child: CircularProgressIndicator( + color: color, + ), + ); + + @override + CustomLoadingWidget configure({Color? color}) => CustomLoadingWidget( + color: color ?? this.color, + ); +} diff --git a/packages/wyatt_ui_components/example/lib/main.dart b/packages/wyatt_ui_components/example/lib/main.dart index 840b81d6..673d614a 100644 --- a/packages/wyatt_ui_components/example/lib/main.dart +++ b/packages/wyatt_ui_components/example/lib/main.dart @@ -15,6 +15,8 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_components_example/component_theme.dart'; void main() { runApp(const MyApp()); @@ -26,17 +28,45 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { - return MaterialApp( - title: 'Wyatt Ui Components Example', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: Scaffold( - appBar: AppBar( - title: const Text('Wyatt Ui Components Example'), + return ComponentTheme( + componentThemeWidget: AppThemeComponent.components, + child: MaterialApp( + title: 'Wyatt Ui Components Example', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const Scaffold( + body: Home(), ), - body: const Center(child: Text('')), ), ); } } + +class Home extends StatelessWidget { + const Home({super.key}); + + @override + Widget build(BuildContext context) => Scaffold( + appBar: PreferredSize( + preferredSize: const Size.fromHeight(60), + child: context.components.appBar.configure(title: 'Example title'), + ), + body: Column( + children: [ + Expanded( + child: context.components.errorWidget + .configure(error: 'Example erreur'), + ), + const SizedBox( + height: 10, + ), + Expanded( + child: context.components.loadingWidget + .configure(color: Colors.green), + ), + ], + ), + bottomNavigationBar: context.components.bottomNavigationBar, + ); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart index 0a2f8205..04e60ebc 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart @@ -2,4 +2,6 @@ import 'package:flutter/material.dart'; abstract class Component extends StatelessWidget { const Component({super.key}); + + Component configure(); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart index 105753c3..be6d79e2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart @@ -21,6 +21,7 @@ abstract class AppBarComponent extends Component { final String? title; const AppBarComponent({this.title, super.key}); + @override AppBarComponent configure({String? title}); } @@ -33,17 +34,25 @@ abstract class BottomNavigationBarComponent extends Component { super.key, }); + @override BottomNavigationBarComponent configure({ void Function(BuildContext, int)? onTap, int currentIndex = 0, }); } -abstract class ErrorWidget extends Component { - final String error; - const ErrorWidget({required this.error, super.key}); +abstract class ErrorWidgetComponent extends Component { + final String? error; + const ErrorWidgetComponent({required this.error, super.key}); + + @override + ErrorWidgetComponent configure({String? error}); } -abstract class LoadingWidget extends Component { - const LoadingWidget({super.key}); +abstract class LoadingWidgetComponent extends Component { + final Color? color; + const LoadingWidgetComponent({required this.color, super.key}); + + @override + LoadingWidgetComponent configure({Color? color}); } diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index 79594623..66540540 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -19,8 +19,8 @@ import 'package:wyatt_ui_components/src/domain/entities/components.dart'; class ComponentThemeData { final AppBarComponent appBar; final BottomNavigationBarComponent bottomNavigationBar; - final ErrorWidget errorWidget; - final LoadingWidget loadingWidget; + final ErrorWidgetComponent errorWidget; + final LoadingWidgetComponent loadingWidget; const ComponentThemeData.raw({ required this.appBar, -- 2.47.2 From 5298bd99ed819358f7cadf19bb250d89b127b2bd Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Sat, 3 Dec 2022 20:12:08 -0500 Subject: [PATCH 004/320] feat(authentication): add reauthenticate, updateEmail and updatePassword --- .../lib/src/core/exceptions/exceptions.dart | 21 ++++++ .../core/exceptions/exceptions_firebase.dart | 72 +++++++++++++++++++ ...hentication_firebase_data_source_impl.dart | 61 ++++++++++++++++ .../authentication_mock_data_source_impl.dart | 45 ++++++++++++ .../authentication_repository_impl.dart | 34 +++++++++ .../authentication_remote_data_source.dart | 6 ++ .../authentication_repository.dart | 33 +++++++++ 7 files changed, 272 insertions(+) diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart index dbe4b429..cfcfba68 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart @@ -256,3 +256,24 @@ abstract class GetIdTokenFailureInterface GetIdTokenFailureInterface.fromCode(super.code) : super.fromCode(); } + +abstract class ReauthenticateFailureInterface + extends AuthenticationFailureInterface { + ReauthenticateFailureInterface(super.code, super.msg); + + ReauthenticateFailureInterface.fromCode(super.code) : super.fromCode(); +} + +abstract class UpdateEmailFailureInterface + extends AuthenticationFailureInterface { + UpdateEmailFailureInterface(super.code, super.msg); + + UpdateEmailFailureInterface.fromCode(super.code) : super.fromCode(); +} + +abstract class UpdatePasswordFailureInterface + extends AuthenticationFailureInterface { + UpdatePasswordFailureInterface(super.code, super.msg); + + UpdatePasswordFailureInterface.fromCode(super.code) : super.fromCode(); +} diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart index 7a6e37b4..c36dcbd0 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart @@ -277,3 +277,75 @@ class GetIdTokenFailureFirebase extends GetIdTokenFailureInterface { GetIdTokenFailureFirebase.fromCode(super.code) : super.fromCode(); } + +class ReauthenticateFailureFirebase extends ReauthenticateFailureInterface { + ReauthenticateFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + ReauthenticateFailureFirebase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'user-mismatch': + msg = 'Given credential does not correspond to the user.'; + break; + case 'user-not-found': + msg = 'User is not found, please create an account.'; + break; + case 'invalid-credential': + msg = 'The credential received is malformed or has expired.'; + break; + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + case 'invalid-verification-code': + msg = 'The credential verification code received is invalid.'; + break; + case 'invalid-verification-id': + msg = 'The credential verification ID received is invalid.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +class UpdateEmailFailureFirebase extends UpdateEmailFailureInterface { + UpdateEmailFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + UpdateEmailFailureFirebase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'email-already-in-use': + msg = 'An account already exists for that email.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +class UpdatePasswordFailureFirebase extends UpdatePasswordFailureInterface { + UpdatePasswordFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + UpdatePasswordFailureFirebase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'weak-password': + msg = 'Please enter a stronger password.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index 565b76cc..131e160a 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -21,6 +21,7 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationFirebaseDataSourceImpl extends AuthenticationRemoteDataSource { final FirebaseAuth _firebaseAuth; + UserCredential? _latestCreds; AuthenticationFirebaseDataSourceImpl({FirebaseAuth? firebaseAuth}) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance; @@ -51,6 +52,7 @@ class AuthenticationFirebaseDataSourceImpl email: email, password: password, ); + _latestCreds = userCredential; final user = userCredential.user; if (user.isNotNull) { return _mapper(user!); @@ -76,6 +78,7 @@ class AuthenticationFirebaseDataSourceImpl email: email, password: password, ); + _latestCreds = userCredential; final user = userCredential.user; if (user.isNotNull) { return _mapper(user!); @@ -92,6 +95,7 @@ class AuthenticationFirebaseDataSourceImpl @override Future signOut() async { try { + _latestCreds = null; await _firebaseAuth.signOut(); } catch (_) { throw SignOutFailureFirebase(); @@ -164,6 +168,7 @@ class AuthenticationFirebaseDataSourceImpl Future signInAnonymously() async { try { final userCredential = await _firebaseAuth.signInAnonymously(); + _latestCreds = userCredential; final user = userCredential.user; if (user.isNotNull) { return _mapper(user!); @@ -199,4 +204,60 @@ class AuthenticationFirebaseDataSourceImpl throw RefreshFailureFirebase(); } } + + @override + Future reauthenticateWithCredential() async { + try { + if (_latestCreds?.credential != null) { + await _firebaseAuth.currentUser + ?.reauthenticateWithCredential(_latestCreds!.credential!); + } else { + throw Exception(); // Get caught just after. + } + final user = _firebaseAuth.currentUser; + if (user.isNotNull) { + return _mapper(user!); + } else { + throw Exception(); // Get caught just after. + } + } on FirebaseAuthException catch (e) { + throw ReauthenticateFailureFirebase.fromCode(e.code); + } catch (_) { + throw ReauthenticateFailureFirebase(); + } + } + + @override + Future updateEmail({required String email}) async { + try { + await _firebaseAuth.currentUser!.updateEmail(email); + final user = _firebaseAuth.currentUser; + if (user.isNotNull) { + return _mapper(user!); + } else { + throw Exception(); // Get caught just after. + } + } on FirebaseAuthException catch (e) { + throw UpdateEmailFailureFirebase.fromCode(e.code); + } catch (_) { + throw UpdateEmailFailureFirebase(); + } + } + + @override + Future updatePassword({required String password}) async { + try { + await _firebaseAuth.currentUser!.updatePassword(password); + final user = _firebaseAuth.currentUser; + if (user.isNotNull) { + return _mapper(user!); + } else { + throw Exception(); // Get caught just after. + } + } on FirebaseAuthException catch (e) { + throw UpdatePasswordFailureFirebase.fromCode(e.code); + } catch (_) { + throw UpdatePasswordFailureFirebase(); + } + } } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart index 1a7fa1d5..1d750629 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -23,6 +23,7 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { Pair? _connectedMock; Pair? _registeredMock; + DateTime _lastSignInTime = DateTime.now(); final StreamController _streamAccount = StreamController() ..add(null); @@ -118,6 +119,7 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { ); _streamAccount.add(mock); _connectedMock = _connectedMock?.copyWith(left: mock); + _lastSignInTime = DateTime.now(); return Future.value(mock); } @@ -149,6 +151,7 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { } _streamAccount.add(_registeredMock!.left); _connectedMock = _registeredMock!.copyWith(); + _lastSignInTime = DateTime.now(); return _registeredMock!.left!; } throw SignInWithCredentialFailureFirebase(); @@ -193,6 +196,7 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { ); _streamAccount.add(mock); _registeredMock = Pair(mock, password); + _lastSignInTime = DateTime.now(); return Future.value(mock); } @@ -204,4 +208,45 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { await _randomDelay(); return true; } + + @override + Future reauthenticateWithCredential() async { + await _randomDelay(); + if (_connectedMock.isNull) { + throw ReauthenticateFailureFirebase(); + } + await refresh(); + _lastSignInTime = DateTime.now(); + return Future.value(_connectedMock?.left); + } + + @override + Future updateEmail({required String email}) { + final before = DateTime.now().subtract(const Duration(seconds: 10)); + if (_lastSignInTime.isBefore(before)) { + throw UpdateEmailFailureFirebase('requires-recent-login'); + } + final refresh = DateTime.now(); + final mock = (_connectedMock?.left as AccountModel?) + ?.copyWith(lastSignInTime: refresh, email: email); + _connectedMock = _connectedMock?.copyWith(left: mock); + _registeredMock = _registeredMock?.copyWith(left: mock); + _streamAccount.add(mock); + return Future.value(_connectedMock?.left); + } + + @override + Future updatePassword({required String password}) { + final before = DateTime.now().subtract(const Duration(seconds: 10)); + if (_lastSignInTime.isBefore(before)) { + throw UpdatePasswordFailureFirebase('requires-recent-login'); + } + final refresh = DateTime.now(); + final mock = (_connectedMock?.left as AccountModel?) + ?.copyWith(lastSignInTime: refresh); + _connectedMock = _connectedMock?.copyWith(left: mock, right: password); + _registeredMock = _registeredMock?.copyWith(left: mock, right: password); + _streamAccount.add(mock); + return Future.value(_connectedMock?.left); + } } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart index f5653592..c0f2c8e1 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart @@ -314,4 +314,38 @@ class AuthenticationRepositoryImpl }, (error) => error, ); + + @override + FutureOrResult reauthenticateWithCredential() => + Result.tryCatchAsync( + () async { + final account = await _authenticationRemoteDataSource + .reauthenticateWithCredential(); + return account; + }, + (error) => error, + ); + + @override + FutureOrResult updateEmail({required String email}) => + Result.tryCatchAsync( + () async { + final account = + await _authenticationRemoteDataSource.updateEmail(email: email); + return account; + }, + (error) => error, + ); + + @override + FutureOrResult updatePassword({required String password}) => + Result.tryCatchAsync( + () async { + final account = await _authenticationRemoteDataSource.updatePassword( + password: password, + ); + return account; + }, + (error) => error, + ); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart index 755aa157..b379de92 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart @@ -48,4 +48,10 @@ abstract class AuthenticationRemoteDataSource extends BaseRemoteDataSource { Future verifyPasswordResetCode({required String code}); Future signInAnonymously(); + + Future updateEmail({required String email}); + + Future updatePassword({required String password}); + + Future reauthenticateWithCredential(); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart index b88de024..d4b2c23b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart @@ -84,12 +84,45 @@ abstract class AuthenticationRepository extends BaseRepository { required String password, }); + /// {@template update_email} + /// Update or add [email]. + /// + /// Throws a UpdateEmailFailureInterface if + /// an exception occurs. + /// {@endtemplate} + FutureOrResult updateEmail({ + required String email, + }); + + /// {@template update_password} + /// Update or add [password]. + /// + /// Throws a UpdatePasswordFailureInterface if + /// an exception occurs. + /// {@endtemplate} + FutureOrResult updatePassword({ + required String password, + }); + + /// {@template reauthenticate} + /// Some security-sensitive actions—such as deleting an account, + /// setting a primary email address, and changing a password—require that + /// the user has recently signed in. + /// + /// Throws a ReauthenticateFailureInterface if + /// an exception occurs. + /// {@endtemplate} + FutureOrResult reauthenticateWithCredential(); + /// {@template signout} /// Signs out the current user. /// It also clears the cache and the associated data. /// {@endtemplate} FutureOrResult signOut(); + /// {@template refresh} + /// Refreshes the current user, if signed in. + /// {@endtemplate} FutureOrResult refresh(); /// {@template stream_account} -- 2.47.2 From 94d7efbe8caaa5d321424baf21193003738c2890 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 7 Dec 2022 19:43:25 -0500 Subject: [PATCH 005/320] fix(form): fix textController rebuild --- .../features/widgets/input_builder_text_controller.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart index 999c9104..a571ce69 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart @@ -48,7 +48,7 @@ class InputBuilderTextController().formName; + final formName = context.read().formName; final value = context.read().accessForm(formName).valueOf(field); _controller -- 2.47.2 From 672aba708464e1b08127d96f50641d5902307eb7 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 7 Dec 2022 19:45:25 -0500 Subject: [PATCH 006/320] fix(auth): fix mock on register --- .../remote/authentication_mock_data_source_impl.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart index 1d750629..67ef28cd 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -196,6 +196,7 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { ); _streamAccount.add(mock); _registeredMock = Pair(mock, password); + _connectedMock = _registeredMock!.copyWith(); _lastSignInTime = DateTime.now(); return Future.value(mock); } -- 2.47.2 From 5e83c9e74e7c2cffb5c7981a0c5e49ec3cf3e764 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 7 Dec 2022 19:47:47 -0500 Subject: [PATCH 007/320] docs(auth): add correct header --- .../example/lib/bootstrap.dart | 23 +-- .../lib/core/constants/form_field.dart | 24 ++-- .../example/lib/core/constants/form_name.dart | 19 +++ .../example/lib/core/routes/router.dart | 33 +++-- .../lib/core/utils/app_bloc_observer.dart | 23 +-- .../example/lib/core/utils/forms.dart | 32 +++++ .../example/lib/main.dart | 16 +++ .../lib/presentation/features/app/app.dart | 53 +++---- .../blocs/edit_profile_cubit.dart | 74 ++++++++++ .../edit_profile/edit_profile_page.dart | 61 ++++++++ .../widgets/edit_profile_form.dart | 136 ++++++++++++++++++ .../presentation/features/home/home_page.dart | 40 ++++-- .../features/sign_in/sign_in_page.dart | 23 +-- .../sign_in/widgets/sign_in_form.dart | 23 +-- .../features/sign_up/sign_up_page.dart | 23 +-- .../sign_up/widgets/sign_up_form.dart | 23 +-- .../presentation/features/sub/sub_page.dart | 28 ++-- .../features/welcome/welcome_page.dart | 23 +-- 18 files changed, 557 insertions(+), 120 deletions(-) create mode 100644 packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart create mode 100644 packages/wyatt_authentication_bloc/example/lib/core/utils/forms.dart create mode 100644 packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart create mode 100644 packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/edit_profile_page.dart create mode 100644 packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/widgets/edit_profile_form.dart diff --git a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart index 84bb68c4..4e0f4070 100644 --- a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart +++ b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: bootstrap.dart -// Created Date: 19/08/2022 15:05:17 -// Last Modified: Fri Nov 11 2022 -// ----- -// Copyright (c) 2022 +// 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 . import 'dart:async'; diff --git a/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart index e371dfb6..84636b9f 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart @@ -1,12 +1,20 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: form_field.dart -// Created Date: 19/08/2022 11:52:33 -// Last Modified: 19/08/2022 16:35:39 -// ----- -// Copyright (c) 2022 +// 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 . abstract class AppFormField { + static const oldPassword = 'oldPassword'; static const confirmedPassword = 'confirmedPassword'; } diff --git a/packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart new file mode 100644 index 00000000..a5ce457e --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart @@ -0,0 +1,19 @@ +// 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 . + +abstract class AppFormName { + static const editProfile = 'editProfile'; +} diff --git a/packages/wyatt_authentication_bloc/example/lib/core/routes/router.dart b/packages/wyatt_authentication_bloc/example/lib/core/routes/router.dart index 85545c34..657d3917 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/routes/router.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/routes/router.dart @@ -1,12 +1,20 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: router.dart -// Created Date: 19/08/2022 11:52:22 -// Last Modified: 19/08/2022 16:39:07 -// ----- -// Copyright (c) 2022 +// 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 . +import 'package:example_router/presentation/features/edit_profile/edit_profile_page.dart'; import 'package:example_router/presentation/features/home/home_page.dart'; import 'package:example_router/presentation/features/sign_in/sign_in_page.dart'; import 'package:example_router/presentation/features/sign_up/sign_up_page.dart'; @@ -75,5 +83,14 @@ class AppRouter { const SubPage(), ), ), + GoRoute( + path: '/home/edit', + name: EditProfilePage.pageName, + pageBuilder: (context, state) => defaultTransition( + context, + state, + const EditProfilePage(), + ), + ), ]; } diff --git a/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart b/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart index 1b44c4e8..3490aee1 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: app_bloc_observer.dart -// Created Date: 19/08/2022 12:02:23 -// Last Modified: 19/08/2022 12:02:45 -// ----- -// Copyright (c) 2022 +// 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 . import 'package:flutter/foundation.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; diff --git a/packages/wyatt_authentication_bloc/example/lib/core/utils/forms.dart b/packages/wyatt_authentication_bloc/example/lib/core/utils/forms.dart new file mode 100644 index 00000000..abfc6857 --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/core/utils/forms.dart @@ -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 . + +import 'package:example_router/core/constants/form_field.dart'; +import 'package:example_router/core/constants/form_name.dart'; +import 'package:example_router/core/utils/custom_password.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; +import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; + +abstract class AppForms { + static WyattForm getEditProfileForm() => WyattFormImpl( + [ + FormInput(AuthFormField.email, const Email.pure()), + FormInput(AuthFormField.password, const CustomPassword.pure()), + FormInput(AppFormField.oldPassword, const CustomPassword.pure()), + ], + name: AppFormName.editProfile, + ); +} diff --git a/packages/wyatt_authentication_bloc/example/lib/main.dart b/packages/wyatt_authentication_bloc/example/lib/main.dart index 06b15c7c..0149dcb6 100644 --- a/packages/wyatt_authentication_bloc/example/lib/main.dart +++ b/packages/wyatt_authentication_bloc/example/lib/main.dart @@ -1,3 +1,19 @@ +// 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 . + import 'package:example_router/bootstrap.dart'; import 'package:example_router/presentation/features/app/app.dart'; diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart index a2afa06e..99d1d999 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: app.dart -// Created Date: 19/08/2022 12:05:38 -// Last Modified: Sat Dec 03 2022 -// ----- -// Copyright (c) 2022 +// 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 . import 'dart:async'; import 'dart:math'; @@ -14,6 +21,7 @@ import 'package:example_router/core/constants/form_field.dart'; import 'package:example_router/core/dependency_injection/get_it.dart'; import 'package:example_router/core/routes/router.dart'; import 'package:example_router/core/utils/custom_password.dart'; +import 'package:example_router/core/utils/forms.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; @@ -69,7 +77,7 @@ class App extends StatelessWidget { @override Widget build(BuildContext context) { - AuthenticationState? previous; + AuthenticationState? previous; final AuthenticationCubit authenticationCubit = AuthenticationCubit(authenticationRepository: authenticationRepository); @@ -85,29 +93,18 @@ class App extends StatelessWidget { redirect: (context, state) { final authState = authenticationCubit.state; - if (authState != previous) { + if (authState.status != previous?.status) { previous = authState; - // Check if current user is logged in - final loggedIn = - authState.status == AuthenticationStatus.authenticated; - // Checking if current path is onboarding or not final isOnboarding = AppRouter.publicRoutes.contains(state.subloc); - - if (!loggedIn) { + if (authState.status == AuthenticationStatus.unauthenticated) { debugPrint('Not logged'); - if (isOnboarding) { - return null; - } else { + if (!isOnboarding) { return '/'; } - } else { + } else if (authState.status == AuthenticationStatus.authenticated) { debugPrint('Logged'); - if (isOnboarding) { - return '/home'; - } else { - return null; - } + return '/home'; } } return null; @@ -116,9 +113,13 @@ class App extends StatelessWidget { return MultiRepositoryProvider( providers: [ - RepositoryProvider.value( + RepositoryProvider>.value( value: authenticationRepository, ), + RepositoryProvider( + create: (context) => + FormRepositoryImpl()..registerForm(AppForms.getEditProfileForm()), + ), ], child: MultiBlocProvider( providers: [ diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart new file mode 100644 index 00000000..e82e2b4c --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart @@ -0,0 +1,74 @@ +// 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 . + +import 'package:example_router/core/constants/form_field.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; +import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; +import 'package:wyatt_type_utils/wyatt_type_utils.dart'; + +class EditProfileCubit extends FormDataCubitImpl { + final AuthenticationRepository authenticationRepository; + + EditProfileCubit( + super._formRepository, + super._formName, { + required this.authenticationRepository, + }) : super(); + + @override + Future submit() async { + emit( + state.copyWith( + status: FormStatus.submissionInProgress, + ), + ); + final user = (await authenticationRepository.getAccount()).ok; + + final form = state.form; + final email = form.valueOf(AuthFormField.email); + final oldPassword = form.valueOf(AppFormField.oldPassword); + final newPassword = form.valueOf(AuthFormField.password); + + if (email.isNullOrEmpty || + oldPassword.isNullOrEmpty || + newPassword.isNullOrEmpty) { + emit( + state.copyWith( + errorMessage: 'An error occured while retrieving data from the form.', + status: FormStatus.submissionFailure, + ), + ); + } + + try { + // await authenticationRepository.signInWithEmailAndPassword( + // email: user?.email ?? '', + // password: oldPassword ?? '', + // ); + // await authenticationRepository.reauthenticateWithCredential(); + await authenticationRepository.updateEmail(email: email!); + await authenticationRepository.updatePassword(password: newPassword!); + } on Exception catch (e) { + emit( + state.copyWith( + status: FormStatus.submissionFailure, + errorMessage: e.toString(), + ), + ); + } + emit(state.copyWith(status: FormStatus.submissionSuccess)); + } +} \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/edit_profile_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/edit_profile_page.dart new file mode 100644 index 00000000..a557d338 --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/edit_profile_page.dart @@ -0,0 +1,61 @@ +// 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 . + +import 'package:example_router/core/constants/form_name.dart'; +import 'package:example_router/presentation/features/edit_profile/blocs/edit_profile_cubit.dart'; +import 'package:example_router/presentation/features/edit_profile/widgets/edit_profile_form.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; +import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; + +class EditProfilePage extends StatelessWidget { + const EditProfilePage({Key? key}) : super(key: key); + + static String pageName = 'EditProfile'; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('Edit Profile')), + body: Padding( + padding: const EdgeInsets.all(8), + child: SingleChildScrollView( + child: BlocProvider( + create: (context) => EditProfileCubit( + context.read(), + AppFormName.editProfile, + authenticationRepository: + context.read>(), + )..dataChanged( + AuthFormField.email, + Email.dirty( + context + .read>() + .state + .accountWrapper + ?.account + ?.email ?? + '', + ), + ), + child: const EditProfileForm(), + ), + ), + ), + ); + } +} diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/widgets/edit_profile_form.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/widgets/edit_profile_form.dart new file mode 100644 index 00000000..726e51a4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/widgets/edit_profile_form.dart @@ -0,0 +1,136 @@ +// 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 . + +import 'package:example_router/core/constants/form_field.dart'; +import 'package:example_router/core/utils/custom_password.dart'; +import 'package:example_router/presentation/features/edit_profile/blocs/edit_profile_cubit.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; +import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; + +class _EmailInput extends StatelessWidget { + @override + Widget build(BuildContext context) { + return InputBuilderTextController( + field: AuthFormField.email, + builder: ((context, cubit, state, field, input, controller, extra) { + return TextField( + onChanged: (email) => cubit.dataChanged( + AuthFormField.email, Email.dirty(email)), + keyboardType: TextInputType.emailAddress, + controller: controller, + decoration: InputDecoration( + labelText: 'Email', + helperText: '', + errorText: input.validator.invalid ? 'Invalid email' : null, + ), + ); + }), + ); + } +} + +class _OldPasswordInput extends StatelessWidget { + @override + Widget build(BuildContext context) { + return InputBuilder( + field: AppFormField.oldPassword, + builder: ((context, cubit, state, field, input) { + return TextField( + onChanged: (pwd) => cubit.dataChanged( + AppFormField.oldPassword, CustomPassword.dirty(pwd)), + obscureText: true, + decoration: InputDecoration( + labelText: 'Old Password', + helperText: '', + errorText: input.validator.invalid ? 'Invalid password' : null, + ), + ); + }), + ); + } +} + +class _NewPasswordInput extends StatelessWidget { + @override + Widget build(BuildContext context) { + return InputBuilder( + field: AuthFormField.password, + builder: ((context, cubit, state, field, input) { + return TextField( + onChanged: (pwd) => cubit.dataChanged( + AuthFormField.password, CustomPassword.dirty(pwd)), + obscureText: true, + decoration: InputDecoration( + labelText: 'New Password', + helperText: '', + errorText: input.validator.invalid ? 'Invalid password' : null, + ), + ); + }), + ); + } +} + +class _EditButton extends StatelessWidget { + @override + Widget build(BuildContext context) { + return SubmitBuilder( + builder: ((context, cubit, status) { + return status.isSubmissionInProgress + ? const CircularProgressIndicator() + : ElevatedButton( + onPressed: status.isValidated ? () => cubit.submit() : null, + child: const Text('Edit profile'), + ); + }), + ); + } +} + +class EditProfileForm extends StatelessWidget { + const EditProfileForm({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return BlocListener( + listener: (context, state) { + if (state.status == FormStatus.submissionFailure) { + ScaffoldMessenger.of(context) + ..hideCurrentSnackBar() + ..showSnackBar( + SnackBar(content: Text(state.errorMessage ?? 'Edit Failure')), + ); + } + }, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _EmailInput(), + const SizedBox(height: 8), + _OldPasswordInput(), + const SizedBox(height: 8), + _NewPasswordInput(), + const SizedBox(height: 16), + _EditButton(), + ], + ), + ), + ); + } +} diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart index e271c7e1..a015690b 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart @@ -1,12 +1,20 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: home_page.dart -// Created Date: 19/08/2022 14:38:24 -// Last Modified: Wed Nov 09 2022 -// ----- -// Copyright (c) 2022 +// 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 . +import 'package:example_router/presentation/features/edit_profile/edit_profile_page.dart'; import 'package:example_router/presentation/features/sub/sub_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -25,7 +33,8 @@ class HomePage extends StatelessWidget { title: const Text('Home'), actions: [ IconButton( - onPressed: () => context.read>().signOut(), + onPressed: () => + context.read>().signOut(), icon: const Icon(Icons.logout_rounded)) ], ), @@ -35,8 +44,8 @@ class HomePage extends StatelessWidget { child: Column( children: [ AuthenticationBuilder( - authenticated: (context, accountWrapper) => - Text('Logged as ${accountWrapper.account?.email} | GeneratedId is ${accountWrapper.data}'), + authenticated: (context, accountWrapper) => Text( + 'Logged as ${accountWrapper.account?.email} | GeneratedId is ${accountWrapper.data}'), unauthenticated: (context) => const Text('Not logged (unauthenticated)'), unknown: (context) => const Text('Not logged (unknown)'), @@ -45,8 +54,13 @@ class HomePage extends StatelessWidget { height: 8, ), ElevatedButton( - onPressed: () => context.pushNamed(SubPage.pageName), - child: const Text('Go to sub page')), + onPressed: () => context.pushNamed(SubPage.pageName), + child: const Text('Go to sub page'), + ), + ElevatedButton( + onPressed: () => context.pushNamed(EditProfilePage.pageName), + child: const Text('Go to edit profile page'), + ), ], ), ), diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart index 39fd0463..5d7aa1e4 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: sign_in_page.dart -// Created Date: 19/08/2022 12:41:42 -// Last Modified: 19/08/2022 15:26:36 -// ----- -// Copyright (c) 2022 +// 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 . import 'package:example_router/presentation/features/sign_in/widgets/sign_in_form.dart'; import 'package:flutter/material.dart'; diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart index 45a45c4a..865b6cec 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: sign_in_form.dart -// Created Date: 19/08/2022 15:24:37 -// Last Modified: Sat Dec 03 2022 -// ----- -// Copyright (c) 2022 +// 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 . import 'package:example_router/core/utils/custom_password.dart'; import 'package:flutter/material.dart'; diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart index 31f18bb6..918f09cd 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: sign_up_page.dart -// Created Date: 19/08/2022 12:41:27 -// Last Modified: 19/08/2022 14:58:51 -// ----- -// Copyright (c) 2022 +// 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 . import 'package:example_router/presentation/features/sign_up/widgets/sign_up_form.dart'; import 'package:flutter/material.dart'; diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart index 0a512fb8..546ec326 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: sign_up_form.dart -// Created Date: 19/08/2022 14:41:08 -// Last Modified: Sat Dec 03 2022 -// ----- -// Copyright (c) 2022 +// 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 . import 'package:example_router/core/constants/form_field.dart'; import 'package:example_router/core/utils/custom_password.dart'; diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart index 14b340b8..48a39986 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: sub_page.dart -// Created Date: 19/08/2022 16:10:05 -// Last Modified: Wed Nov 09 2022 -// ----- -// Copyright (c) 2022 +// 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 . import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -24,7 +31,10 @@ class SubPage extends StatelessWidget { actions: [ IconButton( onPressed: () => context.read>().signOut(), - icon: const Icon(Icons.logout_rounded)) + icon: const Icon(Icons.logout_rounded)), + IconButton( + onPressed: () => context.read>().refresh(), + icon: const Icon(Icons.refresh)) ], ), body: const Padding( diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart index 3794f971..5080183c 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart @@ -1,11 +1,18 @@ -// Author: Hugo Pointcheval -// Email: git@pcl.ovh -// ----- -// File: welcome_page.dart -// Created Date: 19/08/2022 12:33:21 -// Last Modified: Wed Nov 09 2022 -// ----- -// Copyright (c) 2022 +// 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 . import 'package:example_router/presentation/features/sign_in/sign_in_page.dart'; import 'package:example_router/presentation/features/sign_up/sign_up_page.dart'; -- 2.47.2 From bf03324fd0505f8d4c60df70a49329700d707e89 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 7 Dec 2022 20:00:57 -0500 Subject: [PATCH 008/320] chore: add pre-commit rule (see #72) --- .pre-commit-config.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..9ca476d0 --- /dev/null +++ b/.pre-commit-config.yaml @@ -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] -- 2.47.2 From 3aa6d03dd6659c0cc0daf336cfcc04a18d19de1c Mon Sep 17 00:00:00 2001 From: AN12345 Date: Thu, 8 Dec 2022 13:29:01 -0500 Subject: [PATCH 009/320] refactor(crud_bloc): update package using new architecture usecase execute method (close #77) --- .../wyatt_crud_bloc/lib/src/domain/usecases/create.dart | 7 ++++--- .../wyatt_crud_bloc/lib/src/domain/usecases/delete.dart | 5 +++-- .../lib/src/domain/usecases/delete_all.dart | 2 +- packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart | 5 +++-- .../wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart | 2 +- .../wyatt_crud_bloc/lib/src/domain/usecases/query.dart | 4 ++-- .../wyatt_crud_bloc/lib/src/domain/usecases/update.dart | 4 ++-- .../lib/src/domain/usecases/update_all.dart | 4 ++-- 8 files changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart index 4ddf5710..8a6940b5 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart @@ -28,11 +28,12 @@ class Create extends AsyncUseCase { @override FutureOr onStart(Model? params) { - if(params == null){ + if (params == null) { throw ClientException('$Model cannot be null.'); } } - + @override - FutureOrResult call(Model? params) => _crudRepository.create(params!); + FutureOrResult execute(Model? params) => + _crudRepository.create(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart index 3bd2e867..83e49331 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart @@ -27,11 +27,12 @@ class Delete extends AsyncUseCase { @override FutureOr onStart(String? params) { - if(params == null){ + if (params == null) { throw ClientException('Id cannot be null.'); } } @override - FutureOrResult call(String? params) => _crudRepository.delete(params!); + FutureOrResult execute(String? params) => + _crudRepository.delete(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart index d3caf9d1..75fde6ee 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart @@ -24,5 +24,5 @@ class DeleteAll extends AsyncUseCase { DeleteAll(this._crudRepository); @override - FutureOrResult call(void params) => _crudRepository.deleteAll(); + FutureOrResult execute(void params) => _crudRepository.deleteAll(); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart index 947deeca..491323d5 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart @@ -27,11 +27,12 @@ class Get extends AsyncUseCase { @override FutureOr onStart(String? params) { - if(params == null){ + if (params == null) { throw ClientException('Id cannot be null.'); } } @override - FutureOrResult call(String? params) => _crudRepository.get(params!); + FutureOrResult execute(String? params) => + _crudRepository.get(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart index 6088193b..f7de0385 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart @@ -25,5 +25,5 @@ class GetAll GetAll(this._crudRepository); @override - FutureOrResult> call(void params) => _crudRepository.getAll(); + FutureOrResult> execute(void params) => _crudRepository.getAll(); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart index f9b43531..586e3189 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart @@ -29,12 +29,12 @@ class Query @override FutureOr onStart(List? params) { - if(params == null){ + if (params == null) { throw ClientException('List of conditions cannot be null.'); } } @override - FutureOrResult> call(List? params) => + FutureOrResult> execute(List? params) => _crudRepository.query(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart index 982045c7..5379f43e 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart @@ -29,13 +29,13 @@ class Update @override FutureOr onStart(UpdateParameters? params) { - if(params == null){ + if (params == null) { throw ClientException('Update parameters cannot be null.'); } } @override - FutureOrResult call(UpdateParameters? params) => + FutureOrResult execute(UpdateParameters? params) => _crudRepository.update( params!.id, object: params.object, diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart index 35779703..f61ebd18 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart @@ -28,12 +28,12 @@ class UpdateAll @override FutureOr onStart(Map? params) { - if(params == null){ + if (params == null) { throw ClientException('Data cannot be null.'); } } @override - FutureOrResult call(Map? params) => + FutureOrResult execute(Map? params) => _crudRepository.updateAll(params!); } -- 2.47.2 From 33797e4dbf33336d1f01b4b8751f55ef4c68587c Mon Sep 17 00:00:00 2001 From: AN12345 Date: Thu, 8 Dec 2022 13:47:12 -0500 Subject: [PATCH 010/320] refactor(ui_layout): update appbar component (close #78) --- .../lib/src/presentation/layouts/app_bar_layout.dart | 5 ++++- .../lib/src/presentation/layouts/frame_layout.dart | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart index 46d82bd8..9d392e1e 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart @@ -29,7 +29,10 @@ class AppBarLayout extends Layout { @override Widget build(BuildContext context) => Scaffold( - appBar: context.components.appBar.configure(title: title), + appBar: PreferredSize( + preferredSize: const Size.fromHeight(60), + child: context.components.appBar.configure(title: title), + ), body: body, ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart index ebe8f13b..f32b869f 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -32,7 +32,10 @@ class FrameLayout extends Layout { @override Widget build(BuildContext context) => Scaffold( - appBar: context.components.appBar.configure(title: title), + appBar: PreferredSize( + preferredSize: const Size.fromHeight(60), + child: context.components.appBar.configure(title: title), + ), body: body, bottomNavigationBar: context.components.bottomNavigationBar.configure( currentIndex: currentIndex, -- 2.47.2 From ed654893165ce32b52df857ca113c43f30a783c4 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 8 Dec 2022 14:31:57 -0500 Subject: [PATCH 011/320] chore(cli): remove unused package --- packages/wyatt_cli_toolbox/.gitignore | 10 - .../wyatt_cli_toolbox/.vscode/extensions.json | 24 - .../wyatt_cli_toolbox/.vscode/settings.json | 71 -- packages/wyatt_cli_toolbox/AUTHORS | 7 - packages/wyatt_cli_toolbox/CHANGELOG.md | 3 - packages/wyatt_cli_toolbox/LICENSE | 674 ---------- packages/wyatt_cli_toolbox/README.md | 55 - .../wyatt_cli_toolbox/analysis_options.yaml | 1 - .../example/wyatt_cli_toolbox_example.dart | 273 ---- .../lib/src/prompt/boolean_question.dart | 60 - .../lib/src/prompt/control.dart | 49 - .../src/prompt/framework/build_context.dart | 95 -- .../lib/src/prompt/framework/framework.dart | 26 - .../lib/src/prompt/framework/state.dart | 50 - .../lib/src/prompt/framework/theme.dart | 150 --- .../lib/src/prompt/framework/widget.dart | 46 - .../lib/src/prompt/keys.dart | 56 - .../lib/src/prompt/list_chooser.dart | 129 -- .../lib/src/prompt/list_question.dart | 47 - .../lib/src/prompt/message.dart | 54 - .../lib/src/prompt/number_question.dart | 57 - .../lib/src/prompt/password_question.dart | 66 - .../lib/src/prompt/prompt.dart | 66 - .../lib/src/prompt/question.dart | 42 - .../lib/src/prompt/string_question.dart | 43 - .../lib/src/prompt/widgets/input.dart | 134 -- .../lib/src/sequences/sequences.dart | 155 --- .../lib/src/spinners/indicator.dart | 99 -- .../lib/src/spinners/spinner.dart | 66 - .../lib/src/spinners/spinner_type.dart | 113 -- .../lib/src/spinners/spinners.dart | 1111 ----------------- .../lib/src/stylish/stylish.dart | 210 ---- .../src/stylish/support/supports_ansi.dart | 17 - .../stylish/support/supports_ansi_html.dart | 17 - .../src/stylish/support/supports_ansi_io.dart | 19 - .../lib/src/stylish/utils.dart | 45 - .../lib/src/workflow/skip_exception.dart | 28 - .../lib/src/workflow/task.dart | 148 --- .../lib/src/workflow/utils.dart | 64 - .../lib/src/workflow/workflow.dart | 164 --- .../lib/src/wyatt_cli_toolbox_base.dart | 6 - .../lib/wyatt_cli_toolbox.dart | 23 - packages/wyatt_cli_toolbox/pubspec.yaml | 15 - 43 files changed, 4588 deletions(-) delete mode 100644 packages/wyatt_cli_toolbox/.gitignore delete mode 100644 packages/wyatt_cli_toolbox/.vscode/extensions.json delete mode 100644 packages/wyatt_cli_toolbox/.vscode/settings.json delete mode 100644 packages/wyatt_cli_toolbox/AUTHORS delete mode 100644 packages/wyatt_cli_toolbox/CHANGELOG.md delete mode 100644 packages/wyatt_cli_toolbox/LICENSE delete mode 100644 packages/wyatt_cli_toolbox/README.md delete mode 100644 packages/wyatt_cli_toolbox/analysis_options.yaml delete mode 100644 packages/wyatt_cli_toolbox/example/wyatt_cli_toolbox_example.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/boolean_question.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/control.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/framework/build_context.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/framework/framework.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/framework/state.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/framework/theme.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/framework/widget.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/keys.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/list_chooser.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/list_question.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/message.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/number_question.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/password_question.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/prompt.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/question.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/string_question.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/prompt/widgets/input.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/sequences/sequences.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/spinners/indicator.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/spinners/spinner.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/spinners/spinner_type.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/spinners/spinners.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/stylish/stylish.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_html.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_io.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/stylish/utils.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/workflow/skip_exception.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/workflow/task.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/workflow/utils.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/workflow/workflow.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/src/wyatt_cli_toolbox_base.dart delete mode 100644 packages/wyatt_cli_toolbox/lib/wyatt_cli_toolbox.dart delete mode 100644 packages/wyatt_cli_toolbox/pubspec.yaml diff --git a/packages/wyatt_cli_toolbox/.gitignore b/packages/wyatt_cli_toolbox/.gitignore deleted file mode 100644 index 65c34dc8..00000000 --- a/packages/wyatt_cli_toolbox/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Files and directories created by pub. -.dart_tool/ -.packages - -# Conventional directory for build outputs. -build/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_cli_toolbox/.vscode/extensions.json b/packages/wyatt_cli_toolbox/.vscode/extensions.json deleted file mode 100644 index 30cd2233..00000000 --- a/packages/wyatt_cli_toolbox/.vscode/extensions.json +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 . - */ - -{ - "recommendations": [ - "psioniq.psi-header", - "blaugold.melos-code" - ] -} \ No newline at end of file diff --git a/packages/wyatt_cli_toolbox/.vscode/settings.json b/packages/wyatt_cli_toolbox/.vscode/settings.json deleted file mode 100644 index 708f5ba6..00000000 --- a/packages/wyatt_cli_toolbox/.vscode/settings.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "psi-header.changes-tracking": { - "isActive": true - }, - "psi-header.config": { - "blankLinesAfter": 1, - "forceToTop": true - }, - "psi-header.lang-config": [ - { - "beforeHeader": [ - "# -*- coding:utf-8 -*-", - "#!/usr/bin/env python3" - ], - "begin": "###", - "end": "###", - "language": "python", - "prefix": "# " - }, - { - "beforeHeader": [ - "#!/usr/bin/env sh", - "" - ], - "language": "shellscript", - "begin": "", - "end": "", - "prefix": "# " - }, - { - "begin": "", - "end": "", - "language": "dart", - "prefix": "// " - }, - { - "begin": "", - "end": "", - "language": "yaml", - "prefix": "# " - }, - { - "begin": "", - "language": "markdown", - }, - ], - "psi-header.templates": [ - { - "language": "*", - "template": [ - "Copyright (C) <> 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 ." - ], - } - ], - "dart.runPubGetOnPubspecChanges": false, -} \ No newline at end of file diff --git a/packages/wyatt_cli_toolbox/AUTHORS b/packages/wyatt_cli_toolbox/AUTHORS deleted file mode 100644 index b6d7d765..00000000 --- a/packages/wyatt_cli_toolbox/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_cli_toolbox/CHANGELOG.md b/packages/wyatt_cli_toolbox/CHANGELOG.md deleted file mode 100644 index effe43c8..00000000 --- a/packages/wyatt_cli_toolbox/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.0 - -- Initial version. diff --git a/packages/wyatt_cli_toolbox/LICENSE b/packages/wyatt_cli_toolbox/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_cli_toolbox/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_cli_toolbox/README.md b/packages/wyatt_cli_toolbox/README.md deleted file mode 100644 index 99103fce..00000000 --- a/packages/wyatt_cli_toolbox/README.md +++ /dev/null @@ -1,55 +0,0 @@ - - -# Dart - CLI Toolbox - -

- - Style: Wyatt Analysis - - SDK: Dart - WIP -

- - -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. - -## Features - -TODO: List what your package can do. Maybe include images, gifs, or videos. - -## Getting started - -TODO: List prerequisites and provide or point to information on how to -start using the package. - -## Usage - -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. - -```dart -const like = 'sample'; -``` - -## Additional information - -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. diff --git a/packages/wyatt_cli_toolbox/analysis_options.yaml b/packages/wyatt_cli_toolbox/analysis_options.yaml deleted file mode 100644 index 2f6092c4..00000000 --- a/packages/wyatt_cli_toolbox/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:wyatt_analysis/analysis_options.yaml \ No newline at end of file diff --git a/packages/wyatt_cli_toolbox/example/wyatt_cli_toolbox_example.dart b/packages/wyatt_cli_toolbox/example/wyatt_cli_toolbox_example.dart deleted file mode 100644 index 0bbdc468..00000000 --- a/packages/wyatt_cli_toolbox/example/wyatt_cli_toolbox_example.dart +++ /dev/null @@ -1,273 +0,0 @@ -// 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 . - -import 'dart:io'; -import 'dart:math'; - -import 'package:wyatt_cli_toolbox/wyatt_cli_toolbox.dart'; - -void testStylish() { - print('my beautiful text in magenta'.magenta()); - print('you can combine multiple styles'.yellow().bgBlue().bold()); - - print('\x1B[36mstart style'); - print('style continues on this line'); - print('but not on this line'.reset()); - - print('\x1B[41mnot stripped\x1B[49m'); - print('\x1B[41mstripped\x1B[49m'.strip()); - - Stylish.config(enable: false); - print('you can disable extension'.fg(r: 20, g: 160, b: 80)); - Stylish.config(enable: true); - print('and reenable it on the fly'.fg(r: 20, g: 160, b: 80)); - print('custom bg color'.bg(r: 80, g: 110, b: 30)); -} - -void testSequences() { - Sequences.clearEntireScreen(); - print('Clear entire screen'); - - print('Hide cursor'); - Sequences.hideCursor(); - sleep(Duration(seconds: 1)); - print('Unhide cursor'); - Sequences.unhideCursor(); - sleep(Duration(seconds: 1)); - - print('Save cursor position'); - Sequences.savePosition(); - sleep(Duration(seconds: 1)); - - print('Move cursor'); - Sequences.moveCursor(6, 3); - sleep(Duration(seconds: 1)); - - Sequences.restorePosition(); - Sequences.moveDown(1); - sleep(Duration(seconds: 1)); - print('Restore cursor position'); -} - -Future testSpinners() async { - print('Starting computation 1...'); - await Spinner.start(SpinnerType.fistBump); - sleep(Duration(seconds: 2)); - Spinner.stop(); - - print('Starting computation 2...'); - await Spinner.start(SpinnerType.dots5, text: 'Loading...'); - sleep(Duration(seconds: 3)); - Spinner.stop(); - - print('Starting computation 3...'); - await Spinner.custom( - Indicator( - name: 'Eyes', - interval: 100, - frames: ['◡◡', '⊙⊙', '◠◠'] - .map((String e) => '\x1B[36m$e\x1B[39m') - .toList(), - label: 'Computing...', - ), - ); - await Future.delayed(Duration(seconds: 2)); - Spinner.stop(); - - print('Starting computation 4...'); - await Spinner.start(SpinnerType.pipe, text: 'Linking...'); - sleep(Duration(seconds: 3)); - Spinner.update( - SpinnerType.circle.indicator.copyWith(label: 'Compiling...'), - ); - sleep(Duration(seconds: 3)); - Spinner.stop(); -} - -void testPrompt() { - final Prompt pr = Prompt(); - final StringQuestion q1 = StringQuestion( - "What's your name ?", - identifier: 'name', - ); - final PasswordQuestion q8 = PasswordQuestion( - 'Password ?', - comment: 'Secret shhht.', - identifier: 'password', - ); - final NumberQuestion q7 = NumberQuestion( - 'How old are you?', - identifier: 'age', - ); - final BooleanQuestion q2 = BooleanQuestion( - 'Do you like Dart ?', - identifier: 'dart', - ); - final ListQuestion q3 = ListQuestion( - 'Which target ?', - ['android', 'ios', 'windows', 'macos'], - identifier: 'platform', - ); - final Message q4 = Message( - 'Oh oh !', - level: MessageLevel.warn, - identifier: 'warn', - ); - final Message q5 = Message( - 'Oh damn :(', - level: MessageLevel.fail, - identifier: 'error', - ); - final Message q6 = Message( - 'Thank you, bye! 🤙', - comment: 'Pretty comment nah?', - identifier: 'bye', - ); - - pr - ..addAll(>[q1, q8, q7, q2, q3, q4, q5, q6]) - ..ask(); -} - -Future testWorkflow() async { - final Task t1 = Task( - name: 'Analyzing', - id: 'analyze', - spinner: SpinnerType.circle, - task: () { - return waitFor( - Future.delayed(Duration(seconds: 3), () => 13), - ); - }, - onFinish: (Object? i) { - return '$i files analyzed'; - }, - ); - final Task t2 = Task( - name: 'Formatting', - id: 'format', - spinner: SpinnerType.circle, - task: () { - return waitFor( - Future.delayed(Duration(seconds: 4), () => 1287), - ); - }, - onFinish: (Object? i) { - return '$i files modified'; - }, - ); - final Task t3 = Task( - name: 'Building', - id: 'build', - task: () { - final List _tasks = [ - 'main.c', - 'crypto.c', - 'workflow.c', - 'wyatt.c', - 'logger.c', - 'task.c', - ]; - for (final String i in _tasks) { - Task.print(i); - sleep(Duration(seconds: Random().nextInt(4) + 1)); - } - }, - onFinish: (_) { - return 'Compilation success'; - }, - ); - final Task t4 = Task( - name: 'Testing', - id: 'test', - task: () { - final List _tasks = [ - 'wyatt.h', - 'crypto.h', - ]; - for (final String i in _tasks) { - Task.print(i); - sleep(Duration(seconds: Random().nextInt(3))); - } - throw Exception('An error occured during ${'test::crypto.h'.red()}'); - }, - onFinish: (_) { - return 'All tests passed'; - }, - onError: (Object e) { - return e.toString(); - }, - ); - final Task t5 = Task( - name: 'Bundling', - id: 'bundle', - task: () { - sleep(Duration(seconds: 3)); - throw SkipException('Bundle skipped.'); - }, - onFinish: (_) { - return 'Files generated in dist/'; - }, - onSkip: (SkipException e) { - return e.toString(); - }, - ); - - final Workflow w = await Workflow.create(>[t1, t2, t3, t4, t5]); - w.start(); - - print('\n${w.results.toString().dim()}'); -} - -void testNewPrompt() { - final name = Input(message: 'Your name').prompt(); - stdout.writeln(name); - - final email = Input( - message: 'Your email', - validator: (String x) { - if (x.contains('@')) { - return true; - } else { - throw ValidationError('Not a valid email'); - } - }, - ).prompt(); - stdout.writeln(email); - - final planet = Input( - message: 'Your planet', - defaultValue: 'Earth', - ).prompt(); - stdout.writeln(planet); - - final galaxy = Input( - message: 'Your galaxy', - initialValue: 'Andromeda', - ).prompt(); - stdout.writeln(galaxy); -} - -Future main() async { - // sleep(Duration(seconds: 2)); - // testPrompt(); - // await testWorkflow(); - // testStylish(); - // testSequences(); - // await testSpinners(); - // testPrompt(); - testNewPrompt(); -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/boolean_question.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/boolean_question.dart deleted file mode 100644 index f817e3bd..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/boolean_question.dart +++ /dev/null @@ -1,60 +0,0 @@ -// 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 . - -import 'dart:convert'; -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -class BooleanQuestion extends Question { - BooleanQuestion( - String question, { - this.defaultTo = false, - String? comment, - required String identifier, - }) : super(QuestionType.booleanQuestion, identifier, question, comment); - - bool? answer; - final bool defaultTo; - - @override - String formatComment() => (super.formatComment().trim().isEmpty) - ? defaultTo - ? ' (Y/n) '.dim() - : ' (y/N) '.dim() - : super.formatComment(); - - @override - bool ask() { - stdout.write(formatQuestion()); - String input = ''; - input = stdin.readLineSync(encoding: utf8)!.trim(); - stdout.write(Sequences.escMoveUp(1) + formatQuestion()); - if (input.isEmpty) { - answer = defaultTo; - } else { - answer = input[0] == 'y' || input[0] == 'Y'; - } - String replaceStr = - '\r${formatQuestion()}${Sequences.escClearLineFromCursorToEnd()}'; - replaceStr += answer! ? 'Yes'.blue() : 'No'.blue(); - stdout.writeln(replaceStr); - - return answer!; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/control.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/control.dart deleted file mode 100644 index a90099b9..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/control.dart +++ /dev/null @@ -1,49 +0,0 @@ -// 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 . - -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -/// Abstract class providing XTerm escape sequences -abstract class Control { - /// Use Squences.escMoveUp, concatenate your string ([str]) - /// and then blank the remaining line. - static String replacePreviousLine(String str) => - Sequences.escMoveUp(1) + str + Sequences.escClearLineFromCursorToEnd(); - - /// Reset XTerm sequence. - /// This is always applied after using some other sequence. - static String reset = ''.reset(); - - /// See: https://codepoints.net/dingbats - static String questionIndicator() => '?'.green(); - - static String exclamationIndicator() => '!'.yellow(); - - static String infoIndicator() => - Platform.isWindows ? 'i'.cyan() : '\u2139'.cyan(); - - static String rightIndicator() => - Platform.isWindows ? '>'.blue() : '\u276F'.blue(); - - static String validIndicator() => - Platform.isWindows ? 'v'.green() : '\u2714'.green(); - - static String wrongIndicator() => - Platform.isWindows ? 'x'.red() : '\u2718'.red(); -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/build_context.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/framework/build_context.dart deleted file mode 100644 index 61586db9..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/build_context.dart +++ /dev/null @@ -1,95 +0,0 @@ -// 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 . - -part of prompt.framework; - -class BuildContext { - int _buildCount = 0; - int get buildCount => _buildCount; - void incrementBuildCount() => _buildCount++; - void resetBuildCount() => _buildCount = 0; - - int _lineCount = 0; - int get lineCount => _lineCount; - void incrementLineCount() => _lineCount++; - void resetLineCount() => _lineCount = 0; - - static void reset() { - Sequences.unhideCursor(); - Sequences.write(''.reset()); - } - - void hideCursor() { - Sequences.hideCursor(); - } - - void showCursor() { - Sequences.unhideCursor(); - } - - void write(String text) { - Sequences.write(text); - } - - void writeln(String text) { - incrementLineCount(); - Sequences.writeln(text); - } - - void erasePreviousLine([int n = 1]) { - for (int i = 0; i < n; i++) { - Sequences.moveUp(1); - Sequences.clearEntireLine(); - } - } - - void wipe() { - erasePreviousLine(lineCount); - resetLineCount(); - } - - int readKey() => stdin.readByteSync(); - - String readLine({ - String initialValue = '', - }) { - var buffer = initialValue; - var index = buffer.length; - - Sequences.savePosition(); - - if (buffer.isNotEmpty) { - write(buffer); - } - - while (true) { - final key = readKey(); - if (index == buffer.length) { - buffer += String.fromCharCode(key); - index++; - } else { - buffer = buffer.substring(0, index) + - String.fromCharCode(key) + - buffer.substring(index); - index++; - } - - Sequences.restorePosition(); - Sequences.clearLineFromCursorToEnd(); - write(buffer); - } - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/framework.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/framework/framework.dart deleted file mode 100644 index aac49fad..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/framework.dart +++ /dev/null @@ -1,26 +0,0 @@ -// 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 . - -library prompt.framework; - -import 'dart:io'; -import 'package:meta/meta.dart'; -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -part 'build_context.dart'; -part 'state.dart'; -part 'widget.dart'; diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/state.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/framework/state.dart deleted file mode 100644 index ca6c1247..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/state.dart +++ /dev/null @@ -1,50 +0,0 @@ -// 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 . - -part of prompt.framework; - -abstract class State> { - W? _widget; - W get widget => _widget!; - - BuildContext? _context; - BuildContext get context => _context!; - - void build(); - - dynamic prompt(); - - @protected - @mustCallSuper - void dispose() { - _context = null; - } - - @protected - @mustCallSuper - void initState() { - _context ??= BuildContext(); - } - - @protected - @mustCallSuper - void setState(void Function() fn) { - fn(); - context.wipe(); - build(); - context.incrementBuildCount(); - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/theme.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/framework/theme.dart deleted file mode 100644 index f6dde1a0..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/theme.dart +++ /dev/null @@ -1,150 +0,0 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first -// 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 . - -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/spinners/spinners.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -typedef StyleFunction = String Function(String); - -class Theme { - final String inputPrefix; - final String inputSuffix; - final String successPrefix; - final String successSuffix; - final String errorPrefix; - final String hiddenPrefix; - final StyleFunction messageStyle; - final StyleFunction errorStyle; - final StyleFunction hintStyle; - final StyleFunction valueStyle; - final StyleFunction defaultStyle; - - final String activeItemPrefix; - final String inactiveItemPrefix; - final StyleFunction activeItemStyle; - final StyleFunction inactiveItemStyle; - - final String checkedItemPrefix; - final String uncheckedItemPrefix; - - final String pickedItemPrefix; - final String unpickedItemPrefix; - - final bool showActiveCursor; - - final SpinnerType spinner; - - const Theme({ - required this.inputPrefix, - required this.inputSuffix, - required this.successPrefix, - required this.successSuffix, - required this.errorPrefix, - required this.hiddenPrefix, - required this.messageStyle, - required this.errorStyle, - required this.hintStyle, - required this.valueStyle, - required this.defaultStyle, - required this.activeItemPrefix, - required this.inactiveItemPrefix, - required this.activeItemStyle, - required this.inactiveItemStyle, - required this.checkedItemPrefix, - required this.uncheckedItemPrefix, - required this.pickedItemPrefix, - required this.unpickedItemPrefix, - required this.showActiveCursor, - required this.spinner, - }); - - Theme copyWith({ - String? inputPrefix, - String? inputSuffix, - String? successPrefix, - String? successSuffix, - String? errorPrefix, - String? hiddenPrefix, - StyleFunction? messageStyle, - StyleFunction? errorStyle, - StyleFunction? hintStyle, - StyleFunction? valueStyle, - StyleFunction? defaultStyle, - String? activeItemPrefix, - String? inactiveItemPrefix, - StyleFunction? activeItemStyle, - StyleFunction? inactiveItemStyle, - String? checkedItemPrefix, - String? uncheckedItemPrefix, - String? pickedItemPrefix, - String? unpickedItemPrefix, - bool? showActiveCursor, - SpinnerType? spinner, - }) { - return Theme( - inputPrefix: inputPrefix ?? this.inputPrefix, - inputSuffix: inputSuffix ?? this.inputSuffix, - successPrefix: successPrefix ?? this.successPrefix, - successSuffix: successSuffix ?? this.successSuffix, - errorPrefix: errorPrefix ?? this.errorPrefix, - hiddenPrefix: hiddenPrefix ?? this.hiddenPrefix, - messageStyle: messageStyle ?? this.messageStyle, - errorStyle: errorStyle ?? this.errorStyle, - hintStyle: hintStyle ?? this.hintStyle, - valueStyle: valueStyle ?? this.valueStyle, - defaultStyle: defaultStyle ?? this.defaultStyle, - activeItemPrefix: activeItemPrefix ?? this.activeItemPrefix, - inactiveItemPrefix: inactiveItemPrefix ?? this.inactiveItemPrefix, - activeItemStyle: activeItemStyle ?? this.activeItemStyle, - inactiveItemStyle: inactiveItemStyle ?? this.inactiveItemStyle, - checkedItemPrefix: checkedItemPrefix ?? this.checkedItemPrefix, - uncheckedItemPrefix: uncheckedItemPrefix ?? this.uncheckedItemPrefix, - pickedItemPrefix: pickedItemPrefix ?? this.pickedItemPrefix, - unpickedItemPrefix: unpickedItemPrefix ?? this.unpickedItemPrefix, - showActiveCursor: showActiveCursor ?? this.showActiveCursor, - spinner: spinner ?? this.spinner, - ); - } - - static Theme defaultTheme = colorfulTheme; - - static final colorfulTheme = Theme( - inputPrefix: '?'.padRight(2).green(), - inputSuffix: (Platform.isWindows ? '>' : '\u276F').padLeft(2).grey(), - successPrefix: (Platform.isWindows ? 'v' : '\u2714').padRight(2).green(), - successSuffix: '•'.padLeft(2).grey(), - errorPrefix: (Platform.isWindows ? 'x' : '\u2718').padRight(2).red(), - hiddenPrefix: '*****', - messageStyle: (String message) => message.bold(), - errorStyle: (String error) => error.red(), - hintStyle: (String hint) => '($hint)'.grey(), - valueStyle: (String value) => value.green(), - defaultStyle: (String value) => value.cyan(), - activeItemPrefix: (Platform.isWindows ? '>' : '\u276F').green(), - inactiveItemPrefix: ' ', - activeItemStyle: (String item) => item.cyan(), - inactiveItemStyle: (String item) => item, - checkedItemPrefix: (Platform.isWindows ? 'v' : '\u2714').green(), - uncheckedItemPrefix: ' ', - pickedItemPrefix: (Platform.isWindows ? '>' : '\u276F').green(), - unpickedItemPrefix: ' ', - showActiveCursor: false, - spinner: SpinnerType.arrow, - ); -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/widget.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/framework/widget.dart deleted file mode 100644 index 0b2fd301..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/framework/widget.dart +++ /dev/null @@ -1,46 +0,0 @@ -// 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 . - -part of prompt.framework; - -abstract class Widget { - int _initLineCount = 0; - - /// Creates the mutable state for this widget - @protected - @factory - State createState(); - - State pipeState(State state) => state; - - T prompt() { - final state = pipeState(createState()) - .._widget = this - ..initState(); - _initLineCount = state.context.lineCount; - state.context.resetLineCount(); - - state.build(); - state.context.incrementBuildCount(); - - final dynamic out = state.prompt(); - state.context.wipe(); - state.context.erasePreviousLine(_initLineCount); - state.dispose(); - - return out as T; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/keys.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/keys.dart deleted file mode 100644 index 73a4b37f..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/keys.dart +++ /dev/null @@ -1,56 +0,0 @@ -// 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 . - -// ignore_for_file: constant_identifier_names - -import 'dart:io'; - -const int ARROW_UP = 65; -const int ARROW_DOWN = 66; -const int ENTER = 10; -const int SPACE = 32; - -const int WIN_UP = 119; -const int WIN_DOWN = 115; -const int WIN_ENTER = 13; -const int WIN_SPACE = 20; - -/// Abstract class providing some key codes which can be statically accessed. -abstract class Keys { - /// Arrow down. Consists of three bytes. - /// For historical reasons, you can also use 's' - /// instead of arrow down on Windows. - /// - /// It is packed into a single element list in - /// order to not break the spread syntax. - static final List arrowDown = - Platform.isWindows ? [WIN_DOWN] : [27, 91, 66]; - - /// Arrows up. Consists of three bytes in Unix like systems (including MacOS). - /// For historical reasons, you can also use 'w' insted of arrow - /// up on Windows. - /// - /// It is packed into a single element list in - /// order to not break the spread syntax. - static final List arrowUp = - Platform.isWindows ? [WIN_UP] : [27, 91, 65]; - - /// Enter key. Single byte. - static final int enter = Platform.isWindows ? WIN_ENTER : ENTER; - - /// Space key. Single byte. - static final int space = Platform.isWindows ? WIN_SPACE : SPACE; -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/list_chooser.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/list_chooser.dart deleted file mode 100644 index e2ad2584..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/list_chooser.dart +++ /dev/null @@ -1,129 +0,0 @@ -// 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 . - -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/prompt/control.dart'; -import 'package:wyatt_cli_toolbox/src/prompt/keys.dart'; -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -class ListChooser { - ListChooser(this.options) { - if (stdin.hasTerminal) { - // lineMode must be true to set echoMode in Windows - // see https://github.com/dart-lang/sdk/issues/28599 - stdin.echoMode = false; - stdin.lineMode = false; - } - } - - List options; - - String choose() { - int input; - int index = 0; - - _renderList(0, initial: true); - - while ((input = _userInput()) != ENTER) { - if (input == ARROW_UP) { - if (index > 0) { - index--; - } - } else if (input == ARROW_DOWN) { - if (index < options.length - 1) { - index++; - } - } - _renderList(index); - } - _resetStdin(); - return options[index]; - } - - void _deletePreviousList() { - for (int i = 0; i < options.length; i++) { - Sequences.write( - Sequences.escMoveUp(1) + Sequences.escClearLineFromCursorToEnd(), - ); - } - } - - void _renderList(int index, {bool initial = false}) { - if (!initial) { - _deletePreviousList(); - } - for (int i = 0; i < options.length; i++) { - if (i == index) { - stdout.writeln('${Control.rightIndicator()} ${options[i].blue()}'); - continue; - } - stdout.writeln(' ${options[i]}'); - } - } - - void _resetStdin() { - if (stdin.hasTerminal) { - // Order is important here - stdin.lineMode = true; - stdin.echoMode = true; - } - } - - // TODO(hpcl): improve keycode parsing for multiple bytes codes - int _userInput() { - final int navigationResult = stdin.readByteSync(); - if (navigationResult < 0) { - return navigationResult; - } - - if (Platform.isWindows) { - if (navigationResult == Keys.enter) { - return ENTER; - } - if (navigationResult == Keys.space) { - return SPACE; - } - if (navigationResult == Keys.arrowUp[0]) { - return ARROW_UP; - } - if (navigationResult == Keys.arrowDown[0]) { - return ARROW_DOWN; - } else { - return navigationResult; - } - } else { - if (navigationResult == ENTER) { - return ENTER; - } - if (navigationResult == SPACE) { - return SPACE; - } - - final int anotherByte = stdin.readByteSync(); - if (anotherByte == ENTER) { - return ENTER; - } - if (anotherByte == SPACE) { - return SPACE; - } - - final int input = stdin.readByteSync(); - return input; - } - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/list_question.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/list_question.dart deleted file mode 100644 index c36ca38c..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/list_question.dart +++ /dev/null @@ -1,47 +0,0 @@ -// 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 . - -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/prompt/list_chooser.dart'; -import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -class ListQuestion extends Question { - ListQuestion( - String question, - this.options, { - String? comment, - required String identifier, - }) : super(QuestionType.listQuestion, identifier, question, comment); - - List options; - String? answer; - - @override - String formatComment() => (super.formatComment().trim().isEmpty) - ? ' (User arrow keys) '.dim() - : super.formatComment(); - - @override - String ask() { - stdout.writeln(formatQuestion()); - final ListChooser chooser = ListChooser(options); - final String input = chooser.choose(); - answer = input; - return input; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/message.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/message.dart deleted file mode 100644 index 875d6abd..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/message.dart +++ /dev/null @@ -1,54 +0,0 @@ -// 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 . - -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/prompt/control.dart'; -import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; - -enum MessageLevel { debug, info, success, warn, fail } - -class Message extends Question { - Message( - String text, { - String? comment, - this.level = MessageLevel.info, - required String identifier, - }) : super(QuestionType.message, identifier, text, comment); - - MessageLevel level; - - @override - String get prefix { - switch (level) { - case MessageLevel.debug: - return ' '; - case MessageLevel.info: - return Control.infoIndicator(); - case MessageLevel.success: - return Control.validIndicator(); - case MessageLevel.warn: - return Control.exclamationIndicator(); - case MessageLevel.fail: - return Control.wrongIndicator(); - } - } - - @override - void ask() { - stdout.writeln(formatQuestion()); - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/number_question.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/number_question.dart deleted file mode 100644 index 9fdfa186..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/number_question.dart +++ /dev/null @@ -1,57 +0,0 @@ -// 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 . - -import 'dart:convert'; -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -class NumberQuestion extends Question { - NumberQuestion(String question, {String? comment, required String identifier}) - : super(QuestionType.stringQuestion, identifier, question, comment); - - num? answer; - - @override - String formatComment() => (super.formatComment().trim().isEmpty) - ? ' Mandatory! '.dim() - : super.formatComment(); - - @override - num ask() { - stdout.write(formatQuestion()); - String input = ''; - bool valid = false; - num answer = 0; - while (!valid) { - input = stdin.readLineSync(encoding: utf8)!.trim(); - try { - valid = input.isNotEmpty; - answer = num.parse(input); - } catch (e) { - valid = false; - } - stdout.write(Sequences.escMoveUp(1) + formatQuestion()); - } - stdout.writeln( - // ignore: lines_longer_than_80_chars - '\r${formatQuestion()}${answer.toString().blue()}${Sequences.escClearLineFromCursorToEnd()}', - ); - return answer; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/password_question.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/password_question.dart deleted file mode 100644 index 655c842a..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/password_question.dart +++ /dev/null @@ -1,66 +0,0 @@ -// 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 . - -import 'dart:convert'; -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/prompt/keys.dart'; -import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -class PasswordQuestion extends Question { - PasswordQuestion( - String question, { - String? comment, - required String identifier, - }) : super(QuestionType.passwordQuestion, identifier, question, comment); - - String? answer; - - @override - String ask() { - if (stdin.hasTerminal) { - stdin.echoMode = false; - stdin.lineMode = false; - } - - stdout.write(formatQuestion()); - String input = ''; - final List bytes = []; - - int lastB = stdin.readByteSync(); - while (lastB != Keys.enter) { - stdout.write('*'); - bytes.add(lastB); - lastB = stdin.readByteSync(); - } - input = utf8.decode(bytes); - stdout.write(formatQuestion()); - answer = List.generate(input.length, (_) => '*') - .reduce((String value, String element) => '$value$element'); - stdout.writeln( - // ignore: lines_longer_than_80_chars - '\r${formatQuestion()}${answer!.blue()}${Sequences.escClearLineFromCursorToEnd()}', - ); - - if (stdin.hasTerminal) { - stdin.lineMode = true; - stdin.echoMode = true; - } - return input; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/prompt.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/prompt.dart deleted file mode 100644 index 962ea92e..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/prompt.dart +++ /dev/null @@ -1,66 +0,0 @@ -// 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 . - -import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; - -export 'boolean_question.dart'; -export 'framework/framework.dart'; -export 'framework/theme.dart'; -export 'list_question.dart'; -export 'message.dart'; -export 'number_question.dart'; -export 'password_question.dart'; -export 'question.dart'; -export 'string_question.dart'; -export 'widgets/input.dart'; - -class Prompt { - Prompt({this.questions}); - - Map answers = {}; - List>? questions; - - void add(Question question) { - if (questions != null) { - questions!.add(question); - } else { - questions = >[question]; - } - } - - void addAll(List> questions) { - if (this.questions != null) { - this.questions!.addAll(questions); - } else { - this.questions = questions; - } - } - - Map ask() { - if (questions != null) { - for (final Question question in questions!) { - if (!(question.type == QuestionType.message)) { - answers[question.identifier] = question.ask(); - } else { - question.ask(); - } - } - } else { - throw Exception('You must add questions before asking for prompt.'); - } - return answers; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/question.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/question.dart deleted file mode 100644 index 5e45a3d6..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/question.dart +++ /dev/null @@ -1,42 +0,0 @@ -// 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 . - -import 'package:wyatt_cli_toolbox/src/prompt/control.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -enum QuestionType { - message, - stringQuestion, - booleanQuestion, - listQuestion, - passwordQuestion -} - -abstract class Question { - Question(this.type, this.identifier, this.question, this.comment); - - final QuestionType type; - final String identifier; - final String question; - final String? comment; - - String prefix = Control.questionIndicator(); - - String formatComment() => (comment != null) ? ' $comment '.dim() : ' '; - String formatQuestion() => '$prefix $question${formatComment()}'; - - T ask(); -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/string_question.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/string_question.dart deleted file mode 100644 index b1b81072..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/string_question.dart +++ /dev/null @@ -1,43 +0,0 @@ -// 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 . - -import 'dart:convert'; -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -class StringQuestion extends Question { - StringQuestion(String question, {String? comment, required String identifier}) - : super(QuestionType.stringQuestion, identifier, question, comment); - - String? answer; - - @override - String ask() { - stdout.write(formatQuestion()); - String input = ''; - input = stdin.readLineSync(encoding: utf8)!.trim(); - stdout.write(Sequences.escMoveUp(1) + formatQuestion()); - answer = input; - stdout.writeln( - // ignore: lines_longer_than_80_chars - '\r${formatQuestion()}${answer!.blue()}${Sequences.escClearLineFromCursorToEnd()}', - ); - return input; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/prompt/widgets/input.dart b/packages/wyatt_cli_toolbox/lib/src/prompt/widgets/input.dart deleted file mode 100644 index dddd374f..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/prompt/widgets/input.dart +++ /dev/null @@ -1,134 +0,0 @@ -// 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 . - -import 'package:wyatt_cli_toolbox/src/prompt/framework/framework.dart'; -import 'package:wyatt_cli_toolbox/src/prompt/framework/theme.dart'; - -class Input extends Widget { - final String message; - final String initialValue; - final String? defaultValue; - final bool Function(String)? validator; - final Theme theme; - - Input({ - required this.message, - this.initialValue = '', - this.defaultValue, - this.validator, - }) : theme = Theme.defaultTheme; - - Input.withTheme({ - required this.message, - required this.theme, - this.initialValue = '', - this.defaultValue, - this.validator, - }); - - String promptInput({ - required String message, - String? hint, - }) { - final buffer = StringBuffer() - ..write(theme.inputPrefix) - ..write(theme.messageStyle(message)); - if (hint != null) { - buffer - ..write(' ') - ..write(theme.hintStyle(hint)); - } - buffer - ..write(theme.inputSuffix) - ..write(' '); - return buffer.toString(); - } - - String promptError({ - required String message, - }) { - final buffer = StringBuffer() - ..write(theme.errorPrefix) - ..write(theme.errorStyle(message)); - - return buffer.toString(); - } - - @override - State createState() => _InputState(); -} - -class _InputState extends State { - String? _value; - String? _error; - - @override - void initState() { - super.initState(); - _value = widget.initialValue; - } - - @override - void dispose() { - if (_value != null) { - // TODO(hpcl): print success - } - super.dispose(); - } - - @override - void build() { - if (_error != null) { - context.writeln(widget.promptError(message: _error!)); - } - } - - @override - String prompt() { - while (true) { - context.write( - widget.promptInput( - message: widget.message, - hint: widget.defaultValue, - ), - ); - final input = context.readLine(initialValue: widget.initialValue); - final line = input.isEmpty && widget.defaultValue != null - ? widget.defaultValue! - : input; - if (widget.validator != null) { - try { - widget.validator!(line); - } on ValidationError catch (e) { - setState(() { - _error = e.message; - }); - continue; - } - } - setState(() { - _value = line; - }); - return _value!; - } - } -} - -class ValidationError implements Exception { - final String message; - - ValidationError(this.message); -} diff --git a/packages/wyatt_cli_toolbox/lib/src/sequences/sequences.dart b/packages/wyatt_cli_toolbox/lib/src/sequences/sequences.dart deleted file mode 100644 index 2e96d89b..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/sequences/sequences.dart +++ /dev/null @@ -1,155 +0,0 @@ -// 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 . - -import 'dart:io'; - -/// Abstract class providing some useful ANSI escape sequences -abstract class Sequences { - /// Clear screen (Raw Sequence) `\x1B[J` - static String escClearScreen() => '\x1B[J'; - - /// Clear screen from cursor to end (Raw Sequence) `\x1B[0J` - static String escClearScreenFromCursorToEnd() => '\x1B[0J'; - - /// Clear screen from cursor to start (Raw Sequence) `\x1B[1J` - static String escClearScreenFromCursorToStart() => '\x1B[1J'; - - /// Clear entire screen (Raw Sequence) `\x1B[2J` - static String escClearEntireScreen() => '\x1B[2J'; - - /// Clear line (Raw Sequence) `\x1B[K` - static String escClearLine() => '\x1B[K'; - - /// Clear line from cursor to end (Raw Sequence) `\x1B[0K` - static String escClearLineFromCursorToEnd() => '\x1B[0K'; - - /// Clear line from cursor to start (Raw Sequence) `\x1B[1K` - static String escClearLineFromCursorToStart() => '\x1B[1K'; - - /// Clear entire line (Raw Sequence) `\x1B[2K` - static String escClearEntireLine() => '\x1B[2K'; - - /// Move cursor up **#** lines (Raw Sequence) `\x1B[#A` - static String escMoveUp(int n) => '\x1B[${n}A'; - - /// Move cursor down **#** lines (Raw Sequence) `\x1B[#B` - static String escMoveDown(int n) => '\x1B[${n}B'; - - /// Move cursor right **#** columns (Raw Sequence) `\x1B[#C` - static String escMoveRight(int n) => '\x1B[${n}C'; - - /// Move cursor left **#** columns (Raw Sequence) `\x1B[#D` - static String escMoveLeft(int n) => '\x1B[${n}D'; - - /// Move cursor down **#** lines and place cursor at start (Raw Sequence) `\x1B[#E` - static String escMoveDownAtStart(int n) => '\x1B[${n}E'; - - /// Move cursor up **#** lines and place cursor at start (Raw Sequence) `\x1B[#F` - static String escMoveUpAtStart(int n) => '\x1B[${n}F'; - - /// Move cursor on x axis **#** columens (Raw Sequence) `\x1B[#G` - static String escMoveHorizontal(int n) => '\x1B[${n}G'; - - /// Move cursor on x,y axis (Raw Sequence) `\x1B[$line;${column}H` - static String escMoveCursor(int line, int column) => '\x1B[$line;${column}H'; - - /// Save cursor position (Raw Sequence) `\x1B7` - static String escSavePosition() => '\x1B7'; - - /// Restore cursor position (Raw Sequence) `\x1B8` - static String escRestorePosition() => '\x1B8'; - - /// Hide cursor (Raw Sequence) `\x1B[?25l` - static String escHideCursor() => '\x1B[?25l'; - - /// Unhide cursor (Raw Sequence) `\x1B[?25h` - static String escUnhideCursor() => '\x1B[?25h'; - - /// Clear screen `\x1B[J` - static void clearScreen() => write(escClearScreen()); - - /// Clear screen from cursor to end `\x1B[0J` - static void clearScreenFromCursorToEnd() => - write(escClearScreenFromCursorToEnd()); - - /// Clear screen from cursor to start `\x1B[1J` - static void clearScreenFromCursorToStart() => - write(escClearScreenFromCursorToStart()); - - /// Clear entire screen `\x1B[2J` - static void clearEntireScreen() => write(escClearEntireScreen()); - - /// Clear line `\x1B[K` - static void clearLine() => write(escClearLine()); - - /// Clear line from cursor to end `\x1B[0K` - static void clearLineFromCursorToEnd() => - write(escClearLineFromCursorToEnd()); - - /// Clear line from cursor to start `\x1B[1K` - static void clearLineFromCursorToStart() => - write(escClearLineFromCursorToStart()); - - /// Clear entire line `\x1B[2K` - static void clearEntireLine() => write(escClearEntireLine()); - - /// Move cursor up **#** lines `\x1B[#A` - static void moveUp(int n) => write(escMoveUp(n)); - - /// Move cursor down **#** lines `\x1B[#B` - static void moveDown(int n) => write(escMoveDown(n)); - - /// Move cursor right **#** columns `\x1B[#C` - static void moveRight(int n) => write(escMoveRight(n)); - - /// Move cursor left **#** columns `\x1B[#D` - static void moveLeft(int n) => write(escMoveLeft(n)); - - /// Move cursor down **#** lines and place cursor at start `\x1B[#E` - static void moveDownAtStart(int n) => write(escMoveDownAtStart(n)); - - /// Move cursor up **#** lines and place cursor at start `\x1B[#F` - static void moveUpAtStart(int n) => write(escMoveUpAtStart(n)); - - /// Move cursor on x axis **#** columens `\x1B[#G` - static void moveHorizontal(int n) => write(escMoveHorizontal(n)); - - /// Move cursor on x,y axis `\x1B[$line;${column}H` - static void moveCursor(int line, int column) => - write(escMoveCursor(line, column)); - - /// Save cursor position `\x1B7` - static void savePosition() => write(escSavePosition()); - - /// Restore cursor position `\x1B8` - static void restorePosition() => write(escRestorePosition()); - - /// Hide cursor `\x1B[?25l` - static void hideCursor() => write(escHideCursor()); - - /// Unhide cursor `\x1B[?25h` - static void unhideCursor() => write(escUnhideCursor()); - - /// Write string in standard output - static void write(String string) { - stdout.write(string); - } - - /// Write string on new line in standard output - static void writeln(String string) { - stdout.writeln(string); - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/spinners/indicator.dart b/packages/wyatt_cli_toolbox/lib/src/spinners/indicator.dart deleted file mode 100644 index 9b173cb0..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/spinners/indicator.dart +++ /dev/null @@ -1,99 +0,0 @@ -// 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 . - -import 'dart:async'; -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; - -/// The [frames] field holds each individual frame of an animation, whilst the -/// [interval] represents the sleep time between each frame. -class Indicator { - - Indicator({ - required this.name, - required this.interval, - required this.frames, - this.label, - }); - - factory Indicator.fromMap(Map> map) { - final String name = map.keys.first; - return Indicator( - name: name, - // ignore: cast_nullable_to_non_nullable - interval: map[name]!['interval'] as int, - // ignore: cast_nullable_to_non_nullable - frames: List.from(map[name]!['frames'] as List), - ); - } - - final String name; - final int interval; - final List frames; - final String? label; - Timer? _timer; - - - Map> toMap() { - return >{ - name: { - 'interval': interval, - 'frames': frames, - }, - }; - } - - /// Animate the spinner. - void animate() { - stop(); - int frame = 0; - _timer = Timer.periodic(Duration(milliseconds: interval), (Timer t) { - Sequences.clearEntireLine(); - frame = (frame + 1) % frames.length; - if (label != null) { - stdout.write('${frames[frame]} $label'); - } else { - stdout.write(frames[frame]); - } - Sequences.moveHorizontal(1); - }); - } - - /// Stop the spinner (but don't kill isolate) - void stop() { - Sequences.clearEntireLine(); - _timer?.cancel(); - } - - Indicator copyWith({ - String? name, - int? interval, - List? frames, - String? label, - }) { - return Indicator( - name: name ?? this.name, - interval: interval ?? this.interval, - frames: frames ?? this.frames, - label: label ?? this.label, - ); - } - - @override - String toString() => - 'Indicator(name: $name, interval: $interval, frames: $frames)'; -} diff --git a/packages/wyatt_cli_toolbox/lib/src/spinners/spinner.dart b/packages/wyatt_cli_toolbox/lib/src/spinners/spinner.dart deleted file mode 100644 index 05010a8a..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/spinners/spinner.dart +++ /dev/null @@ -1,66 +0,0 @@ -// 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 . - -import 'dart:async'; -import 'dart:isolate'; - -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/spinners/indicator.dart'; -import 'package:wyatt_cli_toolbox/src/spinners/spinner_type.dart'; - - -class Spinner { - /// Active isolate object. Is created when [start] is called. - static Isolate? _spinnerIsolate; - - /// Run the animation of active [_spinnerIsolate]. - static Future _animate(Indicator indicator) async { - indicator.animate(); - } - - /// Starts an animation on a new line. - static Future start(SpinnerType spinner, {String? text}) async { - return custom(spinner.indicator.copyWith(label: text)); - } - - /// Starts a custom animation on a new line. - static Future custom(Indicator indicator) async { - Sequences.hideCursor(); - return _spinnerIsolate ?? - (_spinnerIsolate = await Isolate.spawn( - _animate, - indicator, - )); - } - - /// Stops current spinner animation by killing the isolate instance, - /// and clears current line. - static void stop() { - if (_spinnerIsolate != null) { - _spinnerIsolate!.kill(priority: Isolate.immediate); - } - _spinnerIsolate = null; - Sequences.clearEntireLine(); - Sequences.moveHorizontal(1); - Sequences.unhideCursor(); - } - - /// Stop and restart a new indicator on same line. - static void update(Indicator indicator) { - stop(); - custom(indicator); - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/spinners/spinner_type.dart b/packages/wyatt_cli_toolbox/lib/src/spinners/spinner_type.dart deleted file mode 100644 index b7a86eee..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/spinners/spinner_type.dart +++ /dev/null @@ -1,113 +0,0 @@ -// 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 . - -import 'package:wyatt_cli_toolbox/src/spinners/spinners.dart'; - -enum SpinnerType { - dots, - dots2, - dots3, - dots4, - dots5, - dots6, - dots7, - dots8, - dots9, - dots10, - dots11, - dots12, - dots8Bit, - line, - line2, - pipe, - simpleDots, - simpleDotsScrolling, - star, - star2, - flip, - hamburger, - growVertical, - growHorizontal, - balloon, - balloon2, - noise, - bounce, - boxBounce, - boxBounce2, - triangle, - arc, - circle, - squareCorners, - circleQuarters, - circleHalves, - squish, - toggle, - toggle2, - toggle3, - toggle4, - toggle5, - toggle6, - toggle7, - toggle8, - toggle9, - toggle10, - toggle11, - toggle12, - toggle13, - arrow, - arrow2, - arrow3, - bouncingBar, - bouncingBall, - smiley, - monkey, - hearts, - clock, - earth, - material, - moon, - runner, - pong, - shark, - dqpb, - weather, - christmas, - grenade, - point, - layer, - betaWave, - fingerDance, - fistBump, - soccerHeader, - mindblown, - speaker, - orangePulse, - bluePulse, - orangeBluePulse, - timeTravel, - aesthetic; - - String get name => toString().replaceAll(RegExp('SpinnerType.'), ''); - Indicator get indicator { - if (spinners.keys.contains(name)) { - return Indicator.fromMap( - >{name: spinners[name]!}, - ); - } else { - throw UnimplementedError(); - } - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/spinners/spinners.dart b/packages/wyatt_cli_toolbox/lib/src/spinners/spinners.dart deleted file mode 100644 index 6cfc9fbf..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/spinners/spinners.dart +++ /dev/null @@ -1,1111 +0,0 @@ -// 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 . - -export 'indicator.dart'; -export 'spinner.dart'; -export 'spinner_type.dart'; - -// From https://raw.githubusercontent.com/sindresorhus/cli-spinners/master/spinners.json -const Map> spinners = >{ - 'dots': { - 'interval': 80, - 'frames': ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'] - }, - 'dots2': { - 'interval': 80, - 'frames': ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷'] - }, - 'dots3': { - 'interval': 80, - 'frames': ['⠋', '⠙', '⠚', '⠞', '⠖', '⠦', '⠴', '⠲', '⠳', '⠓'] - }, - 'dots4': { - 'interval': 80, - 'frames': [ - '⠄', - '⠆', - '⠇', - '⠋', - '⠙', - '⠸', - '⠰', - '⠠', - '⠰', - '⠸', - '⠙', - '⠋', - '⠇', - '⠆' - ] - }, - 'dots5': { - 'interval': 80, - 'frames': [ - '⠋', - '⠙', - '⠚', - '⠒', - '⠂', - '⠂', - '⠒', - '⠲', - '⠴', - '⠦', - '⠖', - '⠒', - '⠐', - '⠐', - '⠒', - '⠓', - '⠋' - ] - }, - 'dots6': { - 'interval': 80, - 'frames': [ - '⠁', - '⠉', - '⠙', - '⠚', - '⠒', - '⠂', - '⠂', - '⠒', - '⠲', - '⠴', - '⠤', - '⠄', - '⠄', - '⠤', - '⠴', - '⠲', - '⠒', - '⠂', - '⠂', - '⠒', - '⠚', - '⠙', - '⠉', - '⠁' - ] - }, - 'dots7': { - 'interval': 80, - 'frames': [ - '⠈', - '⠉', - '⠋', - '⠓', - '⠒', - '⠐', - '⠐', - '⠒', - '⠖', - '⠦', - '⠤', - '⠠', - '⠠', - '⠤', - '⠦', - '⠖', - '⠒', - '⠐', - '⠐', - '⠒', - '⠓', - '⠋', - '⠉', - '⠈' - ] - }, - 'dots8': { - 'interval': 80, - 'frames': [ - '⠁', - '⠁', - '⠉', - '⠙', - '⠚', - '⠒', - '⠂', - '⠂', - '⠒', - '⠲', - '⠴', - '⠤', - '⠄', - '⠄', - '⠤', - '⠠', - '⠠', - '⠤', - '⠦', - '⠖', - '⠒', - '⠐', - '⠐', - '⠒', - '⠓', - '⠋', - '⠉', - '⠈', - '⠈' - ] - }, - 'dots9': { - 'interval': 80, - 'frames': ['⢹', '⢺', '⢼', '⣸', '⣇', '⡧', '⡗', '⡏'] - }, - 'dots10': { - 'interval': 80, - 'frames': ['⢄', '⢂', '⢁', '⡁', '⡈', '⡐', '⡠'] - }, - 'dots11': { - 'interval': 100, - 'frames': ['⠁', '⠂', '⠄', '⡀', '⢀', '⠠', '⠐', '⠈'] - }, - 'dots12': { - 'interval': 80, - 'frames': [ - '⢀⠀', - '⡀⠀', - '⠄⠀', - '⢂⠀', - '⡂⠀', - '⠅⠀', - '⢃⠀', - '⡃⠀', - '⠍⠀', - '⢋⠀', - '⡋⠀', - '⠍⠁', - '⢋⠁', - '⡋⠁', - '⠍⠉', - '⠋⠉', - '⠋⠉', - '⠉⠙', - '⠉⠙', - '⠉⠩', - '⠈⢙', - '⠈⡙', - '⢈⠩', - '⡀⢙', - '⠄⡙', - '⢂⠩', - '⡂⢘', - '⠅⡘', - '⢃⠨', - '⡃⢐', - '⠍⡐', - '⢋⠠', - '⡋⢀', - '⠍⡁', - '⢋⠁', - '⡋⠁', - '⠍⠉', - '⠋⠉', - '⠋⠉', - '⠉⠙', - '⠉⠙', - '⠉⠩', - '⠈⢙', - '⠈⡙', - '⠈⠩', - '⠀⢙', - '⠀⡙', - '⠀⠩', - '⠀⢘', - '⠀⡘', - '⠀⠨', - '⠀⢐', - '⠀⡐', - '⠀⠠', - '⠀⢀', - '⠀⡀' - ] - }, - 'dots8Bit': { - 'interval': 80, - 'frames': [ - '⠀', - '⠁', - '⠂', - '⠃', - '⠄', - '⠅', - '⠆', - '⠇', - '⡀', - '⡁', - '⡂', - '⡃', - '⡄', - '⡅', - '⡆', - '⡇', - '⠈', - '⠉', - '⠊', - '⠋', - '⠌', - '⠍', - '⠎', - '⠏', - '⡈', - '⡉', - '⡊', - '⡋', - '⡌', - '⡍', - '⡎', - '⡏', - '⠐', - '⠑', - '⠒', - '⠓', - '⠔', - '⠕', - '⠖', - '⠗', - '⡐', - '⡑', - '⡒', - '⡓', - '⡔', - '⡕', - '⡖', - '⡗', - '⠘', - '⠙', - '⠚', - '⠛', - '⠜', - '⠝', - '⠞', - '⠟', - '⡘', - '⡙', - '⡚', - '⡛', - '⡜', - '⡝', - '⡞', - '⡟', - '⠠', - '⠡', - '⠢', - '⠣', - '⠤', - '⠥', - '⠦', - '⠧', - '⡠', - '⡡', - '⡢', - '⡣', - '⡤', - '⡥', - '⡦', - '⡧', - '⠨', - '⠩', - '⠪', - '⠫', - '⠬', - '⠭', - '⠮', - '⠯', - '⡨', - '⡩', - '⡪', - '⡫', - '⡬', - '⡭', - '⡮', - '⡯', - '⠰', - '⠱', - '⠲', - '⠳', - '⠴', - '⠵', - '⠶', - '⠷', - '⡰', - '⡱', - '⡲', - '⡳', - '⡴', - '⡵', - '⡶', - '⡷', - '⠸', - '⠹', - '⠺', - '⠻', - '⠼', - '⠽', - '⠾', - '⠿', - '⡸', - '⡹', - '⡺', - '⡻', - '⡼', - '⡽', - '⡾', - '⡿', - '⢀', - '⢁', - '⢂', - '⢃', - '⢄', - '⢅', - '⢆', - '⢇', - '⣀', - '⣁', - '⣂', - '⣃', - '⣄', - '⣅', - '⣆', - '⣇', - '⢈', - '⢉', - '⢊', - '⢋', - '⢌', - '⢍', - '⢎', - '⢏', - '⣈', - '⣉', - '⣊', - '⣋', - '⣌', - '⣍', - '⣎', - '⣏', - '⢐', - '⢑', - '⢒', - '⢓', - '⢔', - '⢕', - '⢖', - '⢗', - '⣐', - '⣑', - '⣒', - '⣓', - '⣔', - '⣕', - '⣖', - '⣗', - '⢘', - '⢙', - '⢚', - '⢛', - '⢜', - '⢝', - '⢞', - '⢟', - '⣘', - '⣙', - '⣚', - '⣛', - '⣜', - '⣝', - '⣞', - '⣟', - '⢠', - '⢡', - '⢢', - '⢣', - '⢤', - '⢥', - '⢦', - '⢧', - '⣠', - '⣡', - '⣢', - '⣣', - '⣤', - '⣥', - '⣦', - '⣧', - '⢨', - '⢩', - '⢪', - '⢫', - '⢬', - '⢭', - '⢮', - '⢯', - '⣨', - '⣩', - '⣪', - '⣫', - '⣬', - '⣭', - '⣮', - '⣯', - '⢰', - '⢱', - '⢲', - '⢳', - '⢴', - '⢵', - '⢶', - '⢷', - '⣰', - '⣱', - '⣲', - '⣳', - '⣴', - '⣵', - '⣶', - '⣷', - '⢸', - '⢹', - '⢺', - '⢻', - '⢼', - '⢽', - '⢾', - '⢿', - '⣸', - '⣹', - '⣺', - '⣻', - '⣼', - '⣽', - '⣾', - '⣿' - ] - }, - 'line': { - 'interval': 130, - 'frames': ['-', r'\', '|', '/'] - }, - 'line2': { - 'interval': 100, - 'frames': ['⠂', '-', '–', '—', '–', '-'] - }, - 'pipe': { - 'interval': 100, - 'frames': ['┤', '┘', '┴', '└', '├', '┌', '┬', '┐'] - }, - 'simpleDots': { - 'interval': 400, - 'frames': ['. ', '.. ', '...', ' '] - }, - 'simpleDotsScrolling': { - 'interval': 200, - 'frames': ['. ', '.. ', '...', ' ..', ' .', ' '] - }, - 'star': { - 'interval': 70, - 'frames': ['✶', '✸', '✹', '✺', '✹', '✷'] - }, - 'star2': { - 'interval': 80, - 'frames': ['+', 'x', '*'] - }, - 'flip': { - 'interval': 70, - 'frames': [ - '_', - '_', - '_', - '-', - '`', - '`', - "'", - '´', - '-', - '_', - '_', - '_', - ] - }, - 'hamburger': { - 'interval': 100, - 'frames': ['☱', '☲', '☴'] - }, - 'growVertical': { - 'interval': 120, - 'frames': ['▁', '▃', '▄', '▅', '▆', '▇', '▆', '▅', '▄', '▃'] - }, - 'growHorizontal': { - 'interval': 120, - 'frames': [ - '▏', - '▎', - '▍', - '▌', - '▋', - '▊', - '▉', - '▊', - '▋', - '▌', - '▍', - '▎' - ] - }, - 'balloon': { - 'interval': 140, - 'frames': [' ', '.', 'o', 'O', '@', '*', ' '] - }, - 'balloon2': { - 'interval': 120, - 'frames': ['.', 'o', 'O', '°', 'O', 'o', '.'] - }, - 'noise': { - 'interval': 100, - 'frames': ['▓', '▒', '░'] - }, - 'bounce': { - 'interval': 120, - 'frames': ['⠁', '⠂', '⠄', '⠂'] - }, - 'boxBounce': { - 'interval': 120, - 'frames': ['▖', '▘', '▝', '▗'] - }, - 'boxBounce2': { - 'interval': 100, - 'frames': ['▌', '▀', '▐', '▄'] - }, - 'triangle': { - 'interval': 50, - 'frames': ['◢', '◣', '◤', '◥'] - }, - 'arc': { - 'interval': 100, - 'frames': ['◜', '◠', '◝', '◞', '◡', '◟'] - }, - 'circle': { - 'interval': 120, - 'frames': ['◡', '⊙', '◠'] - }, - 'squareCorners': { - 'interval': 180, - 'frames': ['◰', '◳', '◲', '◱'] - }, - 'circleQuarters': { - 'interval': 120, - 'frames': ['◴', '◷', '◶', '◵'] - }, - 'circleHalves': { - 'interval': 50, - 'frames': ['◐', '◓', '◑', '◒'] - }, - 'squish': { - 'interval': 100, - 'frames': ['╫', '╪'] - }, - 'toggle': { - 'interval': 250, - 'frames': ['⊶', '⊷'] - }, - 'toggle2': { - 'interval': 80, - 'frames': ['▫', '▪'] - }, - 'toggle3': { - 'interval': 120, - 'frames': ['□', '■'] - }, - 'toggle4': { - 'interval': 100, - 'frames': ['■', '□', '▪', '▫'] - }, - 'toggle5': { - 'interval': 100, - 'frames': ['▮', '▯'] - }, - 'toggle6': { - 'interval': 300, - 'frames': ['ဝ', '၀'] - }, - 'toggle7': { - 'interval': 80, - 'frames': ['⦾', '⦿'] - }, - 'toggle8': { - 'interval': 100, - 'frames': ['◍', '◌'] - }, - 'toggle9': { - 'interval': 100, - 'frames': ['◉', '◎'] - }, - 'toggle10': { - 'interval': 100, - 'frames': ['㊂', '㊀', '㊁'] - }, - 'toggle11': { - 'interval': 50, - 'frames': ['⧇', '⧆'] - }, - 'toggle12': { - 'interval': 120, - 'frames': ['☗', '☖'] - }, - 'toggle13': { - 'interval': 80, - 'frames': ['=', '*', '-'] - }, - 'arrow': { - 'interval': 100, - 'frames': ['←', '↖', '↑', '↗', '→', '↘', '↓', '↙'] - }, - 'arrow2': { - 'interval': 80, - 'frames': ['⬆️ ', '↗️ ', '➡️ ', '↘️ ', '⬇️ ', '↙️ ', '⬅️ ', '↖️ '] - }, - 'arrow3': { - 'interval': 120, - 'frames': ['▹▹▹▹▹', '▸▹▹▹▹', '▹▸▹▹▹', '▹▹▸▹▹', '▹▹▹▸▹', '▹▹▹▹▸'] - }, - 'bouncingBar': { - 'interval': 80, - 'frames': [ - '[ ]', - '[= ]', - '[== ]', - '[=== ]', - '[ ===]', - '[ ==]', - '[ =]', - '[ ]', - '[ =]', - '[ ==]', - '[ ===]', - '[====]', - '[=== ]', - '[== ]', - '[= ]' - ] - }, - 'bouncingBall': { - 'interval': 80, - 'frames': [ - '( ● )', - '( ● )', - '( ● )', - '( ● )', - '( ●)', - '( ● )', - '( ● )', - '( ● )', - '( ● )', - '(● )' - ] - }, - 'smiley': { - 'interval': 200, - 'frames': ['😄 ', '😝 '] - }, - 'monkey': { - 'interval': 300, - 'frames': ['🙈 ', '🙈 ', '🙉 ', '🙊 '] - }, - 'hearts': { - 'interval': 100, - 'frames': ['💛 ', '💙 ', '💜 ', '💚 ', '❤️ '] - }, - 'clock': { - 'interval': 100, - 'frames': [ - '🕛 ', - '🕐 ', - '🕑 ', - '🕒 ', - '🕓 ', - '🕔 ', - '🕕 ', - '🕖 ', - '🕗 ', - '🕘 ', - '🕙 ', - '🕚 ' - ] - }, - 'earth': { - 'interval': 180, - 'frames': ['🌍 ', '🌎 ', '🌏 '] - }, - 'material': { - 'interval': 17, - 'frames': [ - '█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '███████▁▁▁▁▁▁▁▁▁▁▁▁▁', - '████████▁▁▁▁▁▁▁▁▁▁▁▁', - '█████████▁▁▁▁▁▁▁▁▁▁▁', - '█████████▁▁▁▁▁▁▁▁▁▁▁', - '██████████▁▁▁▁▁▁▁▁▁▁', - '███████████▁▁▁▁▁▁▁▁▁', - '█████████████▁▁▁▁▁▁▁', - '██████████████▁▁▁▁▁▁', - '██████████████▁▁▁▁▁▁', - '▁██████████████▁▁▁▁▁', - '▁██████████████▁▁▁▁▁', - '▁██████████████▁▁▁▁▁', - '▁▁██████████████▁▁▁▁', - '▁▁▁██████████████▁▁▁', - '▁▁▁▁█████████████▁▁▁', - '▁▁▁▁██████████████▁▁', - '▁▁▁▁██████████████▁▁', - '▁▁▁▁▁██████████████▁', - '▁▁▁▁▁██████████████▁', - '▁▁▁▁▁██████████████▁', - '▁▁▁▁▁▁██████████████', - '▁▁▁▁▁▁██████████████', - '▁▁▁▁▁▁▁█████████████', - '▁▁▁▁▁▁▁█████████████', - '▁▁▁▁▁▁▁▁████████████', - '▁▁▁▁▁▁▁▁████████████', - '▁▁▁▁▁▁▁▁▁███████████', - '▁▁▁▁▁▁▁▁▁███████████', - '▁▁▁▁▁▁▁▁▁▁██████████', - '▁▁▁▁▁▁▁▁▁▁██████████', - '▁▁▁▁▁▁▁▁▁▁▁▁████████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁███████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████', - '█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████', - '██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███', - '██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███', - '███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███', - '████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██', - '█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█', - '█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█', - '██████▁▁▁▁▁▁▁▁▁▁▁▁▁█', - '████████▁▁▁▁▁▁▁▁▁▁▁▁', - '█████████▁▁▁▁▁▁▁▁▁▁▁', - '█████████▁▁▁▁▁▁▁▁▁▁▁', - '█████████▁▁▁▁▁▁▁▁▁▁▁', - '█████████▁▁▁▁▁▁▁▁▁▁▁', - '███████████▁▁▁▁▁▁▁▁▁', - '████████████▁▁▁▁▁▁▁▁', - '████████████▁▁▁▁▁▁▁▁', - '██████████████▁▁▁▁▁▁', - '██████████████▁▁▁▁▁▁', - '▁██████████████▁▁▁▁▁', - '▁██████████████▁▁▁▁▁', - '▁▁▁█████████████▁▁▁▁', - '▁▁▁▁▁████████████▁▁▁', - '▁▁▁▁▁████████████▁▁▁', - '▁▁▁▁▁▁███████████▁▁▁', - '▁▁▁▁▁▁▁▁█████████▁▁▁', - '▁▁▁▁▁▁▁▁█████████▁▁▁', - '▁▁▁▁▁▁▁▁▁█████████▁▁', - '▁▁▁▁▁▁▁▁▁█████████▁▁', - '▁▁▁▁▁▁▁▁▁▁█████████▁', - '▁▁▁▁▁▁▁▁▁▁▁████████▁', - '▁▁▁▁▁▁▁▁▁▁▁████████▁', - '▁▁▁▁▁▁▁▁▁▁▁▁███████▁', - '▁▁▁▁▁▁▁▁▁▁▁▁███████▁', - '▁▁▁▁▁▁▁▁▁▁▁▁▁███████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁███████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁', - '▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁' - ] - }, - 'moon': { - 'interval': 80, - 'frames': ['🌑 ', '🌒 ', '🌓 ', '🌔 ', '🌕 ', '🌖 ', '🌗 ', '🌘 '] - }, - 'runner': { - 'interval': 140, - 'frames': ['🚶 ', '🏃 '] - }, - 'pong': { - 'interval': 80, - 'frames': [ - '▐⠂ ▌', - '▐⠈ ▌', - '▐ ⠂ ▌', - '▐ ⠠ ▌', - '▐ ⡀ ▌', - '▐ ⠠ ▌', - '▐ ⠂ ▌', - '▐ ⠈ ▌', - '▐ ⠂ ▌', - '▐ ⠠ ▌', - '▐ ⡀ ▌', - '▐ ⠠ ▌', - '▐ ⠂ ▌', - '▐ ⠈ ▌', - '▐ ⠂▌', - '▐ ⠠▌', - '▐ ⡀▌', - '▐ ⠠ ▌', - '▐ ⠂ ▌', - '▐ ⠈ ▌', - '▐ ⠂ ▌', - '▐ ⠠ ▌', - '▐ ⡀ ▌', - '▐ ⠠ ▌', - '▐ ⠂ ▌', - '▐ ⠈ ▌', - '▐ ⠂ ▌', - '▐ ⠠ ▌', - '▐ ⡀ ▌', - '▐⠠ ▌' - ] - }, - 'shark': { - 'interval': 120, - 'frames': [ - r'▐|\____________▌', - r'▐_|\___________▌', - r'▐__|\__________▌', - r'▐___|\_________▌', - r'▐____|\________▌', - r'▐_____|\_______▌', - r'▐______|\______▌', - r'▐_______|\_____▌', - r'▐________|\____▌', - r'▐_________|\___▌', - r'▐__________|\__▌', - r'▐___________|\_▌', - r'▐____________|\▌', - '▐____________/|▌', - '▐___________/|_▌', - '▐__________/|__▌', - '▐_________/|___▌', - '▐________/|____▌', - '▐_______/|_____▌', - '▐______/|______▌', - '▐_____/|_______▌', - '▐____/|________▌', - '▐___/|_________▌', - '▐__/|__________▌', - '▐_/|___________▌', - '▐/|____________▌' - ] - }, - 'dqpb': { - 'interval': 100, - 'frames': ['d', 'q', 'p', 'b'] - }, - 'weather': { - 'interval': 100, - 'frames': [ - '☀️ ', - '☀️ ', - '☀️ ', - '🌤 ', - '⛅️ ', - '🌥 ', - '☁️ ', - '🌧 ', - '🌨 ', - '🌧 ', - '🌨 ', - '🌧 ', - '🌨 ', - '⛈ ', - '🌨 ', - '🌧 ', - '🌨 ', - '☁️ ', - '🌥 ', - '⛅️ ', - '🌤 ', - '☀️ ', - '☀️ ' - ] - }, - 'christmas': { - 'interval': 400, - 'frames': ['🌲', '🎄'] - }, - 'grenade': { - 'interval': 80, - 'frames': [ - '، ', - '′ ', - ' ´ ', - ' ‾ ', - ' ⸌', - ' ⸊', - ' |', - ' ⁎', - ' ⁕', - ' ෴ ', - ' ⁓', - ' ', - ' ', - ' ' - ] - }, - 'point': { - 'interval': 125, - 'frames': ['∙∙∙', '●∙∙', '∙●∙', '∙∙●', '∙∙∙'] - }, - 'layer': { - 'interval': 150, - 'frames': ['-', '=', '≡'] - }, - 'betaWave': { - 'interval': 80, - 'frames': [ - 'ρββββββ', - 'βρβββββ', - 'ββρββββ', - 'βββρβββ', - 'ββββρββ', - 'βββββρβ', - 'ββββββρ' - ] - }, - 'fingerDance': { - 'interval': 160, - 'frames': ['🤘 ', '🤟 ', '🖖 ', '✋ ', '🤚 ', '👆 '] - }, - 'fistBump': { - 'interval': 80, - 'frames': [ - '🤜\u3000\u3000\u3000\u3000🤛 ', - '🤜\u3000\u3000\u3000\u3000🤛 ', - '🤜\u3000\u3000\u3000\u3000🤛 ', - '\u3000🤜\u3000\u3000🤛\u3000 ', - '\u3000\u3000🤜🤛\u3000\u3000 ', - '\u3000🤜✨🤛\u3000\u3000 ', - '🤜\u3000✨\u3000🤛\u3000 ' - ] - }, - 'soccerHeader': { - 'interval': 80, - 'frames': [ - ' 🧑⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ', - '🧑 ⚽️ 🧑 ' - ] - }, - 'mindblown': { - 'interval': 160, - 'frames': [ - '😐 ', - '😐 ', - '😮 ', - '😮 ', - '😦 ', - '😦 ', - '😧 ', - '😧 ', - '🤯 ', - '💥 ', - '✨ ', - '\u3000 ', - '\u3000 ', - '\u3000 ' - ] - }, - 'speaker': { - 'interval': 160, - 'frames': ['🔈 ', '🔉 ', '🔊 ', '🔉 '] - }, - 'orangePulse': { - 'interval': 100, - 'frames': ['🔸 ', '🔶 ', '🟠 ', '🟠 ', '🔶 '] - }, - 'bluePulse': { - 'interval': 100, - 'frames': ['🔹 ', '🔷 ', '🔵 ', '🔵 ', '🔷 '] - }, - 'orangeBluePulse': { - 'interval': 100, - 'frames': [ - '🔸 ', - '🔶 ', - '🟠 ', - '🟠 ', - '🔶 ', - '🔹 ', - '🔷 ', - '🔵 ', - '🔵 ', - '🔷 ' - ] - }, - 'timeTravel': { - 'interval': 100, - 'frames': [ - '🕛 ', - '🕚 ', - '🕙 ', - '🕘 ', - '🕗 ', - '🕖 ', - '🕕 ', - '🕔 ', - '🕓 ', - '🕒 ', - '🕑 ', - '🕐 ' - ] - }, - 'aesthetic': { - 'interval': 80, - 'frames': [ - '▰▱▱▱▱▱▱', - '▰▰▱▱▱▱▱', - '▰▰▰▱▱▱▱', - '▰▰▰▰▱▱▱', - '▰▰▰▰▰▱▱', - '▰▰▰▰▰▰▱', - '▰▰▰▰▰▰▰', - '▰▱▱▱▱▱▱' - ] - } -}; diff --git a/packages/wyatt_cli_toolbox/lib/src/stylish/stylish.dart b/packages/wyatt_cli_toolbox/lib/src/stylish/stylish.dart deleted file mode 100644 index 7a3bc878..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/stylish/stylish.dart +++ /dev/null @@ -1,210 +0,0 @@ -// 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 . - -import 'package:wyatt_cli_toolbox/src/stylish/utils.dart'; - -extension Stylish on String { - /// Status of the extension - static bool enabled = true; - - /// Formats a string if ansi escape sequences are supported. - static bool forced = false; - - /// Enable or disable styling - static void config({bool? enable}) { - Stylish.enabled = enable ?? Stylish.enabled; - } - - // Foreground Colors - /// Format this string with ANSI to be colored black. - String black() => format(30, 39)(this); - - /// Format this string with ANSI to be colored red. - String red() => format(31, 39)(this); - - /// Format this string with ANSI to be colored green. - String green() => format(32, 39)(this); - - /// Format this string with ANSI to be colored yellow. - String yellow() => format(33, 39)(this); - - /// Format this string with ANSI to be colored blue. - String blue() => format(34, 39)(this); - - /// Format this string with ANSI to be colored magenta. - String magenta() => format(35, 39)(this); - - /// Format this string with ANSI to be colored cyan. - String cyan() => format(36, 39)(this); - - /// Format this string with ANSI to be colored white. - String white() => format(37, 39)(this); - - /// Format this string with ANSI to be colored bright black or gray or grey. - String brightBlack() => format(90, 39)(this); - - /// Format this string with ANSI to be colored bright red. - String brightRed() => format(91, 39)(this); - - /// Format this string with ANSI to be colored bright green. - String brightGreen() => format(92, 39)(this); - - /// Format this string with ANSI to be colored bright yellow. - String brightYellow() => format(93, 39)(this); - - /// Format this string with ANSI to be colored bright blue. - String brightBlue() => format(94, 39)(this); - - /// Format this string with ANSI to be colored bright magenta. - String brightMagenta() => format(95, 39)(this); - - /// Format this string with ANSI to be colored bright cyan. - String brightCyan() => format(96, 39)(this); - - /// Format this string with ANSI to be colored bright white. - String brightWhite() => format(97, 39)(this); - - // Background Colors - /// Format this string with ANSI adding a black background color. - String bgBlack() => format(40, 49)(this); - - /// Format this string with ANSI adding a red background color. - String bgRed() => format(41, 49)(this); - - /// Format this string with ANSI adding a green background color. - String bgGreen() => format(42, 49)(this); - - /// Format this string with ANSI adding a yellow background color. - String bgYellow() => format(43, 49)(this); - - /// Format this string with ANSI adding a blue background color. - String bgBlue() => format(44, 49)(this); - - /// Format this string with ANSI adding a magenta background color. - String bgMagenta() => format(45, 49)(this); - - /// Format this string with ANSI adding a cyan background color. - String bgCyan() => format(46, 49)(this); - - /// Format this string with ANSI adding a white background color. - String bgWhite() => format(47, 49)(this); - - /// Format this string with ANSI adding a bright black - /// or gray or grey background color. - String bgBrightBlack() => format(100, 49)(this); - - /// Format this string with ANSI adding a bright red - /// background color. - String bgBrightRed() => format(101, 49)(this); - - /// Format this string with ANSI adding a bright green - /// background color. - String bgBrightGreen() => format(102, 49)(this); - - /// Format this string with ANSI adding a bright yellow - /// background color. - String bgBrightYellow() => format(103, 49)(this); - - /// Format this string with ANSI adding a bright blue - /// background color. - String bgBrightBlue() => format(104, 49)(this); - - /// Format this string with ANSI adding a bright magenta - /// background color. - String bgBrightMagenta() => format(105, 49)(this); - - /// Format this string with ANSI adding a bright cyan - /// background color. - String bgBrightCyan() => format(106, 49)(this); - - /// Format this string with ANSI adding a bright white - /// background color. - String bgBrightWhite() => format(107, 49)(this); - - /// Format this string with ANSI to be colored bright black or gray or grey. - String gray() => brightBlack(); - - /// Format this string with ANSI to be colored bright black or gray or grey. - String grey() => brightBlack(); - - /// Format this string with ANSI adding a bright black - /// or gray or grey background color. - String bgGray() => bgBrightBlack(); - - /// Format this string with ANSI adding a bright black - /// or gray or grey background color. - String bgGrey() => bgBrightBlack(); - - /// Format this string with ANSI to be styled as a bold text. - String bold() => format(1, 22)(this); - - /// Format this string with ANSI to make it appear as a dimmed text. - String dim() => format(2, 22)(this); - - /// Format this string with ANSI to make it appear italic. - String italic() => format(3, 23)(this); - - /// Format this string with ANSI adding an underline. - String underline() => format(4, 24)(this); - - /// Format this string with ANSI making it appear blinking slowly. - String blink() => format(5, 25)(this); - - /// Format this string with ANSI making it appear blinking rapidly. - String strobe() => format(6, 25)(this); - - /// Format this string with ANSI inverting the style. - String inverse() => format(7, 27)(this); - - /// Format this string with ANSI making it invisible. - String hidden() => format(8, 28)(this); - - /// Format this string with ANSI adding a strike through the text. - String strikethrough() => format(9, 29)(this); - - /// Format this string with ANSI adding a frame. - String frame() => format(51, 54)(this); - - /// Format this string with ANSI adding a circle. - String encircle() => format(52, 54)(this); - - /// Format this string with ANSI adding an overline. - String overline() => format(53, 55)(this); - - /// Format this string with ANSI resetting the previous color chains. - String reset() => format(0, 0)(this); - - /// If exists, all ANSI sequences will be removed from this string. - String strip() { - return replaceAll(ansiPattern, ''); - } - - /// Format this string with ANSI setting it's foreground color the - /// value defined as RGB parameters. - /// - /// [r]/[g]/[b] parameters can be an [int] in the range of `0` to `255`. - String fg({int r = 255, int g = 255, int b = 255}) { - return format('38;5;${rgbToAnsiCode(r, g, b)}', 0)(this); - } - - /// Format this string with ANSI setting it's background color the value - /// defined as RGB parameters. - /// - /// [r]/[g]/[b] parameters can be an [int] in the range of `0` to `255`. - String bg({int r = 255, int g = 255, int b = 255}) { - return format('48;5;${rgbToAnsiCode(r, g, b)}', 0)(this); - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi.dart b/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi.dart deleted file mode 100644 index 2a417b41..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi.dart +++ /dev/null @@ -1,17 +0,0 @@ -// 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 . - -bool get supportsAnsiColor => false; diff --git a/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_html.dart b/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_html.dart deleted file mode 100644 index 74e1eece..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_html.dart +++ /dev/null @@ -1,17 +0,0 @@ -// 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 . - -bool get supportsAnsiColor => true; diff --git a/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_io.dart b/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_io.dart deleted file mode 100644 index 51cea779..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/stylish/support/supports_ansi_io.dart +++ /dev/null @@ -1,19 +0,0 @@ -// 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 . - -import 'dart:io'; - -bool get supportsAnsiColor => stdout.supportsAnsiEscapes; diff --git a/packages/wyatt_cli_toolbox/lib/src/stylish/utils.dart b/packages/wyatt_cli_toolbox/lib/src/stylish/utils.dart deleted file mode 100644 index 2ef62a36..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/stylish/utils.dart +++ /dev/null @@ -1,45 +0,0 @@ -// 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 . - -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; - -/// Converts an rgb value of given [r], [g] and [b] int values -/// to an ANSI usable color. -int rgbToAnsiCode(int r, int g, int b) => - (((r.clamp(0, 255) / 255) * 5).toInt() * 36 + - ((g.clamp(0, 255) / 255) * 5).toInt() * 6 + - ((b.clamp(0, 255) / 255) * 5).toInt() + - 16) - .clamp(0, 256); - -/// Regular Expression pattern for all possible types of ANSI escape -/// sequences in a [String]. -final RegExp ansiPattern = RegExp( - [ - r'[\u001B\u009B][[\]()#;?]*(?:(?:(?:[a-zA-Z\d]*(?:;[-a-zA-Z\d\/#&.:=?%@~_]*)*)?\u0007)', - r'(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-ntqry=><~]))' - ].join('|'), -); - -/// Formats a string if ansi escape sequences are supported. -String Function(String) format(dynamic start, dynamic end) => (String x) { - // if ((supportsAnsiColor || Stylish.forced) && Stylish.enabled) { - if (Stylish.enabled) { - return '\x1B[${start}m$x\x1B[${end}m'; - } else { - return x; - } - }; diff --git a/packages/wyatt_cli_toolbox/lib/src/workflow/skip_exception.dart b/packages/wyatt_cli_toolbox/lib/src/workflow/skip_exception.dart deleted file mode 100644 index ecfed601..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/workflow/skip_exception.dart +++ /dev/null @@ -1,28 +0,0 @@ -// 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 . - -class SkipException implements Exception { - SkipException(this.message); - - final String? message; - - @override - String toString() { - final Object? message = this.message; - if (message == null) return 'Skipped'; - return '$message'; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/workflow/task.dart b/packages/wyatt_cli_toolbox/lib/src/workflow/task.dart deleted file mode 100644 index d9e5e166..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/workflow/task.dart +++ /dev/null @@ -1,148 +0,0 @@ -// 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 . - -import 'dart:async'; -import 'dart:io'; - -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/spinners/spinners.dart'; -import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; -import 'package:wyatt_cli_toolbox/src/workflow/skip_exception.dart'; - -enum ExitStatus { nil, success, fail, skip } - -class Task { - Task({ - required this.name, - String? id, - SpinnerType? spinner, - this.timer = true, - this.task, - this.onFinish, - this.onError, - this.onSkip, - }) { - if (id != null) { - identifier = id; - } else { - identifier = name; - } - _isolateTask = IsolateTask( - name: name, - spinner: spinner ?? SpinnerType.dots, - timer: timer, - ); - } - - String name; - late String identifier; - bool timer; - - /// **Synchronous** function. Use experimental `waitFor()` - /// if you have async calls.** - T Function()? task; - T? result; - - String Function(Object? o)? onFinish; - String Function(Object e)? onError; - String Function(SkipException e)? onSkip; - - late IsolateTask _isolateTask; - static String lastPrint = ''; - - IsolateTask get animation => _isolateTask; - - T? invoke() { - final T Function()? t = task; - if (t != null) { - return t(); - } - } - - static void print(String message) { - //waitFor(Future.delayed(Duration(milliseconds: 1))); - lastPrint = message; - stdout.write('\n'); - Sequences.moveDownAtStart(1); - Sequences.clearEntireLine(); - stdout.write(' > $message'.dim()); - Sequences.moveUpAtStart(1); - } - - static void clearPrint() { - Sequences.moveDownAtStart(1); - Sequences.clearEntireLine(); - Sequences.moveUpAtStart(1); - } -} - -class IsolateTask { - IsolateTask({ - required this.name, - required SpinnerType spinner, - required this.timer, - }) { - _indicator = spinner.indicator; - } - - final Stopwatch _stopwatch = Stopwatch(); - Timer? _timer; - int _frame = 0; - late Indicator _indicator; - - String name; - bool timer; - - void run() { - if (timer) { - _stopwatch - ..reset() - ..start(); - _timer?.cancel(); - } - - _timer = Timer.periodic( - Duration(milliseconds: _indicator.interval), - (Timer t) { - Sequences.clearEntireLine(); - _frame = (_frame + 1) % _indicator.frames.length; - stdout.write('${_indicator.frames[_frame].green()} $name...'); - Sequences.moveHorizontal(1); - }, - ); - } - - void stop(ExitStatus status, {String? reason}) { - _stopwatch.stop(); - final String time = - (_stopwatch.elapsed.inMilliseconds / 1000.0).toStringAsFixed(1); - Sequences.clearEntireLine(); - String prefix = ''; - String message = ''; - if (status == ExitStatus.success) { - prefix = '✓'.green(); - message = reason ?? 'Finished'; - } else if (status == ExitStatus.fail) { - prefix = 'x'.red(); - message = reason ?? 'Failed'; - } else if (status == ExitStatus.skip) { - prefix = '◊'.yellow(); - message = reason ?? 'Skipped'; - } - stdout.write('$prefix $message ${timer ? '(${time}s)' : ''}\n'); - _timer?.cancel(); - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/workflow/utils.dart b/packages/wyatt_cli_toolbox/lib/src/workflow/utils.dart deleted file mode 100644 index a07d9388..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/workflow/utils.dart +++ /dev/null @@ -1,64 +0,0 @@ -// 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 . - -import 'dart:async'; - -// From dart-cli -T waitFor(Future future, {Duration? timeout}) { - late T result; - bool futureCompleted = false; - Object? error; - StackTrace? stacktrace; - - future.then( - (T r) { - futureCompleted = true; - result = r; - }, - onError: (Object? e, StackTrace? st) { - error = e; - stacktrace = st; - }, - ); - - late Stopwatch s; - if (timeout != null) { - s = Stopwatch()..start(); - } - - Timer.run(() {}); - - while (!futureCompleted && (error == null)) { - Duration? remaining; - if (timeout != null) { - if (s.elapsed >= timeout) { - throw TimeoutException('waitFor() timed out', timeout); - } - remaining = timeout - s.elapsed; - } - } - if (timeout != null) { - s.stop(); - } - - Timer.run(() {}); - - if (error != null) { - throw AsyncError(error!, stacktrace); - } - - return result; -} diff --git a/packages/wyatt_cli_toolbox/lib/src/workflow/workflow.dart b/packages/wyatt_cli_toolbox/lib/src/workflow/workflow.dart deleted file mode 100644 index 669825b4..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/workflow/workflow.dart +++ /dev/null @@ -1,164 +0,0 @@ -// 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 . - -import 'dart:async'; -import 'dart:isolate'; - -import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; -import 'package:wyatt_cli_toolbox/src/workflow/skip_exception.dart'; -import 'package:wyatt_cli_toolbox/src/workflow/task.dart'; - -export 'skip_exception.dart'; -export 'task.dart'; -export 'utils.dart'; - -enum WorkflowControl { start, next, stop } - -class Workflow { - Workflow._(this._workflowIsolate, this._tasks, this._toIsolate); - - Isolate? _workflowIsolate; - final SendPort _toIsolate; - final List> _tasks; - final Map _results = {}; - - Map get results => _results; - - static Future _initIsolate(List> tasks) async { - final List animations = []; - for (final Task t in tasks) { - animations.add(t.animation); - } - - Isolate? workflowIsolate; - - final Completer completer = Completer(); - final ReceivePort isolateToMainStream = ReceivePort() - // Retrieve send port sent by isolate - ..listen((dynamic data) { - if (data is SendPort) { - completer.complete(Workflow._(workflowIsolate, tasks, data)); - } - }); - - workflowIsolate = await Isolate.spawn( - _start, - [isolateToMainStream.sendPort, animations], - ); - return completer.future; - } - - static void _start(List args) { - // ignore: cast_nullable_to_non_nullable - final SendPort isolateToMainStream = args[0] as SendPort; - // ignore: cast_nullable_to_non_nullable - final List tasks = args[1] as List; - final ReceivePort mainToIsolateStream = ReceivePort(); - - isolateToMainStream.send(mainToIsolateStream.sendPort); - - mainToIsolateStream.listen((dynamic data) { - final List args = data as List; - // ignore: cast_nullable_to_non_nullable - final WorkflowControl control = args[0] as WorkflowControl; - // ignore: cast_nullable_to_non_nullable - final int taskId = args[1] as int; - final ExitStatus? exit = args[2] as ExitStatus?; - final String? reason = args[3] as String?; - - if (control == WorkflowControl.start) { - tasks[taskId].run(); - } else if (control == WorkflowControl.next) { - if (exit != null) { - tasks[taskId - 1].stop(exit, reason: reason); - } - tasks[taskId].run(); - } else if (control == WorkflowControl.stop) { - tasks[taskId].stop(exit!, reason: reason); - } - }); - } - - static Future create(List> tasks) async { - final Workflow w = await _initIsolate(tasks); - return w; - } - - void _animation( - WorkflowControl control, - int taskId, { - ExitStatus? status, - String? reason, - }) { - _toIsolate.send([control, taskId, status, reason]); - } - - Map start() { - Sequences.hideCursor(); - int _index = 0; - - for (final Task _ in _tasks) { - _call(_index); - _index++; - } - - if (_workflowIsolate != null) { - _workflowIsolate!.kill(priority: Isolate.immediate); - } - _workflowIsolate = null; - Sequences.unhideCursor(); - return _results; - } - - ExitStatus _call(int taskId) { - ExitStatus status = ExitStatus.nil; - String message = 'nil'; - final Task t = _tasks[taskId]; - - if (t.task != null) { - _animation(WorkflowControl.start, taskId); - try { - // Call task function - final dynamic res = t.invoke(); - _results[t.identifier] = res; - - message = 'Finished'; - if (t.onFinish != null) { - message = t.onFinish!(res); - } - status = ExitStatus.success; - } catch (e) { - if (e is SkipException) { - message = e.toString(); - if (t.onSkip != null) { - message = t.onSkip!(e); - } - - status = ExitStatus.skip; - } else { - message = e.toString(); - if (t.onError != null) { - message = t.onError!(e); - } - - status = ExitStatus.fail; - } - } - _animation(WorkflowControl.stop, taskId, status: status, reason: message); - } - return status; - } -} diff --git a/packages/wyatt_cli_toolbox/lib/src/wyatt_cli_toolbox_base.dart b/packages/wyatt_cli_toolbox/lib/src/wyatt_cli_toolbox_base.dart deleted file mode 100644 index e8a6f159..00000000 --- a/packages/wyatt_cli_toolbox/lib/src/wyatt_cli_toolbox_base.dart +++ /dev/null @@ -1,6 +0,0 @@ -// TODO: Put public facing types in this file. - -/// Checks if you are awesome. Spoiler: you are. -class Awesome { - bool get isAwesome => true; -} diff --git a/packages/wyatt_cli_toolbox/lib/wyatt_cli_toolbox.dart b/packages/wyatt_cli_toolbox/lib/wyatt_cli_toolbox.dart deleted file mode 100644 index 47d42a01..00000000 --- a/packages/wyatt_cli_toolbox/lib/wyatt_cli_toolbox.dart +++ /dev/null @@ -1,23 +0,0 @@ -// 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 . - -library wyatt_cli_toolbox; - -export 'src/prompt/prompt.dart'; -export 'src/sequences/sequences.dart'; -export 'src/spinners/spinners.dart'; -export 'src/stylish/stylish.dart'; -export 'src/workflow/workflow.dart'; diff --git a/packages/wyatt_cli_toolbox/pubspec.yaml b/packages/wyatt_cli_toolbox/pubspec.yaml deleted file mode 100644 index ae49532a..00000000 --- a/packages/wyatt_cli_toolbox/pubspec.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: wyatt_cli_toolbox -description: A toolbox for Dart CLI projects. -repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_cli_toolbox -version: 1.0.0 - -environment: - sdk: '>=2.17.0 <3.0.0' - -dev_dependencies: - wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.2.2 - path: packages/wyatt_analysis -dependencies: {meta: ^1.8.0} -- 2.47.2 From f223811f4bedbed2c83e423ed247e73e4effc0e6 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 8 Dec 2022 14:32:19 -0500 Subject: [PATCH 012/320] chore(medium): remove unused package --- packages/wyatt_medium_feeds/.gitignore | 10 -- .../.vscode/extensions.json | 24 ---- .../wyatt_medium_feeds/.vscode/settings.json | 71 ----------- packages/wyatt_medium_feeds/CHANGELOG.md | 7 -- packages/wyatt_medium_feeds/README.md | 39 ------ .../wyatt_medium_feeds/analysis_options.yaml | 1 - .../wyatt_medium_feeds/example/.gitignore | 46 ------- packages/wyatt_medium_feeds/example/.metadata | 10 -- packages/wyatt_medium_feeds/example/README.md | 16 --- .../example/analysis_options.yaml | 29 ----- .../example/lib/article_tile.dart | 76 ------------ .../wyatt_medium_feeds/example/lib/main.dart | 78 ------------ .../wyatt_medium_feeds/example/pubspec.yaml | 93 -------------- .../example/test/widget_test.dart | 30 ----- .../example/web/favicon.png | Bin 917 -> 0 bytes .../example/web/icons/Icon-192.png | Bin 5292 -> 0 bytes .../example/web/icons/Icon-512.png | Bin 8252 -> 0 bytes .../example/web/icons/Icon-maskable-192.png | Bin 5594 -> 0 bytes .../example/web/icons/Icon-maskable-512.png | Bin 20998 -> 0 bytes .../wyatt_medium_feeds/example/web/index.html | 104 ---------------- .../example/web/manifest.json | 35 ------ .../lib/src/medium_article.dart | 67 ----------- .../lib/src/medium_feed.dart | 113 ------------------ .../lib/src/reading_time.dart | 48 -------- .../lib/wyatt_medium_feeds.dart | 21 ---- packages/wyatt_medium_feeds/pubspec.yaml | 19 --- .../test/wyatt_medium_feeds_test.dart | 0 27 files changed, 937 deletions(-) delete mode 100644 packages/wyatt_medium_feeds/.gitignore delete mode 100644 packages/wyatt_medium_feeds/.vscode/extensions.json delete mode 100644 packages/wyatt_medium_feeds/.vscode/settings.json delete mode 100644 packages/wyatt_medium_feeds/CHANGELOG.md delete mode 100644 packages/wyatt_medium_feeds/README.md delete mode 100644 packages/wyatt_medium_feeds/analysis_options.yaml delete mode 100644 packages/wyatt_medium_feeds/example/.gitignore delete mode 100644 packages/wyatt_medium_feeds/example/.metadata delete mode 100644 packages/wyatt_medium_feeds/example/README.md delete mode 100644 packages/wyatt_medium_feeds/example/analysis_options.yaml delete mode 100644 packages/wyatt_medium_feeds/example/lib/article_tile.dart delete mode 100644 packages/wyatt_medium_feeds/example/lib/main.dart delete mode 100644 packages/wyatt_medium_feeds/example/pubspec.yaml delete mode 100644 packages/wyatt_medium_feeds/example/test/widget_test.dart delete mode 100644 packages/wyatt_medium_feeds/example/web/favicon.png delete mode 100644 packages/wyatt_medium_feeds/example/web/icons/Icon-192.png delete mode 100644 packages/wyatt_medium_feeds/example/web/icons/Icon-512.png delete mode 100644 packages/wyatt_medium_feeds/example/web/icons/Icon-maskable-192.png delete mode 100644 packages/wyatt_medium_feeds/example/web/icons/Icon-maskable-512.png delete mode 100644 packages/wyatt_medium_feeds/example/web/index.html delete mode 100644 packages/wyatt_medium_feeds/example/web/manifest.json delete mode 100644 packages/wyatt_medium_feeds/lib/src/medium_article.dart delete mode 100644 packages/wyatt_medium_feeds/lib/src/medium_feed.dart delete mode 100644 packages/wyatt_medium_feeds/lib/src/reading_time.dart delete mode 100644 packages/wyatt_medium_feeds/lib/wyatt_medium_feeds.dart delete mode 100644 packages/wyatt_medium_feeds/pubspec.yaml delete mode 100644 packages/wyatt_medium_feeds/test/wyatt_medium_feeds_test.dart diff --git a/packages/wyatt_medium_feeds/.gitignore b/packages/wyatt_medium_feeds/.gitignore deleted file mode 100644 index 65c34dc8..00000000 --- a/packages/wyatt_medium_feeds/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Files and directories created by pub. -.dart_tool/ -.packages - -# Conventional directory for build outputs. -build/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_medium_feeds/.vscode/extensions.json b/packages/wyatt_medium_feeds/.vscode/extensions.json deleted file mode 100644 index 30cd2233..00000000 --- a/packages/wyatt_medium_feeds/.vscode/extensions.json +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 . - */ - -{ - "recommendations": [ - "psioniq.psi-header", - "blaugold.melos-code" - ] -} \ No newline at end of file diff --git a/packages/wyatt_medium_feeds/.vscode/settings.json b/packages/wyatt_medium_feeds/.vscode/settings.json deleted file mode 100644 index 708f5ba6..00000000 --- a/packages/wyatt_medium_feeds/.vscode/settings.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "psi-header.changes-tracking": { - "isActive": true - }, - "psi-header.config": { - "blankLinesAfter": 1, - "forceToTop": true - }, - "psi-header.lang-config": [ - { - "beforeHeader": [ - "# -*- coding:utf-8 -*-", - "#!/usr/bin/env python3" - ], - "begin": "###", - "end": "###", - "language": "python", - "prefix": "# " - }, - { - "beforeHeader": [ - "#!/usr/bin/env sh", - "" - ], - "language": "shellscript", - "begin": "", - "end": "", - "prefix": "# " - }, - { - "begin": "", - "end": "", - "language": "dart", - "prefix": "// " - }, - { - "begin": "", - "end": "", - "language": "yaml", - "prefix": "# " - }, - { - "begin": "", - "language": "markdown", - }, - ], - "psi-header.templates": [ - { - "language": "*", - "template": [ - "Copyright (C) <> 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 ." - ], - } - ], - "dart.runPubGetOnPubspecChanges": false, -} \ No newline at end of file diff --git a/packages/wyatt_medium_feeds/CHANGELOG.md b/packages/wyatt_medium_feeds/CHANGELOG.md deleted file mode 100644 index 8e60bdbd..00000000 --- a/packages/wyatt_medium_feeds/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -## 1.0.1 - - - **FIX**: remove useless example file. - -## 1.0.0 - -- Initial version. diff --git a/packages/wyatt_medium_feeds/README.md b/packages/wyatt_medium_feeds/README.md deleted file mode 100644 index 8b55e735..00000000 --- a/packages/wyatt_medium_feeds/README.md +++ /dev/null @@ -1,39 +0,0 @@ - - -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. - -## Features - -TODO: List what your package can do. Maybe include images, gifs, or videos. - -## Getting started - -TODO: List prerequisites and provide or point to information on how to -start using the package. - -## Usage - -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. - -```dart -const like = 'sample'; -``` - -## Additional information - -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. diff --git a/packages/wyatt_medium_feeds/analysis_options.yaml b/packages/wyatt_medium_feeds/analysis_options.yaml deleted file mode 100644 index 82177cd5..00000000 --- a/packages/wyatt_medium_feeds/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:wyatt_analysis/analysis_options.flutter.yaml \ No newline at end of file diff --git a/packages/wyatt_medium_feeds/example/.gitignore b/packages/wyatt_medium_feeds/example/.gitignore deleted file mode 100644 index 0fa6b675..00000000 --- a/packages/wyatt_medium_feeds/example/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/packages/wyatt_medium_feeds/example/.metadata b/packages/wyatt_medium_feeds/example/.metadata deleted file mode 100644 index 3c3e4b52..00000000 --- a/packages/wyatt_medium_feeds/example/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 5464c5bac742001448fe4fc0597be939379f88ea - channel: stable - -project_type: app diff --git a/packages/wyatt_medium_feeds/example/README.md b/packages/wyatt_medium_feeds/example/README.md deleted file mode 100644 index f3e776e7..00000000 --- a/packages/wyatt_medium_feeds/example/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# medium_feeds_example - -A new Flutter project. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) - -For help getting started with Flutter, view our -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/packages/wyatt_medium_feeds/example/analysis_options.yaml b/packages/wyatt_medium_feeds/example/analysis_options.yaml deleted file mode 100644 index 61b6c4de..00000000 --- a/packages/wyatt_medium_feeds/example/analysis_options.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at - # https://dart-lang.github.io/linter/lints/index.html. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/packages/wyatt_medium_feeds/example/lib/article_tile.dart b/packages/wyatt_medium_feeds/example/lib/article_tile.dart deleted file mode 100644 index 833a2580..00000000 --- a/packages/wyatt_medium_feeds/example/lib/article_tile.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; - -class ArticleTile extends StatelessWidget { - const ArticleTile({ - Key? key, - required this.bannerUrl, - required this.title, - required this.summary, - required this.author, - required this.publishDate, - required this.readingTime, - }) : super(key: key); - - final String bannerUrl; - final String title; - final String summary; - final String author; - final String publishDate; - final String readingTime; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - Container( - height: 200, - decoration: BoxDecoration( - image: DecorationImage( - image: NetworkImage(bannerUrl), - fit: BoxFit.cover, - ), - ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - style: Theme.of(context).textTheme.headline6, - ), - const SizedBox(height: 8), - Text( - summary, - style: Theme.of(context).textTheme.bodyText1, - ), - const SizedBox(height: 8), - Row( - children: [ - Text( - author, - style: Theme.of(context).textTheme.caption, - ), - const SizedBox(width: 8), - Text( - publishDate, - style: Theme.of(context).textTheme.caption, - ), - const SizedBox(width: 8), - Text( - readingTime, - style: Theme.of(context).textTheme.caption, - ), - ], - ), - ], - ), - ), - ], - ), - ); - } -} diff --git a/packages/wyatt_medium_feeds/example/lib/main.dart b/packages/wyatt_medium_feeds/example/lib/main.dart deleted file mode 100644 index 3e85dfca..00000000 --- a/packages/wyatt_medium_feeds/example/lib/main.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:medium_feeds_example/article_tile.dart'; -import 'package:wyatt_medium_feeds/wyatt_medium_feeds.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: const WidgetTree(), - ); - } -} - -class ArticleGrid extends StatelessWidget { - const ArticleGrid({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - final mediumFeed = MediumFeed.fromPublicationName('flutter'); - return FutureBuilder( - future: mediumFeed.parse(), - builder: (context, snapshot) { - if (snapshot.hasData) { - final articles = mediumFeed.articles; - return GridView.builder( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, - childAspectRatio: 1, - ), - itemCount: articles.length, - itemBuilder: (context, index) { - final article = articles[index]; - return ArticleTile( - bannerUrl: article.images.isNotEmpty ? article.images[0] : '', - author: article.author, - title: article.title, - summary: article.summary, - readingTime: - article.readingTime.inMinutes.toString() + ' min read', - publishDate: article.publishDate!.day.toString() + - '/' + - article.publishDate!.month.toString() + - '/' + - article.publishDate!.year.toString(), - ); - }, - ); - } else { - return const Center(child: CircularProgressIndicator()); - } - }); - } -} - -class WidgetTree extends StatelessWidget { - const WidgetTree({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Medium Feeds Example'), - ), - body: const ArticleGrid(), - ); - } -} diff --git a/packages/wyatt_medium_feeds/example/pubspec.yaml b/packages/wyatt_medium_feeds/example/pubspec.yaml deleted file mode 100644 index 8d11c3eb..00000000 --- a/packages/wyatt_medium_feeds/example/pubspec.yaml +++ /dev/null @@ -1,93 +0,0 @@ -name: medium_feeds_example -description: A new Flutter project. - -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.16.2 <3.0.0" - -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. -dependencies: - flutter: - sdk: flutter - - - wyatt_medium_feeds: - path: ../ - - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.2 - -dev_dependencies: - flutter_test: - sdk: flutter - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - flutter_lints: ^2.0.0 - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/wyatt_medium_feeds/example/test/widget_test.dart b/packages/wyatt_medium_feeds/example/test/widget_test.dart deleted file mode 100644 index 58823107..00000000 --- a/packages/wyatt_medium_feeds/example/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:medium_feeds_example/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} diff --git a/packages/wyatt_medium_feeds/example/web/favicon.png b/packages/wyatt_medium_feeds/example/web/favicon.png deleted file mode 100644 index 8aaa46ac1ae21512746f852a42ba87e4165dfdd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM diff --git a/packages/wyatt_medium_feeds/example/web/icons/Icon-192.png b/packages/wyatt_medium_feeds/example/web/icons/Icon-192.png deleted file mode 100644 index b749bfef07473333cf1dd31e9eed89862a5d52aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5292 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 diff --git a/packages/wyatt_medium_feeds/example/web/icons/Icon-512.png b/packages/wyatt_medium_feeds/example/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48dff1169879ba46840804b412fe02fefd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8252 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 diff --git a/packages/wyatt_medium_feeds/example/web/icons/Icon-maskable-192.png b/packages/wyatt_medium_feeds/example/web/icons/Icon-maskable-192.png deleted file mode 100644 index eb9b4d76e525556d5d89141648c724331630325d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! diff --git a/packages/wyatt_medium_feeds/example/web/icons/Icon-maskable-512.png b/packages/wyatt_medium_feeds/example/web/icons/Icon-maskable-512.png deleted file mode 100644 index d69c56691fbdb0b7efa65097c7cc1edac12a6d3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20998 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 MPgg&ebxsLQ025IeI{*Lx diff --git a/packages/wyatt_medium_feeds/example/web/index.html b/packages/wyatt_medium_feeds/example/web/index.html deleted file mode 100644 index aa53f64a..00000000 --- a/packages/wyatt_medium_feeds/example/web/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - medium_feeds_example - - - - - - - diff --git a/packages/wyatt_medium_feeds/example/web/manifest.json b/packages/wyatt_medium_feeds/example/web/manifest.json deleted file mode 100644 index 45dfbbec..00000000 --- a/packages/wyatt_medium_feeds/example/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "medium_feeds_example", - "short_name": "medium_feeds_example", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/Icon-maskable-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "icons/Icon-maskable-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - } - ] -} diff --git a/packages/wyatt_medium_feeds/lib/src/medium_article.dart b/packages/wyatt_medium_feeds/lib/src/medium_article.dart deleted file mode 100644 index cb526ed3..00000000 --- a/packages/wyatt_medium_feeds/lib/src/medium_article.dart +++ /dev/null @@ -1,67 +0,0 @@ -// 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 . - -import 'package:html/parser.dart'; -import 'package:webfeed/webfeed.dart'; -import 'package:wyatt_medium_feeds/src/reading_time.dart'; - -class MediumArticle { - final RssItem? _item; - - RssItem get item { - if (_item == null) { - throw StateError('Feed has not been parsed yet.'); - } - return _item!; - } - - MediumArticle(this._item); - - String get title => item.title ?? ''; - - String get link => item.link ?? ''; - - String get guid => item.guid ?? ''; - - String get author => item.dc?.creator ?? ''; - - DateTime? get publishDate => item.pubDate; - - String get content => item.content?.value ?? ''; - - List get images { - final images = []; - for (final i in item.content?.images ?? []) { - images.add(i); - } - return images; - } - - String get decoded { - final document = parse(content); - return document.firstChild?.text ?? ''; - } - - String get summary { - final regex = RegExp(r'^.*?[\.!\?](?:\s|$)'); - final match = regex.firstMatch(decoded); - return match?.group(0) ?? ''; - } - - Duration get readingTime { - return decoded.readingTime(); - } -} diff --git a/packages/wyatt_medium_feeds/lib/src/medium_feed.dart b/packages/wyatt_medium_feeds/lib/src/medium_feed.dart deleted file mode 100644 index b574fce4..00000000 --- a/packages/wyatt_medium_feeds/lib/src/medium_feed.dart +++ /dev/null @@ -1,113 +0,0 @@ -// 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 . - -import 'package:http/http.dart'; -import 'package:webfeed/webfeed.dart'; -import 'package:wyatt_medium_feeds/src/medium_article.dart'; - -class MediumFeed { - final String? username; - final bool mediumSubdomain; - final String? publicationName; - final String? customDomain; - final String? tagName; - final String? topicName; - - final String url; - - RssFeed? _feed; - - RssFeed get feed { - if (_feed == null) { - throw StateError('Feed has not been parsed yet.'); - } - return _feed!; - } - - String get title => feed.title ?? ''; - - String get description => feed.description ?? ''; - - String get image => feed.image?.url ?? ''; - - List get articles { - final articles = []; - for (final i in feed.items ?? []) { - articles.add(MediumArticle(i)); - } - return articles; - } - - MediumFeed.fromUsername( - this.username, { - bool subdomain = false, - String proxy = 'https://cros-anywhere.herokuapp.com/', - }) : mediumSubdomain = subdomain, - publicationName = null, - customDomain = null, - tagName = null, - topicName = null, - url = subdomain - ? '${proxy}https://$username.medium.com/feed' - : '${proxy}https://medium.com/feed/@$username'; - - MediumFeed.fromPublicationName( - this.publicationName, { - String proxy = 'https://cros-anywhere.herokuapp.com/', - }) : username = null, - mediumSubdomain = false, - customDomain = null, - tagName = null, - topicName = null, - url = '${proxy}https://medium.com/feed/$publicationName'; - - MediumFeed.fromCustomDomain( - this.customDomain, { - String proxy = 'https://cros-anywhere.herokuapp.com/', - }) : username = null, - mediumSubdomain = false, - publicationName = null, - tagName = null, - topicName = null, - url = '${proxy}https://$customDomain/feed'; - - MediumFeed.fromTagName({ - this.publicationName, - this.tagName, - String proxy = 'https://cros-anywhere.herokuapp.com/', - }) : username = null, - mediumSubdomain = false, - customDomain = null, - topicName = null, - url = - '${proxy}https://medium.com/feed/$publicationName/tagged/$tagName'; - - MediumFeed.fromTopicName( - this.topicName, { - String proxy = 'https://cros-anywhere.herokuapp.com/', - }) : username = null, - mediumSubdomain = false, - customDomain = null, - publicationName = null, - tagName = null, - url = '${proxy}https://medium.com/feed/tag/$topicName'; - - Future parse() async { - final xmlString = await read(Uri.parse(url)); - _feed = RssFeed.parse(xmlString); - return _feed!; - } -} diff --git a/packages/wyatt_medium_feeds/lib/src/reading_time.dart b/packages/wyatt_medium_feeds/lib/src/reading_time.dart deleted file mode 100644 index 37d9ec8a..00000000 --- a/packages/wyatt_medium_feeds/lib/src/reading_time.dart +++ /dev/null @@ -1,48 +0,0 @@ -// 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 . - -extension ReadingTimeX on String { - Duration readingTime({ - int wpm = 200, - String suffix = 'min read', - String lessMsg = 'less than a minute', - }) { - bool _ansiWordBound(String c) { - return (' ' == c) || ('\n' == c) || ('\r' == c) || ('\t' == c); - } - - int words = 0, start = 0, end = length - 1; - - while (_ansiWordBound(this[start])) { - start++; - } - while (_ansiWordBound(this[end])) { - end--; - } - - // Count real words - for (int i = start; i <= end;) { - for (; i <= end && !_ansiWordBound(this[i]); i++) {} - words++; - for (; i <= end && _ansiWordBound(this[i]); i++) {} - } - - final minutes = words / wpm; - final seconds = (minutes - minutes.floor()) * 60; - final Duration duration = Duration(minutes: minutes.floor(), seconds: seconds.floor()); - return duration; - } -} diff --git a/packages/wyatt_medium_feeds/lib/wyatt_medium_feeds.dart b/packages/wyatt_medium_feeds/lib/wyatt_medium_feeds.dart deleted file mode 100644 index df269550..00000000 --- a/packages/wyatt_medium_feeds/lib/wyatt_medium_feeds.dart +++ /dev/null @@ -1,21 +0,0 @@ -// 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 . - -library wyatt_medium_feeds; - -export 'src/medium_article.dart'; -export 'src/medium_feed.dart'; -export 'src/reading_time.dart'; diff --git a/packages/wyatt_medium_feeds/pubspec.yaml b/packages/wyatt_medium_feeds/pubspec.yaml deleted file mode 100644 index 485bdacf..00000000 --- a/packages/wyatt_medium_feeds/pubspec.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: wyatt_medium_feeds -description: Medium flux read for Flutter -repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_medium_feeds -version: 1.0.1 - -environment: - sdk: '>=2.16.2 <3.0.0' - -dependencies: - http: ^0.13.4 - webfeed: ^0.7.0 - html: ^0.15.0 - -dev_dependencies: - wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.2.2 - path: packages/wyatt_analysis diff --git a/packages/wyatt_medium_feeds/test/wyatt_medium_feeds_test.dart b/packages/wyatt_medium_feeds/test/wyatt_medium_feeds_test.dart deleted file mode 100644 index e69de29b..00000000 -- 2.47.2 From feca378131f5de255b06dba419a90eccf5e2697d Mon Sep 17 00:00:00 2001 From: AN12345 Date: Thu, 8 Dec 2022 16:39:48 -0500 Subject: [PATCH 013/320] feat(bloc_layout): add new package to combine bloc_helper, crud_bloc, ui_components, and ui_layout --- packages/wyatt_bloc_layout/.gitignore | 133 ++++ .../wyatt_bloc_layout/.vscode/extensions.json | 24 + .../wyatt_bloc_layout/.vscode/launch.json | 16 + .../wyatt_bloc_layout/.vscode/settings.json | 71 ++ packages/wyatt_bloc_layout/AUTHORS | 8 + packages/wyatt_bloc_layout/CHANGELOG.md | 3 + packages/wyatt_bloc_layout/LICENSE | 674 ++++++++++++++++++ packages/wyatt_bloc_layout/README.md | 43 ++ .../wyatt_bloc_layout/analysis_options.yaml | 19 + .../example/lib/bloc/example_cubit.dart | 38 + .../lib/components/theme_components.dart | 77 ++ .../wyatt_bloc_layout/example/lib/main.dart | 134 ++++ .../wyatt_bloc_layout/example/pubspec.yaml | 91 +++ .../example/test/widget_test.dart | 15 + .../wyatt_bloc_layout/example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../wyatt_bloc_layout/example/web/index.html | 58 ++ .../example/web/manifest.json | 35 + .../crud_cubit_consumer_screen_bases.dart | 60 ++ .../frame_layout_crud_consumer_screen.dart | 58 ++ .../lib/src/presentation/presentation.dart | 23 + .../screens/crud_cubit_screen_base.dart | 50 ++ packages/wyatt_bloc_layout/lib/src/src.dart | 17 + .../lib/wyatt_bloc_layout.dart | 20 + packages/wyatt_bloc_layout/pubspec.yaml | 44 ++ .../test/wyatt_bloc_layout_test.dart | 17 + 29 files changed, 1728 insertions(+) create mode 100644 packages/wyatt_bloc_layout/.gitignore create mode 100644 packages/wyatt_bloc_layout/.vscode/extensions.json create mode 100644 packages/wyatt_bloc_layout/.vscode/launch.json create mode 100644 packages/wyatt_bloc_layout/.vscode/settings.json create mode 100644 packages/wyatt_bloc_layout/AUTHORS create mode 100644 packages/wyatt_bloc_layout/CHANGELOG.md create mode 100644 packages/wyatt_bloc_layout/LICENSE create mode 100644 packages/wyatt_bloc_layout/README.md create mode 100644 packages/wyatt_bloc_layout/analysis_options.yaml create mode 100644 packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart create mode 100644 packages/wyatt_bloc_layout/example/lib/components/theme_components.dart create mode 100644 packages/wyatt_bloc_layout/example/lib/main.dart create mode 100644 packages/wyatt_bloc_layout/example/pubspec.yaml create mode 100644 packages/wyatt_bloc_layout/example/test/widget_test.dart create mode 100644 packages/wyatt_bloc_layout/example/web/favicon.png create mode 100644 packages/wyatt_bloc_layout/example/web/icons/Icon-192.png create mode 100644 packages/wyatt_bloc_layout/example/web/icons/Icon-512.png create mode 100644 packages/wyatt_bloc_layout/example/web/icons/Icon-maskable-192.png create mode 100644 packages/wyatt_bloc_layout/example/web/icons/Icon-maskable-512.png create mode 100644 packages/wyatt_bloc_layout/example/web/index.html create mode 100644 packages/wyatt_bloc_layout/example/web/manifest.json create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/src.dart create mode 100644 packages/wyatt_bloc_layout/lib/wyatt_bloc_layout.dart create mode 100644 packages/wyatt_bloc_layout/pubspec.yaml create mode 100644 packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart diff --git a/packages/wyatt_bloc_layout/.gitignore b/packages/wyatt_bloc_layout/.gitignore new file mode 100644 index 00000000..e38f9b0c --- /dev/null +++ b/packages/wyatt_bloc_layout/.gitignore @@ -0,0 +1,133 @@ +# Miscellaneous +*.class +*.lock +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/* + +# Visual Studio Code related +.classpath +.project +.settings/ +.vscode/* +!.vscode/settings.json +!.vscode/extensions.json + +# Flutter repo-specific +/bin/cache/ +/bin/mingit/ +/dev/benchmarks/mega_gallery/ +/dev/bots/.recipe_deps +/dev/bots/android_tools/ +/dev/docs/doc/ +/dev/docs/flutter.docs.zip +/dev/docs/lib/ +/dev/docs/pubspec.yaml +/dev/integration_tests/**/xcuserdata +/dev/integration_tests/**/Pods +/packages/flutter/coverage/ +version + +# packages file containing multi-root paths +.packages.generated + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +build/ +flutter_*.png +linked_*.ds +unlinked.ds +unlinked_spec.ds +.fvm/ + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java +**/android/key.properties +**/android/.idea/ +*.jks + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Flutter.podspec +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/.last_build_id +**/ios/Flutter/flutter_assets/ +**/ios/Flutter/flutter_export_environment.sh +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Coverage +coverage/ + +# Submodules +!pubspec.lock +packages/**/pubspec.lock + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Exceptions to the above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages +!/dev/ci/**/Gemfile.lock +!.vscode/extensions.json +!.vscode/launch.json +!.idea/codeStyles/ +!.idea/dictionaries/ +!.idea/runConfigurations/ + +# Omit committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/packages/wyatt_bloc_layout/.vscode/extensions.json b/packages/wyatt_bloc_layout/.vscode/extensions.json new file mode 100644 index 00000000..30cd2233 --- /dev/null +++ b/packages/wyatt_bloc_layout/.vscode/extensions.json @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +{ + "recommendations": [ + "psioniq.psi-header", + "blaugold.melos-code" + ] +} \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/.vscode/launch.json b/packages/wyatt_bloc_layout/.vscode/launch.json new file mode 100644 index 00000000..a5f4f148 --- /dev/null +++ b/packages/wyatt_bloc_layout/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Example", + "request": "launch", + "type": "dart", + "cwd": "example/", + "program": "lib/main.dart", + "flutterMode": "debug" + }, + ] +} \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/.vscode/settings.json b/packages/wyatt_bloc_layout/.vscode/settings.json new file mode 100644 index 00000000..708f5ba6 --- /dev/null +++ b/packages/wyatt_bloc_layout/.vscode/settings.json @@ -0,0 +1,71 @@ +{ + "psi-header.changes-tracking": { + "isActive": true + }, + "psi-header.config": { + "blankLinesAfter": 1, + "forceToTop": true + }, + "psi-header.lang-config": [ + { + "beforeHeader": [ + "# -*- coding:utf-8 -*-", + "#!/usr/bin/env python3" + ], + "begin": "###", + "end": "###", + "language": "python", + "prefix": "# " + }, + { + "beforeHeader": [ + "#!/usr/bin/env sh", + "" + ], + "language": "shellscript", + "begin": "", + "end": "", + "prefix": "# " + }, + { + "begin": "", + "end": "", + "language": "dart", + "prefix": "// " + }, + { + "begin": "", + "end": "", + "language": "yaml", + "prefix": "# " + }, + { + "begin": "", + "language": "markdown", + }, + ], + "psi-header.templates": [ + { + "language": "*", + "template": [ + "Copyright (C) <> 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 ." + ], + } + ], + "dart.runPubGetOnPubspecChanges": false, +} \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/AUTHORS b/packages/wyatt_bloc_layout/AUTHORS new file mode 100644 index 00000000..f9506138 --- /dev/null +++ b/packages/wyatt_bloc_layout/AUTHORS @@ -0,0 +1,8 @@ +# Below is a list of people and organizations that have contributed +# to this project. Names should be added to the list like so: +# +# Name/Organization + +Wyatt Group S.A.S +Hugo Pointcheval +Malo Léon \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/CHANGELOG.md b/packages/wyatt_bloc_layout/CHANGELOG.md new file mode 100644 index 00000000..7ad72ac3 --- /dev/null +++ b/packages/wyatt_bloc_layout/CHANGELOG.md @@ -0,0 +1,3 @@ +# 0.0.1 + +- TODO: Describe initial release. diff --git a/packages/wyatt_bloc_layout/LICENSE b/packages/wyatt_bloc_layout/LICENSE new file mode 100644 index 00000000..e72bfdda --- /dev/null +++ b/packages/wyatt_bloc_layout/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + (at your option) 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/README.md b/packages/wyatt_bloc_layout/README.md new file mode 100644 index 00000000..057115c4 --- /dev/null +++ b/packages/wyatt_bloc_layout/README.md @@ -0,0 +1,43 @@ + + + +# Flutter - Wyatt Bloc Layout + + + +Bloc Layout for Flutter. + + + +## Features + + + +## Getting started + + + +## Usage + + \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/analysis_options.yaml b/packages/wyatt_bloc_layout/analysis_options.yaml new file mode 100644 index 00000000..22f1fb8e --- /dev/null +++ b/packages/wyatt_bloc_layout/analysis_options.yaml @@ -0,0 +1,19 @@ +# 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 . + + +include: package:wyatt_analysis/analysis_options.flutter.experimental.yaml + diff --git a/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart new file mode 100644 index 00000000..02f810db --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart @@ -0,0 +1,38 @@ +import 'dart:async'; + +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +class ExampleCubit extends Cubit { + ExampleCubit() : super(CrudInitial()); + + FutureOr run() async { + while (true) { + await Future.delayed(const Duration(seconds: 1)); + emit(CrudLoading()); + await Future.delayed(const Duration(seconds: 1)); + emit(CrudError('Cubit Error')); + await Future.delayed(const Duration(seconds: 1)); + emit(CrudLoaded('DATA LOADED')); + await Future.delayed(const Duration(seconds: 1)); + emit(CrudInitial()); + } + } + + FutureOr runList() async { + while (true) { + await Future.delayed(const Duration(seconds: 1)); + emit(CrudLoading()); + await Future.delayed(const Duration(seconds: 1)); + emit(CrudError('Cubit Error')); + await Future.delayed(const Duration(seconds: 1)); + emit(CrudListLoaded([ + 'DATA LOADED 1', + 'DATA LOADED 2', + 'DATA LOADED 3', + 'DATA LOADED 4' + ])); + await Future.delayed(const Duration(seconds: 1)); + emit(CrudInitial()); + } + } +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart new file mode 100644 index 00000000..f77d2770 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart @@ -0,0 +1,77 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +class AppThemeComponent { + static ComponentThemeData get components => ComponentThemeData.raw( + appBar: CustomAppBar(), + bottomNavigationBar: CustomBottomBar(), + loadingWidget: CustomLoadingWidget(), + errorWidget: CustomErrorWidget(), + ); +} + +class CustomAppBar extends AppBarComponent { + const CustomAppBar({super.title}); + @override + Widget build(BuildContext context) => AppBar( + title: Text(title ?? 'Title'), + ); + + @override + AppBarComponent configure({String? title}) => CustomAppBar( + title: title ?? this.title, + ); +} + +class CustomBottomBar extends BottomNavigationBarComponent { + @override + Widget build(BuildContext context) => BottomNavigationBar( + items: [ + BottomNavigationBarItem( + icon: Icon( + Icons.e_mobiledata, + ), + label: 'Icon 1'), + BottomNavigationBarItem( + icon: Icon( + Icons.do_not_disturb_off, + ), + label: 'Icon 2'), + ], + backgroundColor: Colors.blue, + ); + + @override + BottomNavigationBarComponent configure( + {void Function(BuildContext p1, int p2)? onTap, + int currentIndex = 0}) => + this; +} + +class CustomLoadingWidget extends LoadingWidgetComponent { + CustomLoadingWidget({super.color}); + + @override + Widget build(BuildContext context) => + Center(child: CircularProgressIndicator(color: color)); + + @override + LoadingWidgetComponent configure({Color? color}) => CustomLoadingWidget( + color: color ?? this.color, + ); +} + +class CustomErrorWidget extends ErrorWidgetComponent { + CustomErrorWidget({super.error}); + + @override + Widget build(BuildContext context) => ColoredBox( + color: Colors.red, + child: Center(child: Text(error ?? 'Error')), + ); + + @override + ErrorWidgetComponent configure({String? error}) => CustomErrorWidget( + error: error ?? this.error, + ); +} diff --git a/packages/wyatt_bloc_layout/example/lib/main.dart b/packages/wyatt_bloc_layout/example/lib/main.dart new file mode 100644 index 00000000..eafe4286 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/main.dart @@ -0,0 +1,134 @@ +// 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 . + +import 'package:bloc_layout_example/bloc/example_cubit.dart'; +import 'package:bloc_layout_example/components/theme_components.dart'; +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return ComponentTheme( + componentThemeWidget: AppThemeComponent.components, + child: MaterialApp( + title: 'Bloc Layout Example', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: Scaffold( + body: Column( + children: [ + Expanded( + child: Row( + children: [ + Expanded( + child: BlocProvider( + create: (_) => ExampleCubit()..run(), + child: ExampleCrudStateManagement(), + ), + ), + Expanded( + child: BlocProvider( + create: (_) => ExampleCubit()..runList(), + child: ExampleListCrudStateManagement(), + ), + ), + ], + ), + ), + Expanded( + child: Row( + children: [ + Expanded( + child: BlocProvider( + create: (_) => ExampleCubit()..run(), + child: ExampleFrameLayoutCrudConsumer()), + ), + Expanded( + child: BlocProvider( + create: (_) => ExampleCubit()..runList(), + child: ExampleFrameLayoutCrudListConsumer()), + ), + ], + ), + ), + ], + ), + ), + ), + ); + } +} + +class ExampleCrudStateManagement + extends CrudCubitConsumerScreen { + @override + Widget initialBuilder(BuildContext context, CrudInitial state) => + Container(color: Colors.yellow); + @override + Widget successBuilder(BuildContext context, CrudLoaded state) => + Center(child: Text(state.data ?? 'errors')); +} + +class ExampleListCrudStateManagement + extends CrudListCubitConsumerScreen { + @override + Widget initialBuilder(BuildContext context, CrudInitial state) => + Container(color: Colors.green); + @override + Widget successBuilder(BuildContext context, CrudListLoaded state) => + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: state.data.map((e) => Text(e ?? 'error')).toList(), + ); +} + +class ExampleFrameLayoutCrudConsumer + extends FrameLayoutCrudConsumerScreen { + const ExampleFrameLayoutCrudConsumer() + : super( + title: 'Example Title', + currentIndex: 0, + ); + + @override + Widget successBuilder(BuildContext context, CrudLoaded state) => + Center(child: Text(state.data ?? 'errors')); +} + +class ExampleFrameLayoutCrudListConsumer + extends FrameLayoutCrudListConsumerScreen { + const ExampleFrameLayoutCrudListConsumer() + : super( + title: 'Example Title', + currentIndex: 0, + ); + + @override + Widget successBuilder(BuildContext context, CrudListLoaded state) => + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: state.data.map((e) => Text(e ?? 'error')).toList(), + ); +} diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml new file mode 100644 index 00000000..7640a2f7 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -0,0 +1,91 @@ +name: bloc_layout_example +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.17.0 <3.0.0" + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + + flutter: + sdk: flutter + + + wyatt_bloc_layout: + path: "../" + +dev_dependencies: + + flutter_test: + sdk: flutter + + + wyatt_analysis: + git: + url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages + ref: wyatt_analysis-v2.1.0 + path: packages/wyatt_analysis + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/wyatt_bloc_layout/example/test/widget_test.dart b/packages/wyatt_bloc_layout/example/test/widget_test.dart new file mode 100644 index 00000000..52de7a27 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/test/widget_test.dart @@ -0,0 +1,15 @@ +// 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 . \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/example/web/favicon.png b/packages/wyatt_bloc_layout/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/packages/wyatt_bloc_layout/example/web/icons/Icon-192.png b/packages/wyatt_bloc_layout/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_bloc_layout/example/web/icons/Icon-512.png b/packages/wyatt_bloc_layout/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_bloc_layout/example/web/icons/Icon-maskable-192.png b/packages/wyatt_bloc_layout/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/packages/wyatt_bloc_layout/example/web/icons/Icon-maskable-512.png b/packages/wyatt_bloc_layout/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/packages/wyatt_bloc_layout/example/web/index.html b/packages/wyatt_bloc_layout/example/web/index.html new file mode 100644 index 00000000..41b3bc33 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/web/index.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + example + + + + + + + + + + diff --git a/packages/wyatt_bloc_layout/example/web/manifest.json b/packages/wyatt_bloc_layout/example/web/manifest.json new file mode 100644 index 00000000..096edf8f --- /dev/null +++ b/packages/wyatt_bloc_layout/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "example", + "short_name": "example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart new file mode 100644 index 00000000..47311f99 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart @@ -0,0 +1,60 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class CrudCubitConsumerScreenBase< + Cubit extends bloc_base.Cubit, + SuccessState extends CrudSuccess> + extends CubitConsumerScreen { + const CrudCubitConsumerScreenBase({super.key}); + + Widget errorBuilder(BuildContext context, CrudError state) => + context.components.errorWidget; + + Widget loadingBuilder(BuildContext context, CrudLoading state) => + context.components.loadingWidget; + + Widget initialBuilder(BuildContext context, CrudInitial state) => + const SizedBox.shrink(); + + Widget successBuilder(BuildContext context, SuccessState state); + + @override + Widget onBuild(BuildContext context, CrudState state) => + CrudBuilder( + errorBuilder: errorBuilder, + loadingBuilder: loadingBuilder, + initialBuilder: initialBuilder, + state: state, + builder: successBuilder, + ); +} + +abstract class CrudCubitConsumerScreen, + T> extends CrudCubitConsumerScreenBase> { + const CrudCubitConsumerScreen(); +} + +abstract class CrudListCubitConsumerScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudCubitConsumerScreenBase> { + const CrudListCubitConsumerScreen(); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart new file mode 100644 index 00000000..ce362ef1 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart @@ -0,0 +1,58 @@ +// 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 . + +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; + +abstract class FrameLayoutCrudConsumerScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudCubitConsumerScreen { + final String? title; + final int? currentIndex; + + const FrameLayoutCrudConsumerScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => FrameLayout( + title: title ?? 'Title', + body: child, + currentIndex: currentIndex ?? 0, + ); +} + +abstract class FrameLayoutCrudListConsumerScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudListCubitConsumerScreen { + final String? title; + final int? currentIndex; + + const FrameLayoutCrudListConsumerScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => FrameLayout( + title: title ?? 'Title', + body: child, + currentIndex: currentIndex ?? 0, + ); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart new file mode 100644 index 00000000..f0d2c69e --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart @@ -0,0 +1,23 @@ +// 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 . + +export 'consumers/crud_cubit_consumer_screen_bases.dart'; +export 'consumers/frame_layout_crud_consumer_screen.dart'; +export 'screens/crud_cubit_screen_base.dart'; + +export 'package:flutter_bloc/flutter_bloc.dart'; +export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +export 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart new file mode 100644 index 00000000..08fd4e78 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart @@ -0,0 +1,50 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class CrudCubitScreenBase, + SuccessState extends CrudSuccess> extends CubitScreen { + Widget errorBuilder(BuildContext context, CrudError state) => + context.components.errorWidget; + + Widget loadingBuilder(BuildContext context, CrudLoading state) => + context.components.loadingWidget; + + Widget initialBuilder(BuildContext context, CrudInitial state) => + const SizedBox.shrink(); + + Widget successBuilder(BuildContext context, SuccessState state); + + @override + Widget onBuild(BuildContext context, CrudState state) => + CrudBuilder( + errorBuilder: errorBuilder, + loadingBuilder: loadingBuilder, + initialBuilder: initialBuilder, + state: state, + builder: successBuilder, + ); +} + +abstract class CrudCubitScreen, T> + extends CrudCubitScreenBase> {} + +abstract class CrudListCubitScreen, T> + extends CrudCubitScreenBase> {} diff --git a/packages/wyatt_bloc_layout/lib/src/src.dart b/packages/wyatt_bloc_layout/lib/src/src.dart new file mode 100644 index 00000000..6890de4f --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/src.dart @@ -0,0 +1,17 @@ +// 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 . + +export 'presentation/presentation.dart'; diff --git a/packages/wyatt_bloc_layout/lib/wyatt_bloc_layout.dart b/packages/wyatt_bloc_layout/lib/wyatt_bloc_layout.dart new file mode 100644 index 00000000..34183618 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/wyatt_bloc_layout.dart @@ -0,0 +1,20 @@ +// 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 . + +/// Bloc Layout +library wyatt_bloc_layout; + +export 'src/src.dart'; diff --git a/packages/wyatt_bloc_layout/pubspec.yaml b/packages/wyatt_bloc_layout/pubspec.yaml new file mode 100644 index 00000000..b1053e83 --- /dev/null +++ b/packages/wyatt_bloc_layout/pubspec.yaml @@ -0,0 +1,44 @@ +name: wyatt_bloc_layout +description: Layouts based on bloc helper library +repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_bloc_layout +version: 0.0.1 + +environment: + sdk: '>=2.17.0 <3.0.0' + +dependencies: + + flutter: + sdk: flutter + + wyatt_bloc_helper: + git: + url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages + path: packages/wyatt_bloc_helper + + wyatt_ui_layout: + git: + url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages + path: packages/wyatt_ui_layout + + wyatt_crud_bloc: + git: + url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages + path: packages/wyatt_crud_bloc + + wyatt_ui_components: + git: + url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages + path: packages/wyatt_ui_components + +dev_dependencies: + + flutter_test: + sdk: flutter + + + wyatt_analysis: + git: + url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages + ref: wyatt_analysis-v2.1.0 + path: packages/wyatt_analysis \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart b/packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart new file mode 100644 index 00000000..1a98696c --- /dev/null +++ b/packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart @@ -0,0 +1,17 @@ +// 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 . + +// TODO(wyatt): Add some tests \ No newline at end of file -- 2.47.2 From fafec7854608bdb77cbf854ecffe0b8cc274d776 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Thu, 8 Dec 2022 16:56:51 -0500 Subject: [PATCH 014/320] clean(bloc_layout): remove test folder --- .../test/wyatt_bloc_layout_test.dart | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart diff --git a/packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart b/packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart deleted file mode 100644 index 1a98696c..00000000 --- a/packages/wyatt_bloc_layout/test/wyatt_bloc_layout_test.dart +++ /dev/null @@ -1,17 +0,0 @@ -// 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 . - -// TODO(wyatt): Add some tests \ No newline at end of file -- 2.47.2 From a561cbff23e351f304511683f62781fd9e28d015 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Sun, 11 Dec 2022 16:19:17 -0500 Subject: [PATCH 015/320] feat(bloc_layout): link error widget to error state --- .../consumers/crud_cubit_consumer_screen_bases.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart index 47311f99..7090ff17 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart @@ -27,7 +27,7 @@ abstract class CrudCubitConsumerScreenBase< const CrudCubitConsumerScreenBase({super.key}); Widget errorBuilder(BuildContext context, CrudError state) => - context.components.errorWidget; + context.components.errorWidget.configure(error: state.message); Widget loadingBuilder(BuildContext context, CrudLoading state) => context.components.loadingWidget; -- 2.47.2 From 9d0aac78949dd5ed605c955c5bd26150a4d16379 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Sun, 11 Dec 2022 18:30:06 -0500 Subject: [PATCH 016/320] feat(bloc_layout): add all layout avalaible with crud bloc --- .../app_bar_cubit_consumer_screen.dart | 54 ++++++++++++++++++ ...ation_bar_layout_crud_consumer_screen.dart | 56 ++++++++++++++++++ ...ame_layout_crud_consumer_screen copy.dart} | 0 .../lib/src/presentation/presentation.dart | 7 ++- .../screens/app_bar_cubit_screen.dart | 53 +++++++++++++++++ ...tom_navigation_bar_layout_crud_screen.dart | 56 ++++++++++++++++++ .../screens/crud_cubit_screen_base.dart | 9 ++- .../screens/frame_layout_crud_screen.dart | 57 +++++++++++++++++++ 8 files changed, 289 insertions(+), 3 deletions(-) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart rename packages/wyatt_bloc_layout/lib/src/presentation/consumers/{frame_layout_crud_consumer_screen.dart => frame_layout_crud_consumer_screen copy.dart} (100%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart new file mode 100644 index 00000000..d18bd7eb --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart @@ -0,0 +1,54 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; + +abstract class AppBarLayoutCrudConsumerScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudCubitConsumerScreen { + final String? title; + + const AppBarLayoutCrudConsumerScreen({ + this.title, + }); + + @override + Widget parent(BuildContext context, Widget child) => AppBarLayout( + title: title ?? 'Title', + body: child, + ); +} + +abstract class AppBarLayoutCrudListConsumerScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudListCubitConsumerScreen { + final String? title; + final int? currentIndex; + + const AppBarLayoutCrudListConsumerScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => AppBarLayout( + title: title ?? 'Title', + body: child, + ); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart new file mode 100644 index 00000000..170c0094 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart @@ -0,0 +1,56 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; + +abstract class BottomNavigationBarLayoutCrudConsumerScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudCubitConsumerScreen { + final int? currentIndex; + + const BottomNavigationBarLayoutCrudConsumerScreen({ + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => + BottomNavigationBarLayout( + body: child, + currentIndex: currentIndex ?? 0, + ); +} + +abstract class BottomNavigationBarLayoutCrudListConsumerScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudListCubitConsumerScreen { + final String? title; + final int? currentIndex; + + const BottomNavigationBarLayoutCrudListConsumerScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => + BottomNavigationBarLayout( + body: child, + currentIndex: currentIndex ?? 0, + ); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen copy.dart similarity index 100% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen copy.dart diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart index f0d2c69e..acd00814 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart @@ -15,8 +15,13 @@ // along with this program. If not, see . export 'consumers/crud_cubit_consumer_screen_bases.dart'; -export 'consumers/frame_layout_crud_consumer_screen.dart'; +export 'consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart'; +export 'consumers/app_bar_cubit_consumer_screen.dart'; +export 'consumers/frame_layout_crud_consumer_screen copy.dart'; export 'screens/crud_cubit_screen_base.dart'; +export 'screens/app_bar_cubit_screen.dart'; +export 'screens/bottom_navigation_bar_layout_crud_screen.dart'; +export 'screens/frame_layout_crud_screen.dart'; export 'package:flutter_bloc/flutter_bloc.dart'; export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart new file mode 100644 index 00000000..e86d95fa --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart @@ -0,0 +1,53 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; + +abstract class AppBarLayoutCrudScreen, + T> extends CrudCubitScreen { + final String? title; + + const AppBarLayoutCrudScreen({ + this.title, + }); + + @override + Widget parent(BuildContext context, Widget child) => AppBarLayout( + title: title ?? 'Title', + body: child, + ); +} + +abstract class AppBarLayoutCrudListScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudListCubitScreen { + final String? title; + final int? currentIndex; + + const AppBarLayoutCrudListScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => AppBarLayout( + title: title ?? 'Title', + body: child, + ); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart new file mode 100644 index 00000000..79503f09 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart @@ -0,0 +1,56 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; + +abstract class BottomNavigationBarLayoutCrudScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudCubitScreen { + final int? currentIndex; + + const BottomNavigationBarLayoutCrudScreen({ + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => + BottomNavigationBarLayout( + body: child, + currentIndex: currentIndex ?? 0, + ); +} + +abstract class BottomNavigationBarLayoutCrudListScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudListCubitScreen { + final String? title; + final int? currentIndex; + + const BottomNavigationBarLayoutCrudListScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => + BottomNavigationBarLayout( + body: child, + currentIndex: currentIndex ?? 0, + ); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart index 08fd4e78..4240f819 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart @@ -21,6 +21,7 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class CrudCubitScreenBase, SuccessState extends CrudSuccess> extends CubitScreen { + const CrudCubitScreenBase(); Widget errorBuilder(BuildContext context, CrudError state) => context.components.errorWidget; @@ -44,7 +45,11 @@ abstract class CrudCubitScreenBase, } abstract class CrudCubitScreen, T> - extends CrudCubitScreenBase> {} + extends CrudCubitScreenBase> { + const CrudCubitScreen(); +} abstract class CrudListCubitScreen, T> - extends CrudCubitScreenBase> {} + extends CrudCubitScreenBase> { + const CrudListCubitScreen(); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart new file mode 100644 index 00000000..458e6801 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart @@ -0,0 +1,57 @@ +// 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 . + +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; + +abstract class FrameLayoutCrudScreen, + T> extends CrudCubitScreen { + final String? title; + final int? currentIndex; + + const FrameLayoutCrudScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => FrameLayout( + title: title ?? 'Title', + body: child, + currentIndex: currentIndex ?? 0, + ); +} + +abstract class FrameLayoutCrudListScreen< + Cubit extends bloc_base.Cubit, + T> extends CrudListCubitScreen { + final String? title; + final int? currentIndex; + + const FrameLayoutCrudListScreen({ + this.title, + this.currentIndex, + }); + + @override + Widget parent(BuildContext context, Widget child) => FrameLayout( + title: title ?? 'Title', + body: child, + currentIndex: currentIndex ?? 0, + ); +} -- 2.47.2 From 3bb57e65f8af71e26c276e019103d240bf71915c Mon Sep 17 00:00:00 2001 From: AN12345 Date: Sun, 11 Dec 2022 18:30:44 -0500 Subject: [PATCH 017/320] fix(bloc_layout): rename file --- ...er_screen copy.dart => frame_layout_crud_consumer_screen.dart} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/wyatt_bloc_layout/lib/src/presentation/consumers/{frame_layout_crud_consumer_screen copy.dart => frame_layout_crud_consumer_screen.dart} (100%) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen copy.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart similarity index 100% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen copy.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart -- 2.47.2 From ff90af47cdf9cf9771517ecd3dd9e46c1a7a96c0 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Sun, 11 Dec 2022 18:32:12 -0500 Subject: [PATCH 018/320] fix(bloc_layout): update export file --- .../wyatt_bloc_layout/lib/src/presentation/presentation.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart index acd00814..f4c24372 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart @@ -17,7 +17,7 @@ export 'consumers/crud_cubit_consumer_screen_bases.dart'; export 'consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart'; export 'consumers/app_bar_cubit_consumer_screen.dart'; -export 'consumers/frame_layout_crud_consumer_screen copy.dart'; +export 'consumers/frame_layout_crud_consumer_screen.dart'; export 'screens/crud_cubit_screen_base.dart'; export 'screens/app_bar_cubit_screen.dart'; export 'screens/bottom_navigation_bar_layout_crud_screen.dart'; -- 2.47.2 From 21b18054bacb7d92ccda5b6aac4ce70cb5c7934b Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 8 Dec 2022 17:43:11 -0500 Subject: [PATCH 019/320] chore(package): clean unimplemented tests --- .../test/wyatt_architecture_test.dart | 17 ----------------- .../test/wyatt_crud_bloc_test.dart | 0 .../test/wyatt_wyatt_ui_components_test.dart | 17 ----------------- 3 files changed, 34 deletions(-) delete mode 100644 packages/wyatt_architecture/test/wyatt_architecture_test.dart delete mode 100644 packages/wyatt_crud_bloc/test/wyatt_crud_bloc_test.dart delete mode 100644 packages/wyatt_ui_components/test/wyatt_wyatt_ui_components_test.dart diff --git a/packages/wyatt_architecture/test/wyatt_architecture_test.dart b/packages/wyatt_architecture/test/wyatt_architecture_test.dart deleted file mode 100644 index dc7ea003..00000000 --- a/packages/wyatt_architecture/test/wyatt_architecture_test.dart +++ /dev/null @@ -1,17 +0,0 @@ -// 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 . - -// Nothing to test as there is no logic in this package. diff --git a/packages/wyatt_crud_bloc/test/wyatt_crud_bloc_test.dart b/packages/wyatt_crud_bloc/test/wyatt_crud_bloc_test.dart deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/wyatt_ui_components/test/wyatt_wyatt_ui_components_test.dart b/packages/wyatt_ui_components/test/wyatt_wyatt_ui_components_test.dart deleted file mode 100644 index 1a98696c..00000000 --- a/packages/wyatt_ui_components/test/wyatt_wyatt_ui_components_test.dart +++ /dev/null @@ -1,17 +0,0 @@ -// 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 . - -// TODO(wyatt): Add some tests \ No newline at end of file -- 2.47.2 From a19d4bc5ce27c8900f892742d88354f7bbd0e243 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 8 Dec 2022 17:45:57 -0500 Subject: [PATCH 020/320] chore: update melos config --- melos.yaml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/melos.yaml b/melos.yaml index 5d814ff0..e854b4a8 100644 --- a/melos.yaml +++ b/melos.yaml @@ -21,8 +21,7 @@ scripts: analyze: run: | - melos exec -c 10 -- \ - flutter analyze --fatal-infos + melos exec -c 1 -- flutter analyze --fatal-infos description: Run `flutter analyze` for all packages. format: @@ -38,18 +37,29 @@ scripts: description: Clean things very deeply with `git clean`. 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. select-package: flutter: true + dir-exists: + - test + ignore: + - '*example*' - test: + test:all: run: melos run test:selective_unit_test --no-select 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-class-models: melos exec --scope="*wyatt_*" -- dart pub global run dcdg -o models/class-models.puml + + qualitycheck: + run: | + melos clean && \ + melos bootstrap && \ + melos run test:all + description: Run all targets generally expected in CI for a full local quality check. # Additional cleanup lifecycle script, executed when `melos clean` is run. postclean: > -- 2.47.2 From 5593620181f9eb88eab8991e9b8ac2d62377a3c5 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 8 Dec 2022 18:13:23 -0500 Subject: [PATCH 021/320] refactor: change quality check rule name --- melos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/melos.yaml b/melos.yaml index e854b4a8..5f48aec3 100644 --- a/melos.yaml +++ b/melos.yaml @@ -54,7 +54,7 @@ scripts: gen-class-models: melos exec --scope="*wyatt_*" -- dart pub global run dcdg -o models/class-models.puml - qualitycheck: + quality-check: run: | melos clean && \ melos bootstrap && \ -- 2.47.2 From 9af76b8e1f47c39f6b05df63730e1dbd037ccd64 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Sun, 11 Dec 2022 20:20:32 -0500 Subject: [PATCH 022/320] ci: add package tests and validation --- .drone.yml | 32 ++++++++++++++++++++++++++++++++ melos.yaml | 13 +++++++++++-- 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 00000000..6581b2f6 --- /dev/null +++ b/.drone.yml @@ -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 . + +kind: pipeline +type: docker +name: build + +steps: +- name: build + image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0 + commands: + - melos run quality-check + - melos run publish:validate + +trigger: + branch: + - master + event: + - push \ No newline at end of file diff --git a/melos.yaml b/melos.yaml index 5f48aec3..3430ffd7 100644 --- a/melos.yaml +++ b/melos.yaml @@ -40,7 +40,6 @@ scripts: run: melos exec -- flutter test --no-pub --coverage description: Run Flutter tests for a specific package in this project. select-package: - flutter: true dir-exists: - test ignore: @@ -52,7 +51,11 @@ scripts: 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: | @@ -60,6 +63,12 @@ scripts: 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. postclean: > -- 2.47.2 From 1e305c75bd43b36af4d6690886054ef70a17d0a7 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Sun, 11 Dec 2022 21:28:47 -0500 Subject: [PATCH 023/320] docs: update readme with melos commands --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index babeca68..b6ec3314 100644 --- a/README.md +++ b/README.md @@ -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 : ```shell -melos run test -melos run gen_coverage +melos run test:all # this will run all tests in this project +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 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. -- 2.47.2 From dc0f0c61c628fd26ecf7de3f396c34a2afdd2968 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 11:25:40 -0500 Subject: [PATCH 024/320] feat(bloc_layout): export useful packages (close #88) --- .../wyatt_bloc_layout/lib/src/presentation/presentation.dart | 4 ---- packages/wyatt_bloc_layout/lib/src/src.dart | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart index f4c24372..ccd4538b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart @@ -22,7 +22,3 @@ export 'screens/crud_cubit_screen_base.dart'; export 'screens/app_bar_cubit_screen.dart'; export 'screens/bottom_navigation_bar_layout_crud_screen.dart'; export 'screens/frame_layout_crud_screen.dart'; - -export 'package:flutter_bloc/flutter_bloc.dart'; -export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -export 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/src.dart b/packages/wyatt_bloc_layout/lib/src/src.dart index 6890de4f..381695f8 100644 --- a/packages/wyatt_bloc_layout/lib/src/src.dart +++ b/packages/wyatt_bloc_layout/lib/src/src.dart @@ -15,3 +15,8 @@ // along with this program. If not, see . export 'presentation/presentation.dart'; + +export 'package:flutter_bloc/flutter_bloc.dart'; +export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +export 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +export 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; -- 2.47.2 From dd275460f6a81447475ae52544a094e9ded4f85c Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 12:34:02 -0500 Subject: [PATCH 025/320] feat(ui_components): make app bar leading & actions customizable --- .../example/lib/components/custom_app_bar.dart | 4 +++- .../lib/src/domain/entities/component.dart | 16 ++++++++++++++++ .../lib/src/domain/entities/components.dart | 15 +++++++++++++-- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart index 8bac84a7..384fdf8e 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart @@ -10,7 +10,9 @@ class CustomAppBar extends AppBarComponent { ); @override - AppBarComponent configure({String? title}) => CustomAppBar( + AppBarComponent configure( + {String? title, Widget? leading, List? actions}) => + CustomAppBar( title: title ?? this.title, ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart index 04e60ebc..ca2d18dc 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart @@ -1,3 +1,19 @@ +// 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 . + import 'package:flutter/material.dart'; abstract class Component extends StatelessWidget { diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart index be6d79e2..a758ae6b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart @@ -19,10 +19,21 @@ import 'package:wyatt_ui_components/src/domain/entities/component.dart'; abstract class AppBarComponent extends Component { final String? title; - const AppBarComponent({this.title, super.key}); + final Widget? leading; + final List? actions; + const AppBarComponent({ + this.title, + this.leading, + this.actions, + super.key, + }); @override - AppBarComponent configure({String? title}); + AppBarComponent configure({ + String? title, + Widget? leading, + List? actions, + }); } abstract class BottomNavigationBarComponent extends Component { -- 2.47.2 From cd2806b07b7a7af600b9d206cfe38e5fa505f1c2 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 12:36:40 -0500 Subject: [PATCH 026/320] refactor(bloc_layout): update example with new app bar entity (#90) --- .../example/lib/components/theme_components.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart index f77d2770..2c57df62 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart @@ -18,7 +18,9 @@ class CustomAppBar extends AppBarComponent { ); @override - AppBarComponent configure({String? title}) => CustomAppBar( + AppBarComponent configure( + {String? title, Widget? leading, List? actions}) => + CustomAppBar( title: title ?? this.title, ); } -- 2.47.2 From 45c7bd6fcabe43520c2defda0cb603be6326204b Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 12:42:11 -0500 Subject: [PATCH 027/320] refactor(ui_layout): update example with components updates (close #90) --- .../example/lib/components/custom_app_bar.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart index cb264c01..d025a569 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart @@ -13,7 +13,12 @@ class CustomAppBar extends AppBarComponent { ); @override - AppBarComponent configure({String? title}) => CustomAppBar( + AppBarComponent configure({ + String? title, + Widget? leading, + List? actions, + }) => + CustomAppBar( title: title ?? this.title, ); } -- 2.47.2 From 81a7ca5a1fce62e14c9e9cbca59b181ffc754794 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 14:08:36 -0500 Subject: [PATCH 028/320] feat(ui_components): make component data field nullable (#92) --- .../wyatt_ui_components/example/lib/main.dart | 2 +- .../lib/src/domain/entities/component.dart | 2 +- .../lib/src/domain/entities/components.dart | 8 ++++---- .../lib/src/features/component_theme_data.dart | 16 ++++++++-------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/wyatt_ui_components/example/lib/main.dart b/packages/wyatt_ui_components/example/lib/main.dart index 673d614a..e8aebaa0 100644 --- a/packages/wyatt_ui_components/example/lib/main.dart +++ b/packages/wyatt_ui_components/example/lib/main.dart @@ -50,7 +50,7 @@ class Home extends StatelessWidget { Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(60), - child: context.components.appBar.configure(title: 'Example title'), + child: context.components.appBar?.configure(title: 'Example title'), ), body: Column( children: [ diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart index ca2d18dc..7a03682f 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart @@ -19,5 +19,5 @@ import 'package:flutter/material.dart'; abstract class Component extends StatelessWidget { const Component({super.key}); - Component configure(); + Component? configure(); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart index a758ae6b..44c16697 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/components.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/components.dart @@ -29,7 +29,7 @@ abstract class AppBarComponent extends Component { }); @override - AppBarComponent configure({ + AppBarComponent? configure({ String? title, Widget? leading, List? actions, @@ -46,7 +46,7 @@ abstract class BottomNavigationBarComponent extends Component { }); @override - BottomNavigationBarComponent configure({ + BottomNavigationBarComponent? configure({ void Function(BuildContext, int)? onTap, int currentIndex = 0, }); @@ -57,7 +57,7 @@ abstract class ErrorWidgetComponent extends Component { const ErrorWidgetComponent({required this.error, super.key}); @override - ErrorWidgetComponent configure({String? error}); + ErrorWidgetComponent? configure({String? error}); } abstract class LoadingWidgetComponent extends Component { @@ -65,5 +65,5 @@ abstract class LoadingWidgetComponent extends Component { const LoadingWidgetComponent({required this.color, super.key}); @override - LoadingWidgetComponent configure({Color? color}); + LoadingWidgetComponent? configure({Color? color}); } diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index 66540540..e613e826 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -17,15 +17,15 @@ import 'package:wyatt_ui_components/src/domain/entities/components.dart'; class ComponentThemeData { - final AppBarComponent appBar; - final BottomNavigationBarComponent bottomNavigationBar; - final ErrorWidgetComponent errorWidget; - final LoadingWidgetComponent loadingWidget; + final AppBarComponent? appBar; + final BottomNavigationBarComponent? bottomNavigationBar; + final ErrorWidgetComponent? errorWidget; + final LoadingWidgetComponent? loadingWidget; const ComponentThemeData.raw({ - required this.appBar, - required this.bottomNavigationBar, - required this.errorWidget, - required this.loadingWidget, + this.appBar, + this.bottomNavigationBar, + this.errorWidget, + this.loadingWidget, }); } -- 2.47.2 From 244a2865091fe316d391c469a3ae523089d1ca0c Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 14:10:41 -0500 Subject: [PATCH 029/320] refactor(ui_components): update example (#92) --- packages/wyatt_ui_components/example/lib/main.dart | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_ui_components/example/lib/main.dart b/packages/wyatt_ui_components/example/lib/main.dart index e8aebaa0..1587122a 100644 --- a/packages/wyatt_ui_components/example/lib/main.dart +++ b/packages/wyatt_ui_components/example/lib/main.dart @@ -50,20 +50,23 @@ class Home extends StatelessWidget { Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(60), - child: context.components.appBar?.configure(title: 'Example title'), + child: context.components.appBar?.configure(title: 'Example title') ?? + const SizedBox.shrink(), ), body: Column( children: [ Expanded( child: context.components.errorWidget - .configure(error: 'Example erreur'), + ?.configure(error: 'Example erreur') ?? + const SizedBox.shrink(), ), const SizedBox( height: 10, ), Expanded( child: context.components.loadingWidget - .configure(color: Colors.green), + ?.configure(color: Colors.green) ?? + const SizedBox.shrink(), ), ], ), -- 2.47.2 From 7a24a36af00c916ff471648642d610348f1a8922 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 14:13:00 -0500 Subject: [PATCH 030/320] refactor(bloc_layout): update package using nullable component data (#92) --- .../consumers/crud_cubit_consumer_screen_bases.dart | 5 +++-- .../src/presentation/screens/crud_cubit_screen_base.dart | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart index 7090ff17..e3f58686 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart @@ -27,10 +27,11 @@ abstract class CrudCubitConsumerScreenBase< const CrudCubitConsumerScreenBase({super.key}); Widget errorBuilder(BuildContext context, CrudError state) => - context.components.errorWidget.configure(error: state.message); + context.components.errorWidget?.configure(error: state.message) ?? + const SizedBox.shrink(); Widget loadingBuilder(BuildContext context, CrudLoading state) => - context.components.loadingWidget; + context.components.loadingWidget ?? const SizedBox.shrink(); Widget initialBuilder(BuildContext context, CrudInitial state) => const SizedBox.shrink(); diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart index 4240f819..04f35bbf 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart @@ -16,17 +16,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class CrudCubitScreenBase, SuccessState extends CrudSuccess> extends CubitScreen { const CrudCubitScreenBase(); Widget errorBuilder(BuildContext context, CrudError state) => - context.components.errorWidget; + context.components.errorWidget?.configure(error: state.message) ?? + const SizedBox.shrink(); Widget loadingBuilder(BuildContext context, CrudLoading state) => - context.components.loadingWidget; + context.components.loadingWidget ?? const SizedBox.shrink(); Widget initialBuilder(BuildContext context, CrudInitial state) => const SizedBox.shrink(); -- 2.47.2 From e01f47d41a327b0beafa53101c896a4939439bde Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 14:14:15 -0500 Subject: [PATCH 031/320] refactor(ui_layout): update package using nullable component data (#92) --- .../lib/src/presentation/layouts/app_bar_layout.dart | 3 ++- .../presentation/layouts/bottom_navigation_bar_layout.dart | 2 +- .../lib/src/presentation/layouts/frame_layout.dart | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart index 9d392e1e..1bf8f571 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart @@ -31,7 +31,8 @@ class AppBarLayout extends Layout { Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(60), - child: context.components.appBar.configure(title: title), + child: context.components.appBar?.configure(title: title) ?? + const SizedBox.shrink(), ), body: body, ); diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart index 5c214ef9..58ee146f 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart @@ -14,7 +14,7 @@ class BottomNavigationBarLayout extends Layout { @override Widget build(BuildContext context) => Scaffold( body: body, - bottomNavigationBar: context.components.bottomNavigationBar.configure( + bottomNavigationBar: context.components.bottomNavigationBar?.configure( currentIndex: currentIndex, ), ); diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart index f32b869f..355716d3 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -34,10 +34,11 @@ class FrameLayout extends Layout { Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(60), - child: context.components.appBar.configure(title: title), + child: context.components.appBar?.configure(title: title) ?? + const SizedBox.shrink(), ), body: body, - bottomNavigationBar: context.components.bottomNavigationBar.configure( + bottomNavigationBar: context.components.bottomNavigationBar?.configure( currentIndex: currentIndex, ), ); -- 2.47.2 From c6d8ca37fe7dd508bac37307d31942f36c0c75db Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 14:20:20 -0500 Subject: [PATCH 032/320] refactor(bloc_layout): update example (#92) --- .../example/lib/components/theme_components.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart index 2c57df62..2357586c 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart @@ -18,7 +18,7 @@ class CustomAppBar extends AppBarComponent { ); @override - AppBarComponent configure( + AppBarComponent? configure( {String? title, Widget? leading, List? actions}) => CustomAppBar( title: title ?? this.title, @@ -44,7 +44,7 @@ class CustomBottomBar extends BottomNavigationBarComponent { ); @override - BottomNavigationBarComponent configure( + BottomNavigationBarComponent? configure( {void Function(BuildContext p1, int p2)? onTap, int currentIndex = 0}) => this; @@ -58,7 +58,7 @@ class CustomLoadingWidget extends LoadingWidgetComponent { Center(child: CircularProgressIndicator(color: color)); @override - LoadingWidgetComponent configure({Color? color}) => CustomLoadingWidget( + LoadingWidgetComponent? configure({Color? color}) => CustomLoadingWidget( color: color ?? this.color, ); } @@ -73,7 +73,7 @@ class CustomErrorWidget extends ErrorWidgetComponent { ); @override - ErrorWidgetComponent configure({String? error}) => CustomErrorWidget( + ErrorWidgetComponent? configure({String? error}) => CustomErrorWidget( error: error ?? this.error, ); } -- 2.47.2 From e8172004a3d32683923ca4ece85cff3a72974ecd Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 14:21:13 -0500 Subject: [PATCH 033/320] refactor(ui_component): update example (#92) --- .../example/lib/components/custom_app_bar.dart | 2 +- .../example/lib/components/custom_bottom_bar.dart | 2 +- .../example/lib/components/custom_error_widget.dart | 2 +- .../example/lib/components/custom_loading_widget.dart | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart index 384fdf8e..80b9b396 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart @@ -10,7 +10,7 @@ class CustomAppBar extends AppBarComponent { ); @override - AppBarComponent configure( + AppBarComponent? configure( {String? title, Widget? leading, List? actions}) => CustomAppBar( title: title ?? this.title, diff --git a/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart index d3c13033..42eacfab 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart @@ -29,7 +29,7 @@ class CustomBottomNavigationBar extends BottomNavigationBarComponent { ); @override - CustomBottomNavigationBar configure({ + CustomBottomNavigationBar? configure({ void Function(BuildContext, int)? onTap, int currentIndex = 0, }) => diff --git a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart index 8b2a9b5a..736ae98a 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart @@ -11,6 +11,6 @@ class CustomErrorWidget extends ErrorWidgetComponent { ); @override - ErrorWidgetComponent configure({String? error}) => + ErrorWidgetComponent? configure({String? error}) => CustomErrorWidget(error: error ?? this.error); } diff --git a/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart index 912312fe..6d28e690 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart @@ -12,7 +12,7 @@ class CustomLoadingWidget extends LoadingWidgetComponent { ); @override - CustomLoadingWidget configure({Color? color}) => CustomLoadingWidget( + CustomLoadingWidget? configure({Color? color}) => CustomLoadingWidget( color: color ?? this.color, ); } -- 2.47.2 From 4f49f4931cbd7ab380dd2aeb05693e065220672a Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 14:21:48 -0500 Subject: [PATCH 034/320] refactor(ui_layout): update example (#92) --- .../wyatt_ui_layout/example/lib/components/custom_app_bar.dart | 2 +- .../example/lib/components/custom_bottom_navigation_bar.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart index d025a569..d31297fa 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart @@ -13,7 +13,7 @@ class CustomAppBar extends AppBarComponent { ); @override - AppBarComponent configure({ + AppBarComponent? configure({ String? title, Widget? leading, List? actions, diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart b/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart index d3c13033..42eacfab 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart @@ -29,7 +29,7 @@ class CustomBottomNavigationBar extends BottomNavigationBarComponent { ); @override - CustomBottomNavigationBar configure({ + CustomBottomNavigationBar? configure({ void Function(BuildContext, int)? onTap, int currentIndex = 0, }) => -- 2.47.2 From aee7060a0bae6fe87ac4d39c74080ab1a63f540a Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 15:20:47 -0500 Subject: [PATCH 035/320] ci: fix http client test error --- .drone.yml | 8 ++++++-- .../wyatt_http_client/test/wyatt_http_client_test.dart | 1 - 2 files changed, 6 insertions(+), 3 deletions(-) delete mode 100644 packages/wyatt_http_client/test/wyatt_http_client_test.dart diff --git a/.drone.yml b/.drone.yml index 6581b2f6..90dd9c7e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -16,14 +16,18 @@ kind: pipeline type: docker -name: build +name: default steps: -- name: build +- 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: diff --git a/packages/wyatt_http_client/test/wyatt_http_client_test.dart b/packages/wyatt_http_client/test/wyatt_http_client_test.dart deleted file mode 100644 index fad5335c..00000000 --- a/packages/wyatt_http_client/test/wyatt_http_client_test.dart +++ /dev/null @@ -1 +0,0 @@ -// TODO(hpcl): Add tests. -- 2.47.2 From c93b7fb5f7453ae954e803fee347c5a165958e43 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 12 Dec 2022 20:32:29 -0500 Subject: [PATCH 036/320] feat(bloc_layout): export layout_package & adapt imports --- .../presentation/consumers/app_bar_cubit_consumer_screen.dart | 1 - .../bottom_navigation_bar_layout_crud_consumer_screen.dart | 1 - .../consumers/frame_layout_crud_consumer_screen.dart | 1 - .../lib/src/presentation/screens/app_bar_cubit_screen.dart | 1 - .../screens/bottom_navigation_bar_layout_crud_screen.dart | 1 - .../lib/src/presentation/screens/frame_layout_crud_screen.dart | 1 - packages/wyatt_bloc_layout/lib/src/src.dart | 1 + 7 files changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart index d18bd7eb..252ec6b8 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; abstract class AppBarLayoutCrudConsumerScreen< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart index 170c0094..354fca83 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; abstract class BottomNavigationBarLayoutCrudConsumerScreen< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart index ce362ef1..cb4d1ba6 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart @@ -17,7 +17,6 @@ import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; abstract class FrameLayoutCrudConsumerScreen< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart index e86d95fa..4715a8b9 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; abstract class AppBarLayoutCrudScreen, T> extends CrudCubitScreen { diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart index 79503f09..28724729 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; abstract class BottomNavigationBarLayoutCrudScreen< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart index 458e6801..8403be7a 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart @@ -17,7 +17,6 @@ import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -import 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; abstract class FrameLayoutCrudScreen, T> extends CrudCubitScreen { diff --git a/packages/wyatt_bloc_layout/lib/src/src.dart b/packages/wyatt_bloc_layout/lib/src/src.dart index 381695f8..e23b026c 100644 --- a/packages/wyatt_bloc_layout/lib/src/src.dart +++ b/packages/wyatt_bloc_layout/lib/src/src.dart @@ -19,4 +19,5 @@ export 'presentation/presentation.dart'; export 'package:flutter_bloc/flutter_bloc.dart'; export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; export 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +export 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; export 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; -- 2.47.2 From 75a5facfdcd62e70b3ddabaf2482d97d4723f189 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 21:30:22 -0500 Subject: [PATCH 037/320] fix(analysis): change file include to keep coherence --- packages/wyatt_analysis/lib/analysis_options.flutter.2.2.0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.0.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.0.yaml index acd697aa..96148836 100644 --- a/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.0.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.0.yaml @@ -14,7 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.2.1.1.yaml +include: package:wyatt_analysis/analysis_options.2.2.0.yaml linter: rules: -- 2.47.2 From 7b61f3f08ade5f44fe492846d0ed5f6cc178ec17 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 21:36:39 -0500 Subject: [PATCH 038/320] feat(analysis): add utils script to easely bump version --- packages/wyatt_analysis/new_version.sh | 114 +++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100755 packages/wyatt_analysis/new_version.sh diff --git a/packages/wyatt_analysis/new_version.sh b/packages/wyatt_analysis/new_version.sh new file mode 100755 index 00000000..f92f9421 --- /dev/null +++ b/packages/wyatt_analysis/new_version.sh @@ -0,0 +1,114 @@ +#!/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 . + +usage=" +usage: + $(basename "$0") -- create new analyzer files. + +where: + previous_version: last version, for example \`2.2.1\` + new_version: new version, for example \`2.2.3\`" + +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}")" + +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 + +# 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}" + +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 . + +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 . + +include: package:wyatt_analysis/analysis_options.flutter.${new}.yaml +" > "${OPTIONS_FLUTTER}" + +exit 0 -- 2.47.2 From 7f9621b4f6a2a36da5fb7f62f9912065ca31ab17 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 21:37:20 -0500 Subject: [PATCH 039/320] feat(analysis): add 2.2.2 files for archive --- .../lib/analysis_options.2.2.2.yaml | 206 ++++++++++++++++++ .../lib/analysis_options.flutter.2.2.2.yaml | 32 +++ 2 files changed, 238 insertions(+) create mode 100644 packages/wyatt_analysis/lib/analysis_options.2.2.2.yaml create mode 100644 packages/wyatt_analysis/lib/analysis_options.flutter.2.2.2.yaml diff --git a/packages/wyatt_analysis/lib/analysis_options.2.2.2.yaml b/packages/wyatt_analysis/lib/analysis_options.2.2.2.yaml new file mode 100644 index 00000000..41d2e609 --- /dev/null +++ b/packages/wyatt_analysis/lib/analysis_options.2.2.2.yaml @@ -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 . + +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 \ No newline at end of file diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.2.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.2.yaml new file mode 100644 index 00000000..1b881c0e --- /dev/null +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.2.yaml @@ -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 . + +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 -- 2.47.2 From 29d8ec640fe0fe921444d518d3c6026f18d28ff9 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 21:38:57 -0500 Subject: [PATCH 040/320] feat(analysis): add overwrite protection --- packages/wyatt_analysis/new_version.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/wyatt_analysis/new_version.sh b/packages/wyatt_analysis/new_version.sh index f92f9421..36adbfe1 100755 --- a/packages/wyatt_analysis/new_version.sh +++ b/packages/wyatt_analysis/new_version.sh @@ -63,6 +63,18 @@ if [ ! -e "$OLD_OPTIONS_FLUTTER" ]; then 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}" -- 2.47.2 From 7fc37368544f8f43f4e223b14f59f0f47292ce1b Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 22:02:31 -0500 Subject: [PATCH 041/320] feat(analysis): exclude generated code, and add dart>2.16 rules --- .../lib/analysis_options.2.2.3.yaml | 213 ++++++++++++++++++ .../lib/analysis_options.flutter.2.2.3.yaml | 32 +++ .../lib/analysis_options.flutter.yaml | 4 +- .../wyatt_analysis/lib/analysis_options.yaml | 4 +- .../wyatt_analysis/lib/wyatt_analysis.dart | 5 +- packages/wyatt_analysis/new_version.sh | 4 + packages/wyatt_analysis/pubspec.yaml | 2 +- 7 files changed, 258 insertions(+), 6 deletions(-) create mode 100644 packages/wyatt_analysis/lib/analysis_options.2.2.3.yaml create mode 100644 packages/wyatt_analysis/lib/analysis_options.flutter.2.2.3.yaml diff --git a/packages/wyatt_analysis/lib/analysis_options.2.2.3.yaml b/packages/wyatt_analysis/lib/analysis_options.2.2.3.yaml new file mode 100644 index 00000000..b49366f6 --- /dev/null +++ b/packages/wyatt_analysis/lib/analysis_options.2.2.3.yaml @@ -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 . + +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 \ No newline at end of file diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.3.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.3.yaml new file mode 100644 index 00000000..8209c3d1 --- /dev/null +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.3.yaml @@ -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 . + +include: package:wyatt_analysis/analysis_options.2.2.3.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 diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.yaml index acaa7c91..ec20de19 100644 --- a/packages/wyatt_analysis/lib/analysis_options.flutter.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.yaml @@ -1,3 +1,4 @@ + # Copyright (C) 2022 WYATT GROUP # Please see the AUTHORS file for details. # @@ -14,4 +15,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.flutter.2.2.1.yaml +include: package:wyatt_analysis/analysis_options.flutter.2.2.3.yaml + diff --git a/packages/wyatt_analysis/lib/analysis_options.yaml b/packages/wyatt_analysis/lib/analysis_options.yaml index 4471e0cb..b189110d 100644 --- a/packages/wyatt_analysis/lib/analysis_options.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.yaml @@ -1,3 +1,4 @@ + # Copyright (C) 2022 WYATT GROUP # Please see the AUTHORS file for details. # @@ -14,4 +15,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.2.2.1.yaml +include: package:wyatt_analysis/analysis_options.2.2.3.yaml + diff --git a/packages/wyatt_analysis/lib/wyatt_analysis.dart b/packages/wyatt_analysis/lib/wyatt_analysis.dart index 227671cc..9045e81e 100644 --- a/packages/wyatt_analysis/lib/wyatt_analysis.dart +++ b/packages/wyatt_analysis/lib/wyatt_analysis.dart @@ -15,8 +15,7 @@ // along with this program. If not, see . /// Wyatt analyzer settings and best practices -/// used internally at [Wyatt](https://wyattapp.io) -/// and [Wyatt Studio](https://wyatt-studio.fr). +/// used internally at [Wyatt Studio](https://wyatt-studio.fr). library wyatt_analysis; -const String wyattAnalysisVersion = '2.2.1'; +const String wyattAnalysisVersion = '2.2.3'; diff --git a/packages/wyatt_analysis/new_version.sh b/packages/wyatt_analysis/new_version.sh index 36adbfe1..8f2df17d 100755 --- a/packages/wyatt_analysis/new_version.sh +++ b/packages/wyatt_analysis/new_version.sh @@ -43,6 +43,7 @@ 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" @@ -83,6 +84,9 @@ cp "${OLD_OPTIONS_FLUTTER}" "${NEW_OPTIONS_FLUTTER}" 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}" + echo " # Copyright (C) 2022 WYATT GROUP # Please see the AUTHORS file for details. diff --git a/packages/wyatt_analysis/pubspec.yaml b/packages/wyatt_analysis/pubspec.yaml index a4267f6f..0f9214e3 100644 --- a/packages/wyatt_analysis/pubspec.yaml +++ b/packages/wyatt_analysis/pubspec.yaml @@ -1,5 +1,5 @@ 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 version: 2.2.2 -- 2.47.2 From 640cfaf118776135a719b31180628add40879bf2 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 22:15:32 -0500 Subject: [PATCH 042/320] refactor(analysis): follow melos versioning --- packages/wyatt_analysis/README.md | 15 ++++++--------- ...ons.2.2.3.yaml => analysis_options.2.3.0.yaml} | 0 ...3.yaml => analysis_options.flutter.2.3.0.yaml} | 2 +- .../lib/analysis_options.flutter.yaml | 2 +- packages/wyatt_analysis/lib/analysis_options.yaml | 2 +- packages/wyatt_analysis/lib/wyatt_analysis.dart | 2 +- packages/wyatt_analysis/new_version.sh | 7 +++++-- 7 files changed, 15 insertions(+), 15 deletions(-) rename packages/wyatt_analysis/lib/{analysis_options.2.2.3.yaml => analysis_options.2.3.0.yaml} (100%) rename packages/wyatt_analysis/lib/{analysis_options.flutter.2.2.3.yaml => analysis_options.flutter.2.3.0.yaml} (94%) diff --git a/packages/wyatt_analysis/README.md b/packages/wyatt_analysis/README.md index b403cf66..89dcb528 100644 --- a/packages/wyatt_analysis/README.md +++ b/packages/wyatt_analysis/README.md @@ -20,7 +20,7 @@ ![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.3.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). @@ -29,12 +29,9 @@ This package provides lint rules for Dart and Flutter which are used at [Wyatt]( To use the lints, add a dependency in your `pubspec.yaml`: ```yaml -dev_dependencies: - wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.0.0 - path: packages/wyatt_analysis +wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + version: 2.3.0 ``` Then, add an include in `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: ```yaml -include: package:wyatt_analysis/analysis_options.flutter.2.0.0.yaml +include: package:wyatt_analysis/analysis_options.flutter.2.3.0.yaml ``` If you just want **Dart** version: ```yaml -include: package:wyatt_analysis/analysis_options.2.0.0.yaml +include: package:wyatt_analysis/analysis_options.2.3.0.yaml ``` ## Suppressing Lints diff --git a/packages/wyatt_analysis/lib/analysis_options.2.2.3.yaml b/packages/wyatt_analysis/lib/analysis_options.2.3.0.yaml similarity index 100% rename from packages/wyatt_analysis/lib/analysis_options.2.2.3.yaml rename to packages/wyatt_analysis/lib/analysis_options.2.3.0.yaml diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.3.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.2.3.0.yaml similarity index 94% rename from packages/wyatt_analysis/lib/analysis_options.flutter.2.2.3.yaml rename to packages/wyatt_analysis/lib/analysis_options.flutter.2.3.0.yaml index 8209c3d1..03b12877 100644 --- a/packages/wyatt_analysis/lib/analysis_options.flutter.2.2.3.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.2.3.0.yaml @@ -14,7 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.2.2.3.yaml +include: package:wyatt_analysis/analysis_options.2.3.0.yaml linter: rules: diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.yaml index ec20de19..fdcd428a 100644 --- a/packages/wyatt_analysis/lib/analysis_options.flutter.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.yaml @@ -15,5 +15,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.flutter.2.2.3.yaml +include: package:wyatt_analysis/analysis_options.flutter.2.3.0.yaml diff --git a/packages/wyatt_analysis/lib/analysis_options.yaml b/packages/wyatt_analysis/lib/analysis_options.yaml index b189110d..0ad26874 100644 --- a/packages/wyatt_analysis/lib/analysis_options.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.yaml @@ -15,5 +15,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.2.2.3.yaml +include: package:wyatt_analysis/analysis_options.2.3.0.yaml diff --git a/packages/wyatt_analysis/lib/wyatt_analysis.dart b/packages/wyatt_analysis/lib/wyatt_analysis.dart index 9045e81e..90216d73 100644 --- a/packages/wyatt_analysis/lib/wyatt_analysis.dart +++ b/packages/wyatt_analysis/lib/wyatt_analysis.dart @@ -18,4 +18,4 @@ /// used internally at [Wyatt Studio](https://wyatt-studio.fr). library wyatt_analysis; -const String wyattAnalysisVersion = '2.2.3'; +const String wyattAnalysisVersion = '2.3.0'; diff --git a/packages/wyatt_analysis/new_version.sh b/packages/wyatt_analysis/new_version.sh index 8f2df17d..625f89c5 100755 --- a/packages/wyatt_analysis/new_version.sh +++ b/packages/wyatt_analysis/new_version.sh @@ -21,8 +21,8 @@ usage: $(basename "$0") -- create new analyzer files. where: - previous_version: last version, for example \`2.2.1\` - new_version: new version, for example \`2.2.3\`" + previous_version: last version, for example \`2.3.0\` + new_version: new version, for example \`2.4.0\`" old=$1 new=$2 @@ -87,6 +87,9 @@ 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. -- 2.47.2 From 3c8ff373a109e051bedae62d3c019b1619e13ab2 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 22:17:35 -0500 Subject: [PATCH 043/320] chore(release): publish packages - wyatt_analysis@2.3.0 --- CHANGELOG.md | 26 +++++++++++++++++++ packages/wyatt_analysis/CHANGELOG.md | 9 +++++++ packages/wyatt_analysis/pubspec.yaml | 2 +- .../wyatt_architecture/example/pubspec.yaml | 2 +- packages/wyatt_architecture/pubspec.yaml | 2 +- .../wyatt_authentication_bloc/pubspec.yaml | 2 +- packages/wyatt_bloc_helper/pubspec.yaml | 2 +- .../wyatt_bloc_layout/example/pubspec.yaml | 2 +- packages/wyatt_bloc_layout/pubspec.yaml | 2 +- packages/wyatt_crud_bloc/pubspec.yaml | 2 +- packages/wyatt_form_bloc/pubspec.yaml | 2 +- packages/wyatt_http_client/pubspec.yaml | 2 +- .../wyatt_type_utils/example/pubspec.yaml | 2 +- packages/wyatt_type_utils/pubspec.yaml | 2 +- .../wyatt_ui_components/example/pubspec.yaml | 2 +- packages/wyatt_ui_components/pubspec.yaml | 2 +- packages/wyatt_ui_layout/example/pubspec.yaml | 2 +- packages/wyatt_ui_layout/pubspec.yaml | 2 +- 18 files changed, 51 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41bcd1b0..0931d30a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,32 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 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 diff --git a/packages/wyatt_analysis/CHANGELOG.md b/packages/wyatt_analysis/CHANGELOG.md index a3151d1f..7b84dc82 100644 --- a/packages/wyatt_analysis/CHANGELOG.md +++ b/packages/wyatt_analysis/CHANGELOG.md @@ -1,3 +1,12 @@ +## 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 - **DOCS**: add publish_to self hosted pub server. diff --git a/packages/wyatt_analysis/pubspec.yaml b/packages/wyatt_analysis/pubspec.yaml index 0f9214e3..da7c9706 100644 --- a/packages/wyatt_analysis/pubspec.yaml +++ b/packages/wyatt_analysis/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_analysis 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 -version: 2.2.2 +version: 2.3.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub diff --git a/packages/wyatt_architecture/example/pubspec.yaml b/packages/wyatt_architecture/example/pubspec.yaml index 902ed5d8..f475756f 100644 --- a/packages/wyatt_architecture/example/pubspec.yaml +++ b/packages/wyatt_architecture/example/pubspec.yaml @@ -67,7 +67,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.2.2 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_architecture/pubspec.yaml b/packages/wyatt_architecture/pubspec.yaml index e0711e40..4ec6eefa 100644 --- a/packages/wyatt_architecture/pubspec.yaml +++ b/packages/wyatt_architecture/pubspec.yaml @@ -24,4 +24,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.2.2 \ No newline at end of file + version: ^2.3.0 \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/pubspec.yaml b/packages/wyatt_authentication_bloc/pubspec.yaml index 5b959149..60b9cba1 100644 --- a/packages/wyatt_authentication_bloc/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/pubspec.yaml @@ -43,4 +43,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.2.2 + version: 2.3.0 diff --git a/packages/wyatt_bloc_helper/pubspec.yaml b/packages/wyatt_bloc_helper/pubspec.yaml index af6da51b..ee8c23f0 100644 --- a/packages/wyatt_bloc_helper/pubspec.yaml +++ b/packages/wyatt_bloc_helper/pubspec.yaml @@ -22,4 +22,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.2.2 \ No newline at end of file + version: ^2.3.0 \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml index 7640a2f7..1389846d 100644 --- a/packages/wyatt_bloc_layout/example/pubspec.yaml +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -44,7 +44,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.1.0 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_bloc_layout/pubspec.yaml b/packages/wyatt_bloc_layout/pubspec.yaml index b1053e83..5ec23e80 100644 --- a/packages/wyatt_bloc_layout/pubspec.yaml +++ b/packages/wyatt_bloc_layout/pubspec.yaml @@ -40,5 +40,5 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.1.0 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/pubspec.yaml b/packages/wyatt_crud_bloc/pubspec.yaml index b237deb2..7f37bc60 100644 --- a/packages/wyatt_crud_bloc/pubspec.yaml +++ b/packages/wyatt_crud_bloc/pubspec.yaml @@ -31,4 +31,4 @@ dev_dependencies: bloc_test: ^9.1.0 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.2.2 + version: 2.3.0 diff --git a/packages/wyatt_form_bloc/pubspec.yaml b/packages/wyatt_form_bloc/pubspec.yaml index a292249a..28ac8778 100644 --- a/packages/wyatt_form_bloc/pubspec.yaml +++ b/packages/wyatt_form_bloc/pubspec.yaml @@ -30,4 +30,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^2.2.2 + version: ^2.3.0 diff --git a/packages/wyatt_http_client/pubspec.yaml b/packages/wyatt_http_client/pubspec.yaml index 127a612b..6a893358 100644 --- a/packages/wyatt_http_client/pubspec.yaml +++ b/packages/wyatt_http_client/pubspec.yaml @@ -14,5 +14,5 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.2.2 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis diff --git a/packages/wyatt_type_utils/example/pubspec.yaml b/packages/wyatt_type_utils/example/pubspec.yaml index 41a1c2cd..601f3b3b 100644 --- a/packages/wyatt_type_utils/example/pubspec.yaml +++ b/packages/wyatt_type_utils/example/pubspec.yaml @@ -36,7 +36,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.2.2 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/wyatt_type_utils/pubspec.yaml b/packages/wyatt_type_utils/pubspec.yaml index 6c7b7ea5..46dea5c2 100644 --- a/packages/wyatt_type_utils/pubspec.yaml +++ b/packages/wyatt_type_utils/pubspec.yaml @@ -13,4 +13,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.2.2 \ No newline at end of file + version: ^2.3.0 \ No newline at end of file diff --git a/packages/wyatt_ui_components/example/pubspec.yaml b/packages/wyatt_ui_components/example/pubspec.yaml index 0288aaba..aea97e33 100644 --- a/packages/wyatt_ui_components/example/pubspec.yaml +++ b/packages/wyatt_ui_components/example/pubspec.yaml @@ -44,7 +44,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.1.0 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index f2cb2329..c8928ed5 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -20,5 +20,5 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.1.0 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis \ No newline at end of file diff --git a/packages/wyatt_ui_layout/example/pubspec.yaml b/packages/wyatt_ui_layout/example/pubspec.yaml index c72bf036..3ce494bd 100644 --- a/packages/wyatt_ui_layout/example/pubspec.yaml +++ b/packages/wyatt_ui_layout/example/pubspec.yaml @@ -49,7 +49,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.2.1 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_ui_layout/pubspec.yaml b/packages/wyatt_ui_layout/pubspec.yaml index 625daea9..bfdcc394 100644 --- a/packages/wyatt_ui_layout/pubspec.yaml +++ b/packages/wyatt_ui_layout/pubspec.yaml @@ -27,5 +27,5 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.2.2 + ref: wyatt_analysis-v2.3.0 path: packages/wyatt_analysis \ No newline at end of file -- 2.47.2 From 37e00fe9c40515fb150566686639693781d0a17f Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 22:43:54 -0500 Subject: [PATCH 044/320] style(analysis): dart format + follows wyatt analysis 2.3.0 --- .../analysis_options.yaml | 5 +-- .../example/lib/bootstrap.dart | 6 +-- .../lib/core/constants/form_field.dart | 6 +-- .../example/lib/core/constants/form_name.dart | 6 +-- .../lib/core/utils/app_bloc_observer.dart | 6 +-- .../lib/core/utils/custom_password.dart | 6 +-- .../example/lib/main.dart | 6 +-- .../blocs/edit_profile_cubit.dart | 8 ++-- .../features/sign_in/sign_in_page.dart | 6 +-- .../sign_in/widgets/sign_in_form.dart | 6 +-- .../features/sign_up/sign_up_page.dart | 6 +-- .../sign_up/widgets/sign_up_form.dart | 6 +-- .../presentation/features/sub/sub_page.dart | 12 +++--- .../features/welcome/welcome_page.dart | 6 +-- .../example/test/widget_test.dart | 1 + .../lib/src/core/core.dart | 1 - .../src/core/enums/authentication_status.dart | 6 +-- .../lib/src/core/enums/enums.dart | 6 +-- .../lib/src/core/exceptions/exceptions.dart | 7 ++-- .../lib/src/core/utils/cryptography.dart | 39 ------------------- .../lib/src/core/utils/utils.dart | 17 -------- .../lib/src/data/data.dart | 6 +-- ...authentication_cache_data_source_impl.dart | 4 +- ...hentication_firebase_data_source_impl.dart | 6 +-- .../authentication_mock_data_source_impl.dart | 10 ++--- .../lib/src/data/models/account_model.dart | 25 ++++++------ .../data/models/account_wrapper_model.dart | 9 +++-- .../lib/src/data/models/models.dart | 6 +-- .../authentication_repository_impl.dart | 26 ++++++------- .../src/data/repositories/repositories.dart | 6 +-- .../lib/src/domain/domain.dart | 6 +-- .../lib/src/domain/entities/entities.dart | 6 +-- .../authentication_repository.dart | 6 +-- .../src/domain/repositories/repositories.dart | 6 +-- .../cubit/authentication_cubit.dart | 3 +- .../cubit/authentication_state.dart | 17 ++++---- .../cubit/email_verification_cubit.dart | 3 +- .../cubit/password_reset_cubit.dart | 7 ++-- .../cubit/password_reset_state.dart | 3 +- .../features/sign_in/cubit/sign_in_cubit.dart | 7 ++-- .../features/sign_in/cubit/sign_in_state.dart | 10 ++--- .../features/sign_up/cubit/sign_up_cubit.dart | 7 ++-- .../features/sign_up/cubit/sign_up_state.dart | 9 ++--- .../lib/src/src.dart | 6 +-- 44 files changed, 149 insertions(+), 213 deletions(-) delete mode 100644 packages/wyatt_authentication_bloc/lib/src/core/utils/cryptography.dart delete mode 100644 packages/wyatt_authentication_bloc/lib/src/core/utils/utils.dart diff --git a/packages/wyatt_authentication_bloc/analysis_options.yaml b/packages/wyatt_authentication_bloc/analysis_options.yaml index b0c6aced..82177cd5 100644 --- a/packages/wyatt_authentication_bloc/analysis_options.yaml +++ b/packages/wyatt_authentication_bloc/analysis_options.yaml @@ -1,4 +1 @@ -include: package:wyatt_analysis/analysis_options.flutter.yaml - -analyzer: - exclude: "!example/**" \ No newline at end of file +include: package:wyatt_analysis/analysis_options.flutter.yaml \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart index 4e0f4070..0b4e74c6 100644 --- a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart +++ b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart index 84636b9f..917131da 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_field.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart index a5ce457e..b41b7335 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/constants/form_name.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart b/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart index 3490aee1..1a25acfd 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/utils/app_bloc_observer.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/core/utils/custom_password.dart b/packages/wyatt_authentication_bloc/example/lib/core/utils/custom_password.dart index bdbb3552..d80b6d3e 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/utils/custom_password.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/utils/custom_password.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/main.dart b/packages/wyatt_authentication_bloc/example/lib/main.dart index 0149dcb6..c41af8b6 100644 --- a/packages/wyatt_authentication_bloc/example/lib/main.dart +++ b/packages/wyatt_authentication_bloc/example/lib/main.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart index e82e2b4c..c92aa597 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart @@ -1,16 +1,16 @@ // 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 . @@ -71,4 +71,4 @@ class EditProfileCubit extends FormDataCubitImpl { } emit(state.copyWith(status: FormStatus.submissionSuccess)); } -} \ No newline at end of file +} diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart index 5d7aa1e4..19dfd0b6 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/sign_in_page.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart index 865b6cec..9a8cb6ad 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart index 918f09cd..ff232348 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/sign_up_page.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart index 546ec326..bb3ebceb 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_up/widgets/sign_up_form.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart index 48a39986..a5c8a6b6 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart @@ -1,16 +1,16 @@ // 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 . @@ -30,10 +30,12 @@ class SubPage extends StatelessWidget { title: const Text('Sub'), actions: [ IconButton( - onPressed: () => context.read>().signOut(), + onPressed: () => + context.read>().signOut(), icon: const Icon(Icons.logout_rounded)), IconButton( - onPressed: () => context.read>().refresh(), + onPressed: () => + context.read>().refresh(), icon: const Icon(Icons.refresh)) ], ), diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart index 5080183c..10d5c0cc 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/welcome/welcome_page.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/example/test/widget_test.dart b/packages/wyatt_authentication_bloc/example/test/widget_test.dart index e69de29b..8b137891 100644 --- a/packages/wyatt_authentication_bloc/example/test/widget_test.dart +++ b/packages/wyatt_authentication_bloc/example/test/widget_test.dart @@ -0,0 +1 @@ + diff --git a/packages/wyatt_authentication_bloc/lib/src/core/core.dart b/packages/wyatt_authentication_bloc/lib/src/core/core.dart index 16b0264b..2d4165fc 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/core.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/core.dart @@ -18,4 +18,3 @@ export 'constants/form_field.dart'; export 'constants/form_name.dart'; export 'enums/enums.dart'; export 'exceptions/exceptions.dart'; -export 'utils/utils.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart b/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart index af10ceae..11386588 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/core/enums/enums.dart b/packages/wyatt_authentication_bloc/lib/src/core/enums/enums.dart index 67d107d6..db37d714 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/enums/enums.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/enums/enums.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart index cfcfba68..7d418c1f 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart @@ -20,15 +20,14 @@ part 'exceptions_firebase.dart'; abstract class AuthenticationFailureInterface extends AppException implements Exception { + AuthenticationFailureInterface(this.code, this.msg); + AuthenticationFailureInterface.fromCode(this.code) + : msg = 'An unknown error occurred.'; String code; String msg; @override String get message => msg; - - AuthenticationFailureInterface(this.code, this.msg); - AuthenticationFailureInterface.fromCode(this.code) - : msg = 'An unknown error occurred.'; } /// {@template apply_action_code_failure} diff --git a/packages/wyatt_authentication_bloc/lib/src/core/utils/cryptography.dart b/packages/wyatt_authentication_bloc/lib/src/core/utils/cryptography.dart deleted file mode 100644 index f9a0b247..00000000 --- a/packages/wyatt_authentication_bloc/lib/src/core/utils/cryptography.dart +++ /dev/null @@ -1,39 +0,0 @@ -// 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 . - -import 'dart:convert'; -import 'dart:math'; - -import 'package:crypto/crypto.dart'; - -class Cryptography { - /// Generates a cryptographically secure random nonce, to be included in a - /// credential request. - static String generateNonce([int length = 32]) { - const charset = - '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._'; - final random = Random.secure(); - return List.generate(length, (_) => charset[random.nextInt(charset.length)]) - .join(); - } - - /// Returns the sha256 hash of [input] in hex notation. - static String sha256ofString(String input) { - final bytes = utf8.encode(input); - final digest = sha256.convert(bytes); - return digest.toString(); - } -} diff --git a/packages/wyatt_authentication_bloc/lib/src/core/utils/utils.dart b/packages/wyatt_authentication_bloc/lib/src/core/utils/utils.dart deleted file mode 100644 index 81005a25..00000000 --- a/packages/wyatt_authentication_bloc/lib/src/core/utils/utils.dart +++ /dev/null @@ -1,17 +0,0 @@ -// 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 . - -export 'cryptography.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data.dart b/packages/wyatt_authentication_bloc/lib/src/data/data.dart index 42218c55..35d3fdd1 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart index 57b1191a..13f537bb 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart @@ -20,11 +20,11 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationCacheDataSourceImpl extends AuthenticationCacheDataSource { + AuthenticationCacheDataSourceImpl(); + Account? _account; T? _data; - AuthenticationCacheDataSourceImpl(); - @override Future storeAccount(Account? account) async { _account = account; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index 131e160a..e24fb231 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -20,12 +20,12 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationFirebaseDataSourceImpl extends AuthenticationRemoteDataSource { - final FirebaseAuth _firebaseAuth; - UserCredential? _latestCreds; - AuthenticationFirebaseDataSourceImpl({FirebaseAuth? firebaseAuth}) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance; + final FirebaseAuth _firebaseAuth; + UserCredential? _latestCreds; + Account _mapper(User user) => AccountModel( uid: user.uid, emailVerified: user.emailVerified, diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart index 67ef28cd..e1478f88 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -21,6 +21,11 @@ import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { + AuthenticationMockDataSourceImpl({ + this.idToken = 'fake-id-token', + this.registeredAccounts, + }); + Pair? _connectedMock; Pair? _registeredMock; DateTime _lastSignInTime = DateTime.now(); @@ -30,11 +35,6 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { final List>? registeredAccounts; final String idToken; - AuthenticationMockDataSourceImpl({ - this.idToken = 'fake-id-token', - this.registeredAccounts, - }); - Future _randomDelay() async { await Future.delayed( Duration(milliseconds: Random().nextInt(400) + 200), diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart index d886d329..0077378b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart @@ -72,16 +72,17 @@ class AccountModel extends Account { String? phoneNumber, String? photoURL, String? providerId, - }) => AccountModel( - uid: uid ?? this.uid, - email: email ?? this.email, - creationTime: creationTime ?? this.creationTime, - emailVerified: emailVerified ?? this.emailVerified, - isAnonymous: isAnonymous ?? this.isAnonymous, - isNewUser: isNewUser ?? this.isNewUser, - lastSignInTime: lastSignInTime ?? this.lastSignInTime, - phoneNumber: phoneNumber ?? this.phoneNumber, - photoURL: photoURL ?? this.photoURL, - providerId: providerId ?? this.providerId, - ); + }) => + AccountModel( + uid: uid ?? this.uid, + email: email ?? this.email, + creationTime: creationTime ?? this.creationTime, + emailVerified: emailVerified ?? this.emailVerified, + isAnonymous: isAnonymous ?? this.isAnonymous, + isNewUser: isNewUser ?? this.isNewUser, + lastSignInTime: lastSignInTime ?? this.lastSignInTime, + phoneNumber: phoneNumber ?? this.phoneNumber, + photoURL: photoURL ?? this.photoURL, + providerId: providerId ?? this.providerId, + ); } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/account_wrapper_model.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/account_wrapper_model.dart index e99b774e..4dae7f6b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/models/account_wrapper_model.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/account_wrapper_model.dart @@ -29,8 +29,9 @@ class AccountWrapperModel extends AccountWrapper { AccountWrapperModel copyWith({ Account? account, T? data, - }) => AccountWrapperModel( - account ?? this.account, - data ?? this.data, - ); + }) => + AccountWrapperModel( + account ?? this.account, + data ?? this.data, + ); } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/models.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/models.dart index 09cc76bf..14f991fe 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/models/models.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/models.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart index c0f2c8e1..294e1096 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart @@ -42,19 +42,6 @@ typedef OnAuthChange = FutureOrResult Function( class AuthenticationRepositoryImpl extends AuthenticationRepository { - final AuthenticationCacheDataSource _authenticationLocalDataSource; - final AuthenticationRemoteDataSource _authenticationRemoteDataSource; - - late FormRepository _formRepository; - - final OnSignUpSuccess? _onSignUpSuccess; - - final OnAuthChange? _onAccountChanges; - final StreamController>> _signUpStream = - StreamController(); - - bool _pause = false; // Semaphore - AuthenticationRepositoryImpl({ required AuthenticationCacheDataSource authenticationCacheDataSource, required AuthenticationRemoteDataSource authenticationRemoteDataSource, @@ -107,6 +94,19 @@ class AuthenticationRepositoryImpl ); } + final AuthenticationCacheDataSource _authenticationLocalDataSource; + final AuthenticationRemoteDataSource _authenticationRemoteDataSource; + + late FormRepository _formRepository; + + final OnSignUpSuccess? _onSignUpSuccess; + + final OnAuthChange? _onAccountChanges; + final StreamController>> _signUpStream = + StreamController(); + + bool _pause = false; + @override FormRepository get formRepository => _formRepository; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/repositories.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/repositories.dart index 7858c9e7..d5979688 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/repositories.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/repositories.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/domain.dart b/packages/wyatt_authentication_bloc/lib/src/domain/domain.dart index 7727f7ee..6f4ec438 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/domain.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/domain.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart index 8ecf9215..e9a858fe 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart index d4b2c23b..56f1697b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart @@ -105,8 +105,8 @@ abstract class AuthenticationRepository extends BaseRepository { }); /// {@template reauthenticate} - /// Some security-sensitive actions—such as deleting an account, - /// setting a primary email address, and changing a password—require that + /// Some security-sensitive actions—such as deleting an account, + /// setting a primary email address, and changing a password—require that /// the user has recently signed in. /// /// Throws a ReauthenticateFailureInterface if @@ -129,7 +129,7 @@ abstract class AuthenticationRepository extends BaseRepository { /// Stream of [AccountWrapper] which will emit the current account when /// the authentication state changes. /// - /// Emits [AccountWrapper] with null [Account] if the user is not + /// Emits [AccountWrapper] with null [Account] if the user is not /// authenticated. /// {@endtemplate} Stream>> streamAccount(); diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/repositories.dart b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/repositories.dart index 85f8ae88..8ff4eae1 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/repositories.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/repositories.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart index cf648917..eab1ffbb 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart @@ -26,14 +26,13 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'authentication_state.dart'; class AuthenticationCubit extends Cubit> { - final AuthenticationRepository _authenticationRepository; - AuthenticationCubit({ required AuthenticationRepository authenticationRepository, }) : _authenticationRepository = authenticationRepository, super(const AuthenticationState.unknown()) { _listenForAuthenticationChanges(); } + final AuthenticationRepository _authenticationRepository; void _listenForAuthenticationChanges() { _authenticationRepository.streamAccount().listen((accountFutureResult) { diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart index bfd1e871..a5733bf2 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart @@ -17,13 +17,8 @@ part of 'authentication_cubit.dart'; class AuthenticationState extends Equatable { - final AuthenticationStatus status; - final AccountWrapper? accountWrapper; - - const AuthenticationState._({required this.status, this.accountWrapper}); - - const AuthenticationState.unknown() - : this._(status: AuthenticationStatus.unknown); + const AuthenticationState.unauthenticated() + : this._(status: AuthenticationStatus.unauthenticated); const AuthenticationState.authenticated(AccountWrapper accountWrapper) : this._( @@ -31,8 +26,12 @@ class AuthenticationState extends Equatable { accountWrapper: accountWrapper, ); - const AuthenticationState.unauthenticated() - : this._(status: AuthenticationStatus.unauthenticated); + const AuthenticationState.unknown() + : this._(status: AuthenticationStatus.unknown); + + const AuthenticationState._({required this.status, this.accountWrapper}); + final AuthenticationStatus status; + final AccountWrapper? accountWrapper; @override List get props => [status, accountWrapper]; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart index ea829bb5..132dafd2 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart @@ -24,12 +24,11 @@ import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; part 'email_verification_state.dart'; class EmailVerificationCubit extends Cubit { - final AuthenticationRepository _authenticationRepository; - EmailVerificationCubit({ required AuthenticationRepository authenticationRepository, }) : _authenticationRepository = authenticationRepository, super(const EmailVerificationState()); + final AuthenticationRepository _authenticationRepository; FutureOr sendEmailVerification() async { emit(state.copyWith(status: FormStatus.submissionInProgress)); diff --git a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart index 8b793973..9ecfe309 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart @@ -25,10 +25,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'password_reset_state.dart'; class PasswordResetCubit extends FormDataCubit { - final AuthenticationRepository _authenticationRepository; - FormRepository get _formRepository => - _authenticationRepository.formRepository; - PasswordResetCubit({ required AuthenticationRepository authenticationRepository, }) : _authenticationRepository = authenticationRepository, @@ -38,6 +34,9 @@ class PasswordResetCubit extends FormDataCubit { .accessForm(AuthFormName.passwordResetForm), ), ); + final AuthenticationRepository _authenticationRepository; + FormRepository get _formRepository => + _authenticationRepository.formRepository; @override String get formName => AuthFormName.passwordResetForm; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart index 8a11957d..5c5205dd 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart @@ -17,13 +17,12 @@ part of 'password_reset_cubit.dart'; class PasswordResetState extends FormDataState { - Email get email => form.validatorOf(AuthFormField.email); - const PasswordResetState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + Email get email => form.validatorOf(AuthFormField.email); PasswordResetState copyWith({ WyattForm? form, diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart index 5db99b5f..2ed1a9d4 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart @@ -23,10 +23,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'sign_in_state.dart'; class SignInCubit extends FormDataCubit { - final AuthenticationRepository _authenticationRepository; - FormRepository get _formRepository => - _authenticationRepository.formRepository; - SignInCubit({ required AuthenticationRepository authenticationRepository, }) : _authenticationRepository = authenticationRepository, @@ -36,6 +32,9 @@ class SignInCubit extends FormDataCubit { .accessForm(AuthFormName.signInForm), ), ); + final AuthenticationRepository _authenticationRepository; + FormRepository get _formRepository => + _authenticationRepository.formRepository; @override String get formName => AuthFormName.signInForm; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart index 8c65fe0f..b0279886 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart @@ -17,17 +17,17 @@ part of 'sign_in_cubit.dart'; class SignInState extends FormDataState { - FormInputValidator get email => - form.validatorOf(AuthFormField.email); - FormInputValidator get password => - form.validatorOf(AuthFormField.password); - const SignInState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + FormInputValidator get email => + form.validatorOf(AuthFormField.email); + FormInputValidator get password => + form.validatorOf(AuthFormField.password); + SignInState copyWith({ WyattForm? form, FormStatus? status, diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart index 38e719a1..2d7ed28b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart @@ -25,10 +25,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'sign_up_state.dart'; class SignUpCubit extends FormDataCubit { - final AuthenticationRepository _authenticationRepository; - FormRepository get _formRepository => - _authenticationRepository.formRepository; - SignUpCubit({ required AuthenticationRepository authenticationRepository, }) : _authenticationRepository = authenticationRepository, @@ -38,6 +34,9 @@ class SignUpCubit extends FormDataCubit { .accessForm(AuthFormName.signUpForm), ), ); + final AuthenticationRepository _authenticationRepository; + FormRepository get _formRepository => + _authenticationRepository.formRepository; @override String get formName => AuthFormName.signUpForm; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart index 8203c293..40c870c5 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart @@ -17,16 +17,15 @@ part of 'sign_up_cubit.dart'; class SignUpState extends FormDataState { - FormInputValidator get email => - form.validatorOf(AuthFormField.email); - FormInputValidator get password => - form.validatorOf(AuthFormField.password); - const SignUpState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + FormInputValidator get email => + form.validatorOf(AuthFormField.email); + FormInputValidator get password => + form.validatorOf(AuthFormField.password); SignUpState copyWith({ WyattForm? form, diff --git a/packages/wyatt_authentication_bloc/lib/src/src.dart b/packages/wyatt_authentication_bloc/lib/src/src.dart index e5a07de0..3a660ea4 100644 --- a/packages/wyatt_authentication_bloc/lib/src/src.dart +++ b/packages/wyatt_authentication_bloc/lib/src/src.dart @@ -1,16 +1,16 @@ // 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 . -- 2.47.2 From 94d573a584fe25fa42b47edf440f4f4ce7c98bc2 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 23:14:55 -0500 Subject: [PATCH 045/320] refactor(authentication): update deps and re-export them --- .../lib/wyatt_authentication_bloc.dart | 3 +++ packages/wyatt_authentication_bloc/pubspec.yaml | 14 ++++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart b/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart index e40338b2..a010cfa4 100644 --- a/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart +++ b/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart @@ -17,4 +17,7 @@ /// An authentication library for BLoC. library wyatt_authentication_bloc; +export 'package:firebase_auth/firebase_auth.dart'; +export 'package:google_sign_in/google_sign_in.dart'; + export 'src/src.dart'; diff --git a/packages/wyatt_authentication_bloc/pubspec.yaml b/packages/wyatt_authentication_bloc/pubspec.yaml index 60b9cba1..23471ff1 100644 --- a/packages/wyatt_authentication_bloc/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/pubspec.yaml @@ -10,17 +10,12 @@ environment: flutter: ">=1.17.0" dependencies: - flutter: - sdk: flutter - + flutter: { sdk: flutter } crypto: ^3.0.2 flutter_bloc: ^8.1.1 equatable: ^2.0.5 - firebase_auth: ^4.1.1 - google_sign_in: ^5.3.0 - flutter_facebook_auth: ^4.3.0 - sign_in_with_apple: ^3.3.0 - twitter_login: ^4.2.3 + firebase_auth: ^4.2.0 + google_sign_in: ^5.4.2 rxdart: ^0.27.7 wyatt_form_bloc: @@ -36,8 +31,7 @@ dependencies: version: ^0.0.4 dev_dependencies: - flutter_test: - sdk: flutter + flutter_test: { sdk: flutter } bloc_test: ^9.1.0 mocktail: ^0.3.0 -- 2.47.2 From c7b241de2d5d8a7f925c15bac31b26ffc263ac46 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 23:16:10 -0500 Subject: [PATCH 046/320] feat(authentication): add google sign_in support (closes #59) --- ...hentication_firebase_data_source_impl.dart | 34 ++++++++++++++++++- .../authentication_mock_data_source_impl.dart | 19 +++++++++++ .../authentication_repository_impl.dart | 11 ++++++ .../authentication_remote_data_source.dart | 2 ++ .../authentication_repository.dart | 7 ++++ 5 files changed, 72 insertions(+), 1 deletion(-) diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index e24fb231..78c4bf79 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:firebase_auth/firebase_auth.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; @@ -182,6 +181,39 @@ class AuthenticationFirebaseDataSourceImpl } } + @override + Future signInWithGoogle() async { + try { + // Trigger the authentication flow + final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn(); + + // Obtain the auth details from the request + final GoogleSignInAuthentication? googleAuth = + await googleUser?.authentication; + + // Create a new credential + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth?.accessToken, + idToken: googleAuth?.idToken, + ); + + final userCredential = + await _firebaseAuth.signInWithCredential(credential); + + _latestCreds = userCredential; + final user = userCredential.user; + if (user.isNotNull) { + return _mapper(user!); + } else { + throw Exception(); // Get caught just after. + } + } on FirebaseAuthException catch (e) { + throw SignInWithGoogleFailureFirebase.fromCode(e.code); + } catch (_) { + throw SignInWithGoogleFailureFirebase(); + } + } + @override Future verifyPasswordResetCode({required String code}) async { try { diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart index e1478f88..cec578a5 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -123,6 +123,25 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { return Future.value(mock); } + @override + Future signInWithGoogle() async { + await _randomDelay(); + final creation = DateTime.now(); + final mock = AccountModel( + uid: 'mock-id-google', + emailVerified: true, + isAnonymous: false, + providerId: 'google', + creationTime: creation, + lastSignInTime: creation, + isNewUser: creation == creation, + ); + _streamAccount.add(mock); + _connectedMock = _connectedMock?.copyWith(left: mock); + _lastSignInTime = DateTime.now(); + return Future.value(mock); + } + @override Future signInWithEmailAndPassword({ required String email, diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart index 294e1096..7bbc7954 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart @@ -295,6 +295,17 @@ class AuthenticationRepositoryImpl (error) => error, ); + @override + FutureOrResult signInWithGoogle() => + Result.tryCatchAsync( + () async { + final account = + await _authenticationRemoteDataSource.signInWithGoogle(); + return account; + }, + (error) => error, + ); + @override FutureOrResult verifyPasswordResetCode({required String code}) => Result.tryCatchAsync( diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart index b379de92..8205bd8d 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart @@ -49,6 +49,8 @@ abstract class AuthenticationRemoteDataSource extends BaseRemoteDataSource { Future signInAnonymously(); + Future signInWithGoogle(); + Future updateEmail({required String email}); Future updatePassword({required String password}); diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart index 56f1697b..027c7525 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart @@ -73,6 +73,13 @@ abstract class AuthenticationRepository extends BaseRepository { /// {@endtemplate} FutureOrResult signInAnonymously(); + /// {@template signin_google} + /// Starts the Sign In with Google Flow. + /// + /// Throws a SignInWithGoogleFailureInterface if an exception occurs. + /// {@endtemplate} + FutureOrResult signInWithGoogle(); + /// {@template signin_pwd} /// Signs in with the provided [email] and [password]. /// -- 2.47.2 From 197c5d54e6ce3dcd7d7fa88a8da9dfec21545859 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 12 Dec 2022 23:47:29 -0500 Subject: [PATCH 047/320] feat(authentication): add google sign in parameter in firebase data source constructor --- .../remote/authentication_firebase_data_source_impl.dart | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index 78c4bf79..8a16490c 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -19,10 +19,13 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationFirebaseDataSourceImpl extends AuthenticationRemoteDataSource { - AuthenticationFirebaseDataSourceImpl({FirebaseAuth? firebaseAuth}) - : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance; + AuthenticationFirebaseDataSourceImpl( + {FirebaseAuth? firebaseAuth, GoogleSignIn? googleSignIn,}) + : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance, + _googleSignIn = googleSignIn ?? GoogleSignIn(); final FirebaseAuth _firebaseAuth; + final GoogleSignIn _googleSignIn; UserCredential? _latestCreds; Account _mapper(User user) => AccountModel( @@ -185,7 +188,7 @@ class AuthenticationFirebaseDataSourceImpl Future signInWithGoogle() async { try { // Trigger the authentication flow - final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn(); + final GoogleSignInAccount? googleUser = await _googleSignIn.signIn(); // Obtain the auth details from the request final GoogleSignInAuthentication? googleAuth = -- 2.47.2 From 1a3631f691a593bd7922b91f4a37b0f8608cbe52 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 13 Dec 2022 00:36:20 -0500 Subject: [PATCH 048/320] feat(authentication): add google sign in in signIn cubit --- .../example/.gitignore | 4 +- .../example/.vscode/launch.json | 11 ++- .../example/ios/Podfile.lock | 89 ++++++------------- .../example/ios/Runner/Info.plist | 11 +++ .../example/ios/firebase_app_id_file.json | 6 +- .../example/lib/bootstrap.dart | 44 +++++++++ .../lib/core/dependency_injection/get_it.dart | 48 +++++----- .../example/lib/firebase_options.dart | 65 ++++++++++++++ .../example/lib/main.dart | 1 + .../example/lib/main_firebase.dart | 23 +++++ .../sign_in/widgets/sign_in_form.dart | 18 ++++ .../authentication_mock_data_source_impl.dart | 4 +- .../features/sign_in/cubit/sign_in_cubit.dart | 20 +++++ 13 files changed, 251 insertions(+), 93 deletions(-) create mode 100644 packages/wyatt_authentication_bloc/example/lib/firebase_options.dart create mode 100644 packages/wyatt_authentication_bloc/example/lib/main_firebase.dart diff --git a/packages/wyatt_authentication_bloc/example/.gitignore b/packages/wyatt_authentication_bloc/example/.gitignore index f0edd542..891ead31 100644 --- a/packages/wyatt_authentication_bloc/example/.gitignore +++ b/packages/wyatt_authentication_bloc/example/.gitignore @@ -44,6 +44,4 @@ app.*.map.json # Android Studio will place build artifacts here /android/app/debug /android/app/profile -/android/app/release - -firebase_options.dart \ No newline at end of file +/android/app/release \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/example/.vscode/launch.json b/packages/wyatt_authentication_bloc/example/.vscode/launch.json index 61fa495d..11233cfe 100644 --- a/packages/wyatt_authentication_bloc/example/.vscode/launch.json +++ b/packages/wyatt_authentication_bloc/example/.vscode/launch.json @@ -4,7 +4,7 @@ * ----- * File: launch.json * Created Date: 19/08/2022 15:12:25 - * Last Modified: 19/08/2022 15:22:02 + * Last Modified: Tue Dec 13 2022 * ----- * Copyright (c) 2022 */ @@ -15,11 +15,18 @@ "version": "0.2.0", "configurations": [ { - "name": "example_router", + "name": "Mock", "request": "launch", "type": "dart", "program": "lib/main.dart", "flutterMode": "debug" + }, + { + "name": "Firebase", + "request": "launch", + "type": "dart", + "program": "lib/main_firebase.dart", + "flutterMode": "debug" } ] } \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/example/ios/Podfile.lock b/packages/wyatt_authentication_bloc/example/ios/Podfile.lock index 1a4d1789..bc6894a5 100644 --- a/packages/wyatt_authentication_bloc/example/ios/Podfile.lock +++ b/packages/wyatt_authentication_bloc/example/ios/Podfile.lock @@ -5,41 +5,30 @@ PODS: - AppAuth/Core (1.6.0) - AppAuth/ExternalUserAgent (1.6.0): - AppAuth/Core - - FBAEMKit (14.1.0): - - FBSDKCoreKit_Basics (= 14.1.0) - - FBSDKCoreKit (14.1.0): - - FBAEMKit (= 14.1.0) - - FBSDKCoreKit_Basics (= 14.1.0) - - FBSDKCoreKit_Basics (14.1.0) - - FBSDKLoginKit (14.1.0): - - FBSDKCoreKit (= 14.1.0) - - Firebase/Auth (10.0.0): + - Firebase/Auth (10.3.0): - Firebase/CoreOnly - - FirebaseAuth (~> 10.0.0) - - Firebase/CoreOnly (10.0.0): - - FirebaseCore (= 10.0.0) - - firebase_auth (4.1.1): - - Firebase/Auth (= 10.0.0) + - FirebaseAuth (~> 10.3.0) + - Firebase/CoreOnly (10.3.0): + - FirebaseCore (= 10.3.0) + - firebase_auth (4.2.0): + - Firebase/Auth (= 10.3.0) - firebase_core - Flutter - - firebase_core (2.1.1): - - Firebase/CoreOnly (= 10.0.0) + - firebase_core (2.4.0): + - Firebase/CoreOnly (= 10.3.0) - Flutter - - FirebaseAuth (10.0.0): + - FirebaseAuth (10.3.0): - FirebaseCore (~> 10.0) - GoogleUtilities/AppDelegateSwizzler (~> 7.8) - GoogleUtilities/Environment (~> 7.8) - - GTMSessionFetcher/Core (~> 2.1) - - FirebaseCore (10.0.0): + - GTMSessionFetcher/Core (< 4.0, >= 2.1) + - FirebaseCore (10.3.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Logger (~> 7.8) - - FirebaseCoreInternal (10.1.0): + - FirebaseCoreInternal (10.3.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - Flutter (1.0.0) - - flutter_facebook_auth (4.4.1): - - FBSDKLoginKit (= 14.1.0) - - Flutter - google_sign_in_ios (0.0.1): - Flutter - GoogleSignIn (~> 6.2) @@ -47,47 +36,36 @@ PODS: - AppAuth (~> 1.5) - GTMAppAuth (~> 1.3) - GTMSessionFetcher/Core (< 3.0, >= 1.1) - - GoogleUtilities/AppDelegateSwizzler (7.8.0): + - GoogleUtilities/AppDelegateSwizzler (7.10.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.8.0): + - GoogleUtilities/Environment (7.10.0): - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.8.0): + - GoogleUtilities/Logger (7.10.0): - GoogleUtilities/Environment - - GoogleUtilities/Network (7.8.0): + - GoogleUtilities/Network (7.10.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.8.0)" - - GoogleUtilities/Reachability (7.8.0): + - "GoogleUtilities/NSData+zlib (7.10.0)" + - GoogleUtilities/Reachability (7.10.0): - GoogleUtilities/Logger - GTMAppAuth (1.3.1): - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 3.0, >= 1.5) - - GTMSessionFetcher/Core (2.1.0) + - GTMSessionFetcher/Core (2.3.0) - PromisesObjC (2.1.1) - - sign_in_with_apple (0.0.1): - - Flutter - - twitter_login (0.0.1): - - Flutter DEPENDENCIES: - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - Flutter (from `Flutter`) - - flutter_facebook_auth (from `.symlinks/plugins/flutter_facebook_auth/ios`) - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`) - - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`) - - twitter_login (from `.symlinks/plugins/twitter_login/ios`) SPEC REPOS: trunk: - AppAuth - - FBAEMKit - - FBSDKCoreKit - - FBSDKCoreKit_Basics - - FBSDKLoginKit - Firebase - FirebaseAuth - FirebaseCore @@ -105,37 +83,24 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/firebase_core/ios" Flutter: :path: Flutter - flutter_facebook_auth: - :path: ".symlinks/plugins/flutter_facebook_auth/ios" google_sign_in_ios: :path: ".symlinks/plugins/google_sign_in_ios/ios" - sign_in_with_apple: - :path: ".symlinks/plugins/sign_in_with_apple/ios" - twitter_login: - :path: ".symlinks/plugins/twitter_login/ios" SPEC CHECKSUMS: AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add - FBAEMKit: a899515e45476027f73aef377b5cffadcd56ca3a - FBSDKCoreKit: 24f8bc8d3b5b2a8c5c656a1329492a12e8efa792 - FBSDKCoreKit_Basics: 6e578c9bdc7aa1365dbbbde633c9ebb536bcaa98 - FBSDKLoginKit: 787de205d524c3a4b17d527916f1d066e4361660 - Firebase: 1b810f3d0c0532e27a48f1961f8c0400a668a2cf - firebase_auth: dd33e93fce72a1c72040f7380dacf06e89db5705 - firebase_core: 5c0bb0ca7d0e70480a68a6e9ad9bf55d1edd5305 - FirebaseAuth: 493382cf533cc45e2862b00e9aa4cfe4c98daf71 - FirebaseCore: 97f48a3a567a72b8d4daa0f03c3aadb78df4e995 - FirebaseCoreInternal: 96d75228e10fd369564da51bd898414eb0f54df5 + Firebase: f92fc551ead69c94168d36c2b26188263860acd9 + firebase_auth: 579a0dc15451491cc83fccaa5102296635f24938 + firebase_core: 6f2f753e316765799d88568232ed59e300ff53db + FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6 + FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a + FirebaseCoreInternal: 29b76f784d607df8b2a1259d73c3f04f1210137b Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - flutter_facebook_auth: 361ac7a57263ebf327f26089507ead0d66558ee8 google_sign_in_ios: 4f85eb9f937450765c8573bb85fd8cd6a5af675c GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a - GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7 + GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95 GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd - GTMSessionFetcher: ffbb25ec00ebcb5201adab0a56d808f6f1902d9f + GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2 PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb - sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440 - twitter_login: 2794db69b7640681171b17b3c2c84ad9dfb4a57f PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 diff --git a/packages/wyatt_authentication_bloc/example/ios/Runner/Info.plist b/packages/wyatt_authentication_bloc/example/ios/Runner/Info.plist index e2987027..e8c1f83a 100644 --- a/packages/wyatt_authentication_bloc/example/ios/Runner/Info.plist +++ b/packages/wyatt_authentication_bloc/example/ios/Runner/Info.plist @@ -28,6 +28,17 @@ LaunchScreen UIMainStoryboardFile Main + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.405351917235-2jv4ff02kovoim58f8d6d0rsa14apgkj + + + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/packages/wyatt_authentication_bloc/example/ios/firebase_app_id_file.json b/packages/wyatt_authentication_bloc/example/ios/firebase_app_id_file.json index 17445d1d..2a145385 100644 --- a/packages/wyatt_authentication_bloc/example/ios/firebase_app_id_file.json +++ b/packages/wyatt_authentication_bloc/example/ios/firebase_app_id_file.json @@ -1,7 +1,7 @@ { "file_generated_by": "FlutterFire CLI", "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", - "GOOGLE_APP_ID": "1:136771801992:ios:bcdca68d2b7d227097203d", - "FIREBASE_PROJECT_ID": "tchat-beta", - "GCM_SENDER_ID": "136771801992" + "GOOGLE_APP_ID": "1:405351917235:ios:869f0ad8ace08db899f2c6", + "FIREBASE_PROJECT_ID": "meerabel-dev", + "GCM_SENDER_ID": "405351917235" } \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart index 0b4e74c6..0f64001a 100644 --- a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart +++ b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart @@ -18,9 +18,47 @@ import 'dart:async'; import 'package:example_router/core/dependency_injection/get_it.dart'; import 'package:example_router/core/utils/app_bloc_observer.dart'; +import 'package:example_router/firebase_options.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +class MockSettings { + static MockSettings? _instance; + + /// Data source mode + late bool enable = false; + + MockSettings._(this.enable); + + factory MockSettings.enable() { + _instance ??= MockSettings._(true); + if (_instance!.enable != true) { + throw Exception('Mock already initialized in: ${_instance!.enable}'); + } + return _instance!; + } + + factory MockSettings.disable() { + _instance ??= MockSettings._(false); + if (_instance!.enable != false) { + throw Exception('Mock already initialized in: ${_instance!.enable}'); + } + return _instance!; + } + + static bool isEnable() { + if (_instance == null) { + throw Exception('MockSettings not initialized!'); + } + return _instance!.enable == true; + } + + static bool isDisable() { + return !isEnable(); + } +} + Future bootstrap(FutureOr Function() builder) async { await runZonedGuarded( () async { @@ -30,6 +68,12 @@ Future bootstrap(FutureOr Function() builder) async { FlutterError.onError = (details) { debugPrint(details.toString()); }; + + if (MockSettings.isDisable()) { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + } await GetItInitializer.init(); runApp(await builder()); diff --git a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart index a665ccb7..29cd0a73 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart @@ -14,6 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:example_router/bootstrap.dart'; +import 'package:example_router/firebase_options.dart'; import 'package:get_it/get_it.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; @@ -24,28 +26,32 @@ abstract class GetItInitializer { static Future init() async { getIt ..registerLazySingleton( - () => AuthenticationMockDataSourceImpl(registeredAccounts: [ - Pair( - AccountModel( - uid: '1', - emailVerified: true, - isAnonymous: false, - providerId: 'wyatt', - email: 'toto@test.fr', + MockSettings.isEnable() + ? () => AuthenticationMockDataSourceImpl(registeredAccounts: [ + Pair( + AccountModel( + uid: '1', + emailVerified: true, + isAnonymous: false, + providerId: 'wyatt', + email: 'toto@test.fr', + ), + 'toto1234', + ), + Pair( + AccountModel( + uid: '2', + emailVerified: false, + isAnonymous: false, + providerId: 'wyatt', + email: 'tata@test.fr', + ), + 'tata1234', + ), + ]) + : () => AuthenticationFirebaseDataSourceImpl( + googleSignIn: GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId) ), - 'toto1234', - ), - Pair( - AccountModel( - uid: '2', - emailVerified: false, - isAnonymous: false, - providerId: 'wyatt', - email: 'tata@test.fr', - ), - 'tata1234', - ), - ]), ) ..registerLazySingleton>( () => AuthenticationCacheDataSourceImpl(), diff --git a/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart b/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart new file mode 100644 index 00000000..95cbbdfb --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart @@ -0,0 +1,65 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for web - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for android - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDDmtf0KN7Xw12_pqUsxoBfAxMuvCMmMmk', + appId: '1:405351917235:ios:869f0ad8ace08db899f2c6', + messagingSenderId: '405351917235', + projectId: 'meerabel-dev', + storageBucket: 'meerabel-dev.appspot.com', + androidClientId: '405351917235-4g1dh3475tq6t1sa2qoh7ol60nf4ta05.apps.googleusercontent.com', + iosClientId: '405351917235-2jv4ff02kovoim58f8d6d0rsa14apgkj.apps.googleusercontent.com', + iosBundleId: 'com.example.exampleRouter', + ); +} diff --git a/packages/wyatt_authentication_bloc/example/lib/main.dart b/packages/wyatt_authentication_bloc/example/lib/main.dart index c41af8b6..ddc4cb52 100644 --- a/packages/wyatt_authentication_bloc/example/lib/main.dart +++ b/packages/wyatt_authentication_bloc/example/lib/main.dart @@ -18,5 +18,6 @@ import 'package:example_router/bootstrap.dart'; import 'package:example_router/presentation/features/app/app.dart'; void main() { + MockSettings.enable(); bootstrap(App.new); } diff --git a/packages/wyatt_authentication_bloc/example/lib/main_firebase.dart b/packages/wyatt_authentication_bloc/example/lib/main_firebase.dart new file mode 100644 index 00000000..d53f0050 --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/main_firebase.dart @@ -0,0 +1,23 @@ +// 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 . + +import 'package:example_router/bootstrap.dart'; +import 'package:example_router/presentation/features/app/app.dart'; + +void main() { + MockSettings.disable(); + bootstrap(App.new); +} diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart index 9a8cb6ad..f0e1dfa9 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sign_in/widgets/sign_in_form.dart @@ -94,6 +94,22 @@ class _SignInAnonymouslyButton extends StatelessWidget { } } +class _SignInWithGoogleButton extends StatelessWidget { + @override + Widget build(BuildContext context) { + return SubmitBuilder>( + builder: ((context, cubit, status) { + return status.isSubmissionInProgress + ? const CircularProgressIndicator() + : ElevatedButton( + onPressed: () => cubit.signInWithGoogle(), + child: const Text('Sign in Google'), + ); + }), + ); + } +} + class SignInForm extends StatelessWidget { const SignInForm({Key? key}) : super(key: key); @@ -116,6 +132,8 @@ class SignInForm extends StatelessWidget { _SignInButton(), const SizedBox(height: 16), _SignInAnonymouslyButton(), + const SizedBox(height: 16), + _SignInWithGoogleButton(), ], ), ), diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart index cec578a5..4d4fed65 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -112,7 +112,7 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { uid: 'mock-id-anom', emailVerified: false, isAnonymous: true, - providerId: 'wyatt', + providerId: 'wyatt-studio.fr', creationTime: creation, lastSignInTime: creation, isNewUser: creation == creation, @@ -131,7 +131,7 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { uid: 'mock-id-google', emailVerified: true, isAnonymous: false, - providerId: 'google', + providerId: 'google.com', creationTime: creation, lastSignInTime: creation, isNewUser: creation == creation, diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart index 2ed1a9d4..91262ce3 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart @@ -205,4 +205,24 @@ class SignInCubit extends FormDataCubit { ), ); } + + FutureOr signInWithGoogle() async { + if (state.status.isSubmissionInProgress) { + return; + } + // TODO(wyatt): maybe emit new state (to not carry an old errorMessage) + emit(state.copyWith(status: FormStatus.submissionInProgress)); + + final uid = await _authenticationRepository.signInWithGoogle(); + + emit( + uid.fold( + (value) => state.copyWith(status: FormStatus.submissionSuccess), + (error) => state.copyWith( + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ), + ); + } } -- 2.47.2 From 17ff0f8ba18a3c8c309ac3051b47892c0879c418 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Tue, 13 Dec 2022 13:52:49 -0500 Subject: [PATCH 049/320] clean(packages): apply dart fix (close #106) --- .../remote/album_api_data_source_impl.dart | 3 +- .../remote/photo_api_data_source_impl.dart | 3 +- .../repositories/photo_repository_impl.dart | 6 +- .../photos/add_photo_to_favorites.dart | 2 +- .../check_if_photo_is_in_favorites.dart | 2 +- .../usecases/photos/display_favorites.dart | 2 +- .../domain/usecases/photos/display_photo.dart | 2 +- .../domain/usecases/photos/open_album.dart | 2 +- .../photos/params/query_parameters.dart | 4 +- .../photos/remove_photo_from_favorites.dart | 2 +- .../usecases/photos/retrieve_all_albums.dart | 2 +- .../albums/blocs/album/album_bloc.dart | 2 +- .../photo_details/photo_details_state.dart | 6 +- .../favorite_checker_cubit.dart | 2 +- .../favorite_checker_state.dart | 6 +- .../photos/blocs/photo/photo_bloc.dart | 2 +- .../photos/blocs/photo/photo_event.dart | 2 +- .../lib/src/core/exceptions/exceptions.dart | 2 +- .../lib/src/core/exceptions/exceptions.dart | 8 +-- ...authentication_cache_data_source_impl.dart | 4 +- ...hentication_firebase_data_source_impl.dart | 4 +- .../authentication_mock_data_source_impl.dart | 10 +-- .../authentication_repository_impl.dart | 26 +++---- .../cubit/authentication_cubit.dart | 2 +- .../cubit/authentication_state.dart | 4 +- .../cubit/email_verification_cubit.dart | 2 +- .../cubit/password_reset_cubit.dart | 6 +- .../cubit/password_reset_state.dart | 2 +- .../features/sign_in/cubit/sign_in_cubit.dart | 6 +- .../features/sign_in/cubit/sign_in_state.dart | 8 +-- .../features/sign_up/cubit/sign_up_cubit.dart | 6 +- .../features/sign_up/cubit/sign_up_state.dart | 8 +-- .../crud_in_memory_data_source_impl.dart | 6 +- .../crud_firestore_data_source_impl.dart | 8 +-- .../repositories/crud_repository_impl.dart | 2 +- .../lib/src/domain/entities/query.dart | 10 +-- .../lib/src/domain/usecases/delete.dart | 2 +- .../lib/src/domain/usecases/delete_all.dart | 2 +- .../lib/src/domain/usecases/get.dart | 2 +- .../lib/src/domain/usecases/get_all.dart | 2 +- .../lib/src/domain/usecases/query.dart | 2 +- .../lib/src/domain/usecases/update.dart | 2 +- .../lib/src/domain/usecases/update_all.dart | 2 +- .../src/features/crud/cubit/crud_cubit.dart | 4 +- .../src/features/crud/cubit/crud_state.dart | 6 +- .../lib/src/data/form/wyatt_form_impl.dart | 18 ++--- .../features/form_data/form_data_state.dart | 12 ++-- .../form_data_impl/form_data_cubit_impl.dart | 4 +- .../example/http_client_example.dart | 4 +- .../example/http_client_fastapi_example.dart | 70 +++++-------------- .../lib/src/middleware_client.dart | 8 +-- .../middlewares/basic_auth_middleware.dart | 6 +- .../middlewares/digest_auth_middleware.dart | 12 ++-- .../refresh_token_auth_middleware.dart | 22 +++--- .../middlewares/unsafe_auth_middleware.dart | 10 +-- .../middlewares/uri_prefix_middleware.dart | 4 +- .../lib/src/models/middleware_context.dart | 8 +-- .../lib/src/models/middleware_request.dart | 21 +++--- .../lib/src/models/middleware_response.dart | 4 +- .../lib/src/models/unfreezed_request.dart | 18 ++--- .../wyatt_http_client/lib/src/pipeline.dart | 6 +- .../lib/src/utils/convert.dart | 2 +- .../lib/src/utils/crypto.dart | 4 +- .../lib/src/utils/delay.dart | 6 +- .../lib/src/utils/digest_auth.dart | 20 +++--- .../lib/src/utils/http_status.dart | 24 ++----- .../wyatt_type_utils/example/lib/error.dart | 2 +- .../lib/src/either/either_base.dart | 2 +- .../lib/src/either/option.dart | 2 +- .../lib/src/either/result.dart | 4 +- .../wyatt_type_utils/lib/src/pair/pair.dart | 4 +- .../presentation/layouts/app_bar_layout.dart | 4 +- .../layouts/bottom_navigation_bar_layout.dart | 4 +- .../presentation/layouts/frame_layout.dart | 6 +- 74 files changed, 222 insertions(+), 287 deletions(-) diff --git a/packages/wyatt_architecture/example/lib/data/data_sources/remote/album_api_data_source_impl.dart b/packages/wyatt_architecture/example/lib/data/data_sources/remote/album_api_data_source_impl.dart index 435ee052..3c4cdcdf 100644 --- a/packages/wyatt_architecture/example/lib/data/data_sources/remote/album_api_data_source_impl.dart +++ b/packages/wyatt_architecture/example/lib/data/data_sources/remote/album_api_data_source_impl.dart @@ -24,9 +24,8 @@ import 'package:wyatt_http_client/wyatt_http_client.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AlbumApiDataSourceImpl extends AlbumRemoteDataSource { - final MiddlewareClient _client; - AlbumApiDataSourceImpl(this._client); + final MiddlewareClient _client; @override Future getAlbum(int id) async { diff --git a/packages/wyatt_architecture/example/lib/data/data_sources/remote/photo_api_data_source_impl.dart b/packages/wyatt_architecture/example/lib/data/data_sources/remote/photo_api_data_source_impl.dart index 425ab652..3f559fe8 100644 --- a/packages/wyatt_architecture/example/lib/data/data_sources/remote/photo_api_data_source_impl.dart +++ b/packages/wyatt_architecture/example/lib/data/data_sources/remote/photo_api_data_source_impl.dart @@ -24,9 +24,8 @@ import 'package:wyatt_http_client/wyatt_http_client.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class PhotoApiDataSourceImpl extends PhotoRemoteDataSource { - final MiddlewareClient _client; - PhotoApiDataSourceImpl(this._client); + final MiddlewareClient _client; @override Future getPhoto(int id) async { diff --git a/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart b/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart index 7cec10fa..d30d74ba 100644 --- a/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart +++ b/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart @@ -24,15 +24,15 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class PhotoRepositoryImpl extends PhotoRepository { - final PhotoRemoteDataSource _photoRemoteDataSource; - final AlbumRemoteDataSource _albumRemoteDataSource; - final FavoriteLocalDataSource _favoriteLocalDataSource; PhotoRepositoryImpl( this._photoRemoteDataSource, this._albumRemoteDataSource, this._favoriteLocalDataSource, ); + final PhotoRemoteDataSource _photoRemoteDataSource; + final AlbumRemoteDataSource _albumRemoteDataSource; + final FavoriteLocalDataSource _favoriteLocalDataSource; @override FutureOrResult addPhotoToFavorites(Photo photo) => Result.tryCatchAsync( diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart index da2bbf17..f84969a3 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart @@ -21,9 +21,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class AddPhotoToFavorites extends AsyncUseCase> { - final PhotoRepository _photoRepository; AddPhotoToFavorites(this._photoRepository); + final PhotoRepository _photoRepository; @override FutureOrResult> execute(Photo? params) async { diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart index 9417f9fd..d208f554 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart @@ -20,9 +20,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class CheckIfPhotoIsInFavorites extends AsyncUseCase { - final PhotoRepository _photoRepository; CheckIfPhotoIsInFavorites(this._photoRepository); + final PhotoRepository _photoRepository; @override FutureOrResult execute(int? params) async => diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart index f8c387cb..4d7bb3d9 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart @@ -19,9 +19,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class DisplayFavorites extends AsyncUseCase> { - final PhotoRepository _photoRepository; DisplayFavorites(this._photoRepository); + final PhotoRepository _photoRepository; @override FutureOrResult> execute(void params) { diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart index 6a9e84eb..82b3ecce 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart @@ -21,9 +21,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class DisplayPhoto extends AsyncUseCase { - final PhotoRepository _photoRepository; DisplayPhoto(this._photoRepository); + final PhotoRepository _photoRepository; @override FutureOrResult execute(int? params) { diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart index beab95f8..ca59d1b5 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart @@ -22,9 +22,9 @@ import 'package:architecture_example/domain/usecases/photos/params/query_paramet import 'package:wyatt_architecture/wyatt_architecture.dart'; class OpenAlbum extends AsyncUseCase> { - final PhotoRepository _photoRepository; OpenAlbum(this._photoRepository); + final PhotoRepository _photoRepository; @override FutureOrResult> execute(QueryParameters? params) { diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart index e6fb7f30..525dd438 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart @@ -15,9 +15,9 @@ // along with this program. If not, see . class QueryParameters { + + QueryParameters(this.start, this.limit, {this.albumId = -1}); final int albumId; final int? start; final int? limit; - - QueryParameters(this.start, this.limit, {this.albumId = -1}); } diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart index d2e5bbb1..9e361137 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart @@ -21,9 +21,9 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class RemovePhotoFromFavorites extends AsyncUseCase> { - final PhotoRepository _photoRepository; RemovePhotoFromFavorites(this._photoRepository); + final PhotoRepository _photoRepository; @override FutureOrResult> execute(int? params) async { diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart index 548cdd53..286de15b 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart @@ -22,9 +22,9 @@ import 'package:architecture_example/domain/usecases/photos/params/query_paramet import 'package:wyatt_architecture/wyatt_architecture.dart'; class RetrieveAllAlbums extends AsyncUseCase> { - final PhotoRepository _photoRepository; RetrieveAllAlbums(this._photoRepository); + final PhotoRepository _photoRepository; @override FutureOrResult> execute(QueryParameters? params) { diff --git a/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart b/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart index 9cb62860..ae79c30d 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart @@ -33,7 +33,6 @@ EventTransformer throttleDroppable(Duration duration) => (events, mapper) => droppable().call(events.throttle(duration), mapper); class AlbumBloc extends Bloc { - final RetrieveAllAlbums _retrieveAllAlbums; AlbumBloc(this._retrieveAllAlbums) : super(const AlbumState()) { on( @@ -41,6 +40,7 @@ class AlbumBloc extends Bloc { transformer: throttleDroppable(throttleDuration), ); } + final RetrieveAllAlbums _retrieveAllAlbums; Future _onAlbumFetched( AlbumFetched event, diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart b/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart index 251c54d4..c8da9232 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart @@ -26,19 +26,19 @@ abstract class PhotoDetailsState extends Equatable { class PhotoDetailsInitial extends PhotoDetailsState {} class PhotoDetailsSuccess extends PhotoDetailsState { - final Photo photo; - final bool isFavorite; const PhotoDetailsSuccess(this.photo, {required this.isFavorite}); + final Photo photo; + final bool isFavorite; @override List get props => [photo, isFavorite]; } class PhotoDetailsFailure extends PhotoDetailsState { - final String error; const PhotoDetailsFailure(this.error); + final String error; @override List get props => [error]; diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart index 75b34d4a..1a15f123 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart @@ -23,10 +23,10 @@ import 'package:flutter_bloc/flutter_bloc.dart'; part 'favorite_checker_state.dart'; class FavoriteCheckerCubit extends Cubit { - final CheckIfPhotoIsInFavorites _checkIfPhotoIsInFavorites; FavoriteCheckerCubit(this._checkIfPhotoIsInFavorites) : super(FavoriteCheckerInitial()); + final CheckIfPhotoIsInFavorites _checkIfPhotoIsInFavorites; FutureOr checkIfPhotoIsInFavorites(int photoId) async { final response = await _checkIfPhotoIsInFavorites.call(photoId); diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart index 30f545c6..ca762080 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart @@ -10,19 +10,19 @@ abstract class FavoriteCheckerState extends Equatable { class FavoriteCheckerInitial extends FavoriteCheckerState {} class FavoriteCheckerSuccess extends FavoriteCheckerState { - final int photoId; - final bool isFavorite; const FavoriteCheckerSuccess(this.photoId, {required this.isFavorite}); + final int photoId; + final bool isFavorite; @override List get props => [photoId, isFavorite]; } class FavoriteCheckerFailure extends FavoriteCheckerState { - final String error; const FavoriteCheckerFailure(this.error); + final String error; @override List get props => [error]; diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart index 9c76b8d8..c82c84c5 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart @@ -33,7 +33,6 @@ EventTransformer throttleDroppable(Duration duration) => (events, mapper) => droppable().call(events.throttle(duration), mapper); class PhotoBloc extends Bloc { - final OpenAlbum _openAlbum; PhotoBloc(this._openAlbum) : super(const PhotoState()) { on( @@ -41,6 +40,7 @@ class PhotoBloc extends Bloc { transformer: throttleDroppable(throttleDuration), ); } + final OpenAlbum _openAlbum; Future _onPhotoFetched( PhotoFetched event, diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart index ea167d0d..c9a6bfab 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart @@ -24,7 +24,7 @@ abstract class PhotoEvent extends Equatable { } class PhotoFetched extends PhotoEvent { - final int albumId; const PhotoFetched(this.albumId); + final int albumId; } diff --git a/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart index 96a3bf8c..5f568cd5 100644 --- a/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart @@ -17,9 +17,9 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; abstract class AppException implements Exception { - final String? message; AppException([this.message]); + final String? message; @override String toString() { diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart index cfcfba68..ba71af54 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart @@ -20,15 +20,15 @@ part 'exceptions_firebase.dart'; abstract class AuthenticationFailureInterface extends AppException implements Exception { + + AuthenticationFailureInterface(this.code, this.msg); + AuthenticationFailureInterface.fromCode(this.code) + : msg = 'An unknown error occurred.'; String code; String msg; @override String get message => msg; - - AuthenticationFailureInterface(this.code, this.msg); - AuthenticationFailureInterface.fromCode(this.code) - : msg = 'An unknown error occurred.'; } /// {@template apply_action_code_failure} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart index 57b1191a..b224575a 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart @@ -20,10 +20,10 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationCacheDataSourceImpl extends AuthenticationCacheDataSource { - Account? _account; - T? _data; AuthenticationCacheDataSourceImpl(); + Account? _account; + T? _data; @override Future storeAccount(Account? account) async { diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index 131e160a..0118776b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -20,11 +20,11 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationFirebaseDataSourceImpl extends AuthenticationRemoteDataSource { - final FirebaseAuth _firebaseAuth; - UserCredential? _latestCreds; AuthenticationFirebaseDataSourceImpl({FirebaseAuth? firebaseAuth}) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance; + final FirebaseAuth _firebaseAuth; + UserCredential? _latestCreds; Account _mapper(User user) => AccountModel( uid: user.uid, diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart index 67ef28cd..a73b1913 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -21,6 +21,11 @@ import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { + + AuthenticationMockDataSourceImpl({ + this.idToken = 'fake-id-token', + this.registeredAccounts, + }); Pair? _connectedMock; Pair? _registeredMock; DateTime _lastSignInTime = DateTime.now(); @@ -30,11 +35,6 @@ class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { final List>? registeredAccounts; final String idToken; - AuthenticationMockDataSourceImpl({ - this.idToken = 'fake-id-token', - this.registeredAccounts, - }); - Future _randomDelay() async { await Future.delayed( Duration(milliseconds: Random().nextInt(400) + 200), diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart index c0f2c8e1..425d16a1 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart @@ -41,19 +41,7 @@ typedef OnAuthChange = FutureOrResult Function( ); class AuthenticationRepositoryImpl - extends AuthenticationRepository { - final AuthenticationCacheDataSource _authenticationLocalDataSource; - final AuthenticationRemoteDataSource _authenticationRemoteDataSource; - - late FormRepository _formRepository; - - final OnSignUpSuccess? _onSignUpSuccess; - - final OnAuthChange? _onAccountChanges; - final StreamController>> _signUpStream = - StreamController(); - - bool _pause = false; // Semaphore + extends AuthenticationRepository { // Semaphore AuthenticationRepositoryImpl({ required AuthenticationCacheDataSource authenticationCacheDataSource, @@ -106,6 +94,18 @@ class AuthenticationRepositoryImpl ), ); } + final AuthenticationCacheDataSource _authenticationLocalDataSource; + final AuthenticationRemoteDataSource _authenticationRemoteDataSource; + + late FormRepository _formRepository; + + final OnSignUpSuccess? _onSignUpSuccess; + + final OnAuthChange? _onAccountChanges; + final StreamController>> _signUpStream = + StreamController(); + + bool _pause = false; @override FormRepository get formRepository => _formRepository; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart index cf648917..5db96018 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart @@ -26,7 +26,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'authentication_state.dart'; class AuthenticationCubit extends Cubit> { - final AuthenticationRepository _authenticationRepository; AuthenticationCubit({ required AuthenticationRepository authenticationRepository, @@ -34,6 +33,7 @@ class AuthenticationCubit extends Cubit> { super(const AuthenticationState.unknown()) { _listenForAuthenticationChanges(); } + final AuthenticationRepository _authenticationRepository; void _listenForAuthenticationChanges() { _authenticationRepository.streamAccount().listen((accountFutureResult) { diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart index bfd1e871..9529ef2d 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart @@ -17,8 +17,6 @@ part of 'authentication_cubit.dart'; class AuthenticationState extends Equatable { - final AuthenticationStatus status; - final AccountWrapper? accountWrapper; const AuthenticationState._({required this.status, this.accountWrapper}); @@ -33,6 +31,8 @@ class AuthenticationState extends Equatable { const AuthenticationState.unauthenticated() : this._(status: AuthenticationStatus.unauthenticated); + final AuthenticationStatus status; + final AccountWrapper? accountWrapper; @override List get props => [status, accountWrapper]; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart index ea829bb5..02c1f100 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart @@ -24,12 +24,12 @@ import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; part 'email_verification_state.dart'; class EmailVerificationCubit extends Cubit { - final AuthenticationRepository _authenticationRepository; EmailVerificationCubit({ required AuthenticationRepository authenticationRepository, }) : _authenticationRepository = authenticationRepository, super(const EmailVerificationState()); + final AuthenticationRepository _authenticationRepository; FutureOr sendEmailVerification() async { emit(state.copyWith(status: FormStatus.submissionInProgress)); diff --git a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart index 8b793973..63a7b6a3 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart @@ -25,9 +25,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'password_reset_state.dart'; class PasswordResetCubit extends FormDataCubit { - final AuthenticationRepository _authenticationRepository; - FormRepository get _formRepository => - _authenticationRepository.formRepository; PasswordResetCubit({ required AuthenticationRepository authenticationRepository, @@ -38,6 +35,9 @@ class PasswordResetCubit extends FormDataCubit { .accessForm(AuthFormName.passwordResetForm), ), ); + final AuthenticationRepository _authenticationRepository; + FormRepository get _formRepository => + _authenticationRepository.formRepository; @override String get formName => AuthFormName.passwordResetForm; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart index 8a11957d..bc94c01d 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart @@ -17,13 +17,13 @@ part of 'password_reset_cubit.dart'; class PasswordResetState extends FormDataState { - Email get email => form.validatorOf(AuthFormField.email); const PasswordResetState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + Email get email => form.validatorOf(AuthFormField.email); PasswordResetState copyWith({ WyattForm? form, diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart index 5db99b5f..9343fa91 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart @@ -23,9 +23,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'sign_in_state.dart'; class SignInCubit extends FormDataCubit { - final AuthenticationRepository _authenticationRepository; - FormRepository get _formRepository => - _authenticationRepository.formRepository; SignInCubit({ required AuthenticationRepository authenticationRepository, @@ -36,6 +33,9 @@ class SignInCubit extends FormDataCubit { .accessForm(AuthFormName.signInForm), ), ); + final AuthenticationRepository _authenticationRepository; + FormRepository get _formRepository => + _authenticationRepository.formRepository; @override String get formName => AuthFormName.signInForm; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart index 8c65fe0f..85892205 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart @@ -17,16 +17,16 @@ part of 'sign_in_cubit.dart'; class SignInState extends FormDataState { - FormInputValidator get email => - form.validatorOf(AuthFormField.email); - FormInputValidator get password => - form.validatorOf(AuthFormField.password); const SignInState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + FormInputValidator get email => + form.validatorOf(AuthFormField.email); + FormInputValidator get password => + form.validatorOf(AuthFormField.password); SignInState copyWith({ WyattForm? form, diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart index 38e719a1..72c69397 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart @@ -25,9 +25,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'sign_up_state.dart'; class SignUpCubit extends FormDataCubit { - final AuthenticationRepository _authenticationRepository; - FormRepository get _formRepository => - _authenticationRepository.formRepository; SignUpCubit({ required AuthenticationRepository authenticationRepository, @@ -38,6 +35,9 @@ class SignUpCubit extends FormDataCubit { .accessForm(AuthFormName.signUpForm), ), ); + final AuthenticationRepository _authenticationRepository; + FormRepository get _formRepository => + _authenticationRepository.formRepository; @override String get formName => AuthFormName.signUpForm; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart index 8203c293..414e9916 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart @@ -17,16 +17,16 @@ part of 'sign_up_cubit.dart'; class SignUpState extends FormDataState { - FormInputValidator get email => - form.validatorOf(AuthFormField.email); - FormInputValidator get password => - form.validatorOf(AuthFormField.password); const SignUpState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + FormInputValidator get email => + form.validatorOf(AuthFormField.email); + FormInputValidator get password => + form.validatorOf(AuthFormField.password); SignUpState copyWith({ WyattForm? form, diff --git a/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart index 63fe3de4..5ed56791 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart @@ -24,14 +24,14 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; class CrudInMemoryDataSourceImpl extends CrudDataSource { + + CrudInMemoryDataSourceImpl({required this.toMap, Map? data}) + : _data = data ?? {}; final Map _data; final StreamController> _streamData = StreamController(); final Map Function(Model) toMap; - CrudInMemoryDataSourceImpl({required this.toMap, Map? data}) - : _data = data ?? {}; - @override Future create(Model object, {String? id}) async { _data[id ?? object.id ?? ''] = object; diff --git a/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart index 2b8fd504..4059dcb6 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart @@ -22,10 +22,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; class CrudFirestoreDataSourceImpl extends CrudDataSource { - final FirebaseFirestore _firestore; - - final Map Function(Model, SetOptions?) _toFirestore; - late CollectionReference _collectionReference; CrudFirestoreDataSourceImpl( String collection, { @@ -44,6 +40,10 @@ class CrudFirestoreDataSourceImpl toFirestore: toFirestore, ); } + final FirebaseFirestore _firestore; + + final Map Function(Model, SetOptions?) _toFirestore; + late CollectionReference _collectionReference; @override Future create(Model object, {String? id}) { diff --git a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart index 1a62f179..7b8b6fe3 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart @@ -23,11 +23,11 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class CrudRepositoryImpl extends CrudRepository { - final CrudDataSource _crudDataSource; CrudRepositoryImpl({ required CrudDataSource crudDataSource, }) : _crudDataSource = crudDataSource; + final CrudDataSource _crudDataSource; @override FutureOrResult create(Model object, {String? id}) => diff --git a/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart index c95d1cda..fbb55c9a 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart @@ -25,22 +25,22 @@ abstract class QueryParser { abstract class QueryInterface extends Entity {} class WhereQuery extends QueryInterface { + + WhereQuery(this.type, this.field, this.value); final WhereQueryType type; final String field; final Value value; - - WhereQuery(this.type, this.field, this.value); } class LimitQuery extends QueryInterface { - final int limit; LimitQuery(this.limit); + final int limit; } class OrderByQuery extends QueryInterface { - final String field; - final bool ascending; OrderByQuery(this.field, {this.ascending = true}); + final String field; + final bool ascending; } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart index 83e49331..f8a5446c 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart @@ -21,9 +21,9 @@ import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class Delete extends AsyncUseCase { - final CrudRepository _crudRepository; Delete(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(String? params) { diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart index 75fde6ee..8310f267 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart @@ -19,9 +19,9 @@ import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class DeleteAll extends AsyncUseCase { - final CrudRepository _crudRepository; DeleteAll(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOrResult execute(void params) => _crudRepository.deleteAll(); diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart index 491323d5..520609a3 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart @@ -21,9 +21,9 @@ import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class Get extends AsyncUseCase { - final CrudRepository _crudRepository; Get(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(String? params) { diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart index f7de0385..3d91ab65 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart @@ -20,9 +20,9 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class GetAll extends AsyncUseCase> { - final CrudRepository _crudRepository; GetAll(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOrResult> execute(void params) => _crudRepository.getAll(); diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart index 586e3189..d36035c8 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart @@ -23,9 +23,9 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class Query extends AsyncUseCase, List> { - final CrudRepository _crudRepository; Query(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(List? params) { diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart index 5379f43e..bbc29d0f 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart @@ -23,9 +23,9 @@ import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dar class Update extends AsyncUseCase, void> { - final CrudRepository _crudRepository; Update(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(UpdateParameters? params) { diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart index f61ebd18..c9c4505f 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart @@ -22,9 +22,9 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class UpdateAll extends AsyncUseCase, void> { - final CrudRepository _crudRepository; UpdateAll(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(Map? params) { diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart index 67f43c1b..807cf77a 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart @@ -35,6 +35,8 @@ import 'package:wyatt_crud_bloc/src/domain/usecases/update_all.dart'; part 'crud_state.dart'; abstract class CrudCubit extends Cubit { + + CrudCubit() : super(CrudInitial()); Create? get crudCreate; DeleteAll? get crudDeleteAll; Delete? get crudDelete; @@ -44,8 +46,6 @@ abstract class CrudCubit extends Cubit { UpdateAll? get crudUpdateAll; Update? get crudUpdate; - CrudCubit() : super(CrudInitial()); - FutureOr create(Model model) async { if (crudCreate != null) { final stateCopy = state; diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart index 2506b7bb..8541a664 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart @@ -36,27 +36,27 @@ class CrudOkReturn extends CrudState { } class CrudError extends CrudState { - final String? message; const CrudError(this.message); + final String? message; @override List get props => [message]; } class CrudLoaded extends CrudSuccess { - final T? data; const CrudLoaded(this.data); + final T? data; @override List get props => [data]; } class CrudListLoaded extends CrudSuccess { - final List data; const CrudListLoaded(this.data); + final List data; @override List get props => [data]; diff --git a/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart b/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart index e6a08758..5cf16e28 100644 --- a/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart +++ b/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart @@ -26,15 +26,6 @@ import 'package:wyatt_form_bloc/src/domain/input_validators/form_input_validator // ignore: must_be_immutable class WyattFormImpl extends WyattForm { - final List< - FormInput, - dynamic>> _inputs; - final FormValidator _validator; - final String _name; - - late List< - FormInput, - dynamic>> _inputsInitial; WyattFormImpl( this._inputs, { @@ -44,6 +35,15 @@ class WyattFormImpl extends WyattForm { _validator = validationStrategy { _inputsInitial = _inputs.map((input) => input.clone()).toList(); } + final List< + FormInput, + dynamic>> _inputs; + final FormValidator _validator; + final String _name; + + late List< + FormInput, + dynamic>> _inputsInitial; @override List< diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart index 57ab4c95..ec07d6fc 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart @@ -17,6 +17,12 @@ part of 'form_data_cubit.dart'; abstract class FormDataState extends Equatable { + + const FormDataState({ + required this.form, + this.status = FormStatus.pure, + this.errorMessage, + }); /// Global status of a form. final FormStatus status; @@ -26,12 +32,6 @@ abstract class FormDataState extends Equatable { /// Optional error message. final String? errorMessage; - const FormDataState({ - required this.form, - this.status = FormStatus.pure, - this.errorMessage, - }); - @override List get props => [status, form, errorMessage]; } diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart index 2eb50aa7..1894e478 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart @@ -27,11 +27,11 @@ import 'package:wyatt_form_bloc/src/presentation/features/form_data/form_data_cu part 'form_data_state_impl.dart'; abstract class FormDataCubitImpl extends FormDataCubit { - final FormRepository _formRepository; - final String _formName; FormDataCubitImpl(this._formRepository, this._formName) : super(FormDataStateImpl(form: _formRepository.accessForm(_formName))); + final FormRepository _formRepository; + final String _formName; @override String get formName => _formName; diff --git a/packages/wyatt_http_client/example/http_client_example.dart b/packages/wyatt_http_client/example/http_client_example.dart index 57b16bee..3787f1c8 100644 --- a/packages/wyatt_http_client/example/http_client_example.dart +++ b/packages/wyatt_http_client/example/http_client_example.dart @@ -115,7 +115,7 @@ Future server() async { final server = await HttpServer.bind(InternetAddress.anyIPv6, 8080); var error = 0; var token = 0; - await server.forEach((HttpRequest request) { + await server.forEach((request) { print('[${request.method}] ${request.uri}'); switch (request.uri.path) { case '/test/basic-test': @@ -196,7 +196,7 @@ Future server() async { Future main() async { unawaited(server()); - final base = 'localhost:8080'; + const base = 'localhost:8080'; final uriPrefix = UriPrefixMiddleware( protocol: Protocols.http, authority: base, diff --git a/packages/wyatt_http_client/example/http_client_fastapi_example.dart b/packages/wyatt_http_client/example/http_client_fastapi_example.dart index 5393611c..9aa2be25 100644 --- a/packages/wyatt_http_client/example/http_client_fastapi_example.dart +++ b/packages/wyatt_http_client/example/http_client_fastapi_example.dart @@ -31,19 +31,15 @@ enum EmailVerificationAction { resetPassword, changeEmail; - String toSnakeCase() { - return name.splitMapJoin( + String toSnakeCase() => name.splitMapJoin( RegExp('[A-Z]'), onMatch: (m) => '_${m[0]?.toLowerCase()}', onNonMatch: (n) => n, ); - } - factory EmailVerificationAction.fromString(String str) { - return EmailVerificationAction.values.firstWhere( - (EmailVerificationAction element) => element.toSnakeCase() == str, + factory EmailVerificationAction.fromString(String str) => EmailVerificationAction.values.firstWhere( + (element) => element.toSnakeCase() == str, ); - } } class VerifyCode { @@ -60,29 +56,23 @@ class VerifyCode { String? email, String? verificationCode, EmailVerificationAction? action, - }) { - return VerifyCode( + }) => VerifyCode( email: email ?? this.email, verificationCode: verificationCode ?? this.verificationCode, action: action ?? this.action, ); - } - Map toMap() { - return { + Map toMap() => { 'email': email, 'verification_code': verificationCode, 'action': action.toSnakeCase(), }; - } - factory VerifyCode.fromMap(Map map) { - return VerifyCode( + factory VerifyCode.fromMap(Map map) => VerifyCode( email: map['email'] as String, verificationCode: map['verification_code'] as String, action: EmailVerificationAction.fromString(map['action'] as String), ); - } String toJson() => json.encode(toMap()); @@ -105,26 +95,20 @@ class Account { Account copyWith({ String? email, String? sessionId, - }) { - return Account( + }) => Account( email: email ?? this.email, sessionId: sessionId ?? this.sessionId, ); - } - Map toMap() { - return { + Map toMap() => { 'email': email, 'session_id': sessionId, }; - } - factory Account.fromMap(Map map) { - return Account( + factory Account.fromMap(Map map) => Account( email: map['email'] as String, sessionId: map['session_id'] != null ? map['session_id'] as String : null, ); - } String toJson() => json.encode(toMap()); @@ -146,26 +130,20 @@ class SignUp { SignUp copyWith({ String? sessionId, String? password, - }) { - return SignUp( + }) => SignUp( sessionId: sessionId ?? this.sessionId, password: password ?? this.password, ); - } - Map toMap() { - return { + Map toMap() => { 'session_id': sessionId, 'password': password, }; - } - factory SignUp.fromMap(Map map) { - return SignUp( + factory SignUp.fromMap(Map map) => SignUp( sessionId: map['session_id'] as String, password: map['password'] as String, ); - } String toJson() => json.encode(toMap()); @@ -190,29 +168,23 @@ class TokenSuccess { String? accessToken, String? refreshToken, Account? account, - }) { - return TokenSuccess( + }) => TokenSuccess( accessToken: accessToken ?? this.accessToken, refreshToken: refreshToken ?? this.refreshToken, account: account ?? this.account, ); - } - Map toMap() { - return { + Map toMap() => { 'access_token': accessToken, 'refresh_token': refreshToken, 'account': account.toMap(), }; - } - factory TokenSuccess.fromMap(Map map) { - return TokenSuccess( + factory TokenSuccess.fromMap(Map map) => TokenSuccess( accessToken: map['access_token'] as String, refreshToken: map['refresh_token'] as String, account: Account.fromMap(map['account'] as Map), ); - } String toJson() => json.encode(toMap()); @@ -235,26 +207,20 @@ class Login { Login copyWith({ String? email, String? password, - }) { - return Login( + }) => Login( email: email ?? this.email, password: password ?? this.password, ); - } - Map toMap() { - return { + Map toMap() => { 'email': email, 'password': password, }; - } - factory Login.fromMap(Map map) { - return Login( + factory Login.fromMap(Map map) => Login( email: map['email'] as String, password: map['password'] as String, ); - } String toJson() => json.encode(toMap()); diff --git a/packages/wyatt_http_client/lib/src/middleware_client.dart b/packages/wyatt_http_client/lib/src/middleware_client.dart index 0f646f70..389b6fce 100644 --- a/packages/wyatt_http_client/lib/src/middleware_client.dart +++ b/packages/wyatt_http_client/lib/src/middleware_client.dart @@ -25,8 +25,6 @@ import 'package:wyatt_http_client/src/pipeline.dart'; import 'package:wyatt_http_client/src/utils/http_methods.dart'; class MiddlewareClient extends BaseClient { - final Client inner; - final Pipeline pipeline; MiddlewareClient({ Pipeline? pipeline, @@ -35,6 +33,8 @@ class MiddlewareClient extends BaseClient { inner = inner ?? Client() { print('Using Pipeline:\n$pipeline'); } + final Client inner; + final Pipeline pipeline; @override Future head(Uri url, {Map? headers}) => @@ -81,9 +81,7 @@ class MiddlewareClient extends BaseClient { _sendUnstreamed(HttpMethods.delete.method, url, headers, body, encoding); @override - Future send(BaseRequest request) { - return inner.send(request); - } + Future send(BaseRequest request) => inner.send(request); Future _sendUnstreamed( String method, diff --git a/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart index 027ad964..432a33a2 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart @@ -23,15 +23,15 @@ import 'package:wyatt_http_client/src/utils/authentication_methods.dart'; import 'package:wyatt_http_client/src/utils/header_keys.dart'; class BasicAuthMiddleware with OnRequestMiddleware implements Middleware { - String? username; - String? password; - final String authenticationHeader; BasicAuthMiddleware({ this.username, this.password, this.authenticationHeader = HeaderKeys.authorization, }); + String? username; + String? password; + final String authenticationHeader; @override String getName() => 'BasicAuth'; diff --git a/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart index 538f6eb2..64dd5020 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart @@ -25,12 +25,6 @@ import 'package:wyatt_http_client/src/utils/http_status.dart'; class DigestAuthMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { - final String username; - final String password; - final DigestAuth _digestAuth; - final String authenticationHeader; - final String wwwAuthenticateHeader; - final HttpStatus unauthorized; DigestAuthMiddleware({ required this.username, @@ -39,6 +33,12 @@ class DigestAuthMiddleware this.wwwAuthenticateHeader = HeaderKeys.wwwAuthenticate, this.unauthorized = HttpStatus.unauthorized, }) : _digestAuth = DigestAuth(username, password); + final String username; + final String password; + final DigestAuth _digestAuth; + final String authenticationHeader; + final String wwwAuthenticateHeader; + final HttpStatus unauthorized; @override String getName() => 'DigestAuth'; diff --git a/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart index f470699a..fc6937e6 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart @@ -31,6 +31,17 @@ typedef TokenParser = String Function(Map); class RefreshTokenAuthMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { + + RefreshTokenAuthMiddleware({ + required this.authorizationEndpoint, + required this.tokenEndpoint, + required this.accessTokenParser, + required this.refreshTokenParser, + this.authenticationHeader = HeaderKeys.authorization, + this.authenticationMethod = AuthenticationMethods.bearer, + this.unauthorized = HttpStatus.unauthorized, + this.maxAttempts = 8, + }); final String authorizationEndpoint; final String tokenEndpoint; @@ -44,17 +55,6 @@ class RefreshTokenAuthMiddleware final HttpStatus unauthorized; final int maxAttempts; - RefreshTokenAuthMiddleware({ - required this.authorizationEndpoint, - required this.tokenEndpoint, - required this.accessTokenParser, - required this.refreshTokenParser, - this.authenticationHeader = HeaderKeys.authorization, - this.authenticationMethod = AuthenticationMethods.bearer, - this.unauthorized = HttpStatus.unauthorized, - this.maxAttempts = 8, - }); - @override String getName() => 'RefreshToken'; diff --git a/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart index f929f623..4b43359a 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart @@ -20,11 +20,6 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/utils/convert.dart'; class UnsafeAuthMiddleware with OnRequestMiddleware implements Middleware { - String? username; - String? password; - - final String usernameField; - final String passwordField; UnsafeAuthMiddleware({ this.username, @@ -32,6 +27,11 @@ class UnsafeAuthMiddleware with OnRequestMiddleware implements Middleware { this.usernameField = 'username', this.passwordField = 'password', }); + String? username; + String? password; + + final String usernameField; + final String passwordField; @override String getName() => 'UnsafeAuth'; diff --git a/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart index c52f3fdf..1eec0fe4 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart @@ -20,13 +20,13 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/utils/protocols.dart'; class UriPrefixMiddleware with OnRequestMiddleware implements Middleware { - final Protocols protocol; - final String? authority; UriPrefixMiddleware({ required this.protocol, required this.authority, }); + final Protocols protocol; + final String? authority; @override String getName() => 'UriPrefix'; diff --git a/packages/wyatt_http_client/lib/src/models/middleware_context.dart b/packages/wyatt_http_client/lib/src/models/middleware_context.dart index 19877109..9fb1db30 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_context.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_context.dart @@ -44,8 +44,7 @@ class MiddlewareContext { MiddlewareRequest? lastRequest, MiddlewareResponse? originalResponse, MiddlewareResponse? lastResponse, - }) { - return MiddlewareContext( + }) => MiddlewareContext( pipeline: pipeline ?? this.pipeline, client: client ?? this.client, originalRequest: originalRequest ?? this.originalRequest, @@ -53,10 +52,7 @@ class MiddlewareContext { originalResponse: originalResponse ?? this.originalResponse, lastResponse: lastResponse ?? this.lastResponse, ); - } @override - String toString() { - return 'MiddlewareContext(pipeline: $pipeline, client: $client, originalRequest: $originalRequest, lastRequest: $lastRequest, originalResponse: $originalResponse, lastResponse: $lastResponse)'; - } + String toString() => 'MiddlewareContext(pipeline: $pipeline, client: $client, originalRequest: $originalRequest, lastRequest: $lastRequest, originalResponse: $originalResponse, lastResponse: $lastResponse)'; } diff --git a/packages/wyatt_http_client/lib/src/models/middleware_request.dart b/packages/wyatt_http_client/lib/src/models/middleware_request.dart index 42c9ac34..333d3177 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_request.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_request.dart @@ -42,22 +42,21 @@ class MiddlewareRequest { MiddlewareRequest copyWith({ UnfreezedRequest? unfreezedRequest, - }) { - return MiddlewareRequest( - unfreezedRequest: unfreezedRequest ?? this.unfreezedRequest, - ); - } + }) => + MiddlewareRequest( + unfreezedRequest: unfreezedRequest ?? this.unfreezedRequest, + ); void modifyRequest(UnfreezedRequest unfreezedRequest) { - String? _body; + String? body; if (unfreezedRequest.body != null) { - final body = unfreezedRequest.body; + var body = unfreezedRequest.body; if (body is String) { - _body = body; + body = body; } else if (body is List) { - _body = String.fromCharCodes(body.cast()); + body = String.fromCharCodes(body.cast()); } else if (body is Map) { - _body = Convert.mapToQuery(body.cast()); + body = Convert.mapToQuery(body.cast()); } } _httpRequest = RequestUtils.copyRequestWith( @@ -65,7 +64,7 @@ class MiddlewareRequest { method: unfreezedRequest.method, url: unfreezedRequest.url, headers: unfreezedRequest.headers, - body: _body, + body: body, ) as Request; if (unfreezedRequest.encoding != null) { _httpRequest.encoding = unfreezedRequest.encoding!; diff --git a/packages/wyatt_http_client/lib/src/models/middleware_response.dart b/packages/wyatt_http_client/lib/src/models/middleware_response.dart index 9404fa3a..d58a2591 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_response.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_response.dart @@ -40,11 +40,9 @@ class MiddlewareResponse { MiddlewareResponse copyWith({ BaseResponse? httpResponse, - }) { - return MiddlewareResponse( + }) => MiddlewareResponse( httpResponse: httpResponse ?? this.httpResponse, ); - } @override String toString() => diff --git a/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart b/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart index 9aa9790f..437b21d3 100644 --- a/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart +++ b/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart @@ -17,11 +17,6 @@ import 'dart:convert'; class UnfreezedRequest { - final String method; - final Uri url; - final Map? headers; - final Object? body; - final Encoding? encoding; UnfreezedRequest({ required this.method, @@ -30,6 +25,11 @@ class UnfreezedRequest { this.body, this.encoding, }); + final String method; + final Uri url; + final Map? headers; + final Object? body; + final Encoding? encoding; UnfreezedRequest copyWith({ String? method, @@ -37,19 +37,15 @@ class UnfreezedRequest { Map? headers, Object? body, Encoding? encoding, - }) { - return UnfreezedRequest( + }) => UnfreezedRequest( method: method ?? this.method, url: url ?? this.url, headers: headers ?? this.headers, body: body ?? this.body, encoding: encoding ?? this.encoding, ); - } @override - String toString() { - return 'UnfreezedRequest(method: $method, url: $url, headers: ' + String toString() => 'UnfreezedRequest(method: $method, url: $url, headers: ' '$headers, body: $body, encoding: $encoding)'; - } } diff --git a/packages/wyatt_http_client/lib/src/pipeline.dart b/packages/wyatt_http_client/lib/src/pipeline.dart index aa0b8a1b..bf0b2107 100644 --- a/packages/wyatt_http_client/lib/src/pipeline.dart +++ b/packages/wyatt_http_client/lib/src/pipeline.dart @@ -20,13 +20,13 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/models/middleware_response.dart'; class Pipeline { - final List _middlewares; - - int get length => _middlewares.length; Pipeline() : _middlewares = []; Pipeline.fromIterable(Iterable middlewares) : _middlewares = middlewares.toList(); + final List _middlewares; + + int get length => _middlewares.length; /// Add a [Middleware] to this [Pipeline] Pipeline addMiddleware(Middleware middleware) { diff --git a/packages/wyatt_http_client/lib/src/utils/convert.dart b/packages/wyatt_http_client/lib/src/utils/convert.dart index 96746448..059b20a5 100644 --- a/packages/wyatt_http_client/lib/src/utils/convert.dart +++ b/packages/wyatt_http_client/lib/src/utils/convert.dart @@ -21,7 +21,7 @@ class Convert { final buffer = StringBuffer(); for (final int part in bytes) { if (part & 0xff != part) { - throw FormatException('Non-byte integer detected'); + throw const FormatException('Non-byte integer detected'); } buffer.write('${part < 16 ? '0' : ''}${part.toRadixString(16)}'); } diff --git a/packages/wyatt_http_client/lib/src/utils/crypto.dart b/packages/wyatt_http_client/lib/src/utils/crypto.dart index 319b9299..f27d08a7 100644 --- a/packages/wyatt_http_client/lib/src/utils/crypto.dart +++ b/packages/wyatt_http_client/lib/src/utils/crypto.dart @@ -21,8 +21,8 @@ import 'package:crypto/crypto.dart'; class Crypto { /// Hash a string using MD5 static String md5Hash(String data) { - final content = Utf8Encoder().convert(data); - final md5Crypto = md5; + final content = const Utf8Encoder().convert(data); + const md5Crypto = md5; final digest = md5Crypto.convert(content).toString(); return digest; } diff --git a/packages/wyatt_http_client/lib/src/utils/delay.dart b/packages/wyatt_http_client/lib/src/utils/delay.dart index af89f3ac..3ca50947 100644 --- a/packages/wyatt_http_client/lib/src/utils/delay.dart +++ b/packages/wyatt_http_client/lib/src/utils/delay.dart @@ -24,9 +24,9 @@ abstract class Delay { return Duration.zero; } final rand = Random(); - final Duration delayFactor = const Duration(milliseconds: 200); - final double randomizationFactor = 0.25; - final Duration maxDelay = const Duration(seconds: 30); + const Duration delayFactor = Duration(milliseconds: 200); + const double randomizationFactor = 0.25; + const Duration maxDelay = Duration(seconds: 30); final rf = randomizationFactor * (rand.nextDouble() * 2 - 1) + 1; final exp = min(attempt, 31); // prevent overflows. diff --git a/packages/wyatt_http_client/lib/src/utils/digest_auth.dart b/packages/wyatt_http_client/lib/src/utils/digest_auth.dart index 41581dfb..1a8ee9f1 100644 --- a/packages/wyatt_http_client/lib/src/utils/digest_auth.dart +++ b/packages/wyatt_http_client/lib/src/utils/digest_auth.dart @@ -19,7 +19,9 @@ import 'dart:math'; import 'package:wyatt_http_client/src/utils/convert.dart'; import 'package:wyatt_http_client/src/utils/crypto.dart'; -class DigestAuth { +class DigestAuth { // request counter + + DigestAuth(this.username, this.password); String username; String password; @@ -30,9 +32,7 @@ class DigestAuth { String? _nonce; String? _opaque; - int _nc = 0; // request counter - - DigestAuth(this.username, this.password); + int _nc = 0; /// Splits WWW-Authenticate header into a map. Map? splitWWWAuthenticateHeader(String header) { @@ -61,9 +61,7 @@ class DigestAuth { return Convert.toHex(values); } - String _formatNonceCount(int nc) { - return nc.toRadixString(16).padLeft(8, '0'); - } + String _formatNonceCount(int nc) => nc.toRadixString(16).padLeft(8, '0'); String _computeHA1( String realm, @@ -148,7 +146,7 @@ class DigestAuth { } String getAuthString(String method, Uri url) { - final _cnonce = _computeNonce(); + final cnonce = _computeNonce(); _nc += 1; // if url has query parameters, append query to path final path = url.hasQuery ? '${url.path}?${url.query}' : url.path; @@ -162,7 +160,7 @@ class DigestAuth { _qop, _opaque, _realm!, - _cnonce, + cnonce, _nonce, _nc, username, @@ -192,7 +190,5 @@ class DigestAuth { } } - bool isReady() { - return _nonce != null && (_nc == 0 || _qop != null); - } + bool isReady() => _nonce != null && (_nc == 0 || _qop != null); } diff --git a/packages/wyatt_http_client/lib/src/utils/http_status.dart b/packages/wyatt_http_client/lib/src/utils/http_status.dart index c5715c70..2714b5ba 100644 --- a/packages/wyatt_http_client/lib/src/utils/http_status.dart +++ b/packages/wyatt_http_client/lib/src/utils/http_status.dart @@ -95,29 +95,17 @@ enum HttpStatus { return false; } - bool isInfo() { - return statusCode >= 100 && statusCode < 200; - } + bool isInfo() => statusCode >= 100 && statusCode < 200; - bool isSuccess() { - return statusCode >= 200 && statusCode < 300; - } + bool isSuccess() => statusCode >= 200 && statusCode < 300; - bool isRedirection() { - return statusCode >= 300 && statusCode < 400; - } + bool isRedirection() => statusCode >= 300 && statusCode < 400; - bool isClientError() { - return statusCode >= 400 && statusCode < 500; - } + bool isClientError() => statusCode >= 400 && statusCode < 500; - bool isServerError() { - return statusCode >= 500 && statusCode < 600; - } + bool isServerError() => statusCode >= 500 && statusCode < 600; - factory HttpStatus.from(int status) { - return HttpStatus.values + factory HttpStatus.from(int status) => HttpStatus.values .firstWhere((element) => element.statusCode == status); - } } diff --git a/packages/wyatt_type_utils/example/lib/error.dart b/packages/wyatt_type_utils/example/lib/error.dart index 67008d6d..945855bf 100644 --- a/packages/wyatt_type_utils/example/lib/error.dart +++ b/packages/wyatt_type_utils/example/lib/error.dart @@ -15,9 +15,9 @@ // along with this program. If not, see . class AppError { - final String message; const AppError(this.message); + final String message; @override // ignore: no_runtimetype_tostring diff --git a/packages/wyatt_type_utils/lib/src/either/either_base.dart b/packages/wyatt_type_utils/lib/src/either/either_base.dart index f8b3546f..2f06414e 100644 --- a/packages/wyatt_type_utils/lib/src/either/either_base.dart +++ b/packages/wyatt_type_utils/lib/src/either/either_base.dart @@ -28,8 +28,8 @@ mixin _Left on _EitherBase {} mixin _Right on _EitherBase {} class _EitherBaseException implements Exception { - final String message; const _EitherBaseException(this.message); + final String message; @override String toString() => '_EitherException: $message'; diff --git a/packages/wyatt_type_utils/lib/src/either/option.dart b/packages/wyatt_type_utils/lib/src/either/option.dart index b86a510b..3f8e9a74 100644 --- a/packages/wyatt_type_utils/lib/src/either/option.dart +++ b/packages/wyatt_type_utils/lib/src/either/option.dart @@ -172,10 +172,10 @@ abstract class Option extends _EitherBase { } class Value extends Option with _Left { - final T value; /// {@macro ok} const Value(this.value) : super._(); + final T value; @override _EitherBase _and(_EitherBase res) => res as Option; diff --git a/packages/wyatt_type_utils/lib/src/either/result.dart b/packages/wyatt_type_utils/lib/src/either/result.dart index 4756f970..6333e46d 100644 --- a/packages/wyatt_type_utils/lib/src/either/result.dart +++ b/packages/wyatt_type_utils/lib/src/either/result.dart @@ -203,10 +203,10 @@ abstract class Result extends _EitherBase { /// {@macro result} /// {@endtemplate} class Ok extends Result with _Left { - final T value; /// {@macro ok} const Ok(this.value) : super._(); + final T value; @override U _fold(U Function(T left) fnL, U Function(E right) fnR) => fnL(value); @@ -268,10 +268,10 @@ class Ok extends Result with _Left { /// {@macro result} /// {@endtemplate} class Err extends Result with _Right { - final E error; /// {@macro err} const Err(this.error) : super._(); + final E error; @override U _fold(U Function(T left) fnL, U Function(E right) fnR) => fnR(error); diff --git a/packages/wyatt_type_utils/lib/src/pair/pair.dart b/packages/wyatt_type_utils/lib/src/pair/pair.dart index e32b94bb..ca66961d 100644 --- a/packages/wyatt_type_utils/lib/src/pair/pair.dart +++ b/packages/wyatt_type_utils/lib/src/pair/pair.dart @@ -22,11 +22,11 @@ extension PairExtension on Pair { /// [Pair] is a simple object which contains pair of two values. /// {@endtemplate} class Pair { - final L? left; - final R? right; /// {@macro pair} const Pair(this.left, this.right); + final L? left; + final R? right; @override String toString() => '($left, $right)'; diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart index 1bf8f571..93a5c6b4 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart @@ -19,13 +19,13 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class AppBarLayout extends Layout { - final String title; - final Widget body; const AppBarLayout({ required this.title, required this.body, super.key, }); + final String title; + final Widget body; @override Widget build(BuildContext context) => Scaffold( diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart index 58ee146f..cb7b9900 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart @@ -3,14 +3,14 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class BottomNavigationBarLayout extends Layout { - final Widget body; - final int currentIndex; const BottomNavigationBarLayout({ required this.currentIndex, required this.body, super.key, }); + final Widget body; + final int currentIndex; @override Widget build(BuildContext context) => Scaffold( body: body, diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart index 355716d3..2414c2fb 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -19,9 +19,6 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class FrameLayout extends Layout { - final String title; - final Widget body; - final int currentIndex; const FrameLayout({ required this.title, @@ -29,6 +26,9 @@ class FrameLayout extends Layout { required this.currentIndex, super.key, }); + final String title; + final Widget body; + final int currentIndex; @override Widget build(BuildContext context) => Scaffold( -- 2.47.2 From 5f52b2fc3ddbb770da46521375074d45b47a6155 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 13 Dec 2022 17:00:26 -0500 Subject: [PATCH 050/320] refactor(authentication): use fromFirebaseUser factory to parse user --- .../lib/core/dependency_injection/get_it.dart | 4 +- .../example/lib/firebase_options.dart | 6 +- .../lib/src/core/exceptions/exceptions.dart | 8 +- .../core/exceptions/exceptions_firebase.dart | 7 ++ ...authentication_cache_data_source_impl.dart | 1 - ...hentication_firebase_data_source_impl.dart | 73 +++++-------------- .../authentication_mock_data_source_impl.dart | 1 - .../data/models/account_model_firebase.dart | 55 ++++++++++++++ .../cubit/authentication_cubit.dart | 1 - .../cubit/authentication_state.dart | 1 - .../features/sign_up/cubit/sign_up_state.dart | 1 - 11 files changed, 92 insertions(+), 66 deletions(-) create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/models/account_model_firebase.dart diff --git a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart index 29cd0a73..d1cb33ab 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart @@ -50,8 +50,8 @@ abstract class GetItInitializer { ), ]) : () => AuthenticationFirebaseDataSourceImpl( - googleSignIn: GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId) - ), + googleSignIn: GoogleSignIn( + clientId: DefaultFirebaseOptions.ios.iosClientId)), ) ..registerLazySingleton>( () => AuthenticationCacheDataSourceImpl(), diff --git a/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart b/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart index 95cbbdfb..10987933 100644 --- a/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart +++ b/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart @@ -58,8 +58,10 @@ class DefaultFirebaseOptions { messagingSenderId: '405351917235', projectId: 'meerabel-dev', storageBucket: 'meerabel-dev.appspot.com', - androidClientId: '405351917235-4g1dh3475tq6t1sa2qoh7ol60nf4ta05.apps.googleusercontent.com', - iosClientId: '405351917235-2jv4ff02kovoim58f8d6d0rsa14apgkj.apps.googleusercontent.com', + androidClientId: + '405351917235-4g1dh3475tq6t1sa2qoh7ol60nf4ta05.apps.googleusercontent.com', + iosClientId: + '405351917235-2jv4ff02kovoim58f8d6d0rsa14apgkj.apps.googleusercontent.com', iosBundleId: 'com.example.exampleRouter', ); } diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart index ba71af54..f60c915e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart @@ -20,7 +20,6 @@ part 'exceptions_firebase.dart'; abstract class AuthenticationFailureInterface extends AppException implements Exception { - AuthenticationFailureInterface(this.code, this.msg); AuthenticationFailureInterface.fromCode(this.code) : msg = 'An unknown error occurred.'; @@ -277,3 +276,10 @@ abstract class UpdatePasswordFailureInterface UpdatePasswordFailureInterface.fromCode(super.code) : super.fromCode(); } + +abstract class ModelParsingFailureInterface + extends AuthenticationFailureInterface { + ModelParsingFailureInterface(super.code, super.msg); + + ModelParsingFailureInterface.fromCode(super.code) : super.fromCode(); +} diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart index c36dcbd0..58e3c409 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_firebase.dart @@ -349,3 +349,10 @@ class UpdatePasswordFailureFirebase extends UpdatePasswordFailureInterface { } } } + +class ModelParsingFailureFirebase extends ModelParsingFailureInterface { + ModelParsingFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + ModelParsingFailureFirebase.fromCode(super.code) : super.fromCode(); +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart index b224575a..abcb673a 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_cache_data_source_impl.dart @@ -20,7 +20,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationCacheDataSourceImpl extends AuthenticationCacheDataSource { - AuthenticationCacheDataSourceImpl(); Account? _account; T? _data; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index 8a16490c..8a4ce432 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -14,36 +14,22 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:wyatt_authentication_bloc/src/data/models/account_model_firebase.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationFirebaseDataSourceImpl extends AuthenticationRemoteDataSource { - AuthenticationFirebaseDataSourceImpl( - {FirebaseAuth? firebaseAuth, GoogleSignIn? googleSignIn,}) - : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance, + AuthenticationFirebaseDataSourceImpl({ + FirebaseAuth? firebaseAuth, + GoogleSignIn? googleSignIn, + }) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance, _googleSignIn = googleSignIn ?? GoogleSignIn(); final FirebaseAuth _firebaseAuth; final GoogleSignIn _googleSignIn; UserCredential? _latestCreds; - Account _mapper(User user) => AccountModel( - uid: user.uid, - emailVerified: user.emailVerified, - isAnonymous: user.isAnonymous, - providerId: user.providerData.first.providerId, - creationTime: user.metadata.creationTime, - lastSignInTime: user.metadata.lastSignInTime, - isNewUser: (user.metadata.creationTime != null && - user.metadata.lastSignInTime != null) - ? user.metadata.lastSignInTime! == user.metadata.creationTime! - : null, - email: user.email, - phoneNumber: user.phoneNumber, - photoURL: user.photoURL, - ); - @override Future signInWithEmailAndPassword({ required String email, @@ -56,11 +42,7 @@ class AuthenticationFirebaseDataSourceImpl ); _latestCreds = userCredential; final user = userCredential.user; - if (user.isNotNull) { - return _mapper(user!); - } else { - throw Exception(); // Get caught just after. - } + return AccountModelFirebase.fromFirebaseUser(user); } on FirebaseAuthException catch (e) { throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code); } catch (_) { @@ -82,11 +64,7 @@ class AuthenticationFirebaseDataSourceImpl ); _latestCreds = userCredential; final user = userCredential.user; - if (user.isNotNull) { - return _mapper(user!); - } else { - throw Exception(); // Get caught just after. - } + return AccountModelFirebase.fromFirebaseUser(user); } on FirebaseAuthException catch (e) { throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code); } catch (_) { @@ -123,8 +101,11 @@ class AuthenticationFirebaseDataSourceImpl @override Stream streamAccount() => _firebaseAuth.userChanges().map((user) { - final Account? account = (user.isNotNull) ? _mapper(user!) : null; - return account; + try { + return AccountModelFirebase.fromFirebaseUser(user); + } on FirebaseAuthException { + return null; + } }); @override @@ -172,11 +153,7 @@ class AuthenticationFirebaseDataSourceImpl final userCredential = await _firebaseAuth.signInAnonymously(); _latestCreds = userCredential; final user = userCredential.user; - if (user.isNotNull) { - return _mapper(user!); - } else { - throw Exception(); // Get caught just after. - } + return AccountModelFirebase.fromFirebaseUser(user); } on FirebaseAuthException catch (e) { throw SignInAnonymouslyFailureFirebase.fromCode(e.code); } catch (_) { @@ -205,11 +182,7 @@ class AuthenticationFirebaseDataSourceImpl _latestCreds = userCredential; final user = userCredential.user; - if (user.isNotNull) { - return _mapper(user!); - } else { - throw Exception(); // Get caught just after. - } + return AccountModelFirebase.fromFirebaseUser(user); } on FirebaseAuthException catch (e) { throw SignInWithGoogleFailureFirebase.fromCode(e.code); } catch (_) { @@ -250,11 +223,7 @@ class AuthenticationFirebaseDataSourceImpl throw Exception(); // Get caught just after. } final user = _firebaseAuth.currentUser; - if (user.isNotNull) { - return _mapper(user!); - } else { - throw Exception(); // Get caught just after. - } + return AccountModelFirebase.fromFirebaseUser(user); } on FirebaseAuthException catch (e) { throw ReauthenticateFailureFirebase.fromCode(e.code); } catch (_) { @@ -267,11 +236,7 @@ class AuthenticationFirebaseDataSourceImpl try { await _firebaseAuth.currentUser!.updateEmail(email); final user = _firebaseAuth.currentUser; - if (user.isNotNull) { - return _mapper(user!); - } else { - throw Exception(); // Get caught just after. - } + return AccountModelFirebase.fromFirebaseUser(user); } on FirebaseAuthException catch (e) { throw UpdateEmailFailureFirebase.fromCode(e.code); } catch (_) { @@ -284,11 +249,7 @@ class AuthenticationFirebaseDataSourceImpl try { await _firebaseAuth.currentUser!.updatePassword(password); final user = _firebaseAuth.currentUser; - if (user.isNotNull) { - return _mapper(user!); - } else { - throw Exception(); // Get caught just after. - } + return AccountModelFirebase.fromFirebaseUser(user); } on FirebaseAuthException catch (e) { throw UpdatePasswordFailureFirebase.fromCode(e.code); } catch (_) { diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart index 0c686ac6..1ee3a767 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -21,7 +21,6 @@ import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource { - AuthenticationMockDataSourceImpl({ this.idToken = 'fake-id-token', this.registeredAccounts, diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model_firebase.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model_firebase.dart new file mode 100644 index 00000000..22313043 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model_firebase.dart @@ -0,0 +1,55 @@ +// ignore_for_file: public_member_api_docs, sort_constructors_first +// 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 . + +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; + +class AccountModelFirebase extends AccountModel { + AccountModelFirebase._({ + required super.uid, + required super.emailVerified, + required super.isAnonymous, + required super.providerId, + super.lastSignInTime, + super.creationTime, + super.isNewUser, + super.email, + super.phoneNumber, + super.photoURL, + }); + + factory AccountModelFirebase.fromFirebaseUser(User? user) { + if (user != null) { + return AccountModelFirebase._( + uid: user.uid, + emailVerified: user.emailVerified, + isAnonymous: user.isAnonymous, + providerId: user.providerData.first.providerId, + creationTime: user.metadata.creationTime, + lastSignInTime: user.metadata.lastSignInTime, + isNewUser: (user.metadata.creationTime != null && + user.metadata.lastSignInTime != null) + ? user.metadata.lastSignInTime! == user.metadata.creationTime! + : null, + email: user.email, + phoneNumber: user.phoneNumber, + photoURL: user.photoURL, + ); + } else { + throw ModelParsingFailureFirebase('null-user', 'User cannot be null!'); + } + } +} diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart index 5db96018..eab1ffbb 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart @@ -26,7 +26,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'authentication_state.dart'; class AuthenticationCubit extends Cubit> { - AuthenticationCubit({ required AuthenticationRepository authenticationRepository, }) : _authenticationRepository = authenticationRepository, diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart index b68660a0..a5733bf2 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart @@ -17,7 +17,6 @@ part of 'authentication_cubit.dart'; class AuthenticationState extends Equatable { - const AuthenticationState.unauthenticated() : this._(status: AuthenticationStatus.unauthenticated); diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart index 414e9916..40c870c5 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart @@ -17,7 +17,6 @@ part of 'sign_up_cubit.dart'; class SignUpState extends FormDataState { - const SignUpState({ required super.form, super.status = FormStatus.pure, -- 2.47.2 From f6ef5828bb3f68f213fccad04c1cde95efb70e31 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 13 Dec 2022 17:29:38 -0500 Subject: [PATCH 051/320] chore(release): publish packages - wyatt_authentication_bloc@0.4.1 --- CHANGELOG.md | 28 +++++++++++++++++++ .../wyatt_authentication_bloc/CHANGELOG.md | 11 ++++++++ .../wyatt_authentication_bloc/pubspec.yaml | 2 +- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0931d30a..dfc5d9ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,34 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 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 diff --git a/packages/wyatt_authentication_bloc/CHANGELOG.md b/packages/wyatt_authentication_bloc/CHANGELOG.md index 934f9b7f..5a5ae944 100644 --- a/packages/wyatt_authentication_bloc/CHANGELOG.md +++ b/packages/wyatt_authentication_bloc/CHANGELOG.md @@ -1,3 +1,14 @@ +## 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. diff --git a/packages/wyatt_authentication_bloc/pubspec.yaml b/packages/wyatt_authentication_bloc/pubspec.yaml index 23471ff1..4d3abe15 100644 --- a/packages/wyatt_authentication_bloc/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_authentication_bloc description: Authentication BLoC for Flutter repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_authentication_bloc -version: 0.4.0+3 +version: 0.4.1 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub -- 2.47.2 From e667aa06d041345b6aaf6025a6252c9adfca3fff Mon Sep 17 00:00:00 2001 From: AN12345 Date: Tue, 13 Dec 2022 18:49:28 -0500 Subject: [PATCH 052/320] feat(ui_layout): make field nullable & add new app bar fields (#97) --- .../presentation/layouts/app_bar_layout.dart | 14 ++++++++++--- .../layouts/bottom_navigation_bar_layout.dart | 11 +++++----- .../presentation/layouts/frame_layout.dart | 21 ++++++++++++------- 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart index 93a5c6b4..d591dfee 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart @@ -20,18 +20,26 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class AppBarLayout extends Layout { const AppBarLayout({ - required this.title, required this.body, + this.title, + this.leading, + this.actions, super.key, }); - final String title; + final String? title; + final Widget? leading; + final List? actions; final Widget body; @override Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(60), - child: context.components.appBar?.configure(title: title) ?? + child: context.components.appBar?.configure( + title: title, + leading: leading, + actions: actions, + ) ?? const SizedBox.shrink(), ), body: body, diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart index cb7b9900..632d5474 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart @@ -3,19 +3,18 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class BottomNavigationBarLayout extends Layout { - const BottomNavigationBarLayout({ - required this.currentIndex, - required this.body, + this.currentIndex, + this.body, super.key, }); - final Widget body; - final int currentIndex; + final Widget? body; + final int? currentIndex; @override Widget build(BuildContext context) => Scaffold( body: body, bottomNavigationBar: context.components.bottomNavigationBar?.configure( - currentIndex: currentIndex, + currentIndex: currentIndex ?? 0, ), ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart index 2414c2fb..4d8eb59c 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -19,27 +19,34 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class FrameLayout extends Layout { - const FrameLayout({ - required this.title, required this.body, - required this.currentIndex, + this.title, + this.leading, + this.actions, + this.currentIndex, super.key, }); - final String title; + final String? title; + final Widget? leading; + final List? actions; final Widget body; - final int currentIndex; + final int? currentIndex; @override Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(60), - child: context.components.appBar?.configure(title: title) ?? + child: context.components.appBar?.configure( + title: title, + leading: leading, + actions: actions, + ) ?? const SizedBox.shrink(), ), body: body, bottomNavigationBar: context.components.bottomNavigationBar?.configure( - currentIndex: currentIndex, + currentIndex: currentIndex ?? 0, ), ); } -- 2.47.2 From f8f367baf6a7e8015ee72023e45ef439237c0d5e Mon Sep 17 00:00:00 2001 From: AN12345 Date: Tue, 13 Dec 2022 18:50:47 -0500 Subject: [PATCH 053/320] (feat): rething conception and add missing layouts (close #97) --- .../wyatt_bloc_layout/example/lib/main.dart | 4 +- .../wyatt_bloc_layout/lib/src/core/core.dart | 17 ++ .../crud_cubit_consumer_screen_mixin.dart} | 22 +-- ...app_bar_layout_cubit_consumer_screen.dart} | 37 ++-- .../presentation/consumers/bases/bases.dart | 19 ++ ...tom_bar_layout_cubit_consumer_screen.dart} | 35 +--- .../frame_layout_cubit_consumer_screen.dart} | 44 ++--- .../src/presentation/consumers/consumers.dart | 18 ++ ...ar_layout_crud_cubit_consumer_screen.dart} | 50 +++-- ...bar_layout_crud_cubit_consumer_screen.dart | 47 +++++ .../src/presentation/consumers/crud/crud.dart | 20 ++ .../crud/crud_cubit_consumer_screen.dart | 40 ++++ ...ame_layout_crud_cubit_consumer_screen.dart | 53 +++++ .../crud_cubit_consumer_screen_bases.dart | 61 ------ .../lib/src/presentation/presentation.dart | 10 +- .../bases/app_bar_layout_cubit_screen.dart} | 37 ++-- .../src/presentation/screens/bases/bases.dart | 19 ++ .../bottom_bar_layout_cubit_screen.dart} | 34 +--- .../bases/frame_layout_cubit_screen.dart | 43 +++++ .../app_bar_layout_crud_cubit_screen.dart | 51 +++++ .../bottom_bar_layout_crud_cubit_screen.dart | 47 +++++ .../src/presentation/screens/crud/crud.dart | 20 ++ .../screens/crud/crud_cubit_screen.dart | 39 ++++ .../crud/frame_layout_crud_cubit_screen.dart | 53 +++++ .../lib/src/presentation/screens/screens.dart | 18 ++ packages/wyatt_bloc_layout/lib/src/src.dart | 1 + .../models/class-models.puml | 181 ++++++++++++++++++ 27 files changed, 776 insertions(+), 244 deletions(-) create mode 100644 packages/wyatt_bloc_layout/lib/src/core/core.dart rename packages/wyatt_bloc_layout/lib/src/{presentation/screens/crud_cubit_screen_base.dart => core/crud_cubit_consumer_screen_mixin.dart} (70%) rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/app_bar_cubit_screen.dart => consumers/bases/app_bar_layout_cubit_consumer_screen.dart} (63%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bases.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/bottom_navigation_bar_layout_crud_screen.dart => consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart} (60%) rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/frame_layout_crud_screen.dart => consumers/bases/frame_layout_cubit_consumer_screen.dart} (58%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/consumers.dart rename packages/wyatt_bloc_layout/lib/src/presentation/consumers/{frame_layout_crud_consumer_screen.dart => crud/app_bar_layout_crud_cubit_consumer_screen.dart} (50%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/app_bar_cubit_consumer_screen.dart => screens/bases/app_bar_layout_cubit_screen.dart} (61%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bases.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart => screens/bases/bottom_bar_layout_cubit_screen.dart} (58%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/frame_layout_cubit_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart create mode 100644 packages/wyatt_bloc_layout/models/class-models.puml diff --git a/packages/wyatt_bloc_layout/example/lib/main.dart b/packages/wyatt_bloc_layout/example/lib/main.dart index eafe4286..cbe743c0 100644 --- a/packages/wyatt_bloc_layout/example/lib/main.dart +++ b/packages/wyatt_bloc_layout/example/lib/main.dart @@ -105,7 +105,7 @@ class ExampleListCrudStateManagement } class ExampleFrameLayoutCrudConsumer - extends FrameLayoutCrudConsumerScreen { + extends FrameLayoutCrudCubitConsumerScreen { const ExampleFrameLayoutCrudConsumer() : super( title: 'Example Title', @@ -118,7 +118,7 @@ class ExampleFrameLayoutCrudConsumer } class ExampleFrameLayoutCrudListConsumer - extends FrameLayoutCrudListConsumerScreen { + extends FrameLayoutCrudListCubitConsumerScreen { const ExampleFrameLayoutCrudListConsumer() : super( title: 'Example Title', diff --git a/packages/wyatt_bloc_layout/lib/src/core/core.dart b/packages/wyatt_bloc_layout/lib/src/core/core.dart new file mode 100644 index 00000000..e215b540 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/core/core.dart @@ -0,0 +1,17 @@ +// 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 . + +export './crud_cubit_consumer_screen_mixin.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart similarity index 70% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart rename to packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart index 04f35bbf..1f62595a 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud_cubit_screen_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart @@ -16,11 +16,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class CrudCubitScreenBase, - SuccessState extends CrudSuccess> extends CubitScreen { - const CrudCubitScreenBase(); +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +mixin CrudMixin { Widget errorBuilder(BuildContext context, CrudError state) => context.components.errorWidget?.configure(error: state.message) ?? const SizedBox.shrink(); @@ -33,8 +34,7 @@ abstract class CrudCubitScreenBase, Widget successBuilder(BuildContext context, SuccessState state); - @override - Widget onBuild(BuildContext context, CrudState state) => + Widget crudBuilder(BuildContext context, CrudState state) => CrudBuilder( errorBuilder: errorBuilder, loadingBuilder: loadingBuilder, @@ -43,13 +43,3 @@ abstract class CrudCubitScreenBase, builder: successBuilder, ); } - -abstract class CrudCubitScreen, T> - extends CrudCubitScreenBase> { - const CrudCubitScreen(); -} - -abstract class CrudListCubitScreen, T> - extends CrudCubitScreenBase> { - const CrudListCubitScreen(); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/app_bar_layout_cubit_consumer_screen.dart similarity index 63% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/app_bar_layout_cubit_consumer_screen.dart index 4715a8b9..d12706cd 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/app_bar_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/app_bar_layout_cubit_consumer_screen.dart @@ -16,37 +16,26 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class AppBarLayoutCrudScreen, - T> extends CrudCubitScreen { - final String? title; - - const AppBarLayoutCrudScreen({ +abstract class AppBarLayoutCubitConsumerScreen< + Cubit extends bloc_base.Cubit, + State extends Object> extends CubitConsumerScreen { + const AppBarLayoutCubitConsumerScreen({ this.title, + this.leading, + this.actions, + super.key, }); + final String? title; + final Widget? leading; + final List? actions; + @override Widget parent(BuildContext context, Widget child) => AppBarLayout( - title: title ?? 'Title', - body: child, - ); -} - -abstract class AppBarLayoutCrudListScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudListCubitScreen { - final String? title; - final int? currentIndex; - - const AppBarLayoutCrudListScreen({ - this.title, - this.currentIndex, - }); - - @override - Widget parent(BuildContext context, Widget child) => AppBarLayout( - title: title ?? 'Title', + title: title, body: child, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bases.dart new file mode 100644 index 00000000..08af9be8 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bases.dart @@ -0,0 +1,19 @@ +// 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 . + +export './app_bar_layout_cubit_consumer_screen.dart'; +export './bottom_bar_layout_cubit_consumer_screen.dart'; +export './frame_layout_cubit_consumer_screen.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart similarity index 60% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart index 28724729..0b2cab99 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bottom_navigation_bar_layout_crud_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart @@ -16,40 +16,23 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class BottomNavigationBarLayoutCrudScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudCubitScreen { - final int? currentIndex; - - const BottomNavigationBarLayoutCrudScreen({ +abstract class BottomBarLayoutCubitConsumerScreen< + Cubit extends bloc_base.Cubit, + State extends Object> extends CubitConsumerScreen { + const BottomBarLayoutCubitConsumerScreen({ this.currentIndex, + super.key, }); + final int? currentIndex; + @override Widget parent(BuildContext context, Widget child) => BottomNavigationBarLayout( + currentIndex: currentIndex, body: child, - currentIndex: currentIndex ?? 0, - ); -} - -abstract class BottomNavigationBarLayoutCrudListScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudListCubitScreen { - final String? title; - final int? currentIndex; - - const BottomNavigationBarLayoutCrudListScreen({ - this.title, - this.currentIndex, - }); - - @override - Widget parent(BuildContext context, Widget child) => - BottomNavigationBarLayout( - body: child, - currentIndex: currentIndex ?? 0, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/frame_layout_cubit_consumer_screen.dart similarity index 58% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/frame_layout_cubit_consumer_screen.dart index 8403be7a..71a5e661 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/frame_layout_crud_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/frame_layout_cubit_consumer_screen.dart @@ -14,43 +14,31 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class FrameLayoutCrudScreen, - T> extends CrudCubitScreen { - final String? title; - final int? currentIndex; - - const FrameLayoutCrudScreen({ +abstract class FrameLayoutCubitConsumerScreen< + Cubit extends bloc_base.Cubit, + State extends Object> extends CubitConsumerScreen { + const FrameLayoutCubitConsumerScreen({ this.title, + this.leading, + this.actions, this.currentIndex, + super.key, }); + final int? currentIndex; + final String? title; + final Widget? leading; + final List? actions; + @override Widget parent(BuildContext context, Widget child) => FrameLayout( - title: title ?? 'Title', + title: title, + currentIndex: currentIndex, body: child, - currentIndex: currentIndex ?? 0, - ); -} - -abstract class FrameLayoutCrudListScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudListCubitScreen { - final String? title; - final int? currentIndex; - - const FrameLayoutCrudListScreen({ - this.title, - this.currentIndex, - }); - - @override - Widget parent(BuildContext context, Widget child) => FrameLayout( - title: title ?? 'Title', - body: child, - currentIndex: currentIndex ?? 0, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/consumers.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/consumers.dart new file mode 100644 index 00000000..7cac2b7f --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/consumers.dart @@ -0,0 +1,18 @@ +// 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 . + +export 'bases/bases.dart'; +export 'crud/crud.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart similarity index 50% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart index cb4d1ba6..89b36987 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/frame_layout_crud_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart @@ -18,40 +18,34 @@ import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class FrameLayoutCrudConsumerScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudCubitConsumerScreen { - final String? title; - final int? currentIndex; - - const FrameLayoutCrudConsumerScreen({ - this.title, - this.currentIndex, +abstract class AppBarLayoutCrudCubitConsumerScreen< + Cubit extends bloc_base.Cubit, T extends Object> + extends AppBarLayoutCubitConsumerScreen + with CrudMixin> { + const AppBarLayoutCrudCubitConsumerScreen({ + super.title, + super.leading, + super.actions, + super.key, }); @override - Widget parent(BuildContext context, Widget child) => FrameLayout( - title: title ?? 'Title', - body: child, - currentIndex: currentIndex ?? 0, - ); + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); } -abstract class FrameLayoutCrudListConsumerScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudListCubitConsumerScreen { - final String? title; - final int? currentIndex; - - const FrameLayoutCrudListConsumerScreen({ - this.title, - this.currentIndex, +abstract class AppBarLayoutCrudListCubitConsumerScreen< + Cubit extends bloc_base.Cubit, T extends Object> + extends AppBarLayoutCubitConsumerScreen + with CrudMixin> { + const AppBarLayoutCrudListCubitConsumerScreen({ + super.title, + super.leading, + super.actions, + super.key, }); @override - Widget parent(BuildContext context, Widget child) => FrameLayout( - title: title ?? 'Title', - body: child, - currentIndex: currentIndex ?? 0, - ); + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart new file mode 100644 index 00000000..06e86bb1 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart @@ -0,0 +1,47 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class BottomBarLayoutCrudCubitConsumerScreen< + Cubit extends bloc_base.Cubit, T extends Object> + extends BottomBarLayoutCubitConsumerScreen + with CrudMixin> { + const BottomBarLayoutCrudCubitConsumerScreen({ + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} + +abstract class BottomBarLayoutCrudListCubitConsumerScreen< + Cubit extends bloc_base.Cubit, T extends Object> + extends BottomBarLayoutCubitConsumerScreen + with CrudMixin> { + const BottomBarLayoutCrudListCubitConsumerScreen({ + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart new file mode 100644 index 00000000..0b3f1bee --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart @@ -0,0 +1,20 @@ +// 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 . + +export './app_bar_layout_crud_cubit_consumer_screen.dart'; +export './bottom_bar_layout_crud_cubit_consumer_screen.dart'; +export './frame_layout_crud_cubit_consumer_screen.dart'; +export './crud_cubit_consumer_screen.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart new file mode 100644 index 00000000..c3dd9782 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart @@ -0,0 +1,40 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + +abstract class CrudCubitConsumerScreen, + T extends Object> extends CubitConsumerScreen + with CrudMixin> { + const CrudCubitConsumerScreen({super.key}); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} + +abstract class CrudListCubitConsumerScreen< + Cubit extends bloc_base.Cubit, + T extends Object> extends CubitConsumerScreen + with CrudMixin> { + const CrudListCubitConsumerScreen({super.key}); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart new file mode 100644 index 00000000..204d1cd2 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart @@ -0,0 +1,53 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class FrameLayoutCrudCubitConsumerScreen< + Cubit extends bloc_base.Cubit, T extends Object> + extends FrameLayoutCubitConsumerScreen + with CrudMixin> { + const FrameLayoutCrudCubitConsumerScreen({ + super.title, + super.leading, + super.actions, + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} + +abstract class FrameLayoutCrudListCubitConsumerScreen< + Cubit extends bloc_base.Cubit, T extends Object> + extends FrameLayoutCubitConsumerScreen + with CrudMixin> { + const FrameLayoutCrudListCubitConsumerScreen({ + super.title, + super.leading, + super.actions, + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart deleted file mode 100644 index e3f58686..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud_cubit_consumer_screen_bases.dart +++ /dev/null @@ -1,61 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; -import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; - -abstract class CrudCubitConsumerScreenBase< - Cubit extends bloc_base.Cubit, - SuccessState extends CrudSuccess> - extends CubitConsumerScreen { - const CrudCubitConsumerScreenBase({super.key}); - - Widget errorBuilder(BuildContext context, CrudError state) => - context.components.errorWidget?.configure(error: state.message) ?? - const SizedBox.shrink(); - - Widget loadingBuilder(BuildContext context, CrudLoading state) => - context.components.loadingWidget ?? const SizedBox.shrink(); - - Widget initialBuilder(BuildContext context, CrudInitial state) => - const SizedBox.shrink(); - - Widget successBuilder(BuildContext context, SuccessState state); - - @override - Widget onBuild(BuildContext context, CrudState state) => - CrudBuilder( - errorBuilder: errorBuilder, - loadingBuilder: loadingBuilder, - initialBuilder: initialBuilder, - state: state, - builder: successBuilder, - ); -} - -abstract class CrudCubitConsumerScreen, - T> extends CrudCubitConsumerScreenBase> { - const CrudCubitConsumerScreen(); -} - -abstract class CrudListCubitConsumerScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudCubitConsumerScreenBase> { - const CrudListCubitConsumerScreen(); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart index ccd4538b..f5c14cde 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart @@ -14,11 +14,5 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'consumers/crud_cubit_consumer_screen_bases.dart'; -export 'consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart'; -export 'consumers/app_bar_cubit_consumer_screen.dart'; -export 'consumers/frame_layout_crud_consumer_screen.dart'; -export 'screens/crud_cubit_screen_base.dart'; -export 'screens/app_bar_cubit_screen.dart'; -export 'screens/bottom_navigation_bar_layout_crud_screen.dart'; -export 'screens/frame_layout_crud_screen.dart'; +export 'consumers/consumers.dart'; +export 'screens/screens.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/app_bar_layout_cubit_screen.dart similarity index 61% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/app_bar_layout_cubit_screen.dart index 252ec6b8..ce82fccb 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/app_bar_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/app_bar_layout_cubit_screen.dart @@ -16,38 +16,25 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class AppBarLayoutCrudConsumerScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudCubitConsumerScreen { - final String? title; - - const AppBarLayoutCrudConsumerScreen({ +abstract class AppBarLayoutCubitScreen, + State extends Object> extends CubitScreen { + const AppBarLayoutCubitScreen({ this.title, + this.leading, + this.actions, + super.key, }); + final String? title; + final Widget? leading; + final List? actions; + @override Widget parent(BuildContext context, Widget child) => AppBarLayout( - title: title ?? 'Title', - body: child, - ); -} - -abstract class AppBarLayoutCrudListConsumerScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudListCubitConsumerScreen { - final String? title; - final int? currentIndex; - - const AppBarLayoutCrudListConsumerScreen({ - this.title, - this.currentIndex, - }); - - @override - Widget parent(BuildContext context, Widget child) => AppBarLayout( - title: title ?? 'Title', + title: title, body: child, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bases.dart new file mode 100644 index 00000000..1b44493c --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bases.dart @@ -0,0 +1,19 @@ +// 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 . + +export 'app_bar_layout_cubit_screen.dart'; +export 'bottom_bar_layout_cubit_screen.dart'; +export 'frame_layout_cubit_screen.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bottom_bar_layout_cubit_screen.dart similarity index 58% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bottom_bar_layout_cubit_screen.dart index 354fca83..d864dbab 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bottom_navigation_bar_layout_crud_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bottom_bar_layout_cubit_screen.dart @@ -16,40 +16,22 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class BottomNavigationBarLayoutCrudConsumerScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudCubitConsumerScreen { - final int? currentIndex; - - const BottomNavigationBarLayoutCrudConsumerScreen({ +abstract class BottomBarLayoutCubitScreen, + State extends Object> extends CubitScreen { + const BottomBarLayoutCubitScreen({ this.currentIndex, + super.key, }); + final int? currentIndex; + @override Widget parent(BuildContext context, Widget child) => BottomNavigationBarLayout( + currentIndex: currentIndex, body: child, - currentIndex: currentIndex ?? 0, - ); -} - -abstract class BottomNavigationBarLayoutCrudListConsumerScreen< - Cubit extends bloc_base.Cubit, - T> extends CrudListCubitConsumerScreen { - final String? title; - final int? currentIndex; - - const BottomNavigationBarLayoutCrudListConsumerScreen({ - this.title, - this.currentIndex, - }); - - @override - Widget parent(BuildContext context, Widget child) => - BottomNavigationBarLayout( - body: child, - currentIndex: currentIndex ?? 0, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/frame_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/frame_layout_cubit_screen.dart new file mode 100644 index 00000000..769664a2 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/frame_layout_cubit_screen.dart @@ -0,0 +1,43 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class FrameLayoutCubitScreen, + State extends Object> extends CubitScreen { + const FrameLayoutCubitScreen({ + this.title, + this.leading, + this.actions, + this.currentIndex, + super.key, + }); + + final int? currentIndex; + final String? title; + final Widget? leading; + final List? actions; + + @override + Widget parent(BuildContext context, Widget child) => FrameLayout( + title: title, + currentIndex: currentIndex, + body: child, + ); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart new file mode 100644 index 00000000..f82fb7a1 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart @@ -0,0 +1,51 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class AppBarLayoutCrudCubitScreen< + Cubit extends bloc_base.Cubit, + T extends Object> extends AppBarLayoutCubitScreen + with CrudMixin> { + const AppBarLayoutCrudCubitScreen({ + super.title, + super.leading, + super.actions, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} + +abstract class AppBarLayoutCrudListCubitScreen< + Cubit extends bloc_base.Cubit, + T extends Object> extends AppBarLayoutCubitScreen + with CrudMixin> { + const AppBarLayoutCrudListCubitScreen({ + super.title, + super.leading, + super.actions, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart new file mode 100644 index 00000000..73c0f59e --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart @@ -0,0 +1,47 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class BottomBarLayoutCrudCubitScreen< + Cubit extends bloc_base.Cubit, + T extends Object> extends BottomBarLayoutCubitScreen + with CrudMixin> { + const BottomBarLayoutCrudCubitScreen({ + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} + +abstract class BottomBarLayoutCrudListCubitScreen< + Cubit extends bloc_base.Cubit, + T extends Object> extends BottomBarLayoutCubitScreen + with CrudMixin> { + const BottomBarLayoutCrudListCubitScreen({ + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart new file mode 100644 index 00000000..1b71aa69 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart @@ -0,0 +1,20 @@ +// 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 . + +export 'app_bar_layout_crud_cubit_screen.dart'; +export 'bottom_bar_layout_crud_cubit_screen.dart'; +export 'frame_layout_crud_cubit_screen.dart'; +export './crud_cubit_screen.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart new file mode 100644 index 00000000..00b95866 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart @@ -0,0 +1,39 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; + +abstract class CrudCubitScreen, + T extends Object> extends CubitScreen + with CrudMixin> { + const CrudCubitScreen({super.key}); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} + +abstract class CrudListCubitScreen, + T extends Object> extends CubitScreen + with CrudMixin> { + const CrudListCubitScreen({super.key}); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart new file mode 100644 index 00000000..736e8696 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart @@ -0,0 +1,53 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class FrameLayoutCrudCubitScreen< + Cubit extends bloc_base.Cubit, + T extends Object> extends FrameLayoutCubitScreen + with CrudMixin> { + const FrameLayoutCrudCubitScreen({ + super.title, + super.leading, + super.actions, + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} + +abstract class FrameLayoutCrudListCubitScreen< + Cubit extends bloc_base.Cubit, + T extends Object> extends FrameLayoutCubitScreen + with CrudMixin> { + const FrameLayoutCrudListCubitScreen({ + super.title, + super.leading, + super.actions, + super.currentIndex, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart new file mode 100644 index 00000000..57ee4935 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart @@ -0,0 +1,18 @@ +// 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 . + +export './bases/bases.dart'; +export './crud/crud.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/src.dart b/packages/wyatt_bloc_layout/lib/src/src.dart index e23b026c..1bc39e49 100644 --- a/packages/wyatt_bloc_layout/lib/src/src.dart +++ b/packages/wyatt_bloc_layout/lib/src/src.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . export 'presentation/presentation.dart'; +export 'core/core.dart'; export 'package:flutter_bloc/flutter_bloc.dart'; export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; diff --git a/packages/wyatt_bloc_layout/models/class-models.puml b/packages/wyatt_bloc_layout/models/class-models.puml new file mode 100644 index 00000000..3a557834 --- /dev/null +++ b/packages/wyatt_bloc_layout/models/class-models.puml @@ -0,0 +1,181 @@ +@startuml +set namespaceSeparator :: + +abstract class "wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" { + +Widget errorBuilder() + +Widget loadingBuilder() + +Widget initialBuilder() + +Widget successBuilder() + +Widget crudBuilder() +} + +abstract class "wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" { + +int? currentIndex + +Widget parent() +} + +"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" { + +String? title + +Widget? leading + +List? actions + +Widget parent() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" o-- "flutter::src::widgets::framework.dart::Widget" +"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" { + +int? currentIndex + +String? title + +Widget? leading + +List? actions + +Widget parent() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "flutter::src::widgets::framework.dart::Widget" +"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudListCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudListCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudListCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudListCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudListCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudListCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudListCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudListCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudListCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudListCubitScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudListCubitScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudListCubitScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" { + +int? currentIndex + +Widget parent() +} + +"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" { + +String? title + +Widget? leading + +List? actions + +Widget parent() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" o-- "flutter::src::widgets::framework.dart::Widget" +"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" { + +int? currentIndex + +String? title + +Widget? leading + +List? actions + +Widget parent() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" o-- "flutter::src::widgets::framework.dart::Widget" +"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudListCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudListCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudListCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudListCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudListCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudListCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudListCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudListCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudListCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudCubitConsumerScreen" + +abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudListCubitConsumerScreen" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudListCubitConsumerScreen" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudListCubitConsumerScreen" + + +@enduml \ No newline at end of file -- 2.47.2 From 04a87fe32a0cca24171c333ded39c7469c1df2cd Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 19 Dec 2022 19:21:38 -0500 Subject: [PATCH 054/320] feat(bloc_layout): make package compatible with crud cubit (close #111) --- .../crud/app_bar_layout_crud_cubit_consumer_screen.dart | 4 ++-- .../crud/bottom_bar_layout_crud_cubit_consumer_screen.dart | 4 ++-- .../consumers/crud/crud_cubit_consumer_screen.dart | 4 ++-- .../crud/frame_layout_crud_cubit_consumer_screen.dart | 4 ++-- .../screens/crud/app_bar_layout_crud_cubit_screen.dart | 4 ++-- .../screens/crud/bottom_bar_layout_crud_cubit_screen.dart | 4 ++-- .../lib/src/presentation/screens/crud/crud_cubit_screen.dart | 4 ++-- .../screens/crud/frame_layout_crud_cubit_screen.dart | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart index 89b36987..61e0bc86 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart @@ -19,7 +19,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class AppBarLayoutCrudCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object> + Cubit extends bloc_base.Cubit, T extends Object?> extends AppBarLayoutCubitConsumerScreen with CrudMixin> { const AppBarLayoutCrudCubitConsumerScreen({ @@ -35,7 +35,7 @@ abstract class AppBarLayoutCrudCubitConsumerScreen< } abstract class AppBarLayoutCrudListCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object> + Cubit extends bloc_base.Cubit, T extends Object?> extends AppBarLayoutCubitConsumerScreen with CrudMixin> { const AppBarLayoutCrudListCubitConsumerScreen({ diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart index 06e86bb1..2cfd586b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart @@ -19,7 +19,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomBarLayoutCrudCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object> + Cubit extends bloc_base.Cubit, T extends Object?> extends BottomBarLayoutCubitConsumerScreen with CrudMixin> { const BottomBarLayoutCrudCubitConsumerScreen({ @@ -33,7 +33,7 @@ abstract class BottomBarLayoutCrudCubitConsumerScreen< } abstract class BottomBarLayoutCrudListCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object> + Cubit extends bloc_base.Cubit, T extends Object?> extends BottomBarLayoutCubitConsumerScreen with CrudMixin> { const BottomBarLayoutCrudListCubitConsumerScreen({ diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart index c3dd9782..08597474 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart @@ -19,7 +19,7 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; abstract class CrudCubitConsumerScreen, - T extends Object> extends CubitConsumerScreen + T extends Object?> extends CubitConsumerScreen with CrudMixin> { const CrudCubitConsumerScreen({super.key}); @@ -30,7 +30,7 @@ abstract class CrudCubitConsumerScreen, abstract class CrudListCubitConsumerScreen< Cubit extends bloc_base.Cubit, - T extends Object> extends CubitConsumerScreen + T extends Object?> extends CubitConsumerScreen with CrudMixin> { const CrudListCubitConsumerScreen({super.key}); diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart index 204d1cd2..48d5c73d 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart @@ -19,7 +19,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class FrameLayoutCrudCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object> + Cubit extends bloc_base.Cubit, T extends Object?> extends FrameLayoutCubitConsumerScreen with CrudMixin> { const FrameLayoutCrudCubitConsumerScreen({ @@ -36,7 +36,7 @@ abstract class FrameLayoutCrudCubitConsumerScreen< } abstract class FrameLayoutCrudListCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object> + Cubit extends bloc_base.Cubit, T extends Object?> extends FrameLayoutCubitConsumerScreen with CrudMixin> { const FrameLayoutCrudListCubitConsumerScreen({ diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart index f82fb7a1..4cda2415 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart @@ -20,7 +20,7 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class AppBarLayoutCrudCubitScreen< Cubit extends bloc_base.Cubit, - T extends Object> extends AppBarLayoutCubitScreen + T extends Object?> extends AppBarLayoutCubitScreen with CrudMixin> { const AppBarLayoutCrudCubitScreen({ super.title, @@ -36,7 +36,7 @@ abstract class AppBarLayoutCrudCubitScreen< abstract class AppBarLayoutCrudListCubitScreen< Cubit extends bloc_base.Cubit, - T extends Object> extends AppBarLayoutCubitScreen + T extends Object?> extends AppBarLayoutCubitScreen with CrudMixin> { const AppBarLayoutCrudListCubitScreen({ super.title, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart index 73c0f59e..5e79311d 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart @@ -20,7 +20,7 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomBarLayoutCrudCubitScreen< Cubit extends bloc_base.Cubit, - T extends Object> extends BottomBarLayoutCubitScreen + T extends Object?> extends BottomBarLayoutCubitScreen with CrudMixin> { const BottomBarLayoutCrudCubitScreen({ super.currentIndex, @@ -34,7 +34,7 @@ abstract class BottomBarLayoutCrudCubitScreen< abstract class BottomBarLayoutCrudListCubitScreen< Cubit extends bloc_base.Cubit, - T extends Object> extends BottomBarLayoutCubitScreen + T extends Object?> extends BottomBarLayoutCubitScreen with CrudMixin> { const BottomBarLayoutCrudListCubitScreen({ super.currentIndex, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart index 00b95866..7c8b8fa1 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart @@ -19,7 +19,7 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; abstract class CrudCubitScreen, - T extends Object> extends CubitScreen + T extends Object?> extends CubitScreen with CrudMixin> { const CrudCubitScreen({super.key}); @@ -29,7 +29,7 @@ abstract class CrudCubitScreen, } abstract class CrudListCubitScreen, - T extends Object> extends CubitScreen + T extends Object?> extends CubitScreen with CrudMixin> { const CrudListCubitScreen({super.key}); diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart index 736e8696..2f738e5d 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart @@ -20,7 +20,7 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class FrameLayoutCrudCubitScreen< Cubit extends bloc_base.Cubit, - T extends Object> extends FrameLayoutCubitScreen + T extends Object?> extends FrameLayoutCubitScreen with CrudMixin> { const FrameLayoutCrudCubitScreen({ super.title, @@ -37,7 +37,7 @@ abstract class FrameLayoutCrudCubitScreen< abstract class FrameLayoutCrudListCubitScreen< Cubit extends bloc_base.Cubit, - T extends Object> extends FrameLayoutCubitScreen + T extends Object?> extends FrameLayoutCubitScreen with CrudMixin> { const FrameLayoutCrudListCubitScreen({ super.title, -- 2.47.2 From c70d4c6650dc4d87a47f50dbe776840d089bce6f Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 6 Feb 2023 18:40:35 +0100 Subject: [PATCH 055/320] build: update mason file to add new tempalte --- mason-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mason-lock.json b/mason-lock.json index 229f2288..9a9c7463 100644 --- a/mason-lock.json +++ b/mason-lock.json @@ -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"}}}} \ No newline at end of file +{"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"}}}} \ No newline at end of file -- 2.47.2 From b02524700245c1f7dbca16cf22d685817416a5c5 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 6 Feb 2023 18:41:54 +0100 Subject: [PATCH 056/320] feat: add class annotation for component code generators --- mason.yaml | 10 +-- .../.gitignore | 7 ++ .../.vscode/extensions.json | 24 +++++++ .../.vscode/launch.json | 34 +++++++++ .../.vscode/settings.json | 72 +++++++++++++++++++ .../CHANGELOG.md | 3 + .../README.md | 66 +++++++++++++++++ .../analysis_options.yaml | 7 ++ .../example/.gitignore | 44 ++++++++++++ .../example/.metadata | 30 ++++++++ .../example/README.md | 16 +++++ .../example/analysis_options.yaml | 7 ++ .../example/lib/main.dart | 29 ++++++++ .../example/pubspec.yaml | 27 +++++++ .../lib/component_copy_with_extension.dart | 22 ++++++ .../src/component_copy_with_extension.dart | 25 +++++++ .../lib/src/component_proxy_extension.dart | 25 +++++++ .../lib/src/domain/component_annotation.dart | 24 +++++++ .../lib/src/domain/domain.dart | 17 +++++ .../pubspec.yaml | 20 ++++++ 20 files changed, 504 insertions(+), 5 deletions(-) create mode 100644 packages/wyatt_component_copy_with_extension/.gitignore create mode 100644 packages/wyatt_component_copy_with_extension/.vscode/extensions.json create mode 100644 packages/wyatt_component_copy_with_extension/.vscode/launch.json create mode 100644 packages/wyatt_component_copy_with_extension/.vscode/settings.json create mode 100644 packages/wyatt_component_copy_with_extension/CHANGELOG.md create mode 100644 packages/wyatt_component_copy_with_extension/README.md create mode 100644 packages/wyatt_component_copy_with_extension/analysis_options.yaml create mode 100644 packages/wyatt_component_copy_with_extension/example/.gitignore create mode 100644 packages/wyatt_component_copy_with_extension/example/.metadata create mode 100644 packages/wyatt_component_copy_with_extension/example/README.md create mode 100644 packages/wyatt_component_copy_with_extension/example/analysis_options.yaml create mode 100644 packages/wyatt_component_copy_with_extension/example/lib/main.dart create mode 100644 packages/wyatt_component_copy_with_extension/example/pubspec.yaml create mode 100644 packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart create mode 100644 packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart create mode 100644 packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart create mode 100644 packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart create mode 100644 packages/wyatt_component_copy_with_extension/lib/src/domain/domain.dart create mode 100644 packages/wyatt_component_copy_with_extension/pubspec.yaml diff --git a/mason.yaml b/mason.yaml index c9c22317..e0e797ee 100644 --- a/mason.yaml +++ b/mason.yaml @@ -1,13 +1,13 @@ bricks: wyatt_clean_code: 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 wyatt_feature_brick: 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 - wyatt_package: + wyatt_package_template: git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git - path: bricks/wyatt_package \ No newline at end of file + url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git" + path: bricks/wyatt_package_template \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/.gitignore b/packages/wyatt_component_copy_with_extension/.gitignore new file mode 100644 index 00000000..3cceda55 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/.gitignore @@ -0,0 +1,7 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ + +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/packages/wyatt_component_copy_with_extension/.vscode/extensions.json b/packages/wyatt_component_copy_with_extension/.vscode/extensions.json new file mode 100644 index 00000000..30cd2233 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/.vscode/extensions.json @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +{ + "recommendations": [ + "psioniq.psi-header", + "blaugold.melos-code" + ] +} \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/.vscode/launch.json b/packages/wyatt_component_copy_with_extension/.vscode/launch.json new file mode 100644 index 00000000..653eabc8 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/.vscode/launch.json @@ -0,0 +1,34 @@ +/* + * 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 . + */ + +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Example", + "request": "launch", + "type": "dart", + "cwd": "example/", + "program": "lib/main.dart", + "flutterMode": "debug" + }, + ] +} \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/.vscode/settings.json b/packages/wyatt_component_copy_with_extension/.vscode/settings.json new file mode 100644 index 00000000..a729c46c --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/.vscode/settings.json @@ -0,0 +1,72 @@ +{ + "dart.runPubGetOnPubspecChanges": "never", + "bloc.newCubitTemplate.type": "equatable", + "psi-header.changes-tracking": { + "isActive": true + }, + "psi-header.config": { + "blankLinesAfter": 1, + "forceToTop": true + }, + "psi-header.lang-config": [ + { + "beforeHeader": [ + "# -*- coding:utf-8 -*-", + "#!/usr/bin/env python3" + ], + "begin": "###", + "end": "###", + "language": "python", + "prefix": "# " + }, + { + "beforeHeader": [ + "#!/usr/bin/env sh", + "" + ], + "language": "shellscript", + "begin": "", + "end": "", + "prefix": "# " + }, + { + "begin": "", + "end": "", + "language": "dart", + "prefix": "// " + }, + { + "begin": "", + "end": "", + "language": "yaml", + "prefix": "# " + }, + { + "begin": "", + "language": "markdown", + }, + ], + "psi-header.templates": [ + { + "language": "*", + "template": [ + "Copyright (C) <> 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 ." + ], + } + ], +} \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/CHANGELOG.md b/packages/wyatt_component_copy_with_extension/CHANGELOG.md new file mode 100644 index 00000000..effe43c8 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/wyatt_component_copy_with_extension/README.md b/packages/wyatt_component_copy_with_extension/README.md new file mode 100644 index 00000000..3ef1d24d --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/README.md @@ -0,0 +1,66 @@ + + +# Flutter - Component Copy With Extension + +

+ Style: Wyatt Analysis + SDK: Flutter +

+ +This package provides annotations for generating code and simplifying the use of an UI kit within a Flutter application. **The package contains only the annotation classes**. + +## Annotation Classes + +#### `ComponentProxyExtension` + +This annotation class is used to annotate a new component of an UI kit in the `wyatt_ui_components` package. It generates the abstract proxy of the component and allows access to all its properties in different packages and throughout the application. + +```dart +part 'text_field_component.g.dart'; + +@ComponentProxyExtension() +abstract class TextFieldComponent extends Component { + with CopyWithMixin<$TextFieldComponentCWProxy> { + + const TextFieldComponent({ + ... + }); +} +``` + +#### `ComponentCopyWithExtension` + +This annotation class is used to annotate the implementation of components directly in the application. It generates the implementation of the proxy and the mixin to ensure that the component meets the specifications defined in the `wyatt_ui_components package`. + +```dart +part 'text_field_component.g.dart'; + +@ComponentProxyExtension() +abstract class TextFieldComponent extends Component { + with CopyWithMixin<$TextFieldComponentCWProxy> { + + const TextFieldComponent({ + ... + }); +} +``` + +## Additional features + +The skipFields field allows you to directly and specifically change a field. This makes it easier to use. You can disable it through annotation. diff --git a/packages/wyatt_component_copy_with_extension/analysis_options.yaml b/packages/wyatt_component_copy_with_extension/analysis_options.yaml new file mode 100644 index 00000000..0939257e --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/analysis_options.yaml @@ -0,0 +1,7 @@ + +include: package:wyatt_analysis/analysis_options.flutter.yaml + + + + + diff --git a/packages/wyatt_component_copy_with_extension/example/.gitignore b/packages/wyatt_component_copy_with_extension/example/.gitignore new file mode 100644 index 00000000..24476c5d --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/example/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/wyatt_component_copy_with_extension/example/.metadata b/packages/wyatt_component_copy_with_extension/example/.metadata new file mode 100644 index 00000000..30e0d3ce --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/example/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + - platform: web + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/wyatt_component_copy_with_extension/example/README.md b/packages/wyatt_component_copy_with_extension/example/README.md new file mode 100644 index 00000000..2b3fce4c --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/example/README.md @@ -0,0 +1,16 @@ +# example + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/packages/wyatt_component_copy_with_extension/example/analysis_options.yaml b/packages/wyatt_component_copy_with_extension/example/analysis_options.yaml new file mode 100644 index 00000000..0939257e --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/example/analysis_options.yaml @@ -0,0 +1,7 @@ + +include: package:wyatt_analysis/analysis_options.flutter.yaml + + + + + diff --git a/packages/wyatt_component_copy_with_extension/example/lib/main.dart b/packages/wyatt_component_copy_with_extension/example/lib/main.dart new file mode 100644 index 00000000..f728d06c --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/example/lib/main.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +@ComponentProxyExtension() +class BasicComponentAnnotationExemple {} + +@ComponentProxyExtension(skipFields: true) +class ComponentAnnotationExempleWithSkipFields {} + +@ComponentCopyWithExtension() +class BasicCustomComponent {} + +@ComponentCopyWithExtension(skipFields: false) +class CustomComponentAnnotationExempleWithSkipFields {} diff --git a/packages/wyatt_component_copy_with_extension/example/pubspec.yaml b/packages/wyatt_component_copy_with_extension/example/pubspec.yaml new file mode 100644 index 00000000..5f2cafd0 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/example/pubspec.yaml @@ -0,0 +1,27 @@ +name: component_copy_with_extension_example +description: A new Flutter project. +version: 1.0.0 + +publish_to: "none" + +environment: + sdk: ">=2.19.0 <3.0.0" + flutter: ">=3.0.0" + +dependencies: + flutter: + sdk: flutter + wyatt_component_copy_with_extension: + path: "../" + +dev_dependencies: + flutter_test: + sdk: flutter + + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.3.0 + +# The following section is specific to Flutter. +flutter: + uses-material-design: true diff --git a/packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart b/packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart new file mode 100644 index 00000000..9ba9c518 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart @@ -0,0 +1,22 @@ +// 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 . + +/// Extension for component copy with feature +library component_copy_with_extension; + +export './src/domain/domain.dart'; +export 'src/component_copy_with_extension.dart'; +export 'src/component_proxy_extension.dart'; diff --git a/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart b/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart new file mode 100644 index 00000000..482b1748 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart @@ -0,0 +1,25 @@ +// 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 . + +import 'package:meta/meta_meta.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +/// Annotation used to indicate that the `copyWith` extension +/// should be generated for the compononent. +@Target({TargetKind.classType}) +class ComponentCopyWithExtension extends ComponentAnnotation { + const ComponentCopyWithExtension({super.skipFields}); +} diff --git a/packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart b/packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart new file mode 100644 index 00000000..3e75eef5 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart @@ -0,0 +1,25 @@ +// 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 . + +import 'package:meta/meta_meta.dart'; + +@Target({TargetKind.classType}) +class ComponentProxyExtension { + const ComponentProxyExtension({ + this.skipFields = true, + }); + + final bool? skipFields; +} diff --git a/packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart b/packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart new file mode 100644 index 00000000..1faf6119 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart @@ -0,0 +1,24 @@ +// 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 . + +abstract class ComponentAnnotation { + const ComponentAnnotation({this.skipFields = true}); + + /// Prevent the library from generating `copyWith` functions for individual + /// fields e.g. `instance.copyWith.id("123")`. If you want to use only + /// copyWith(...) function. Default is `true`. + final bool? skipFields; +} diff --git a/packages/wyatt_component_copy_with_extension/lib/src/domain/domain.dart b/packages/wyatt_component_copy_with_extension/lib/src/domain/domain.dart new file mode 100644 index 00000000..c06b052c --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/lib/src/domain/domain.dart @@ -0,0 +1,17 @@ +// 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 . + +export './component_annotation.dart'; diff --git a/packages/wyatt_component_copy_with_extension/pubspec.yaml b/packages/wyatt_component_copy_with_extension/pubspec.yaml new file mode 100644 index 00000000..9d4c06bd --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/pubspec.yaml @@ -0,0 +1,20 @@ +name: wyatt_component_copy_with_extension +description: Extension for component copy with feature. +repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/component_copy_with_extension +version: 1.0.0 + +environment: + sdk: ">=2.19.0 <3.0.0" + +dependencies: + meta: ^1.8.0 + path: ^1.8.0 + +dev_dependencies: + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.3.0 + +# The following section is specific to Flutter. +flutter: + uses-material-design: true -- 2.47.2 From 46c51525e82f2b19f5657ff121db30ca2d1df266 Mon Sep 17 00:00:00 2001 From: AN12345 Date: Mon, 6 Feb 2023 18:42:34 +0100 Subject: [PATCH 057/320] feat: add generators for components proxy and mixins to enable copywith methods --- .../wyatt_component_copy_with_gen/.gitignore | 7 ++ .../.vscode/extensions.json | 24 +++++ .../.vscode/launch.json | 34 +++++++ .../.vscode/settings.json | 72 ++++++++++++++ .../CHANGELOG.md | 3 + .../wyatt_component_copy_with_gen/README.md | 57 +++++++++++ .../analysis_options.yaml | 7 ++ .../wyatt_component_copy_with_gen/build.yaml | 21 ++++ .../example/.gitignore | 44 +++++++++ .../example/.metadata | 30 ++++++ .../example/README.md | 16 +++ .../example/analysis_options.yaml | 7 ++ .../example/lib/custom_app_bar_example.dart | 32 ++++++ .../example/lib/custom_app_bar_example.g.dart | 36 +++++++ .../example/pubspec.yaml | 28 ++++++ .../lib/component_copy_with_gen.dart | 21 ++++ .../lib/src/builder.dart | 28 ++++++ .../component_copy_with_generator.dart | 97 +++++++++++++++++++ .../generators/component_proxy_generator.dart | 75 ++++++++++++++ .../pubspec.yaml | 23 +++++ 20 files changed, 662 insertions(+) create mode 100644 packages/wyatt_component_copy_with_gen/.gitignore create mode 100644 packages/wyatt_component_copy_with_gen/.vscode/extensions.json create mode 100644 packages/wyatt_component_copy_with_gen/.vscode/launch.json create mode 100644 packages/wyatt_component_copy_with_gen/.vscode/settings.json create mode 100644 packages/wyatt_component_copy_with_gen/CHANGELOG.md create mode 100644 packages/wyatt_component_copy_with_gen/README.md create mode 100644 packages/wyatt_component_copy_with_gen/analysis_options.yaml create mode 100644 packages/wyatt_component_copy_with_gen/build.yaml create mode 100644 packages/wyatt_component_copy_with_gen/example/.gitignore create mode 100644 packages/wyatt_component_copy_with_gen/example/.metadata create mode 100644 packages/wyatt_component_copy_with_gen/example/README.md create mode 100644 packages/wyatt_component_copy_with_gen/example/analysis_options.yaml create mode 100644 packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart create mode 100644 packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart create mode 100644 packages/wyatt_component_copy_with_gen/example/pubspec.yaml create mode 100644 packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart create mode 100644 packages/wyatt_component_copy_with_gen/lib/src/builder.dart create mode 100644 packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart create mode 100644 packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart create mode 100644 packages/wyatt_component_copy_with_gen/pubspec.yaml diff --git a/packages/wyatt_component_copy_with_gen/.gitignore b/packages/wyatt_component_copy_with_gen/.gitignore new file mode 100644 index 00000000..3cceda55 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/.gitignore @@ -0,0 +1,7 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ + +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/packages/wyatt_component_copy_with_gen/.vscode/extensions.json b/packages/wyatt_component_copy_with_gen/.vscode/extensions.json new file mode 100644 index 00000000..30cd2233 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/.vscode/extensions.json @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +{ + "recommendations": [ + "psioniq.psi-header", + "blaugold.melos-code" + ] +} \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_gen/.vscode/launch.json b/packages/wyatt_component_copy_with_gen/.vscode/launch.json new file mode 100644 index 00000000..653eabc8 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/.vscode/launch.json @@ -0,0 +1,34 @@ +/* + * 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 . + */ + +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Example", + "request": "launch", + "type": "dart", + "cwd": "example/", + "program": "lib/main.dart", + "flutterMode": "debug" + }, + ] +} \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_gen/.vscode/settings.json b/packages/wyatt_component_copy_with_gen/.vscode/settings.json new file mode 100644 index 00000000..a729c46c --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/.vscode/settings.json @@ -0,0 +1,72 @@ +{ + "dart.runPubGetOnPubspecChanges": "never", + "bloc.newCubitTemplate.type": "equatable", + "psi-header.changes-tracking": { + "isActive": true + }, + "psi-header.config": { + "blankLinesAfter": 1, + "forceToTop": true + }, + "psi-header.lang-config": [ + { + "beforeHeader": [ + "# -*- coding:utf-8 -*-", + "#!/usr/bin/env python3" + ], + "begin": "###", + "end": "###", + "language": "python", + "prefix": "# " + }, + { + "beforeHeader": [ + "#!/usr/bin/env sh", + "" + ], + "language": "shellscript", + "begin": "", + "end": "", + "prefix": "# " + }, + { + "begin": "", + "end": "", + "language": "dart", + "prefix": "// " + }, + { + "begin": "", + "end": "", + "language": "yaml", + "prefix": "# " + }, + { + "begin": "", + "language": "markdown", + }, + ], + "psi-header.templates": [ + { + "language": "*", + "template": [ + "Copyright (C) <> 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 ." + ], + } + ], +} \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_gen/CHANGELOG.md b/packages/wyatt_component_copy_with_gen/CHANGELOG.md new file mode 100644 index 00000000..effe43c8 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/wyatt_component_copy_with_gen/README.md b/packages/wyatt_component_copy_with_gen/README.md new file mode 100644 index 00000000..6b606cd8 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/README.md @@ -0,0 +1,57 @@ + + +# Dart - Component Copy With Gen + +

+ Style: Wyatt Analysis + SDK: Dart & Flutter +

+ +A Dart package for generating code from annotations to ease the use of a UIKit in Flutter applications. The generated code is based on the annotation classes present in the 'wyatt_component_copy_with_extension' package. + +## Features + +- Supports the generation of abstract proxies in the `wyatt_ui_components` package. +- Supports direct use in Flutter applications. + +## Usage + +### In the 'wyatt_ui_components' package + +- Add the appropriate annotation when addicdng a new component. +- Run the build runner command to generate the proxy. + +### In Flutter applications + +- Add the following dependencies to your pubspec.yaml: + +```yaml +dependencies: + ... + wyatt_component_copy_with_extension: ^0.0.1 +dev_dependencies: + ... + wyatt_component_copy_with_gen: ^0.0.1 + build_runner: ^2.3.3 +``` + +- In your UIKit, extend the desired component class and add the appropriate annotation. +- Run the code generation command via the build runner. + +For further details and additional features on class annotation, see the 'wyatt_component_copy_with_extension' package's README. diff --git a/packages/wyatt_component_copy_with_gen/analysis_options.yaml b/packages/wyatt_component_copy_with_gen/analysis_options.yaml new file mode 100644 index 00000000..50ed209d --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/analysis_options.yaml @@ -0,0 +1,7 @@ + + + +include: package:wyatt_analysis/analysis_options.yaml + + + diff --git a/packages/wyatt_component_copy_with_gen/build.yaml b/packages/wyatt_component_copy_with_gen/build.yaml new file mode 100644 index 00000000..5d11aeaf --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/build.yaml @@ -0,0 +1,21 @@ +targets: + $default: + builders: + component_copy_with_gen: + enabled: true + generate_for: + exclude: + - test + - example + include: + - test/gen_* + +builders: + component_copy_with_gen: + target: ":component_copy_with_gen" + import: "package:wyatt_component_copy_with_gen/component_copy_with_gen.dart" + builder_factories: ["componentCopyWithReporter"] + build_extensions: { ".dart": ["copy_with_extension_gen.g.part"] } + auto_apply: dependents + build_to: cache + applies_builders: ["source_gen|combining_builder"] diff --git a/packages/wyatt_component_copy_with_gen/example/.gitignore b/packages/wyatt_component_copy_with_gen/example/.gitignore new file mode 100644 index 00000000..24476c5d --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/wyatt_component_copy_with_gen/example/.metadata b/packages/wyatt_component_copy_with_gen/example/.metadata new file mode 100644 index 00000000..30e0d3ce --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + - platform: web + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/wyatt_component_copy_with_gen/example/README.md b/packages/wyatt_component_copy_with_gen/example/README.md new file mode 100644 index 00000000..2b3fce4c --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/README.md @@ -0,0 +1,16 @@ +# example + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/packages/wyatt_component_copy_with_gen/example/analysis_options.yaml b/packages/wyatt_component_copy_with_gen/example/analysis_options.yaml new file mode 100644 index 00000000..50ed209d --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/analysis_options.yaml @@ -0,0 +1,7 @@ + + + +include: package:wyatt_analysis/analysis_options.yaml + + + diff --git a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart b/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart new file mode 100644 index 00000000..7c69d3b3 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart @@ -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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +// part 'custom_app_bar_example.g.dart'; + +@ComponentCopyWithExtension() +class CustomAppBarExample extends AppBarComponent + with $CustomAppBarExampleCWProxyImpl { + const CustomAppBarExample({super.title, super.key}); + + @override + Widget build(BuildContext context) => AppBar( + title: Text(super.title ?? ''), + ); +} diff --git a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart b/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart new file mode 100644 index 00000000..95d56868 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart @@ -0,0 +1,36 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'custom_app_bar_example.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $CustomAppBarExampleCWProxyImpl implements $AppBarComponentCWProxy { + const $CustomAppBarExampleCWProxyImpl(this._value); + final CustomAppBarExample _value; + @override + CustomAppBarExample title(String? title) => this(title: title); + @override + CustomAppBarExample leading(Widget? leading) => this(leading: leading); + @override + CustomAppBarExample actions(List? actions) => this(actions: actions); + @override + CustomAppBarExample key(Key? key) => this(key: key); + @override + CustomAppBarExample call({ + String? title, + Widget? leading, + List? actions, + Key? key, + }) => + CustomAppBarExample( + title: title ?? _value.title, + key: key ?? _value.key, + ); +} + +mixin $CustomAppBarExampleCWMixin on Component { + $AppBarComponentCWProxy get copyWith => + $CustomAppBarExampleCWProxyImpl(this as CustomAppBarExample); +} diff --git a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml new file mode 100644 index 00000000..37747c25 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml @@ -0,0 +1,28 @@ +name: component_copy_with_gen_example +description: A new Flutter project. +version: 1.0.0 + +publish_to: "none" + +environment: + sdk: ">=2.19.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + wyatt_component_copy_with_extension: + path: "../../wyatt_component_copy_with_extension" + + wyatt_ui_components: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_ui_components + +dev_dependencies: + build_runner: ^2.3.3 + wyatt_component_copy_with_gen: + path: "../" + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.3.0 diff --git a/packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart b/packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart new file mode 100644 index 00000000..6e51cdd6 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart @@ -0,0 +1,21 @@ +// 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 . + +/// Generator for copywith method for components +library component_copy_with_gen; + +export 'src/builder.dart'; +export 'src/generators/component_copy_with_generator.dart'; diff --git a/packages/wyatt_component_copy_with_gen/lib/src/builder.dart b/packages/wyatt_component_copy_with_gen/lib/src/builder.dart new file mode 100644 index 00000000..c82cd976 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/lib/src/builder.dart @@ -0,0 +1,28 @@ +// 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 . + +import 'package:build/build.dart'; +import 'package:source_gen/source_gen.dart'; +import 'package:wyatt_component_copy_with_gen/src/generators/component_copy_with_generator.dart'; +import 'package:wyatt_component_copy_with_gen/src/generators/component_proxy_generator.dart'; + +Builder componentCopyWithReporter(BuilderOptions options) => SharedPartBuilder( + [ + ComponentProxyGenerator(), + ComponentCopyWithGenerator(), + ], + 'component_copy_with', + ); diff --git a/packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart new file mode 100644 index 00000000..0c9994cb --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart @@ -0,0 +1,97 @@ +// 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 . + +import 'dart:async'; + +import 'package:analyzer/dart/element/element.dart'; +import 'package:build/build.dart'; +import 'package:source_gen/source_gen.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +class ComponentCopyWithGenerator + extends GeneratorForAnnotation { + @override + FutureOr generateForAnnotatedElement( + Element element, + ConstantReader annotation, + BuildStep buildStep, + ) { + /// Check element type + if (element is! ClassElement) { + throw InvalidGenerationSourceError( + 'Only classes can be annotated with "CopyWith". "$element" is ' + 'not a ClassElement.', + element: element, + ); + } + + final classAnnotation = ComponentCopyWithExtension( + skipFields: annotation.peek('skipFields')?.boolValue ?? true, + ); + + final generatedCode = StringBuffer() + + // Generate CopyWith Proxy implementation. + ..write('class \$${element.displayName}CWProxyImpl implements ' + '\$${element.supertype?.getDisplayString( + withNullability: false, + )}CWProxy { ' + 'const \$${element.displayName}CWProxyImpl ' + '(this._value); ' + 'final ${element.displayName} _value;'); + + if (classAnnotation.skipFields ?? true) { + for (final superField + in element.supertype!.element.constructors.first.parameters) { + final superFieldDisplayName = superField.displayName; + generatedCode.write('@override ${element.displayName} ' + '$superFieldDisplayName(${superField.type.getDisplayString( + withNullability: false, + )}? ' + ' $superFieldDisplayName)' + ' => this($superFieldDisplayName : $superFieldDisplayName); '); + } + } + + generatedCode.write('@override ${element.displayName} call ({'); + + for (final superField + in element.supertype!.element.constructors.first.parameters) { + final superFieldDisplayName = superField.displayName; + generatedCode.write('${superField.type.getDisplayString( + withNullability: false, + )}? $superFieldDisplayName,'); + } + + generatedCode.write('})=>${element.displayName}('); + + for (final superField in element.constructors.first.parameters) { + final superFieldDisplayName = superField.displayName; + generatedCode.write('$superFieldDisplayName:$superFieldDisplayName?? ' + '_value.$superFieldDisplayName,'); + } + + generatedCode + ..write(');}') + ..write( + 'mixin \$${element.displayName}CWMixin on Component { ' + '\$${element.supertype?.element.displayName}CWProxy get copyWith => ' + '\$${element.displayName}CWProxyImpl(this as ${element.displayName});}', + ); + + return generatedCode.toString(); + } +} diff --git a/packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart new file mode 100644 index 00000000..e9eede8b --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart @@ -0,0 +1,75 @@ +// 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 . + +import 'dart:async'; + +import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/nullability_suffix.dart'; +import 'package:build/build.dart'; +import 'package:source_gen/source_gen.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +class ComponentProxyGenerator + extends GeneratorForAnnotation { + @override + FutureOr generateForAnnotatedElement( + Element element, + ConstantReader annotation, + BuildStep buildStep, + ) { + /// Check element type + if (element is! ClassElement) { + throw InvalidGenerationSourceError( + 'Only classes can be annotated with "CopyWith". "$element" is ' + 'not a ClassElement.', + element: element, + ); + } + + final classAnnotation = ComponentProxyExtension( + skipFields: annotation.peek('skipFields')?.boolValue ?? true, + ); + + final generatedCode = StringBuffer() + ..write('abstract class \$${element.displayName}CWProxy {'); + + if (classAnnotation.skipFields ?? true) { + for (final field in element.constructors.first.parameters) { + generatedCode.write( + '${element.displayName} ' + '${field.displayName}(${field.type.getDisplayString( + withNullability: false, + )}? ' + '${field.displayName});', + ); + } + } + + generatedCode.write('${element.displayName} call({'); + + for (final field in element.constructors.first.parameters) { + if (field.type.nullabilitySuffix == NullabilitySuffix.question) { + generatedCode.write('${field.type.getDisplayString( + withNullability: false, + )}? ${field.displayName}, '); + } + } + + generatedCode.write('});}'); + + return generatedCode.toString(); + } +} diff --git a/packages/wyatt_component_copy_with_gen/pubspec.yaml b/packages/wyatt_component_copy_with_gen/pubspec.yaml new file mode 100644 index 00000000..4fb5c97c --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/pubspec.yaml @@ -0,0 +1,23 @@ +name: wyatt_component_copy_with_gen +description: Generator for copywith method for components. +repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/component_copy_with_gen +version: 1.0.0 + +environment: + sdk: ">=2.19.0 <3.0.0" + +dependencies: + path: ^1.8.0 + build: ^2.3.1 + source_gen: ^1.2.7 + analyzer: ^5.4.0 + + wyatt_component_copy_with_extension: + path: ../wyatt_component_copy_with_extension + +dev_dependencies: + test: ^1.21.0 + + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.3.0 -- 2.47.2 From cd3ed0fe699097be5dbe8bc41f32790f585cbf34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 7 Feb 2023 09:44:03 +0100 Subject: [PATCH 058/320] refactor(ui_components): migrate components using code generator packages (#115) --- .../pubspec.yaml | 6 +- .../.vscode/extensions.json | 15 ++-- packages/wyatt_ui_components/README.md | 2 +- .../wyatt_ui_components/analysis_options.yaml | 4 +- .../lib/src/core/core.dart | 2 +- .../extensions/build_context_extensions.dart | 2 +- .../lib/src/core/mixins/copy_with_mixin.dart | 19 +++++ .../lib/src/domain/domain.dart | 4 +- .../domain/entities/app_bar_component.dart | 36 ++++++++++ .../domain/entities/app_bar_component.g.dart | 20 ++++++ .../bottom_navigation_bar_component.dart | 34 +++++++++ .../bottom_navigation_bar_component.g.dart | 17 +++++ .../lib/src/domain/entities/component.dart | 4 +- .../lib/src/domain/entities/components.dart | 69 ------------------- .../lib/src/domain/entities/entities.dart | 21 ++++++ .../entities/error_widget_component.dart | 29 ++++++++ .../entities/error_widget_component.g.dart | 16 +++++ .../entities/loading_widget_component.dart | 29 ++++++++ .../entities/loading_widget_component.g.dart | 16 +++++ .../lib/src/features/component_theme.dart | 2 +- .../src/features/component_theme_data.dart | 4 +- .../lib/src/features/features.dart | 2 +- packages/wyatt_ui_components/lib/src/src.dart | 3 +- .../lib/wyatt_wyatt_ui_components.dart | 2 +- packages/wyatt_ui_components/pubspec.yaml | 19 +++-- 25 files changed, 273 insertions(+), 104 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/core/mixins/copy_with_mixin.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/components.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/entities.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.g.dart diff --git a/packages/wyatt_component_copy_with_gen/pubspec.yaml b/packages/wyatt_component_copy_with_gen/pubspec.yaml index 4fb5c97c..c878289c 100644 --- a/packages/wyatt_component_copy_with_gen/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/pubspec.yaml @@ -12,8 +12,10 @@ dependencies: source_gen: ^1.2.7 analyzer: ^5.4.0 - wyatt_component_copy_with_extension: - path: ../wyatt_component_copy_with_extension +wyatt_component_copy_with_extension: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_component_copy_with_extension dev_dependencies: test: ^1.21.0 diff --git a/packages/wyatt_ui_components/.vscode/extensions.json b/packages/wyatt_ui_components/.vscode/extensions.json index 30cd2233..1ab895dc 100644 --- a/packages/wyatt_ui_components/.vscode/extensions.json +++ b/packages/wyatt_ui_components/.vscode/extensions.json @@ -1,24 +1,21 @@ /* - * Copyright (C) 2022 WYATT GROUP + * 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 . */ { - "recommendations": [ - "psioniq.psi-header", - "blaugold.melos-code" - ] -} \ No newline at end of file + "recommendations": ["psioniq.psi-header", "blaugold.melos-code"] +} diff --git a/packages/wyatt_ui_components/README.md b/packages/wyatt_ui_components/README.md index 01aaee48..4c2d773d 100644 --- a/packages/wyatt_ui_components/README.md +++ b/packages/wyatt_ui_components/README.md @@ -1,5 +1,5 @@

- - - - - +

Wyatt Packages

@@ -44,10 +40,9 @@ ## About -Here is it a set of [Flutter plugins](https://flutter.io/platform-plugins/) that power up your applications. +Here is a set of [Flutter plugins](https://flutter.io/platform-plugins/) that enhance your applications. -[Flutter](https://flutter.dev) is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase. Flutter is used by developers and organizations around the world, and is free -and open source. +[Flutter](https://flutter.dev) is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop using a single codebase. It is used by developers and organizations worldwide and is free and open-source. --- @@ -61,21 +56,21 @@ git clone ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git ### Prerequisite -- [Flutter](https://github.com/flutter/flutter). +1. [Flutter](https://github.com/flutter/flutter). It is a UI toolkit developed by Google for building beautiful and natively compiled applications for mobile, web, and desktop from a single codebase. -- [Melos](https://github.com/invertase/melos). Used to manage Dart projects with multiple packages. +2. [Melos](https://github.com/invertase/melos). Melos is a tool that helps in managing Dart projects that have multiple packages. It can be installed using the following command: ```shell dart pub global activate melos ``` -- [Mason](https://github.com/felangel/mason). Used for code generation. +3. [Mason](https://github.com/felangel/mason). Mason is used for code generation purposes. It can be installed by running the following command: ```shell dart pub global activate mason_cli ``` -- [Lcov](https://github.com/linux-test-project/lcov). Used to generate coverage data. +4. [Lcov](https://github.com/linux-test-project/lcov). Lcov is a tool used to generate coverage data. It can be installed on macOS by running the following command: ```shell # on macos @@ -84,38 +79,39 @@ brew install lcov - genhtml. Used to convert coverage data into html pages. -After installing all these packages, bootstrap with `melos bs`. +After installation of all these packages, the project can be bootstrapped using the command `melos bs`. ### Create a new package Create a new package in `packages/` folder. +To create a new package in the packages/ folder, run the following command in the terminal: ```shell mason make wyatt_package --package_name wyatt_ --description A new Wyatt package --flutter_only false ``` -Then bootstrap project with `melos bs` command. +The variable in the above command is important and must be clear and understandable. + +After creating the package, bootstrap the project with the `melos bs` command. #### Naming In the previous instructions `` variable is important. It have to be clear and intelligible. -You **MUST** use underscores. +1. You must use underscores in the name. +2. You must use the wyatt prefix for the package name. +3. You must name the example with a specific name. -You **MUST** use `wyatt` prefix for package. +For example, if the name is "CRUD BLOC," the following naming conventions should be used: -You **MUST** name example with specific name. - -For example, if name is CRUD BLOC - -- name will be crud_bloc -- so the package will be: `wyatt_crud_bloc` -- and the example will be: `crud_bloc_example` +1. name: crud_bloc +2. package name: wyatt_crud_bloc +3. example name: crud_bloc_example ### Create issues -Add the issues directly related to what you want to develop and label them correctly. +Create an issue for each specific feature or task you want to work on and label it correctly using the following format: ``` Type(scope): issue. @@ -128,18 +124,18 @@ For example, on notification bloc package : ### Branches -Master is protected. You can't push on it. Please develop your feature on another branch. The name of your branch has to match with the issue opened. +The master branch is protected and cannot be pushed to directly. Please create a separate branch for each feature or task, with a name that corresponds to the related issue. The branch name should follow this format: `type(scope):issue` Example : -Issue : +For the issue: - `Feature(notification_bloc): add firebase messaging data source.` -Branch related to this issue : +The related branch should be named: -- `feature(notification_bloc)/add_firebase_messaging_data_source` +- `notification_bloc/feat/add_firebase_messaging_data_source` ### Commits @@ -163,12 +159,11 @@ Some examples : - `docs: update readme.` = update **this** readme file. - `fix(crud)!: fix bug in awesome() function. (#32)` = fix a bug, `!` is important and indicate `BREAKING CHANGES` linked with the 32nd issue. -When you have finished developing, and are ready to close the issue, close it via your commit : +When you have completed your development work and are ready to resolve the related issue, you can close it via your commit message by including (close #issue_number). For example: -`feat(auth): add AWS support. (close #31)` - -Note that your issue will be close after merging on master. -Before closing the issue, please check tests and update coverage. You might run : +```shell +feat(auth): add AWS support. (close #31) +``` ```shell melos run test:all # this will run all tests in this project @@ -179,45 +174,44 @@ melos run publish:validate # this will run a validation before publish packages melos run publish # this will publish packages ``` -> Note that only modified package will be verified and published. +Please note that the issue will only be closed after it has been merged into the master branch. Before closing the issue, it is important to verify that all tests have been run and that coverage has been updated. #### Merge your work -After closing your issue, some work may have been done on master in the meantime. To keep a clean git history, please rebase before opening a change request. +When you have completed your work and closed the related issue, it's possible that some changes may have been made to the master branch in the meantime. To maintain a clean Git history, it's recommended to rebase before creating a change request (pull request). Two situations : -- You have not yet created your branch and have committed locally : +- You haven't created a branch yet and have made local commits: ```shell git pull --rebase ``` -- You are already working on your branch : +- You are already working on a branch: ```shell git rebase -i master ``` -If possible, please use `--fixup` on your commit in interactive rebase. +It's recommended to use the `--fixup` option during the interactive rebase to keep the Git history clean. -Then, opend your PR, get the necessary approval and merge your work. Then you're done ✅. +Once you have rebased, you can create a pull request, receive the necessary approvals, and then merge your work. And with that, you're done! 🎉 #### Update version. -Once your work is on the master, you can update your package version. Please filter packages to update only your package. `--scope` is used to do it. -For example, after merging changes on `wyatt_otification_bloc` package, you might run : +When your work has been merged into the master branch, it's time to update the package version. To update only your specific package, use the --scope option. For example, after merging changes into the `wyatt_notification_bloc` package, you can run the following command: ```shell melos version --scope="*wyatt_notification_bloc*" ``` -In fact, melos will filter all packages that match the `wyatt_notification_block` pattern. +This will filter all packages that match the `wyatt_notification_bloc` pattern and update only that package. -You can update check all packages tests by running : +You can then verify that all packages and their tests are working correctly by running: ```shell -melos run test +melos run test:all ``` #### Publish your package @@ -265,14 +259,14 @@ Here you can change `package name` and `package version`. --- -## Status - -![Status: Experimental](https://img.shields.io/badge/Status-WIP-red?style=flat-square) - -This repository is maintained by Wyatt Studio but work is in progress. - ## Simple work flow diagramm To sum up, here a simple work flow diagramm. ![Dev Wokflow](doc/workflow.svg) + +## Status + +![Status: Experimental](https://img.shields.io/badge/Status-WIP-red?style=flat-square) + +This repository is maintained by Wyatt Studio but work is in progress. -- 2.47.2 From bde54e0cf5f485297339128ee055143833f6b149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 7 Feb 2023 18:30:46 +0100 Subject: [PATCH 070/320] feat(ui_components): add information_card & quote_card (#126) --- .../wyatt_ui_components/analysis_options.yaml | 2 +- .../wyatt_ui_components/example/lib/main.dart | 4 +- .../example/test/widget_test.dart | 15 ----- .../domain/entities/app_bar_component.dart | 8 +-- .../bottom_navigation_bar_component.dart | 6 +- .../domain/entities/cards/card_component.dart | 60 +++++++++++++++++++ .../cards/information_card_component.dart | 54 +++++++++++++++++ .../cards/information_card_component.g.dart | 42 +++++++++++++ .../entities/cards/quote_card_component.dart | 43 +++++++++++++ .../cards/quote_card_component.g.dart | 46 ++++++++++++++ .../lib/src/domain/entities/entities.dart | 2 +- .../entities/error_widget_component.dart | 6 +- .../entities/loading_widget_component.dart | 4 +- .../lib/src/features/component_theme.dart | 6 +- .../src/features/component_theme_data.dart | 8 +-- .../lib/src/features/features.dart | 2 +- packages/wyatt_ui_components/pubspec.yaml | 10 ++-- 17 files changed, 274 insertions(+), 44 deletions(-) delete mode 100644 packages/wyatt_ui_components/example/test/widget_test.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart diff --git a/packages/wyatt_ui_components/analysis_options.yaml b/packages/wyatt_ui_components/analysis_options.yaml index 225c0796..90d6bd51 100644 --- a/packages/wyatt_ui_components/analysis_options.yaml +++ b/packages/wyatt_ui_components/analysis_options.yaml @@ -14,4 +14,4 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.flutter.experimental.yaml +include: package:wyatt_analysis/analysis_options.flutter.yaml diff --git a/packages/wyatt_ui_components/example/lib/main.dart b/packages/wyatt_ui_components/example/lib/main.dart index 7cb59bf7..2ee31aeb 100644 --- a/packages/wyatt_ui_components/example/lib/main.dart +++ b/packages/wyatt_ui_components/example/lib/main.dart @@ -27,8 +27,7 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override - Widget build(BuildContext context) { - return ComponentTheme( + Widget build(BuildContext context) => ComponentTheme( componentThemeWidget: AppThemeComponent.components, child: MaterialApp( title: 'Wyatt Ui Components Example', @@ -40,7 +39,6 @@ class MyApp extends StatelessWidget { ), ), ); - } } class Home extends StatelessWidget { diff --git a/packages/wyatt_ui_components/example/test/widget_test.dart b/packages/wyatt_ui_components/example/test/widget_test.dart deleted file mode 100644 index bc890a0c..00000000 --- a/packages/wyatt_ui_components/example/test/widget_test.dart +++ /dev/null @@ -1,15 +0,0 @@ -// 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 . \ No newline at end of file diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart index 1a12cb97..be5dc624 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart @@ -15,8 +15,8 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; part 'app_bar_component.g.dart'; @@ -24,13 +24,13 @@ part 'app_bar_component.g.dart'; @ComponentProxyExtension() abstract class AppBarComponent extends Component with CopyWithMixin<$AppBarComponentCWProxy> { - final String? title; - final Widget? leading; - final List? actions; const AppBarComponent({ this.title, this.leading, this.actions, super.key, }); + final String? title; + final Widget? leading; + final List? actions; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart index 0620ef87..0daf25fd 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; // Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // @@ -17,18 +18,17 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; part 'bottom_navigation_bar_component.g.dart'; @ComponentProxyExtension() abstract class BottomNavigationBarComponent extends Component with CopyWithMixin<$BottomNavigationBarComponentCWProxy> { - final int currentIndex; - final void Function(BuildContext, int)? onTap; const BottomNavigationBarComponent({ this.onTap, this.currentIndex = 0, super.key, }); + final int currentIndex; + final void Function(BuildContext, int)? onTap; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart new file mode 100644 index 00000000..73f7ce79 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart @@ -0,0 +1,60 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/domain/entities/component.dart'; + +abstract class CardComponent extends Component { + const CardComponent({ + this.radius, + this.padding, + this.borderColors, + this.backgroundColor, + this.minSize, + this.maxSize, + this.shadow, + this.isDarkModeEnabled, + this.background, + super.key, + }); + + /// Card radius + final double? radius; + + /// Padding and gaps of this card + final double? padding; + + /// Border gradient color (from left to right) + final List? borderColors; + + /// Card background color + final Color? backgroundColor; + + /// Minimum size for this card + final Size? minSize; + + /// Maximum size for this card + final Size? maxSize; + + /// Drop shadow + final BoxShadow? shadow; + + /// Is this component in dark mode or not + final bool? isDarkModeEnabled; + + /// Background of the card + final Widget? background; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart new file mode 100644 index 00000000..a6676d0c --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart @@ -0,0 +1,54 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; +import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; + +part 'information_card_component.g.dart'; + +@ComponentProxyExtension() +abstract class InformationCardComponent extends CardComponent + with CopyWithMixin<$InformationCardComponentCWProxy> { + const InformationCardComponent({ + this.icons, + this.title, + this.subtitle, + this.body, + this.axis = Axis.vertical, + super.radius = 12, + super.padding = 25, + super.borderColors = const [Color(0xFFDDE0E3), Color(0xFFCACCD4)], + super.backgroundColor = const Color(0xFFF6F6F6), + super.minSize = const Size(330, 230), + super.maxSize = const Size(330, 530), + super.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + super.isDarkModeEnabled = false, + super.background, + super.key, + }); + + final Axis? axis; + final List? icons; + final Widget? title; + final Widget? subtitle; + final Widget? body; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart new file mode 100644 index 00000000..78cdc783 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart @@ -0,0 +1,42 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'information_card_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $InformationCardComponentCWProxy { + InformationCardComponent icons(List? icons); + InformationCardComponent title(Widget? title); + InformationCardComponent subtitle(Widget? subtitle); + InformationCardComponent body(Widget? body); + InformationCardComponent axis(Axis? axis); + InformationCardComponent radius(double? radius); + InformationCardComponent padding(double? padding); + InformationCardComponent borderColors(List? borderColors); + InformationCardComponent backgroundColor(Color? backgroundColor); + InformationCardComponent minSize(Size? minSize); + InformationCardComponent maxSize(Size? maxSize); + InformationCardComponent shadow(BoxShadow? shadow); + InformationCardComponent isDarkModeEnabled(bool? isDarkModeEnabled); + InformationCardComponent background(Widget? background); + InformationCardComponent key(Key? key); + InformationCardComponent call({ + List? icons, + Widget? title, + Widget? subtitle, + Widget? body, + Axis? axis, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + bool? isDarkModeEnabled, + Widget? background, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart new file mode 100644 index 00000000..76892c39 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -0,0 +1,43 @@ +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; +import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; + +part 'quote_card_component.g.dart'; + +@ComponentProxyExtension() +abstract class QuoteCardComponent extends CardComponent + with CopyWithMixin<$QuoteCardComponentCWProxy> { + const QuoteCardComponent({ + required this.avatar, + required this.name, + required this.subtitle, + required this.gradient, + required this.quote, + this.leftQuote, + this.rightQuote, + super.radius = 12, + super.padding = 25, + super.borderColors = const [Color(0xFFDDE0E3), Color(0xFFCACCD4)], + super.backgroundColor = const Color(0xFFF6F6F6), + super.minSize = const Size(330, 230), + super.maxSize = const Size(330, 530), + super.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + super.isDarkModeEnabled = false, + super.background, + super.key, + }); + + final Widget avatar; + final Widget name; + final Text subtitle; + final Gradient gradient; + final Widget quote; + + final Widget? leftQuote; + final Widget? rightQuote; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart new file mode 100644 index 00000000..e48b6963 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart @@ -0,0 +1,46 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'quote_card_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $QuoteCardComponentCWProxy { + QuoteCardComponent avatar(Widget? avatar); + QuoteCardComponent name(Widget? name); + QuoteCardComponent subtitle(Text? subtitle); + QuoteCardComponent gradient(Gradient? gradient); + QuoteCardComponent quote(Widget? quote); + QuoteCardComponent leftQuote(Widget? leftQuote); + QuoteCardComponent rightQuote(Widget? rightQuote); + QuoteCardComponent radius(double? radius); + QuoteCardComponent padding(double? padding); + QuoteCardComponent borderColors(List? borderColors); + QuoteCardComponent backgroundColor(Color? backgroundColor); + QuoteCardComponent minSize(Size? minSize); + QuoteCardComponent maxSize(Size? maxSize); + QuoteCardComponent shadow(BoxShadow? shadow); + QuoteCardComponent isDarkModeEnabled(bool? isDarkModeEnabled); + QuoteCardComponent background(Widget? background); + QuoteCardComponent key(Key? key); + QuoteCardComponent call({ + Widget? avatar, + Widget? name, + Text? subtitle, + Gradient? gradient, + Widget? quote, + Widget? leftQuote, + Widget? rightQuote, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + bool? isDarkModeEnabled, + Widget? background, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 51d081f6..3a2811ae 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -16,6 +16,6 @@ export './app_bar_component.dart'; export './bottom_navigation_bar_component.dart'; +export './component.dart'; export './error_widget_component.dart'; export './loading_widget_component.dart'; -export './component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart index e4a0ae83..c896417a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart @@ -14,16 +14,16 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:flutter/material.dart'; part 'error_widget_component.g.dart'; @ComponentProxyExtension() abstract class ErrorWidgetComponent extends Component with CopyWithMixin<$ErrorWidgetComponentCWProxy> { - final String? error; const ErrorWidgetComponent({required this.error, super.key}); + final String? error; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart index c565b6e3..41783f4e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart @@ -15,15 +15,15 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; part 'loading_widget_component.g.dart'; @ComponentProxyExtension() abstract class LoadingWidgetComponent extends Component with CopyWithMixin<$LoadingWidgetComponentCWProxy> { - final Color? color; const LoadingWidgetComponent({required this.color, super.key}); + final Color? color; } diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme.dart b/packages/wyatt_ui_components/lib/src/features/component_theme.dart index 9e3b64d3..49de4780 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme.dart @@ -18,14 +18,14 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/src/features/features.dart'; class ComponentTheme extends StatelessWidget { - final Widget child; - final ComponentThemeData componentThemeWidget; const ComponentTheme({ required this.child, required this.componentThemeWidget, super.key, }); + final Widget child; + final ComponentThemeData componentThemeWidget; static ComponentThemeData of(BuildContext context) { final _InheritedComponentTheme? inheritedThemeComponent = @@ -46,11 +46,11 @@ class ComponentTheme extends StatelessWidget { } class _InheritedComponentTheme extends InheritedWidget { - final ComponentTheme themeWidget; const _InheritedComponentTheme( this.themeWidget, { required super.child, }); + final ComponentTheme themeWidget; @override bool updateShouldNotify(covariant InheritedWidget oldWidget) => diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index f518caa7..0d247bf3 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -17,10 +17,6 @@ import 'package:wyatt_ui_components/src/domain/entities/entities.dart'; class ComponentThemeData { - final AppBarComponent? appBar; - final BottomNavigationBarComponent? bottomNavigationBar; - final ErrorWidgetComponent? errorWidget; - final LoadingWidgetComponent? loadingWidget; const ComponentThemeData.raw({ this.appBar, @@ -28,4 +24,8 @@ class ComponentThemeData { this.errorWidget, this.loadingWidget, }); + final AppBarComponent? appBar; + final BottomNavigationBarComponent? bottomNavigationBar; + final ErrorWidgetComponent? errorWidget; + final LoadingWidgetComponent? loadingWidget; } diff --git a/packages/wyatt_ui_components/lib/src/features/features.dart b/packages/wyatt_ui_components/lib/src/features/features.dart index 806071dc..6c0f1b4a 100644 --- a/packages/wyatt_ui_components/lib/src/features/features.dart +++ b/packages/wyatt_ui_components/lib/src/features/features.dart @@ -14,5 +14,5 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'component_theme_data.dart'; export 'component_theme.dart'; +export 'component_theme_data.dart'; diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 47955e53..42033ddd 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -3,16 +3,18 @@ description: Primary ui components repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_components version: 0.0.1 +publish_to: none + environment: sdk: ">=2.17.0 <3.0.0" dependencies: flutter: sdk: flutter -wyatt_component_copy_with_extension: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_extension + wyatt_component_copy_with_extension: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_component_copy_with_extension dev_dependencies: flutter_test: -- 2.47.2 From c994c822b060a6f1bf4c678a27ba7666cb4486ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 8 Feb 2023 13:23:45 +0100 Subject: [PATCH 071/320] feat(ui_components): export components and add license header --- .../lib/src/domain/entities/cards/cards.dart | 18 ++++++++++++++++++ .../entities/cards/quote_card_component.dart | 16 ++++++++++++++++ .../lib/src/domain/entities/entities.dart | 1 + 3 files changed, 35 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart new file mode 100644 index 00000000..62d4b88e --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart @@ -0,0 +1,18 @@ +// 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 . + +export './information_card_component.dart'; +export './quote_card_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart index 76892c39..40f11239 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -1,3 +1,19 @@ +// 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 . + import 'package:flutter/widgets.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 3a2811ae..0d8a3b29 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -16,6 +16,7 @@ export './app_bar_component.dart'; export './bottom_navigation_bar_component.dart'; +export './cards/cards.dart'; export './component.dart'; export './error_widget_component.dart'; export './loading_widget_component.dart'; -- 2.47.2 From 07428a52152cff7fe5492b91cf39565e5f8c8931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 8 Feb 2023 15:43:20 +0100 Subject: [PATCH 072/320] fix(ui_components): remove darkmode enable field in cards --- .../lib/src/domain/entities/cards/card_component.dart | 4 ---- .../src/domain/entities/cards/information_card_component.dart | 1 - .../domain/entities/cards/information_card_component.g.dart | 2 -- .../lib/src/domain/entities/cards/quote_card_component.dart | 1 - .../lib/src/domain/entities/cards/quote_card_component.g.dart | 2 -- 5 files changed, 10 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart index 73f7ce79..ea3ef7bc 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart @@ -26,7 +26,6 @@ abstract class CardComponent extends Component { this.minSize, this.maxSize, this.shadow, - this.isDarkModeEnabled, this.background, super.key, }); @@ -52,9 +51,6 @@ abstract class CardComponent extends Component { /// Drop shadow final BoxShadow? shadow; - /// Is this component in dark mode or not - final bool? isDarkModeEnabled; - /// Background of the card final Widget? background; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart index a6676d0c..2af68c67 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart @@ -41,7 +41,6 @@ abstract class InformationCardComponent extends CardComponent offset: Offset(0, 5), color: Color.fromRGBO(0, 0, 0, 0.05), ), - super.isDarkModeEnabled = false, super.background, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart index 78cdc783..c5a3e0fb 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart @@ -19,7 +19,6 @@ abstract class $InformationCardComponentCWProxy { InformationCardComponent minSize(Size? minSize); InformationCardComponent maxSize(Size? maxSize); InformationCardComponent shadow(BoxShadow? shadow); - InformationCardComponent isDarkModeEnabled(bool? isDarkModeEnabled); InformationCardComponent background(Widget? background); InformationCardComponent key(Key? key); InformationCardComponent call({ @@ -35,7 +34,6 @@ abstract class $InformationCardComponentCWProxy { Size? minSize, Size? maxSize, BoxShadow? shadow, - bool? isDarkModeEnabled, Widget? background, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart index 40f11239..004cfea8 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -43,7 +43,6 @@ abstract class QuoteCardComponent extends CardComponent offset: Offset(0, 5), color: Color.fromRGBO(0, 0, 0, 0.05), ), - super.isDarkModeEnabled = false, super.background, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart index e48b6963..9e7f4318 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart @@ -21,7 +21,6 @@ abstract class $QuoteCardComponentCWProxy { QuoteCardComponent minSize(Size? minSize); QuoteCardComponent maxSize(Size? maxSize); QuoteCardComponent shadow(BoxShadow? shadow); - QuoteCardComponent isDarkModeEnabled(bool? isDarkModeEnabled); QuoteCardComponent background(Widget? background); QuoteCardComponent key(Key? key); QuoteCardComponent call({ @@ -39,7 +38,6 @@ abstract class $QuoteCardComponentCWProxy { Size? minSize, Size? maxSize, BoxShadow? shadow, - bool? isDarkModeEnabled, Widget? background, Key? key, }); -- 2.47.2 From 5d5ae145aa22ca8e254930ccaf04ed6f94340469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 8 Feb 2023 15:54:50 +0100 Subject: [PATCH 073/320] feat(ui_components): make fields nullable and not required in quote card --- .../entities/cards/quote_card_component.dart | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart index 004cfea8..c5ac26c7 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -25,11 +25,11 @@ part 'quote_card_component.g.dart'; abstract class QuoteCardComponent extends CardComponent with CopyWithMixin<$QuoteCardComponentCWProxy> { const QuoteCardComponent({ - required this.avatar, - required this.name, - required this.subtitle, - required this.gradient, - required this.quote, + this.avatar, + this.name, + this.subtitle, + this.gradient, + this.quote, this.leftQuote, this.rightQuote, super.radius = 12, @@ -47,11 +47,11 @@ abstract class QuoteCardComponent extends CardComponent super.key, }); - final Widget avatar; - final Widget name; - final Text subtitle; - final Gradient gradient; - final Widget quote; + final Widget? avatar; + final Widget? name; + final Text? subtitle; + final Gradient? gradient; + final Widget? quote; final Widget? leftQuote; final Widget? rightQuote; -- 2.47.2 From 0132771e173b7bb5cb5105cad56c328656a55e41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 8 Feb 2023 17:42:33 +0100 Subject: [PATCH 074/320] feat(ui_components): add text wrapper instead of String/Widget for Texts --- .../lib/components/custom_app_bar.dart | 4 ++- .../lib/components/custom_app_bar.g.dart | 4 +-- .../lib/components/custom_error_widget.dart | 2 +- .../lib/components/custom_error_widget.g.dart | 4 +-- .../lib/src/core/core.dart | 2 ++ .../lib/src/core/utils/text_wrapper.dart | 26 +++++++++++++++++++ .../domain/entities/app_bar_component.dart | 5 ++-- .../domain/entities/app_bar_component.g.dart | 4 +-- .../cards/information_card_component.dart | 12 ++++----- .../cards/information_card_component.g.dart | 12 ++++----- .../entities/cards/quote_card_component.dart | 14 +++++----- .../cards/quote_card_component.g.dart | 12 ++++----- .../entities/error_widget_component.dart | 5 ++-- .../entities/error_widget_component.g.dart | 4 +-- 14 files changed, 69 insertions(+), 41 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart index 924281cb..95110dd8 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart @@ -10,6 +10,8 @@ class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { @override Widget build(BuildContext context) => AppBar( - title: Text(super.title ?? ''), + title: Text( + super.title?.text ?? '', + ), ); } diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart index 89c78122..2fd0319a 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart @@ -10,7 +10,7 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { const $CustomAppBarCWProxyImpl(this._value); final CustomAppBar _value; @override - CustomAppBar title(String? title) => this(title: title); + CustomAppBar title(TextWrapper? title) => this(title: title); @override CustomAppBar leading(Widget? leading) => this(leading: leading); @override @@ -19,7 +19,7 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { CustomAppBar key(Key? key) => this(key: key); @override CustomAppBar call({ - String? title, + TextWrapper? title, Widget? leading, List? actions, Key? key, diff --git a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart index 450cf851..b0336e29 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart @@ -12,6 +12,6 @@ class CustomErrorWidget extends ErrorWidgetComponent @override Widget build(BuildContext context) => ColoredBox( color: Colors.red, - child: Center(child: Text(error ?? 'Error')), + child: Center(child: Text(error?.text ?? 'Error')), ); } diff --git a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.g.dart b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.g.dart index 67f26fcf..ae1e64dd 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.g.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.g.dart @@ -10,12 +10,12 @@ class $CustomErrorWidgetCWProxyImpl implements $ErrorWidgetComponentCWProxy { const $CustomErrorWidgetCWProxyImpl(this._value); final CustomErrorWidget _value; @override - CustomErrorWidget error(String? error) => this(error: error); + CustomErrorWidget error(TextWrapper? error) => this(error: error); @override CustomErrorWidget key(Key? key) => this(key: key); @override CustomErrorWidget call({ - String? error, + TextWrapper? error, Key? key, }) => CustomErrorWidget( diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index 243dd3d2..dd4b140f 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -15,3 +15,5 @@ // along with this program. If not, see . export 'extensions/build_context_extensions.dart'; +export 'mixins/copy_with_mixin.dart'; +export 'utils/text_wrapper.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart new file mode 100644 index 00000000..d3ce5513 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart @@ -0,0 +1,26 @@ +// 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 . + +import 'package:flutter/material.dart'; + +class TextWrapper { + TextWrapper(this.text, {this.style}); + + factory TextWrapper.text(String text) => TextWrapper(text); + + final String text; + final TextStyle? style; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart index be5dc624..4345b741 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart @@ -16,8 +16,7 @@ import 'package:flutter/material.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; -import 'package:wyatt_ui_components/src/domain/entities/component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'app_bar_component.g.dart'; @@ -30,7 +29,7 @@ abstract class AppBarComponent extends Component this.actions, super.key, }); - final String? title; + final TextWrapper? title; final Widget? leading; final List? actions; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart index fe0b0b20..e16ec248 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart @@ -7,12 +7,12 @@ part of 'app_bar_component.dart'; // ************************************************************************** abstract class $AppBarComponentCWProxy { - AppBarComponent title(String? title); + AppBarComponent title(TextWrapper? title); AppBarComponent leading(Widget? leading); AppBarComponent actions(List? actions); AppBarComponent key(Key? key); AppBarComponent call({ - String? title, + TextWrapper? title, Widget? leading, List? actions, Key? key, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart index 2af68c67..614729a2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart @@ -16,8 +16,8 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'information_card_component.g.dart'; @@ -32,8 +32,8 @@ abstract class InformationCardComponent extends CardComponent this.axis = Axis.vertical, super.radius = 12, super.padding = 25, - super.borderColors = const [Color(0xFFDDE0E3), Color(0xFFCACCD4)], - super.backgroundColor = const Color(0xFFF6F6F6), + super.borderColors, + super.backgroundColor, super.minSize = const Size(330, 230), super.maxSize = const Size(330, 530), super.shadow = const BoxShadow( @@ -47,7 +47,7 @@ abstract class InformationCardComponent extends CardComponent final Axis? axis; final List? icons; - final Widget? title; - final Widget? subtitle; - final Widget? body; + final TextWrapper? title; + final TextWrapper? subtitle; + final TextWrapper? body; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart index c5a3e0fb..b4387287 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart @@ -8,9 +8,9 @@ part of 'information_card_component.dart'; abstract class $InformationCardComponentCWProxy { InformationCardComponent icons(List? icons); - InformationCardComponent title(Widget? title); - InformationCardComponent subtitle(Widget? subtitle); - InformationCardComponent body(Widget? body); + InformationCardComponent title(TextWrapper? title); + InformationCardComponent subtitle(TextWrapper? subtitle); + InformationCardComponent body(TextWrapper? body); InformationCardComponent axis(Axis? axis); InformationCardComponent radius(double? radius); InformationCardComponent padding(double? padding); @@ -23,9 +23,9 @@ abstract class $InformationCardComponentCWProxy { InformationCardComponent key(Key? key); InformationCardComponent call({ List? icons, - Widget? title, - Widget? subtitle, - Widget? body, + TextWrapper? title, + TextWrapper? subtitle, + TextWrapper? body, Axis? axis, double? radius, double? padding, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart index c5ac26c7..e11f3502 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -16,8 +16,8 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'quote_card_component.g.dart'; @@ -34,8 +34,8 @@ abstract class QuoteCardComponent extends CardComponent this.rightQuote, super.radius = 12, super.padding = 25, - super.borderColors = const [Color(0xFFDDE0E3), Color(0xFFCACCD4)], - super.backgroundColor = const Color(0xFFF6F6F6), + super.borderColors, + super.backgroundColor, super.minSize = const Size(330, 230), super.maxSize = const Size(330, 530), super.shadow = const BoxShadow( @@ -48,11 +48,11 @@ abstract class QuoteCardComponent extends CardComponent }); final Widget? avatar; - final Widget? name; - final Text? subtitle; - final Gradient? gradient; - final Widget? quote; + final TextWrapper? name; + final TextWrapper? subtitle; + final TextWrapper? quote; + final Gradient? gradient; final Widget? leftQuote; final Widget? rightQuote; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart index 9e7f4318..12dcf876 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart @@ -8,10 +8,10 @@ part of 'quote_card_component.dart'; abstract class $QuoteCardComponentCWProxy { QuoteCardComponent avatar(Widget? avatar); - QuoteCardComponent name(Widget? name); - QuoteCardComponent subtitle(Text? subtitle); + QuoteCardComponent name(TextWrapper? name); + QuoteCardComponent subtitle(TextWrapper? subtitle); QuoteCardComponent gradient(Gradient? gradient); - QuoteCardComponent quote(Widget? quote); + QuoteCardComponent quote(TextWrapper? quote); QuoteCardComponent leftQuote(Widget? leftQuote); QuoteCardComponent rightQuote(Widget? rightQuote); QuoteCardComponent radius(double? radius); @@ -25,10 +25,10 @@ abstract class $QuoteCardComponentCWProxy { QuoteCardComponent key(Key? key); QuoteCardComponent call({ Widget? avatar, - Widget? name, - Text? subtitle, + TextWrapper? name, + TextWrapper? subtitle, Gradient? gradient, - Widget? quote, + TextWrapper? quote, Widget? leftQuote, Widget? rightQuote, double? radius, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart index c896417a..bba5c1c6 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart @@ -16,8 +16,7 @@ import 'package:flutter/material.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; -import 'package:wyatt_ui_components/src/domain/entities/component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'error_widget_component.g.dart'; @@ -25,5 +24,5 @@ part 'error_widget_component.g.dart'; abstract class ErrorWidgetComponent extends Component with CopyWithMixin<$ErrorWidgetComponentCWProxy> { const ErrorWidgetComponent({required this.error, super.key}); - final String? error; + final TextWrapper? error; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.g.dart index 6d62b709..c7dba4d6 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.g.dart @@ -7,10 +7,10 @@ part of 'error_widget_component.dart'; // ************************************************************************** abstract class $ErrorWidgetComponentCWProxy { - ErrorWidgetComponent error(String? error); + ErrorWidgetComponent error(TextWrapper? error); ErrorWidgetComponent key(Key? key); ErrorWidgetComponent call({ - String? error, + TextWrapper? error, Key? key, }); } -- 2.47.2 From dd75ecfc7a8965ddca14f5d49bd3ca57d26656c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 8 Feb 2023 21:33:23 +0100 Subject: [PATCH 075/320] feat: make text wrapper constructor constant --- .../wyatt_ui_components/lib/src/core/utils/text_wrapper.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart index d3ce5513..cc9e4119 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart @@ -17,7 +17,7 @@ import 'package:flutter/material.dart'; class TextWrapper { - TextWrapper(this.text, {this.style}); + const TextWrapper(this.text, {this.style}); factory TextWrapper.text(String text) => TextWrapper(text); -- 2.47.2 From 6c85faba82448a43e2b63fa1e0b9c8c89aaea07e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 9 Feb 2023 15:15:53 +0100 Subject: [PATCH 076/320] feat(ui_components): add portfolio & skill cards #126 --- .../domain/entities/cards/card_component.dart | 14 +++-- .../cards/information_card_component.dart | 14 ++--- .../cards/portfolio_card_component.dart | 55 +++++++++++++++++++ .../cards/portfolio_card_component.g.dart | 46 ++++++++++++++++ .../entities/cards/quote_card_component.dart | 14 ++--- .../entities/cards/skill_card_component.dart | 51 +++++++++++++++++ .../cards/skill_card_component.g.dart | 42 ++++++++++++++ 7 files changed, 213 insertions(+), 23 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart index ea3ef7bc..abb87bca 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart @@ -19,13 +19,17 @@ import 'package:wyatt_ui_components/src/domain/entities/component.dart'; abstract class CardComponent extends Component { const CardComponent({ - this.radius, - this.padding, + this.radius = 12, + this.padding = 25, this.borderColors, this.backgroundColor, - this.minSize, - this.maxSize, - this.shadow, + this.minSize = const Size(330, 230), + this.maxSize = const Size(330, 530), + this.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), this.background, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart index 614729a2..611586b5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart @@ -30,17 +30,13 @@ abstract class InformationCardComponent extends CardComponent this.subtitle, this.body, this.axis = Axis.vertical, - super.radius = 12, - super.padding = 25, + super.radius, + super.padding, super.borderColors, super.backgroundColor, - super.minSize = const Size(330, 230), - super.maxSize = const Size(330, 530), - super.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + super.minSize, + super.maxSize, + super.shadow, super.background, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart new file mode 100644 index 00000000..80399b90 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart @@ -0,0 +1,55 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'portfolio_card_component.g.dart'; + +@ComponentProxyExtension() +abstract class PortfolioCardComponent extends CardComponent + with CopyWithMixin<$PortfolioCardComponentCWProxy> { + const PortfolioCardComponent({ + this.showImagesOnTop, + this.keyword, + this.description, + this.logo, + this.projectName, + this.subtitle, + this.ctas, + this.assets, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.minSize, + super.maxSize, + super.shadow, + super.background, + super.key, + }); + + final bool? showImagesOnTop; + final List? keyword; + final List? assets; + final TextWrapper? description; + final String? logo; + final TextWrapper? projectName; + final TextWrapper? subtitle; + final List? ctas; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart new file mode 100644 index 00000000..1601c1ee --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart @@ -0,0 +1,46 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'portfolio_card_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $PortfolioCardComponentCWProxy { + PortfolioCardComponent showImagesOnTop(bool? showImagesOnTop); + PortfolioCardComponent keyword(List? keyword); + PortfolioCardComponent description(TextWrapper? description); + PortfolioCardComponent logo(String? logo); + PortfolioCardComponent projectName(TextWrapper? projectName); + PortfolioCardComponent subtitle(TextWrapper? subtitle); + PortfolioCardComponent ctas(List? ctas); + PortfolioCardComponent assets(List? assets); + PortfolioCardComponent radius(double? radius); + PortfolioCardComponent padding(double? padding); + PortfolioCardComponent borderColors(List? borderColors); + PortfolioCardComponent backgroundColor(Color? backgroundColor); + PortfolioCardComponent minSize(Size? minSize); + PortfolioCardComponent maxSize(Size? maxSize); + PortfolioCardComponent shadow(BoxShadow? shadow); + PortfolioCardComponent background(Widget? background); + PortfolioCardComponent key(Key? key); + PortfolioCardComponent call({ + bool? showImagesOnTop, + List? keyword, + TextWrapper? description, + String? logo, + TextWrapper? projectName, + TextWrapper? subtitle, + List? ctas, + List? assets, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + Widget? background, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart index e11f3502..d6ea327c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -32,17 +32,13 @@ abstract class QuoteCardComponent extends CardComponent this.quote, this.leftQuote, this.rightQuote, - super.radius = 12, - super.padding = 25, + super.radius, + super.padding, super.borderColors, super.backgroundColor, - super.minSize = const Size(330, 230), - super.maxSize = const Size(330, 530), - super.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + super.minSize, + super.maxSize, + super.shadow, super.background, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart new file mode 100644 index 00000000..2a04a30b --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart @@ -0,0 +1,51 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'skill_card_component.g.dart'; + +@ComponentProxyExtension() +abstract class SkillCardComponent extends CardComponent + with CopyWithMixin<$SkillCardComponentCWProxy> { + const SkillCardComponent({ + this.icon, + this.gradient, + this.title, + this.description, + this.skills, + this.leadingIcon, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.minSize, + super.maxSize, + super.shadow, + super.background, + super.key, + }); + + final IconData? icon; + final List? gradient; + final TextWrapper? title; + final TextWrapper? description; + final List? skills; + final IconData? leadingIcon; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart new file mode 100644 index 00000000..525b8bd7 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart @@ -0,0 +1,42 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'skill_card_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $SkillCardComponentCWProxy { + SkillCardComponent icon(IconData? icon); + SkillCardComponent gradient(List? gradient); + SkillCardComponent title(TextWrapper? title); + SkillCardComponent description(TextWrapper? description); + SkillCardComponent skills(List? skills); + SkillCardComponent leadingIcon(IconData? leadingIcon); + SkillCardComponent radius(double? radius); + SkillCardComponent padding(double? padding); + SkillCardComponent borderColors(List? borderColors); + SkillCardComponent backgroundColor(Color? backgroundColor); + SkillCardComponent minSize(Size? minSize); + SkillCardComponent maxSize(Size? maxSize); + SkillCardComponent shadow(BoxShadow? shadow); + SkillCardComponent background(Widget? background); + SkillCardComponent key(Key? key); + SkillCardComponent call({ + IconData? icon, + List? gradient, + TextWrapper? title, + TextWrapper? description, + List? skills, + IconData? leadingIcon, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + Widget? background, + Key? key, + }); +} -- 2.47.2 From ac432f6dc862b3f18d7b38ba581cdd215e206408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 9 Feb 2023 15:21:23 +0100 Subject: [PATCH 077/320] feat(ui_components): export cards #126 --- .../lib/src/domain/entities/cards/cards.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart index 62d4b88e..e9240b4f 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/cards.dart @@ -15,4 +15,6 @@ // along with this program. If not, see . export './information_card_component.dart'; +export './portfolio_card_component.dart'; export './quote_card_component.dart'; +export './skill_card_component.dart'; -- 2.47.2 From efa7ca09dd0f319a6b847bd0667fac5e030efd5c Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 9 Feb 2023 18:08:03 +0100 Subject: [PATCH 078/320] feat(ui_component): add string extension to easely wrap text --- .../wyatt_ui_components/example/lib/main.dart | 25 ++++++++++--------- .../lib/src/core/core.dart | 1 + .../src/core/extensions/string_extension.dart | 23 +++++++++++++++++ 3 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart diff --git a/packages/wyatt_ui_components/example/lib/main.dart b/packages/wyatt_ui_components/example/lib/main.dart index 2ee31aeb..d49b551b 100644 --- a/packages/wyatt_ui_components/example/lib/main.dart +++ b/packages/wyatt_ui_components/example/lib/main.dart @@ -28,17 +28,17 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) => ComponentTheme( - componentThemeWidget: AppThemeComponent.components, - child: MaterialApp( - title: 'Wyatt Ui Components Example', - theme: ThemeData( - primarySwatch: Colors.blue, + componentThemeWidget: AppThemeComponent.components, + child: MaterialApp( + title: 'Wyatt Ui Components Example', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const Scaffold( + body: Home(), + ), ), - home: const Scaffold( - body: Home(), - ), - ), - ); + ); } class Home extends StatelessWidget { @@ -48,14 +48,15 @@ class Home extends StatelessWidget { Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(60), - child: context.components.appBar?.copyWith.title('Example title') ?? + child: context.components.appBar?.copyWith + .title('Example title'.wrap()) ?? const SizedBox.shrink(), ), body: Column( children: [ Expanded( child: context.components.errorWidget - ?.copyWith(error: 'Example erreur') ?? + ?.copyWith(error: 'Example erreur'.wrap()) ?? const SizedBox.shrink(), ), const SizedBox( diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index dd4b140f..079c0687 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -15,5 +15,6 @@ // along with this program. If not, see . export 'extensions/build_context_extensions.dart'; +export 'extensions/string_extension.dart'; export 'mixins/copy_with_mixin.dart'; export 'utils/text_wrapper.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart b/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart new file mode 100644 index 00000000..d0e7817e --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart @@ -0,0 +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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/text_wrapper.dart'; + +extension StringExtension on String? { + TextWrapper? wrap({TextStyle? style}) => + this != null ? TextWrapper(this!, style: style) : null; +} -- 2.47.2 From 75cb3414473871f0519b63d452b5c97ca6c2f67b Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 9 Feb 2023 18:08:49 +0100 Subject: [PATCH 079/320] fix(bloc_layout): fix textwrapper --- .../example/lib/components/custom_app_bar.dart | 2 +- .../example/lib/components/custom_app_bar.g.dart | 4 ++-- .../example/lib/components/custom_error_widget.dart | 2 +- .../example/lib/components/custom_error_widget.g.dart | 4 ++-- .../lib/src/core/crud_cubit_consumer_screen_mixin.dart | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart index 64223350..0cb81c93 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart @@ -9,6 +9,6 @@ class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { const CustomAppBar({super.title}); @override Widget build(BuildContext context) => AppBar( - title: Text(title ?? 'Title'), + title: Text(title?.text ?? 'Title'), ); } diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart index 4f4d5343..f64c8fee 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart @@ -10,7 +10,7 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { const $CustomAppBarCWProxyImpl(this._value); final CustomAppBar _value; @override - CustomAppBar title(String? title) => this(title: title); + CustomAppBar title(TextWrapper? title) => this(title: title); @override CustomAppBar leading(Widget? leading) => this(leading: leading); @override @@ -19,7 +19,7 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { CustomAppBar key(Key? key) => this(key: key); @override CustomAppBar call({ - String? title, + TextWrapper? title, Widget? leading, List? actions, Key? key, diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart index 799214e3..8890f785 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart @@ -12,6 +12,6 @@ class CustomErrorWidget extends ErrorWidgetComponent @override Widget build(BuildContext context) => ColoredBox( color: Colors.red, - child: Center(child: Text(error ?? 'Error')), + child: Center(child: Text(error?.text ?? 'Error')), ); } diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.g.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.g.dart index ed5b8c5b..64db5487 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.g.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.g.dart @@ -10,12 +10,12 @@ class $CustomErrorWidgetCWProxyImpl implements $ErrorWidgetComponentCWProxy { const $CustomErrorWidgetCWProxyImpl(this._value); final CustomErrorWidget _value; @override - CustomErrorWidget error(String? error) => this(error: error); + CustomErrorWidget error(TextWrapper? error) => this(error: error); @override CustomErrorWidget key(Key? key) => this(key: key); @override CustomErrorWidget call({ - String? error, + TextWrapper? error, Key? key, }) => CustomErrorWidget( diff --git a/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart index f3b1133c..62d9ea8b 100644 --- a/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart +++ b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart @@ -23,7 +23,7 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; mixin CrudMixin { Widget errorBuilder(BuildContext context, CrudError state) => - context.components.errorWidget?.copyWith(error: state.message) ?? + context.components.errorWidget?.copyWith(error: state.message.wrap()) ?? const SizedBox.shrink(); Widget loadingBuilder(BuildContext context, CrudLoading state) => -- 2.47.2 From 5d8f94bee88aa5920d1b52d95e742be5c372bf6b Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 9 Feb 2023 18:09:14 +0100 Subject: [PATCH 080/320] fix(cw_gen): fix textwrapper --- .../example/lib/custom_app_bar_example.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart b/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart index e08015f2..870222a6 100644 --- a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart +++ b/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart @@ -27,6 +27,6 @@ class CustomAppBarExample extends AppBarComponent @override Widget build(BuildContext context) => AppBar( - title: Text(super.title ?? ''), + title: Text(super.title?.text ?? ''), ); } -- 2.47.2 From 6bad9a8a058e7c8cade47fd4d6cf062ad27e4db8 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 9 Feb 2023 18:09:45 +0100 Subject: [PATCH 081/320] fix(ui_layout): fix textwrapper --- .../wyatt_ui_layout/example/lib/components/custom_app_bar.dart | 2 +- .../lib/src/presentation/layouts/app_bar_layout.dart | 2 +- .../lib/src/presentation/layouts/frame_layout.dart | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart index dd5394ca..5943737e 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart @@ -13,6 +13,6 @@ class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { @override Widget build(BuildContext context) => AppBar( - title: Text(title ?? ''), + title: Text(title?.text ?? ''), ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart index c7aae7db..26cd6fdb 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart @@ -36,7 +36,7 @@ class AppBarLayout extends Layout { appBar: PreferredSize( preferredSize: const Size.fromHeight(60), child: context.components.appBar?.copyWith( - title: title, + title: title.wrap(), leading: leading, actions: actions, ) ?? diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart index e4347fa0..da0f7f40 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -38,7 +38,7 @@ class FrameLayout extends Layout { appBar: PreferredSize( preferredSize: const Size.fromHeight(60), child: context.components.appBar?.copyWith( - title: title, + title: title.wrap(), leading: leading, actions: actions, ) ?? -- 2.47.2 From 44b2b7c27d1cffd9d1e4f238ef221aef1ac123a3 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 9 Feb 2023 18:10:11 +0100 Subject: [PATCH 082/320] chore(ui_kit): create package template --- packages/wyatt_ui_kit/.gitignore | 7 ++ packages/wyatt_ui_kit/.vscode/extensions.json | 24 ++++++ packages/wyatt_ui_kit/.vscode/launch.json | 34 +++++++++ packages/wyatt_ui_kit/.vscode/settings.json | 72 ++++++++++++++++++ packages/wyatt_ui_kit/CHANGELOG.md | 3 + packages/wyatt_ui_kit/README.md | 50 ++++++++++++ packages/wyatt_ui_kit/analysis_options.yaml | 1 + packages/wyatt_ui_kit/example/.gitignore | 44 +++++++++++ packages/wyatt_ui_kit/example/.metadata | 30 ++++++++ packages/wyatt_ui_kit/example/README.md | 16 ++++ .../example/analysis_options.yaml | 7 ++ packages/wyatt_ui_kit/example/lib/main.dart | 43 +++++++++++ packages/wyatt_ui_kit/example/pubspec.yaml | 25 ++++++ packages/wyatt_ui_kit/example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes packages/wyatt_ui_kit/example/web/index.html | 59 ++++++++++++++ .../wyatt_ui_kit/example/web/manifest.json | 35 +++++++++ .../wyatt_ui_kit/lib/src/wyatt_ui_kit.dart | 19 +++++ packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart | 20 +++++ packages/wyatt_ui_kit/pubspec.yaml | 34 +++++++++ .../wyatt_ui_kit/test/wyatt_ui_kit_test.dart | 1 + 24 files changed, 524 insertions(+) create mode 100644 packages/wyatt_ui_kit/.gitignore create mode 100644 packages/wyatt_ui_kit/.vscode/extensions.json create mode 100644 packages/wyatt_ui_kit/.vscode/launch.json create mode 100644 packages/wyatt_ui_kit/.vscode/settings.json create mode 100644 packages/wyatt_ui_kit/CHANGELOG.md create mode 100644 packages/wyatt_ui_kit/README.md create mode 100644 packages/wyatt_ui_kit/analysis_options.yaml create mode 100644 packages/wyatt_ui_kit/example/.gitignore create mode 100644 packages/wyatt_ui_kit/example/.metadata create mode 100644 packages/wyatt_ui_kit/example/README.md create mode 100644 packages/wyatt_ui_kit/example/analysis_options.yaml create mode 100644 packages/wyatt_ui_kit/example/lib/main.dart create mode 100644 packages/wyatt_ui_kit/example/pubspec.yaml create mode 100644 packages/wyatt_ui_kit/example/web/favicon.png create mode 100644 packages/wyatt_ui_kit/example/web/icons/Icon-192.png create mode 100644 packages/wyatt_ui_kit/example/web/icons/Icon-512.png create mode 100644 packages/wyatt_ui_kit/example/web/icons/Icon-maskable-192.png create mode 100644 packages/wyatt_ui_kit/example/web/icons/Icon-maskable-512.png create mode 100644 packages/wyatt_ui_kit/example/web/index.html create mode 100644 packages/wyatt_ui_kit/example/web/manifest.json create mode 100644 packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart create mode 100644 packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart create mode 100644 packages/wyatt_ui_kit/pubspec.yaml create mode 100644 packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart diff --git a/packages/wyatt_ui_kit/.gitignore b/packages/wyatt_ui_kit/.gitignore new file mode 100644 index 00000000..3cceda55 --- /dev/null +++ b/packages/wyatt_ui_kit/.gitignore @@ -0,0 +1,7 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ + +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/packages/wyatt_ui_kit/.vscode/extensions.json b/packages/wyatt_ui_kit/.vscode/extensions.json new file mode 100644 index 00000000..30cd2233 --- /dev/null +++ b/packages/wyatt_ui_kit/.vscode/extensions.json @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +{ + "recommendations": [ + "psioniq.psi-header", + "blaugold.melos-code" + ] +} \ No newline at end of file diff --git a/packages/wyatt_ui_kit/.vscode/launch.json b/packages/wyatt_ui_kit/.vscode/launch.json new file mode 100644 index 00000000..653eabc8 --- /dev/null +++ b/packages/wyatt_ui_kit/.vscode/launch.json @@ -0,0 +1,34 @@ +/* + * 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 . + */ + +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Example", + "request": "launch", + "type": "dart", + "cwd": "example/", + "program": "lib/main.dart", + "flutterMode": "debug" + }, + ] +} \ No newline at end of file diff --git a/packages/wyatt_ui_kit/.vscode/settings.json b/packages/wyatt_ui_kit/.vscode/settings.json new file mode 100644 index 00000000..a729c46c --- /dev/null +++ b/packages/wyatt_ui_kit/.vscode/settings.json @@ -0,0 +1,72 @@ +{ + "dart.runPubGetOnPubspecChanges": "never", + "bloc.newCubitTemplate.type": "equatable", + "psi-header.changes-tracking": { + "isActive": true + }, + "psi-header.config": { + "blankLinesAfter": 1, + "forceToTop": true + }, + "psi-header.lang-config": [ + { + "beforeHeader": [ + "# -*- coding:utf-8 -*-", + "#!/usr/bin/env python3" + ], + "begin": "###", + "end": "###", + "language": "python", + "prefix": "# " + }, + { + "beforeHeader": [ + "#!/usr/bin/env sh", + "" + ], + "language": "shellscript", + "begin": "", + "end": "", + "prefix": "# " + }, + { + "begin": "", + "end": "", + "language": "dart", + "prefix": "// " + }, + { + "begin": "", + "end": "", + "language": "yaml", + "prefix": "# " + }, + { + "begin": "", + "language": "markdown", + }, + ], + "psi-header.templates": [ + { + "language": "*", + "template": [ + "Copyright (C) <> 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 ." + ], + } + ], +} \ No newline at end of file diff --git a/packages/wyatt_ui_kit/CHANGELOG.md b/packages/wyatt_ui_kit/CHANGELOG.md new file mode 100644 index 00000000..effe43c8 --- /dev/null +++ b/packages/wyatt_ui_kit/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/wyatt_ui_kit/README.md b/packages/wyatt_ui_kit/README.md new file mode 100644 index 00000000..86e4538b --- /dev/null +++ b/packages/wyatt_ui_kit/README.md @@ -0,0 +1,50 @@ + + +# Flutter - Wyatt Ui Kit + +

+ Style: Wyatt Analysis + SDK: Flutter +

+ +UIKit and Design System used in Wyatt Studio. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/packages/wyatt_ui_kit/analysis_options.yaml b/packages/wyatt_ui_kit/analysis_options.yaml new file mode 100644 index 00000000..8c9daa4e --- /dev/null +++ b/packages/wyatt_ui_kit/analysis_options.yaml @@ -0,0 +1 @@ +include: package:wyatt_analysis/analysis_options.flutter.yaml diff --git a/packages/wyatt_ui_kit/example/.gitignore b/packages/wyatt_ui_kit/example/.gitignore new file mode 100644 index 00000000..24476c5d --- /dev/null +++ b/packages/wyatt_ui_kit/example/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/wyatt_ui_kit/example/.metadata b/packages/wyatt_ui_kit/example/.metadata new file mode 100644 index 00000000..30e0d3ce --- /dev/null +++ b/packages/wyatt_ui_kit/example/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + - platform: web + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/wyatt_ui_kit/example/README.md b/packages/wyatt_ui_kit/example/README.md new file mode 100644 index 00000000..2b3fce4c --- /dev/null +++ b/packages/wyatt_ui_kit/example/README.md @@ -0,0 +1,16 @@ +# example + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/packages/wyatt_ui_kit/example/analysis_options.yaml b/packages/wyatt_ui_kit/example/analysis_options.yaml new file mode 100644 index 00000000..0939257e --- /dev/null +++ b/packages/wyatt_ui_kit/example/analysis_options.yaml @@ -0,0 +1,7 @@ + +include: package:wyatt_analysis/analysis_options.flutter.yaml + + + + + diff --git a/packages/wyatt_ui_kit/example/lib/main.dart b/packages/wyatt_ui_kit/example/lib/main.dart new file mode 100644 index 00000000..8a831274 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/main.dart @@ -0,0 +1,43 @@ +// 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 . + +import 'package:flutter/material.dart'; + +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +void main(List args) { + runApp(const App()); +} + +class App extends StatelessWidget { + const App({super.key}); + + static const String title = 'Wyatt Ui Kit Example'; + + @override + Widget build(BuildContext context) => MaterialApp( + title: title, + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: Scaffold( + appBar: AppBar( + title: const Text(title), + ), + body: Center(child: Text(WyattUiKit.testString)), + ), + ); +} diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml new file mode 100644 index 00000000..1f5a0745 --- /dev/null +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -0,0 +1,25 @@ +name: wyatt_ui_kit_example +description: A new Flutter project. +version: 1.0.0 + +publish_to: "none" + +environment: + sdk: ">=2.19.0 <3.0.0" + +dependencies: + flutter: { sdk: flutter } + + wyatt_ui_kit: + path: "../" + +dev_dependencies: + flutter_test: { sdk: flutter } + + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.0 + +# The following section is specific to Flutter. +flutter: + uses-material-design: true diff --git a/packages/wyatt_ui_kit/example/web/favicon.png b/packages/wyatt_ui_kit/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/web/icons/Icon-192.png b/packages/wyatt_ui_kit/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/web/icons/Icon-512.png b/packages/wyatt_ui_kit/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/web/icons/Icon-maskable-192.png b/packages/wyatt_ui_kit/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/web/icons/Icon-maskable-512.png b/packages/wyatt_ui_kit/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/web/index.html b/packages/wyatt_ui_kit/example/web/index.html new file mode 100644 index 00000000..be820e83 --- /dev/null +++ b/packages/wyatt_ui_kit/example/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + example + + + + + + + + + + diff --git a/packages/wyatt_ui_kit/example/web/manifest.json b/packages/wyatt_ui_kit/example/web/manifest.json new file mode 100644 index 00000000..096edf8f --- /dev/null +++ b/packages/wyatt_ui_kit/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "example", + "short_name": "example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart new file mode 100644 index 00000000..0d483300 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart @@ -0,0 +1,19 @@ +// 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 . + +abstract class WyattUiKit { + static String get testString => 'Package: Wyatt Ui Kit'; +} diff --git a/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart new file mode 100644 index 00000000..0e1dd56a --- /dev/null +++ b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart @@ -0,0 +1,20 @@ +// 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 . + +/// UIKit and Design System used in Wyatt Studio. +library wyatt_ui_kit; + +export 'src/wyatt_ui_kit.dart'; diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml new file mode 100644 index 00000000..15d313a8 --- /dev/null +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -0,0 +1,34 @@ +name: wyatt_ui_kit +description: UIKit and Design System used in Wyatt Studio. +repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_kit +version: 1.0.0 + +environment: + sdk: ">=2.19.0 <3.0.0" + +dependencies: + flutter: { sdk: flutter } + flutter_animate: ^3.0.0 + wyatt_component_copy_with_extension: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_component_copy_with_extension + wyatt_ui_components: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_ui_components + +dev_dependencies: + build_runner: ^2.3.3 + flutter_test: { sdk: flutter } + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.0 + wyatt_component_copy_with_gen: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_component_copy_with_gen + +# The following section is specific to Flutter. +flutter: + uses-material-design: true diff --git a/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart b/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart new file mode 100644 index 00000000..771213c1 --- /dev/null +++ b/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart @@ -0,0 +1 @@ +// TODO(wyatt): add some tests \ No newline at end of file -- 2.47.2 From 23b608ed100548257dddd700fb33676ee275bd2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 10 Feb 2023 11:25:39 +0100 Subject: [PATCH 083/320] feat(ui_components): add gradient attribut to text wrapper --- .../lib/src/core/extensions/string_extension.dart | 5 +++-- .../lib/src/core/utils/text_wrapper.dart | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart b/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart index d0e7817e..886f51f9 100644 --- a/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart +++ b/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart @@ -18,6 +18,7 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/text_wrapper.dart'; extension StringExtension on String? { - TextWrapper? wrap({TextStyle? style}) => - this != null ? TextWrapper(this!, style: style) : null; + TextWrapper? wrap({TextStyle? style, List? gradient}) => this != null + ? TextWrapper(this!, style: style, gradient: gradient) + : null; } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart index cc9e4119..176765bc 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart @@ -17,10 +17,15 @@ import 'package:flutter/material.dart'; class TextWrapper { - const TextWrapper(this.text, {this.style}); + const TextWrapper( + this.text, { + this.style, + this.gradient, + }); factory TextWrapper.text(String text) => TextWrapper(text); final String text; final TextStyle? style; + final List? gradient; } -- 2.47.2 From ba1c1016e53b766cc71e80e795e890a8b368a673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 10 Feb 2023 11:35:51 +0100 Subject: [PATCH 084/320] style(ui_kit): remove default files --- packages/wyatt_ui_kit/example/lib/main.dart | 3 --- .../wyatt_ui_kit/lib/src/wyatt_ui_kit.dart | 19 ------------------- packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart | 8 +++----- 3 files changed, 3 insertions(+), 27 deletions(-) delete mode 100644 packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart diff --git a/packages/wyatt_ui_kit/example/lib/main.dart b/packages/wyatt_ui_kit/example/lib/main.dart index 8a831274..1b8dc3bf 100644 --- a/packages/wyatt_ui_kit/example/lib/main.dart +++ b/packages/wyatt_ui_kit/example/lib/main.dart @@ -16,8 +16,6 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; - void main(List args) { runApp(const App()); } @@ -37,7 +35,6 @@ class App extends StatelessWidget { appBar: AppBar( title: const Text(title), ), - body: Center(child: Text(WyattUiKit.testString)), ), ); } diff --git a/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart deleted file mode 100644 index 0d483300..00000000 --- a/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart +++ /dev/null @@ -1,19 +0,0 @@ -// 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 . - -abstract class WyattUiKit { - static String get testString => 'Package: Wyatt Ui Kit'; -} diff --git a/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart index 0e1dd56a..004e7a9e 100644 --- a/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart +++ b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart @@ -1,20 +1,18 @@ // 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 . /// UIKit and Design System used in Wyatt Studio. library wyatt_ui_kit; - -export 'src/wyatt_ui_kit.dart'; -- 2.47.2 From 5464cd1d4068117ff886a994da63e5e0abcc7068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 10 Feb 2023 14:08:04 +0100 Subject: [PATCH 085/320] feat(ui_kit): implement information card (#126) --- .../wyatt_ui_kit/example/assets/asset_1.png | Bin 0 -> 3402 bytes packages/wyatt_ui_kit/example/assets/logo.png | Bin 0 -> 1661 bytes .../wyatt_ui_kit/example/assets/mockup_1.png | Bin 0 -> 1647053 bytes .../wyatt_ui_kit/example/assets/mockup_2.png | Bin 0 -> 774560 bytes .../wyatt_ui_kit/example/lib/cards/cards.dart | 21 +++ .../information_card/information_cards.dart | 152 ++++++++++++++++++ packages/wyatt_ui_kit/example/lib/main.dart | 32 +++- packages/wyatt_ui_kit/example/pubspec.yaml | 13 ++ .../lib/src/components/cards/cards.dart | 17 ++ .../information_card/information_card.dart | 93 +++++++++++ .../information_card/information_card.g.dart | 81 ++++++++++ .../information_card_horizontal_header.dart | 52 ++++++ .../widgets/information_card_icons.dart | 42 +++++ .../widgets/information_card_titles.dart | 63 ++++++++ .../information_card_vertical_header.dart | 55 +++++++ .../cards/widgets/card_wrapper.dart | 124 ++++++++++++++ .../lib/src/components/components.dart | 17 ++ .../gradients/gradient_box_border.dart | 85 ++++++++++ .../components/gradients/gradient_icon.dart | 71 ++++++++ .../components/gradients/gradient_text.dart | 81 ++++++++++ packages/wyatt_ui_kit/lib/src/core/core.dart | 18 +++ .../lib/src/core/extensions/extensions.dart | 17 ++ .../src/core/extensions/theme_extensions.dart | 21 +++ .../lib/src/core/helpers/helpers.dart | 17 ++ .../core/helpers/linear_gradient_helper.dart | 22 +++ packages/wyatt_ui_kit/lib/src/src.dart | 34 ++++ packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart | 2 + packages/wyatt_ui_kit/pubspec.yaml | 3 + .../wyatt_ui_kit/test/wyatt_ui_kit_test.dart | 2 +- 29 files changed, 1127 insertions(+), 8 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/assets/asset_1.png create mode 100644 packages/wyatt_ui_kit/example/assets/logo.png create mode 100644 packages/wyatt_ui_kit/example/assets/mockup_1.png create mode 100644 packages/wyatt_ui_kit/example/assets/mockup_2.png create mode 100644 packages/wyatt_ui_kit/example/lib/cards/cards.dart create mode 100644 packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/cards.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_icons.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_vertical_header.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/components.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/core.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/extensions/extensions.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart create mode 100644 packages/wyatt_ui_kit/lib/src/src.dart diff --git a/packages/wyatt_ui_kit/example/assets/asset_1.png b/packages/wyatt_ui_kit/example/assets/asset_1.png new file mode 100644 index 0000000000000000000000000000000000000000..230d42fb89c38dcaae21b187f636cd266516ce03 GIT binary patch literal 3402 zcmb7G3pkT~8=u2yGg8}XIYng&g}10gnMu^fFsaO82nj9cjEGIhp@W=_kqi-1A%~hA z-V&%G3ib^V{~`ThU*egE$J{{8Rgx}G?K#Sv+!925is zNt>IQSc50Y^N1 zgn}Cx9Rb$p=;(-G8T^+u_BRg8vHu#lax47A;=?X z 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/mockup_1.png b/packages/wyatt_ui_kit/example/assets/mockup_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8621985955b07816853129798b0abe3b07a181 GIT binary patch literal 1647053 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
S+Kf)GG@qcop$mYXvp(6GSJfEcFE_Kva7 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

8FRN<>JAY=ZeW{`_{MJI)JEMo%~o>&?sQNUS0Zp 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

AIOd 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%0DVQ>f`7PAx<|W5Ls^U_zw?ls2Qx@AEiB=l;+=jE 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

ph}L5wUZ|oP~Ufy<_%ptgCoUZ$UYw0_;RN?VoO8 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

Hg*ydzKZ5)gR%M@6_+`DECzf)ul=!h& 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 C*`&4$a>>+a_5j;hgV-ZMH1KA=A9#s* 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℞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%0Dg(R>bG}q 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ë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 z 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 z zVE2Rzi6in0WEnLhz92;rzB2UA>`+ITc$U{+u2JN)6>TM+^U_kM?@=a(mxFfTDS`o-f3cHG*G z*bV|_d=+-p*;zg)4NlFej4R?z)xx~e_%t3Q5_8MrQ?T=djz^!-|%mv zUopMBQwC|X5icoc~Cya?DX92 zup88bqfmcPWm;`?4)X(|WpoAO00PC1cV%jw<3Bj*$_M5^{J{R2?2L*ffHKo_B%HvDJ+hqjy`9&$VrzXb`+6R|-q%mvk)4t|JHBhH zE_25dJO20mESbOih_6u|-v@a4i~1mYzWw62B@Qbr*k}+EP3RYHy}nhpdWnULz!50x zvCwcZ;=<2veZcg^g8}WZU;*@Y&9c=8yYxYA%cb=rcS+V;?~(CI$Ue>}CPdJ_)k8jn z`hDVI{ib;K8|S|j4}?yCNCL%9eMkY(?qPAZ{DyYr9%Gwx7N~{Y0JQkoUE`uYLxn#iP z1QuL#m#mwR#sVw|2i_ks!zKs)Rn=@dOyS!p;gkAp0l#LCJQ`wQSM3!01GiO~o&Pv) z_WO{6KH4b{XxN8Xa1_`=Dcq!MkO!u(&-@bQUm5m|G=E2#>A?G3eglOI)E9Q9?LzE7 zbX-v8@Ai=TjhTB;|B2ww(T)&rpo2*GNWyP?emBnN0EAOy2?yOHfWa=g7j`6Y4{H)0 z+a-yHhxJPNYKV-4FMTJ?{(UWVNhMcA`|%cK9G4FCmqZK~ZomHJ%Pq0N45v}ByLj-w zv`r`&^WAkn#*+;epgXTh&xZWXwgKhIKoT`$b65z*7GqG9vzh$@dMJrr_*9b0KdJg#@EJwRsK9Mr}<8{$k9h$DGTYAXCRGI$W@c=+KwPel9N z!fR>*<3GA>-B`%Cl*Xoi2R~0mFXPCBKh-1NgC9R$BxGv=2*vsx*(ViYL`{UXMo+8ZX^M7LG7Cr_Uoejx6-*9GM&PwqKzTq4R>n#c|-0Nye@1s z2PBD^UyDwKFwB6qYf7vyDwn2jPr@ILd-@@qo$dvJTAC6JqpP4Wi0%s zDwnJqUykL98?Vt-9Dg8WtsS=P8&!i{oC)W*#Iwgo7WI&cG%Anr;5VI6k6RH=O}qK+ zfd8*-yr}ILC9GG~ZpBI+&X4c~xfAie9_+M)=<8~iIIJ*E>VWtNdTtH5LxV6(+?M{e zL_AktT;}z{5>@cy&u_ogqRkLXV9U9Bducw}eO|wzKSVu#JM9GgaefbLj8m}3641PU z?H82e-&gIe$fu=vAt$I-}}NZs@)dQ z2rCT;ix%7}muV$HP&8xs8M0ayDVD2cfyJ;ZTB#rhOT!gFOCX_qOAr%9I>w+gTJFmQ z&dU7`%6yj?rF zs+BBJj({i!YRc81Bufzpp`fH!g~U~IbwFav5k_aBUaeQdz6yMdc1_r<-yuOHp?rq| z!rtTm57qOel;5x{F{JtlK(aQ@APwX{a#H%rhz5MwI;c>JeC`TkI&SJ z37#7>cT1*D+bvk&XGC#9wgd8TzhxJ&BiAe2h3GsNyklY}>lT0;3;X9Q`})m@_DRf4 zLi;3SJhFW*eYiu1A^S=7tU&RN0%TOjd9Y(#Npoi~*Bnjr|(ehTCCFMEUr9 zJa*wb-y5ITHzVWc_)g9Nlkt{do?t3qVXlI9@t83w&2K5ptMdlz#>#>Ow>Y>p6BcHb zkh)xUasM>4AUQpW_!ILBEWaT&x86}j`xSh|yaNAK_mTSH@ISEzy71?4x?=Oh`= zb(OjG$!W}g+I@@Z#>C9hq#}-k!t5d++^)^dtMRyECJyU+g2!j3+)$cZ;Dgc)nS6PC zo&M()CIPRj&&^Lr;SHet-1-ERU!Q4`)3Kfy>#cne^>TCTlWGn-D!uVtpG2G)$oV;S zd)$?06(*qEZ*7-N&rVD%qdblA2l9CCNCB}`UI*Iof8D-}O z87LD_&WsiMZ+sIcJ|Ej_@i%X>)9d5tH#;lYkwANiX{GT+$f+5r3Bc3ABe|~1GGx4a4@yN|8OhlZ+NyudoU)g<|V@M7eJ#`-c@s@0iBMaFh2$u1X z+cPujJa2~9XVk_)_BagJ5k9!^+diYqXeTwZFb3^hUz$-GTj#e>W~IjGIWIE{Brt5I z4%#1Fo1Nu@%izlF$|%^87~(?xFl^N}s?2eol^k1ypTdk3iIVG!GmGPZ{KnGQG}Ix&I5QLNbH?Kp=EvEIJB(|=rOihmi@|!?oONguLGMxsdr&ZbR;9Q)+laC3ZzY&Mz z^9j!TkV;D{-+~7u7pkyu901i$c}SpM94G4?M7j6p{dn18X#L0WAP&gX zpM}Qh4+budgX#d4Kx)4n7`M+jS^heffzD|cmosk0>+So){`@db#=~)R*mwLm&Kx)2 z-*fgK<;`~9Pk(qWe~o!T{|_J@%A6O*?dQwRQ><^;qyOH%)y~VrWr>tor`I?8ZS?2AtN)Sf$NJ#h_(oj*x&1dg<$lgb=={8{cE|&o3zt<{ zll%tHTQ-x01P`yHo?!UemoCXn!F7{wp!0s0M90Jm7F790eZrWlv)OW3GG?jnmTw7n z{L~CShOTyqo(K!MY?ml@D7ODP`oVFl1Un?lNwgeN_@;>3Bx@SKN7?Jkzl8jiV;83R zd*v6vZ3aae3)Fbip3f&=x$HtqbPP@3lnK$`6XEmGcGM@q^Ff5;oY$Ga9q&AUdA#=+ zwzpI7)lN@*Q^v$7;(AwsUGA1@gd?(UN}%7^x{UW#Tp;hrI(ac+Nou7Cw!5GEsmV)UhLTv(>e`xSBZC1u_ZTwMK5dTIs)#9+B@ zehL1wSFY=TUrVr5Krr;A2Xvs^kNZD7^o?{5eg;-=NOPQC5O3;3h!=#JK1@`*#32bZ z?)pnSq#%bN`gAW=aNHa*Al8CS^1Tq>Hi>?(UyMLRZT#0V=b7!ZKkV;R#KlaOsn9o& zaWOt@oi-kJ|8(yq-9M`tGc|cfd9^a;)o_b`AO1-gd<4Ji)gEzJWBk=_aUgVfh%)9Q zGKdS~Pojb6C5enR=6SgV1vi#Pr5}KtN?g|V)4ChC9OC#Iwyqn4cA5Dxwu<89&CTdf_s> zvV-v_!H9a+Z^reT&m}jNMyDS_+*lZwA0kezcc^{F_4iPOE%|gs@7Bir+n12@okcxt zp~mMOPZZhXI}N#o;JF$3`M*VdW{7YcNRS;Bz2o$PUazA71W#suwc9v?=e8t{$HWyG zK1Yz?8CL~vyln6!#C<{Gn-w0foKJ3TxZFGyY(PC7Rb`}cK88Cqe}9;P_aWp5u;5t^ z95K~V#JJ@yv)_oa1aB68LHO}G(r(q40ulG6e@Rb)esp14rAxw(+$;Hw8lK-rLN^{Y z<&Hl)&vJ)+ANm(z$@6VW`Hr%ZAef6kD)Bz+>jN$?kAh!j@bEmb88;Qzo^3a7pBY6Q zPtFg|6CRI~n-K&lpMy!9PD*2(L9Fq4jQyAZWab&i>8r=ux^FFmur6Jf<|hSsJ$u_= zeB^fdzINlo@qSHL)dA(k=>y1X!{_xjlwVu8wR~UX2p(qskU+BYOrjPt335KqkZ9ud z;0IsA-VKnS3o803>T!#;<00BnJH2DMM<+yLwAbuck z4q}X!Ny;P=SD<{Gi04->mn*0bm+NNS8m-VPq2Fp&%9RoAl`6^pajRBJ!QR_#RZ29= z+i^6PP!3cikhbHfUlsiCH+ak~N%yUrR=m09wpeQrI;s1`>>_Rm{{Mn`7thW3CJx^; z`kRqN5bFIj>Au}_Q}S*-6F-dh&E6Uo=n{@V8J>@chgM9*TVpjXz)wJZ|7QMK2)lEZ z_opw%nHUwDSe35k6uWyd<87z9_n*)rL2|zmfMq|FhzpGH)2K z&){1!CA6E5GgV@uVtC1C{q(@GN(7@v5d-4kV=sJa&4Eb6GCJQ>e>%Jt6^KiuMJT;7=ZnI-D? z@V`_&EuKJoo$9FuK92SlM^CD?z=i7Rka7H0JsCX)99g|rEI_~fN8Cx|eCBb{S{@&l zc55<>6TgLH7xXaSTyXxidMsMO_7TtH0aD53(}M9V3Z4!b=c5wiVyJ&oFuq0VnXnuB z+p_lt^Dvm@zYUwt0H~;`Z07*naR4HTYi>E^N;}QLIWXD-QB{|L$>kpZG491xY)D_HUWo~T} z`eDy&_#2vV89v++YRLD5!ypLkE(972DlXMFy7yb zwWbteUQ_oNKHv^dfG9$H%v>3tM?00i{zoJn;nH4m1i;Yj9|+K|s9UXp zzeT!Ru$_gW>*pf^<07y{L$cHSPGO#sv#Na4Z5aKOjhU5wR6K}!k4o4BA5l*l`uV+d z$6e8sWjE^GmcJ*Qn?YQtH#Up<<(TM+vAr@gM}lH#bw-{Ko~_913Lh|Lq>AFc0B?*& zPnuN{?IP}yM%?lVwMroF;Hhvmi$NSRDYx)4{5U^WgN43bYTqN5xa2Md*EbE7ISCdQG%K z;6W~Xw_1?k@i8?yCIw76BBLDy4T-J0&EsN4i1E`;1#5r{#S`kWh{pji0Lmvr>Vc*i z9}b=jA2XO$Z=i}&flU-bIP^yL4NldYsOarqH8}Wb$8pU`@4t*w+C(;_%dk{R6 zbGSalnXmR+bdawtyKmEF6HQpd{Q>3wuQ1>HyW@X<`bAIV#J^Mh+WGR>{)_q`d%peR zLh?a{g$9r6{D_H$z1(Su7B1}V58;Ok6htgs^w2M5<8Xh}j39P`Uio!V)jcTZRzv%t zZ^&M6cF2PQdZGeqx3EkC!1~p0LBz%ZKWD|`poX!WgjUiN;P?EBR3uN?XVx_4Z9`_nsK2M}kkKJGWh`<#08+w1$_IqdB?w&>a4 z{nGW@&JSddR*(Mr`RXI1A71b6`(S_NP5#bl-&*eFCVze6Xo}zJz1(E~dF}XmeeAp+ z-+rsykN-CUH+~>;?D)K)V>w11-{%}R?@u}+h3Cn>5c2}G_9#Cf`P{NiN5JQz*X0r5 zx4tY>yuarg@FXJsapOhn_(Fz#L%xayN-V68Dj<_2e_`8Cv&h(}567!f`2C9>*RP}g z8{sY;89Y~n+x5Nx3#7)i-ynR1BYG(Bmxw2F#4kUZ&h~$tzc#fXgKuCw|Ml)$i&)@| z-?-;O{+K)#W|?VG$G2$y^XuI=00-u7NYAd~dCQce4F(IEX#Z%4IQ)4YpTG9J74AIP zqlvrZp2)T@d49hhR`p@X9PjsmtD`?fTLpfvO1D<-R#-SseyemF#^oE?E89kvu`rB` zog8u9<>`?r;uWRQNyPVMhxkZ)i7$|(QkQk#Uc|!ho0pbwD`WoYSC^%3L%l0f|K2tQ z^?qI+SLQ;~`1H)o+5rBs_0*^|>ScO~2#z<~VgLW{&ab6^o;2qBw+t%JhTU`F>$=Cd z=g&hS(75YsgU|^eE9fI!w*@eaG1?*7-}Pdr<`!zJ#GhmpIJ9K|rgU?9eirj^?AvW5xJZz39PRO#03xGj9Lh;N z@C7n{t7i(33;!e}Sewv&Lh-+HQHv0R{p-f3%{=h+a%k2CD>~314xX$2mPP*dffw@o4sH0`Rm73cO776 z(D($}#nx&ZFF$Vn`b45^Y!34b0(M*t=MT1W98Uz1MkLWf0+NKzI3Nj@(Rs`Rh@H`O zM@(^j#}YIFpTkz`*ANE@=fjY3-pHenbx@Uufv<+!?0pL}Y~GFBw|_Q=yzl&Zxu9@- z;9E#H!!PHV=WQx+NqH37`^S6R1_Ws5pGIHOMk4h4UmBds7jb-;*EG*hj>886{?&HD z`ydjvB%oi{yOc$0?ZfjIBt1wQ@Sc)JArI62qUcXJ2LfUzR-j-9Q-8StO%(sh@uy$B) zw|WsTv{RPw7p@d5={LjzKK%6}^pHsit%RM&twFr-AAtyfev6EWg3m+khy-s>!eNDQ z1jLFEgoN(Y%OP*nOJtV;%Edt!^j@|E5cHeECBZV-d3+~ycJD+D0?4r5W{J!p*q?=Z zv0?o!dWl1cOeE>-mJ&6H7T^}KST)OM=@kef*zsFQL~rlW>zUcaa+|RPM4YDcTxi_4 zh}cisH&Deg`q`;n{UyY3ks)%Nh#NF80CB4q1&h7Ra*U^~rvD z%pCi%G+5?jZ87MQebBgh-Wj;d7UD{;^3`@js>i37VgP(?- zmt(YBcjZvttVbLqOeUgVb^(WRcmf4muW(_XTbJ?89e%@xc7Cg;U*zv9&MIO7Pq~Hj z^=e139Vf~`@qze28uN*$%QL{!vL1d4{V7q8EQX&({}CB;LjH#)M&ZZdao{__KFtRU zrJfbMaT-&&SKU#-xaF|ml|cJ35z!!S;<#J;>-)(!@+Y#taR$Sf`maogcps5}2%ZSt z4arutb5MPt-ZO|-pNi_zm`_DrG0wU=6aEMAgsul?fS)Mz2l!D~7pEg*YQYKf32?hQ z92^Yr@xrhoUX{k&S$#D4J@BUTyy8@}=NJ0gYi=Gbk%MvXL-gchJK)vTY1xr=r0|PM z_;P5>aeX2>0X!DPs80l+7|7v?i1?m5p%_O^d}2NcjQN#Wg-aD~tnmgrGao$R;K!vg z|Nb~?J|57%jguH}H8&(Xv&tL4k@b7T{37?Xd^d>D-bbcy9LK~7%{V^{PiV&Vk%Al; z^S(YI8Q+ZZLh+#BLah5H$nfkPnT`S%K3xXGV`iOs0rtmW{YmKRe-^U6=JI3Wq_pEg zy@8(wo|Gpd#1%RH`_W0kxVTluE@?~v!i0N2k4)d0VP@X*_^H|e{RhUy?c4b<_J26S z@rwE@%}c>^5i)IRvx*%_%x4x`=~Xap$=O-nI1jGQD^E<|!7DR2GalnMED53`i+N5= zEplESQ6N-8V-AaB<|FufPa`h)mBvkU>0g#?G+h%sh#m_EMa=LjtJ6emERbot__qxNpeJEKMlm!9cyB$^yrA zcwBvC;NN_rk3;@Yd?Jr4j8}9*d<=cJenq_q`6oG-;WL66IVmo@Ps;`HHzs$VnwMwl zZX^#zs2`k=tal8f%;V>n!f}K8>_3m24>V)}*`qw6KW4d?75dF`ulE@1cLq^#C^F`b zT&I2*IJ`DBMWT%7-dnJfywN5-A;Jiydr0)j~t#lMemM|}ssddha-6E|@ zM5asySakC>C3SyrSCJn%Jg9mM#$A4*KMv!02fk-8|3q~{aU3Z(%K>gU$?Xa9M6`fL2Y```H(&-(puDfjXB zSKsTus1LH|+pmhM$^!xm527!D(VxE6&JqCHEu3({nF}a;ja$&$2fvi5=R$N()IYMl zo&fe91s0TH-z@K!PTsF$r0ngqTPWv36#du*aML%Ay$be0RqqushCo@Bdx^eXp!E;G z`)MD>2tCJ%b{>5kR`&KDeZ5xM`#*=DKK>A=?SI@K-!G4TJiXk&&#A}$_wm~*`}Po@ zwL?F8WZ&`O_%@H1mC;XY@6p$5mErfC^;`A6p4Yd^{pml?&X>2M_vg`iOa3NNq$|TJi>9Q-FUsOwg*;@u@brVyuUtv;NQwbiTMFG+i{*=3%BY6 z5i$)zt@kKwC0ec5@Nl*VLmKa;(^ zRDgb&cv`*&KNYb<9fY6P#CEk8vKCdvcwbXhLDZom09oFnVIP2KQf_N5{vKan&!z8% z{yRNCN>9oojsaKM_WyOjHR-8{gWuH17x3+lxj$?hS>=m~qszY(xPQ~n$~Pm7Q&iQ5 z;HP3-e~Eh_^SZMKc6=j$r*;d?)d+C~+w^YedEPRPSAxwpo{HQi-)Xx#$*KbLeZp#7ZUiszQ@?229yz^Gz z#fk5Ic~lMG-YASn&INW<7NkoCnJV(RU^o0P5o;pem;az`XlY6n<6i%9X=1YX8z}!) z9h7DU2tN|vk>T(7Pttr|`LlRKa{(Bc82X@KKd_)1%e+2NZ_zkH&yIhSJr|bW4Uh?> z-jW9-Ug)deV;35~ll^gO4BGqGFAYrb1tNajp1-da^FVy7i7!C@OYz4gzR2|R?1a(- z2H$eR(?tZ-!FGLAxb_c0f$O@Bg9Oz605a!YI^^*}B5*%sd%OgW&^RJEPg`{aT&UK_ zS0c=~bKu z1Kjz*{!c1^h{0=DcN_FO*r0j*lE`AbuLnEj5%^&S&#nmf$EjP&^AXQ?>sOVgB!E3v zrKdus|2+JD@5?_f&nV%%%E)v_7WehlndwL1@9E%Wy(NTS5SK@Q9H+xU@4U~>-6K~+ ze`V$e>0AxxXXn*vK8MlYgfy`8s&oh15F27NJ9`p*&KuKp}FtAg_p#{-Fq?-s8rje|@a5By&8>eR#%#_LP%seA^6Q*C~E z5&V$I;dSM&W{c!?#S$a|Gsd>agA!=A+T*|@Uzj)w{a>SZbPf2saJilDATz1_DC+&N z+Mb$&eqA6sIIwm@`7V@CNX{-VMSD+}mn5$TjN^TStq+5D?C&|pB~pxkyN+PTQ|*zE)lRX`0HYn6NFsVKQO79V?=R(^2ztmpfh)H% z^gQnxdeo=h-v{{n1CP89WBv2JFZ`m~ZPBZuRTzh@0*LWymAB&Tqke0+Dx}@E00{Xr z5q4X{k|_}b5J0vbWY!Z(DTiVukeNdsm2`45ZqX|h@MLPRJHf-{VHLC|Uyj1_^|IL$Fvb37TXb>&?Q*5;)4?+tDJuIO-*K-j>j#zDN4A z<=)OL*0!B+iDn!dgC%+?>^Y8IeNnTYmJlLFF(HI`SVlY4W;w@inTQD@=si)iMIqA* z@)pq*EQ1~7$jij70y6Yl#j=3NOd{g{c!KAqdc5VDCvqytXh~oJ9LS6v5-%hQZY=bJ zxqJ1jLQ}byJ^FgBve%bg{hJc8pX$BR`uiNbDdpm65IZr!b5qTIGp7}A$-1rFZpyh# zog1=Yc3PebtZu6ozg3gnBCFP`_Zc2UOGtQ(2@St6Pqdi;#rWGCF>))e3GinT?e&qp z{xh&an8cYf!#&0X&k$rbOsL>SCW-bFSO`ztqvoY~!}nVFmk0!nI4+I_#(bsnY4*5Ovu|96#KYY#n zC1hsI-62zTeI|e(k6{TAQ;4TMgG`A!$~{q$bl)5qT*X3R87bO@->LfrKLS_{H^blI z&@Ip(2LZ)+EdeEsIU_+qK|Z5Ss!s*t)+faoqBy0jU2qD0B2fi|-3fChV1G`iGn)7T zdUOi7#~d+7P~I6l8$G3PW1kKSGpd;H+^jrrT-veF&jnw*poaKK?6DuiIp5GyyC=ib5#u@m`sobtjc7Y=xp2PZ+!krvO3WS~ z)xHE^<9N!%$CJlge4J%K=p_+ver9fL9uE-unecG~qANO$Ka5j=_JN;uIL4Imw0^(W~ykwq--N*W5bP9I9e{7BI`Eh<(Z55jW)Gvo+ZYhbavl3(B zhu?-7hxr?v1+fD?GkC@oLk$7rP&CD^rp^52sOEe;hogr!W zO_&?9XfKVe7ZeCI`1@F&3QhviN@&{)PbnUMynfW7|6}l){)@u=Wv1CT2)Wf(4)Jp9 ztXu^TDAfnVf|@Z0tPsS3B>JL4yZu*UvkSrika~Y58g3k@4dw zMoo;LIV1kV%I9@fo^SZlPamu}LWkuevphcIcD!7QGj$3ebP&hDbWH4cOiZ@l8oDOek>hbSFqQ{a zC)YTh15uB7O?hgL{;#P`t#N^EaBW6zOby3D!F|K(T4cO*Vxe0_KOR|`vn#}fIT>_xj=1Y zu}$|Vr?+w#%T0P~k9zx954bk~>g{?@2#l~0%lecJ5cT#(K-vfAkm28!d-Qf5p=Ug= znQgL1xcd9#IsABgV4rw=Tmj-?eJ^`NeAb`&+xzdw!D1X|V_dxq|9!@@N$yjRdi0C^ zWc;tG77VxQJ<&Pzt#+R$_v7Es6N!Soh@&xI=!cyj#MfsYo5tJDtGDxdFSpifmA#!u zU%wSw>$R5uS7p=B@fo-Kn)saYZ=D}6$EelTz>aIUCEBAgz9yD|oL3#h{`;99&P%`Z z4}Xl0$MIjHO?I9h)XT*)3NKQLCF*JT|CQ<#e-swgA7MxRGa4`Ch{aeU#(lF~qhCPz zA903k4zU0#wyC`+e?@H*Y?rb{j*~=tAqXjy^G$VL2VRR@rq5qB+BaOtUmdJd$P`vf z<#Q1;co)lZfRDbLPWde5aIt)t7@;!m^2{+n>-eRD{ zUo;4s^89kA!E=6gbm_hTzk~IgOYBr=oz~}MrkqG|94*fw8Z{-F2ty&?T(->#dDgG2Xv~sjWJue^wUx@V_2QEb0>p|oQ z_ty*vXNmrJ#Q3tDPPML(ze&8!SPJnC8i+X*4@x}t*A0a;wE>?duz+ka>mNHQ~ z{T~!iEfG8(){5u##sGfAW_>v1I3wc$GOp|Tpa7aUlMC{`$d&hrM^y!{6R!r_73b@f zXuH@Q(%)8lJpDD=EE(sYl$N^{#vxpyI4+~o)6xqe^BX7+1bl9|IejnWtFqUY?<`|p zsyC+Zsv$EcHzxgHXw39tA;X2(&fp38h6J%_Hp&S0JP+Q7yecZ|O%XHIyTnV-KNtW_ zjFjb4^@7CsgiF=4&@WPJ^}5K7Ur*@z$^O~nT$0e(ta}2?Yq(rJ2l;-vQ2j~sxb76s zEBKL}>cx=b-Kp0FuKYQH9S+QsQltFEXoKDd)M3akM_Xi11cESlPOpc| zdFe(ukB@ExREzafDF2P*Y=jzo8=ldHi#{Nrdi~c%jq0 zDmMiP9rJK?V(#HI#FrqXQ$Su~G*>+VSTb@~I0I#ba!)ieBZ+!uXuT(K`~(~Ifsi|pbjw$@G5488 z;u#a8;B|75dRhY2VnO8f^bf#C)nj^{1~I5N=>4HPKMw^MAF)O426FuN2pmsxhv0RM z#HW>UUhN4vPTM8VlZpmGtuSvA_b-vdeL*j>{G57>FYOw?*XrEz`Q8_PQSG*f$AZ-u zr!DHSXm!|xUT@-Zl&*@fK(1FC+Bb+F8SB;R(CSgX3VyaiE;Zpcwc3;n^e9!$2m(k2 zXxF$*AWI18Ub&$sVMKkT41Z@D7^u+7@Y)Bxo!7%oq5kGzg;|OEn}X$L1>}vzKesiRm06$qX4K~{w*&?3 zHVb655Y^v^!VyQlp4~!Cqy5lrsb({C6yilj&Qj5f8OBox1o>U&~LRr%dhwEk?p|GS#}^4Y#gn~Z>=DH zy9E@+Z*VCrj?dsmJiDOYk>Z>D&*^6rGXXx1jvFozACo5q7k)ohr*OcZk|)fm01J2q zOUWqrgup3@1wHDuL(nO<90Wyh3U;ToThR0io5#bG(a8wy31kichovW#MxuS&j~d1| zxu8s9U})Ll2yQh;eF|F=rH%Qe>I@zZv9N0*b(sFuDa6PHOSBvy?(h?FN<$VWL|wV~ zPej1zBw_~&*oU;^AM7NEoq+LwtWE$y0IAbN^n(4WhxjukhLes+<44NxUK94 z)~DyVuso;+f(L#_lxO89ra|bLzv!2AZ$Ei_a9l|May&oQAmkt)mvwzQf~*(;<^x(g z4#BCA`no(RPHV&|kK6Lo`naZ_Qz1Nw-s2CC1$qzceu2l$X$2f#MSK&a$OogR#42UX zyXLq)7P5b*5edinq;kgtj$i1p;Y`>A{q)pt^*xgFIjzp)lUuWm$@6%1^ExawBR?AY z_DV-FKs!@v_Xl^DjoGda2Kxi_!#IM|5}xpTIyw{74cd)P<3Ef?BG`a^u*Zj|m=p!-a1awlkhI7VPT}$-8Cm_??b0fACA>c%G1_10Khlf*!p) zL`GBXuJp7zj>F9C4Btq*EOey z&x=!`JzfJK?6FJ~?gr+wztIJa@hM}RFg`!7OsU?Q!|@7&ax~(coVqW#Gi6MVs>vuo zJ0aQ+Id1WFPM;KYiTRds`x@6Flz)t?Dd&lVv%fCcaWw8Y2C;AIv{R=wemrRev7_r4qKgOLHO0?H)fQ5x&#f6BoE{$7;(h1Y)3+aaDkQIoxJ3)iozt#Yr% z0u7MAhZgA<<<{QUN4tAM=-ECoj)x06yA1g+Xy3~g(T{x! z<*j@>UhnIB*<*itU*6hYs~p>L{Or8=arWrPOStiAjB`A$ zcKkV>|1W!Qq9#{utqs>D^c|=#q3=MQfCs>k%6PscfXX9auwCtmA%Kb@^VB2^o>c|{ z2_Z=XHa50Fm4N4|JkM6y?#UCWJJA2W($?JB?M1Me?kdvUx)^*2xuszmK>!FC_)&=4@3BNng-_r((PIW9KG`X|m68!8|rvd?y zWd6eYqJo{nQEag1FUrr0SpTF2ii3v!J2A8`K>R@eu}312c4#lW2UJG<;CVY^kT`Wm z?PZh`2R#xU_P8ApOf;R6qbTPu(D}WBcS|tAx>FywmmT6TO?l48@nRfS9B^!xcuey> zb5I@=C|3vN5rg(IZp4qFKbpx$J!FCBNWqTtXJKa!$ddx~HFgF$#&JfDO0*}iL&f0l z82@RA`yIDkvi@6st86O#U`g+g^z**|)Sh$jqYl_1jl?VZbxkmiL-vvfL1VE~fHK}Y z7bM3Y{Ri^<`v{OnW(^bVi7*a1LO)~?mji*K5x0vwFcN-(aXpQCNlxRQ%dltvNWdL4 zKzUdkfy^VJPDAF=YL_*~`M4c~ey2Mr`S$|j8Oh2A9b|pdUiO@?XaM~ z`u&zaB>J2B*q#;mUM)XV^z*tLu!n(f>CKY!yvcnk&nvc%ommzrF#ekU56JU|J4di{ zOR_xf)Zk8*A?R~-@dz#U^NNLD;rY-&e?mIQ{6X9?N53%<9|%r`aYcK4zW6y8=2sq- zm!SVlME^U*aXaiGTdZ>(*D=SF_D;rlF4%}%-yA>olW}q!NYGHf%bb*4k36FABK00S zeKg}ldzSNu_@M_{_MZenSeJUgW!&jG;O8~xi+6Qh@bD+c`pNam{P=PcJM$Zv3OQ-UZc$Rx&HDWJop$VpYN81 zojerU`B3k)=RN?7yHHMm+!GF z0{&bigu}XnJ?D|n?GAC!oJM(w6Eg8EkVN=t8`g{Edf{_@LB!|wiora%QzRt>)m>yT<6vS_sS?I0%)IFuUVety>6Y}U?7XNW`hRG zbz;2?Xjp%rU1!$0s84cME`khu;(ih9?RVJ`WJOfa!*5=mX6G z>hH4|(PZM?IoJs!*Fc|k&|pW6Tn%|jv{`v48h(C*AR>YYT7~-D+4EW_W&}`9?1)zl z?RJ`1&1)9+0t653JqRDjIQq@47UMDKZ9Fn=w}08O9`8(AMLU;aLEa~!mmL2LO}w*c zU&5rfuW0)JUr+FSr}d&--VcJH@q%4m`w}=+z1!7erw!ZtZtHouyh@^H3ha8$F0V{d zp6S2aU9-zrJ`i{2{6|Lc{6}^K8}%zt{>|z$Z{QyjkpHwG0u*F*)m#VO6xYoSmYaVnw$G!n82@Dx6Z|bZYK9>X z>qux_RX5cQ$Tut!nGW?ssu%s&F+qIOevbcVc_fOiA|3iU>{q!zo3{kkV|_)PJ4JY@ zJQI)H8O4M=6LZ|zFuk^<^&s#)e8t)>kyzC+;hUppY8~x`e`83xhly1rfDscC-}+;- zRdcKJiY^ji_tuw{9tO_piFd)=-M~(r8WO4lAaqKIr`Z{a&rO_n{t}=4`rIKQ4t+}C{?p$yOaQm#4bwKzn;6&f%5UY*75j&s163qOE06a+ zg!aP`Z3El_zSVwcVITf6@qI)56Y}T&hT%H9A#Ug}Pde`C2#J5_ugRN=>*PkJ596*O ztDBDFa9u|X>k0Nl?xwj3{8XGY$1U!B>Uv_J5B;Cn^=NH&KkiOx|3p8Hcz8tB8BIUe z;Tv(OY~AS39s7M=kLV%jUsUVu%NFz4Tw0ymjsCTkH)f-MGwV5URQ-%LDujf4XIAu+DFP7^`Map1V}x%j8Uy0r0Vwdc)i?)M7*yW?FY zGs_sqF0_NA&`6-nYW3CTHz2pFwK-@Hck8IvQJ+T)woxyw|Ii=$)kwHQ|2O$}vE3lf zfxbH9zN>3xV{RJ>==Re7`6d2gzS+K~5sw;6;4|JtNTl`oOyjru7w|U|M__S%&#L0N z>_t57cqh<3wRjf|cZ|%3KH*&h@u;xxbY(k+{1*8>{9hIEC^-^rZ5h{9SPv#XuYVHp zh_+6Gr_#duYAk6h_k#vl$5wh#7TJSxkZ9FO}-OH1>rIO@=~ zH2*;5^TB!M+k^9S1O4K-j<|Sa-bvx~IS=B<4jKO8b53I?63Q>gA#vGoJzsT9ETlND z`)u7?zVQ&ZyMh1WbHH(X+kc|B2+T)$Y1rX7y%dkKo6#NPTvU0{Jzd9p*E_*}+zcZY z;)`+0NDSUI@qImNZc4UuMd64(_)kaurROe<+jWQMRC7LWTE;VMBA(SFenjFuQ~SC5 zF>prDqwPSPkf13;#!+e98IxloZYI-DW?!(I*7I14J8;G!>P_p9`stNO)J$(Z+ODA8 z>6J&Tl^#CVkOwlHOpmx}A9nZ5q;7kF@ZlFPl*mp`h+M? zb^((fNTMZAKwA(d8h$biddjGOLIHI~TqL=O^hdiQqTWe~1dPEEF&5f|KD`84hv;U#LB93D!Px>8Mf-l!+<1?i`^Ox+?IOMX)<^yqtc}WQUagJBQq(}Tg zpD^hYPNh%fX7c&xJcjmDd9qIk{lC<1s+asEgnnFmS=?z{^6@T=AN5SICY&&ya(^iQ zMDKTD9{qlGTyouIsPf%+OUM{6jz=1=PsDzA zOhGmW)KQOe#CcSszC0k0nAq--4ms)BucHDxDC91=Kj0p50QTH@#P&%@Fn$s>XCePx z95v1}(Rvh|5qk#1Z3E9EWoj{X*PlP3-r18S7twp7X_W&R4K=amNbB^|WH# zG4V~i(<0gvIiBHtg7UEbfI)VVKx4h}a@2=;u&8eiA@Yca702VCIU=LqQ_!>iSqHs4 zAkSLFk9BZHa(*yh&<7$%Fd=_LP$rRd0+`RYKNOz}7k504BbZcd=Y$0+ye~~0C(7I9 zLBV<2<_?O3p5=$dA(S&-#<|TL5Jv>ZFYcfuL32j(@197I1pkI;XI{^_46Z8`dH0PWWhl0_9BbA456k@d)%BFOJ_fkM#tZ z>w=#jB(^voAE|xvh>P~eE$lt|DdV`F7CpLcNK{qj@wC3`}p}x z0*B-GiN!dI3{9*T#*yty#tA}KM`Gn7kasp+0P<+D^B$<;QFbI$FGBuQ;tn8%@iFl| zvO^uPVLiM3mhFf4lmjB(rbT=1pg0U9!FYtSJz$QZJYP2s<0o03y&rA%Tp+$vncZm> z?K_d{oWvH1y7RR2vHu+3Fpt@|rgg+|JZ3OH=CC+wId9m3D8u~NqXK?pB(90ab(Bvi zppEYX>Vs^so9WP!*Wu-r#IcOp^V>wvINxCeC0 zYT9ME+r4U6LC!HFfOh)06KJP+RlJ7!Ab8|!unRKLgBW7H0%4ShBOdv-N}yc--oFOi zV}GxSdnIH8S^mzy3fygfXI`<8_3uQ)m&_{?dLMC*9*@wASH!;w9$abMyt5?za(&hSj>xJY;W7m#;wBxr6tIfKXLbZrUY-b`f!%>*HgVr z(BDyC+WR2J`>*crVw*(Vn*XN8BGHo)uZQ$GcShkC`2)WaFQWc^{eAu1krQ@)pq+5! z9@@F9wzB*X<|pj1XaVcXS_@EK?paylPM)>)1N~=<@v_&#cwr}uxe0$5P0jJmi7rTt z^K(n8f_UBhQvwAok-%;J#{SG9L7E7jo|O#}6Ze6zmC9eRu7(FhUWbUXZ3g)RH~ zW3?6fe)l)|w!wR6U}YC~rrlG=QCfAJSzdj-dvT3_knYoaV1Hf3omkgA|8agJAuy~y z7bJexiUIv6`1w}%ihdGSGuq3_vzsK&p6*@%f841x7xMq9J&6=Dh!oK<+fi>+BEhY~ z`1mw#pHs$Yg>`D;Iz^gack16ZTjVAO|J6n9xfr**y5f;=VcyVAAb83c*Lt;oZWTuf zn9uYMi+PfmANZ%gur6JE&TyxWV88n1AMn+J3Ff6;^GfjBv$8xF@s_KQ+wqrv11P_# zBEc2n)QDG(U!Tu(|Hk}WfzZIsS=>Rycov{yj$M7F`H=5!FTv^XT!+;X@owzgnAd~( zC@t;brJipgb?_eikD5rh@;PSwSXYAaU)LZqQ2s}Qc^Bv}cFJ)6W|WtP9T`00>%j&H zp3;xyQ%w*&;*xO=^;H~K%$~VPIs60RX0JFB!UJZ9`bc9PS?nlNSYL9RX9+P{>~SsaOB>Sncwf2cP##>@Xx zeh$2DZs_YC{WCWO*Ut_2IcAPu*v{Egzz2Gs_x$0-^is9*AmWl~c+^Y>_xt&JuGerLWPwvTgnmpbekVh4 z3a77vti4)>$$1N2=~Bn`G!s%V<(*);&Ihvs%gdB3q`NzTEuV8*awL^I<89W{6Ue)F z1H79*Z9D;o?3gW%cGdQKtIfpP8Z1F>6fFxy`MxDKDbPQ0aEkc3>&;h$rF)bL5Z6G-U6~&;Q)ReKR3~*`+{kHd_xH{s{T#^uZv= z*c+l(yd@RQfBF*Thm{fOf~q*$sgjYQWYg%I=&XShc!KNpXcj*sF{X5xtY#1N|s8 z({bQM*erSpKdKZ|+DW%LWf&=Ek(cZX8{TJ%9#jKFPgN zW*TNH69@UW38l(#^k3TWw@Yip2Zl{QhF=fPx?Ep8D)mIrAWlY;{&`t@yTOVNduE64 ztx%_S-|_r1B?B+Kaz$p-F@?q)-&Arq0Z_|;ygEiWZ@e?Q#6Ib$k%Q1{V>qB~Z%vY=t_ASJY)8yIZ668g89{bNi26CBj}7Xmj!b3L~IHY4ZC z85D&Jd4nO|F_D#XlMN*`nH>wK=_1V5Uacpm)Q%p9jo&F+jYNTLmA0PHU4hBW0j3_LfRr9nM*4m9c$^8f>1#0oXVY9-?1 zcOKxaCATLXr=>E?4`U?_X1Uog{?NZ%Hy@L`d}IT*w_Rm z(tLFa?NHdZ5l=xKq?TgnnSK41N$)6aFCwmvrke&OhNnp&^UT*TMKo@dv{ba5f-tIU zYWE(-a1Zm%abAo!fk>L0$&+!Vji05y&qM|s@ z&lJpuD+34pse1zi9af2y+q8Fr!G;fuU2B@zXz5L-fZC^w@;H}b{%o_iUTWC5*7hkm zb5K=yoln|mHZj)ksQ-`gG3AcGyb8Q{fnU7hNOY)RS#_=|-iOYyoI`GEJe}WCg%~~B>VHdFqhTeq|4r5^o!~V*LGb~+JRuR%6!fgTGKmLCgfMCwokXI9D z`Sp0ndlKI=Go|k6`v1EYP`A03`Qy3Y#lrzt5v>C3)i{ZsBj`%dkKq{PKbL9BOI7l? z^Sljk;le}5OKC3w+f5;*y0Vlo@JIql&hs%35*`twQ9X+-I^^2i*@|ZabvP#9rX4g@ zf10COwKA)Ygv%}+{&wLB8H!vhyy`c(fs6t7LRkFCbEI!`dz48NYBT=OZCTvdmhsG&oaCp!iqFod~kC2u z#Q*q6F-p%2?om!JWj%nEZcui6h{Rl$G(y#}MLsQYWbRzb5#UhEQt#G55vH=L-5*Ri zBA5JJn8KC@Au{maONWkzi%2}%|NNx#g6H#1Pl8Zc0H-R4uGRfF?V_?_gOZS}Dtgbw zz`Onrydf`wx%Z+PbDZupkDJX7t%GN8@a+ZYtrYA1t=R4%uNni(n?C{vonW>>H>s9@ zQ>0*iZBL1^JNh+t;4A$4<|@-7%b?}uSPNNK!@<^~vbCAPF$pl(j*3g%{T-n7wt zHXG@H^aYlATkxdpUY6P%A<*H<_OqPVN20*E9fEDywIorbxYXSF<=CGo8D&-a^JjFK z@9x*$i7VA0)nK)x;|W@AY7RyH|H$zUm7pecj=P~Oy28W#@;gOKqL70AUa6R8U=(M`NL9^GSC;qc5$8IyVncWb$c zdxL$XOMrb!_AlS83aL@z+TqibTgG9Je|r+fyqNs7tuv!6PZ+um?GOg1{#BKKILaHJ z;PF<7e4H3U)-5cAik)A6p|B1`wxEJ_4_$+1pC~EZhUSJ&3N>^BW-dwD8%he*SzfhM zcoVRe{n&C}REG9Bfb7u{J65tk22Y=|F3tRwF^xWJ(wrTEbOO1fh#3+4nN-o4jWPc^ z^|R5LsLS}X*(3g;sN>w%BZ-!bv_xIxq~Gs4MB3fQ zlpfs;x4dfCZN&_4z>3&`7(cwTu>(MOp<%#xa{So&x3)&5wLal`KDQl=?A%ZEOVO{i zUD!%H{ci$*=5=G@7HWeNABFxYwXzYrs7=_h3Y(q1 zh2n;Mpvj)(d;vI5REXw>)r+fT{IFIkSxwI(XRj0^eHDqoq0V5e1B9wOFKW~}xAPio z&y1QENTg;#(U?Oj?cR{}6b0j7F&aUvG-IUEI8+c>_zRAY_t%U0K*(GgTKzAIM z7;Y4F_;bLwCv}Lc_%iY%YbZ4jL~)UiX8G@XgOPvr1q6Cd|6^3@(GOxMYkw!NbjDx# z0NL0O&e2z?$u+6kgO&y%%3H~$tRvCh`hkNmIWxYInq%Y^E(9ZshvF+#Vp3)e=HY#+O zP1C21+MrmalfIZ0c#<7m(hQrffm&v2P4t@UUPEXFwav{hPqC#eY|bB<9cG)obuKaWxoWyA}UhM}*(|tJkAM zOxlHQjisYA@hg=Mha-ReUGeOD^6Lo1;$HrxOY+rC@fDaL$ zTZ_8EpEqmKjta4+RQtuC*9&x3|7Ra-|Efw5m-pO9d&UKNM^5a&fFqUG9;vsn{n2l+ zcwUDoTKLhD#V4rR#zb8GfwpjmbI9PGZmL?8Ig7>k54nGR`L~r2PH=gHNXC22^E)@D zGvw$WZc{Y6A>+|pcG?|%IJx)v4I6|37I-TE*TXiUjs+bx3t9KD<-4KmSY;H zhj5H@Kn48s0IG@Z2S!#T0jn-iGa*80vENRY$ed!e(R%Rxr_FZhno-!K&Y{|q`Idvb z;-L~#prS=_eI}i!S=0XY0n!0nd+pd0ap!Le+lc*|(4P7;Lr+)|=7&oB#L$iQ;He#P zK_%I}`sPEY6V0^}qKfy>oiNR&2c-0@9}P_vq?df$v3vxDX)l`m*8r13mlR3od{et~ z8&^1Vv4=Sc0JbC9J%a}8=*NzUAQswCnYutyao2yTGXnz$7`4_a&d}xuED>pM!oTYh6_P1|!)rF)IfN-WQ095uF5JHq!HZu#LR{juQ ze}iv!?P0tQh{#YfFZ*kzk_h2Y+1SzoPB2B(p+OT&{NfKxYh!mTMToF4g%(#>SIx0_ z?kn*Fk0P30%XeBkiR<)|ioLrvmH$Zumk9X~bCPA-V=dpi@Qf5R;^WDda%c8trODub zNHjq}0BU%3i~D)>QdcL0`V2*ed=--H@-wtap9$_sFfcnH;i_x;i1(r%m38E@!mJ z*Q$_t&JeePB)jdMHQfv%BoK7^p)?hNEq?@S1mH|P9AkFM{)I5q=Ow~2wHhlwL$B=& z5yvYedW#PlTYHdMt+mP?bI_xA0N*{@w^B4dbTDsX_0keIBa+$5X)h9A-YEsWE|c%* zav%=$Jymny6%3sAejq2He)pWNQHZeAf=S(Ti>9X&OR8Ze|MN`r6Q7iAb(v! z{iFA_lG@)kIVB~tkeQL-!-#@@;^C!MRcX{?pnZ$^A$T14#J>S-c}ntz<-@Hs)2o7f z7i)8oupiTMDQDg)4sIR<^kAm-Dm#l}k! zC5+)c35Q{b${!(*1OBCfeme>73_yRO3rR7jVOTpoLO>T!K~Ey)KeaU)+{0`MEZ(e{ zxiJo+_HI5Hy6@)(PPNlF&~kIuz=E3?Q^y+ZgAlqINcOsoc1}c*-GZaFKD1uKBzJ}= z1+_etR(q!ONXek#hu&uZm>2U{m86a05$Z4%UTULixhSyq^f4(B`Y%70A_IJ3KHM%k zn`qK(j#jH18Q>u*t|gM#fkM+3bit>j9}D+^Zu|cDz+A2~!<;=a_z}2W{#g^9&0men z2k9$v$3Z3cyd!5dhrvCyH`8>CJ?DR$htIKQ>XX41u%RC)6vzFTc=JZsj`+C7@EAw;(1 zNLO-)$-*01k+FA5B;qCbRhhbN9AW>Qz~-QMz`e1mfm#3k9`YHoYU)Ao)<%D$VfEz8 z>*C1Frr2Dy8Kx9_zxI&z*hZO)E- z`r<8X`l&~X-G|Jw37IJw(E)Z;f=2`Z$`-X&Q|^|630qcPw9XVTxM9bsDsziz!f5(Cpt|fhnLGOl6jI^9o+z zh1}DJN!s%6o|d@Q;^3@n(-a-nkwlRf^0%&x2YW_dK=i>yfAw1K&L!h?g%&i^o_U=_ zG(I60atJ!D_2^0OY-fRQv(&_ce;%og))(!+6eF}qD-`gVCf`U~t8A8sqZ)bFf3Lsw zT+$c3GSP)>RN=2Oloj7|-i;xh*>t_JgVZWy_=UmvRx_Z#cSTpA9?h$50O(_g>1pWW zp`F{a1cH^|EzRl1S5hQR4ym0yCl9Ljqif?k9iH2Bs*@#;8JAmm0idvA_c3s$SyI11 z;JJ_?ko#h73Y5}}|9aB9yVll&feFu7oSq$z4#xgj^U-^_ly(P@ICMT9EGe`$k%m+l zO4#V*h=O99B z*Q>!UQ~@2U{?x?uMqC93Nc(|uCwu}XlZ;zcOxbDQXHzeZO{y2DaC5@UT2(Y8D!+L1b;Z?dbX&d^)f6P|UA+Q{!{xy1XldlLuJXih1wiGcl0p`meblU1K3u91T;V2GewZ9F3KY@gknM2YU6t6B2(COe z8Wv#!k*G@8IA4p5#pMKG7L*12J}CQ@8rLE$z~5N6YMLnzlzR4 z*Dd|KB|*^pln;F0(|Y~yM0-8h7!76Llc-yz>Lk)*5lK9_{O()7CnWI}(9Ai_Q_-9x zs3&Onko-#n|6vrx>|>e>#^vYH z)vY|2IJE2RYr8vo(jm&FnRvryamCC;!fn_Y3aE6MjR(4RSnI;CVpSh!gRyq^dKBUI z$KS#nwRQQFM~lRmyQxT25Zx6J;YK0;4NXtrzR18p?a3wW3{K8VaqDliA`9^2sW zqZz&>2}k{zRM)-#B}u;7Z@o8V6LMCM(r2D)W&FgP@5QZGjthNn^=F`sF@Pl-SF((T zI+KhkRI}c$wjelpzSp*)3)My(4^T1>xp^Q|FABEHN)WhY1yQi1{lhUV88P7Ra-<6+ zEmKLMuVpR@%DO#T-_ZSu0l!wWs9tdIk;a34-UwvOzUbQ$QaajNrz(XmAMuQn-rc8U zLvCJpt$lFZ>dUA*nN0}7!Qt}3KRTbEZTR4_t~Sj_zR$ZX&~KE2n|9NBzzc*lE5zf! zuPmeppd}{WN?TgrFH6QiIB~o zAV#s$7|ZReB`(UGZ{WvBSdn08cgE7E{9qZGYaTS|PJgqPMR~)q!LF)I;s~CBl@}ez z2} zVzfMA9)k1Ep(Y`$4o~X~%9-&bh6uX~5l?0z5lJQ@Xt054I7(MN*|g)jAN~osGq4RV zJa9t&4MuHdCNsS~<~J9#Ykx|K*aGl9%{5ZATgM`Mu)@KhZ@1g$R5BRCLsTb$4q73Dd7#S8a*+|D7iQHGi=+i}7&cI3Q4pe0xN9-n;m4k(g{3??V70#qS=vwV2?w@(MaWl82(jI)kwU(;( z-)6{%EUxO#HBC)$ybsdh*K0G7w^rgDWX^MI;SJ8LB2nP-j?fwYzJ|R zmvc8xxtFkENJ1@q(Dq7+_&U+eI~Wf5NY<65TKA>UyGb1kdv*EB4`zC5!*ffec+uh4 zb9>gjQl2+3;&k=aKyhD1!JE)be4h5vp;zc2KxkeQ^WgeweOlvJ{drAM$m}=~bo?4I zU6{sIY)=|l;(KsfTiD z9B?HWer+2zIv!fn`I#=%C-+P0AHA&9zPfT?ps6tsxseQ-OX3J7pYjU6_F~AVxY@@% zFLs_n()?}MVtej+TQP7AuzDj&bJ^%z2gm+%&BX-)>4)UZZ>yvJpQ>EEm;BQ91K(^k z|K%%-xJZLEQn*RQ?vuMPZqWJNxACAU|73x3{rLRAm8+Z8kA7<0MRB1N^S|FkRJA-F zHkYzLDt;6cxu@!_DMKCV-&fg=JgH-kQc`2w5;Xl7_$%}yHgP{a<_F{TbOBg1oVPmW z>l?b(ORu}^2X;HgAvE&eB*FZN_~(?$Y)npQKzaUybr zf?2>AAHp1{5JBfp^EVK$Bnj&yD=&I|X2F91{ca1utFR~sd54?b+}B>tHdZ1FU=kBO zPAs~sY)ig)p5@)2kjKW7> zM(EuOo7Yc19a?|Heq_n1;@ezsi*R4+u=FTq-EPj}Cq3`n>U%AzeUta|P$D0l5AItnL{Bl- zBrPqW$R1w-H}~MaEsOaV+sJlan_}$1QnCD=tHT1~@hvgyu|U-RrL9%sZVj)(DZ8)Y)_XG1N-|;mqdiv-{?i**=-;y&DYi*Yg^)yuZ z_3VySziYjl<%!;-pZ{YuQEXKS5d0Gu`H#|um|10P!EKZ#BmUP!zPG=UiVPI9zC^jI zp4XrFumXH_0<-Lok%ur24Co5EYmUCXeWDT zMW-%nsF{qLBj}tyS=|U+-8oEa8SZa_z4$QO`DiNPfh@Ry_P&jqP;u3PS@ z+LokJ8|-1vj*O)mho!~}gNN`WF4XeL=f;4KQd7605*}Zh(1R z4YJJ+L5@X(3W=zhJ9HhM36vx$@eybJVAscHJWrtV8=Mi!HuU?ZuoZN$lbY1&pf{DQ zZkZ|2Uz8b%ohQKY)!F;xno#vhr@jX96qUn3OWvK9dief`ISQTkq&bni6oS#FpEO#H zkCYucB6_-_U}tvleLo|Nax(Z%sP zmV7@;0N9vedSTkgbtg+H1!SEX^m(W4F0alMyE{??nSD;I^2lRfg{O#%>~bEIBBP)q zOO5=HHEI1E;T(1tqdn1XFrkY(2TMWX2Bb2OS%`DyvlqCTAG{B%7QosM6_=YRM{c}Q z^sB~u%3YQ-=xa3Z^-YyrGdz6N-?bmz?DW-P!wo1_S+{$|<3tK;{kswwW1|^jv@7t2D0Z z7Z14Ck0vLc;2c~!#?xsL_Frpvuhig6SQ!&SdJ7jziKOw=hpi$veZE&=J1eCT7-8D- zq~uoMkB9Tc;t}@pssD+k{XX!mxV^UzI0$&_(q56t(gND(c}o1co4kNg!LdcaU0H$Bnu$(XnT?0hIIUkvR{@#) z6OPg1A@gSwuT;;t@%HKuQ@|SyA{?{nsiY=#~0(#AfbZT=DJ=L$Kay6Kk1?}%2+P1Up#Ra4sbMCfpdo`8s zCQ3?d>FBpT57y$ZG1tKem2g7S4vT63fxZ1iwmiH#o$E*P6fGl1uIkTQxJT+XG~yTM zqq=ByGxLne3Om)}ybMy2!A_PLikl##yJ>n~LR3(iLRCiyH#Rc7(qnNI^yiG+i(L8h zrUMK9`)19O0d+&`K97&JR(7&I?cK`lOug^lM20`}zfJvwD^I z7T?utkQQv=&Ay|@fNmc69mzi#XST$@qlM0}&>j8cAaA+it`C>dksJan7#R`nw1K5B zPxMw(Yg?6Tcpr`YaVT2QtY$^B%_mXUstE)bE%i#uAE{>^dWReNfZR^0um_P*SrD1Z z>UmCk`Tg%@G46c**zuN%Fu3R+lkzGwo)SX2bfOs}DX^UmDK)+LR@du}JeN+d!_}}i zKzWzu0Wa%+eg6Tv37TPsI}O!#lRm7=A!>g7Wygra&a)oLVGPTiQ0mI5c%N-UCA?DW zG|y7J>kgxmcZMd#mLirWftArzdK0N_W?M&h3%aLfgsms?5OcdI9I;-XQ1Hz6nO+X+ zK$k|%&#!}Q%Yy@H*uweDT>ouLd}9Duw8x|OEX)9$c^0i*A7{&p|7h4|2>c-P?@oWz zVzdh?+hFRP<6x$&I&3_>_itD%{zgK+=C(kXBQJ~jt7KyaXN`Tcs^RYSOyWqD41N1~ zc{JU|KU!_Ooi~4ebrXMXCnX_}Ug54cMHXg?tQ*Q(!WZw9`)YM%RB7tMTSSN^p}6E{ zf@L{}VD<@^p7GX3@~4(B(I;i9+|a7o8Ekb)bR%kAb0w)ORBP1#B3ecaI+&L(YSaN6 z!F2uUSWw+UZ*ojBjIlm9LnW5(R zUsghN)+js#a}Ev)?`AzVhK-jxZ>#$FGau;O%r*UcOKCwmqZ!D&B7=;b3RB8un&?c9 zG5wK`8{za}Lj%o>0AHNA!sEnOU!5OTtNZmo3n!j_YWQF)r~KyYvy`P(7m{6}|8j&qV6)4W_@6U?ni z8M@UaxgkmuCAc&E?BO${qMs?oxeYUD)fvWYYamq(%|rz{JwX~DBYtfRs&s)t(;~Fr z{mR=nCHauxX~k@kc~u>KroPgkj?)i}EEu%gO?C8BPiTFDMvA44r%5EI;SIxC1sXY2IZu0HiN zzKwYsl&O{5AUN$0!+v^d$2Z^JO3x$YX-wEAY?z=09y{hX{OO@5O$GI?1XG{l3rn6i zbfT#&h^G$W2zM!Msa#P~=7I2&kB_?hUhiK=39Vd8#-_wib03)KFZC0jmi&kBBc+2; zJ}Qb4oWaAUNTH2Ge(L#!F!NRd<=5t0=hd7;>w(oLLeqR^j_p;(dbsNb<|;`RehygQtRF z2~8~#_%(&9pE@rt8-~rvOQ8E7h5co2Q7z$YkAWz;TOUU%O)Z*bMJ`6U$c6~k80*Jp zgO=~QuF51PzloLxy! ztEEd}Y%Ajy^v?%yrl&ftUJwobrBt8M*U+I_Kaq{*{TLyk$gl5f>RaujPkwQ;_Zx3* z0^6Wp!~EBVpO_#&Nn2J=CI@DXc>)G~vwjUrGo0KJ@S%MyRU9pzn}dJl-O9NEzcw@Q zvf+ZNBJF;oQ^h#=A-H1HXVkTnZ`S((<;FArl80X>UiG?_r2Gv5v2cM>99ebv4Y+T| zRe%w?H_DlJ*l^1w|MBxlY*_dwzvav|chV zbxvKC6pA-XHkJyGiRSiFIB$OH>{M1Mt~Dj~SmLJbh}_tn8-j6WyUEH0$ar^!B1iwK z1k9teN|*f%2Y%7$RKc9>jVH!M2Az1b z-TeJyLIlzCglBTj?$Pv0T2M1)`SdZPctHUenSa=;wAm5zqlOJA)TAim5C*S68)5v* zhe-P8bR~N-*!YBYE}R?MYgDS798h9pSN2GX&rJ<~{L`-?bbQ38H)A6koH*^xP|=2) zIbNwRi90J)<8XaNAOz%c-%FnxyE^on=6j^iaOf>aljsSm6LGc=trboe>1UCO++&$rYE&lE-$}BLKUm4_pjpxT zaC_VvF8EU2Ne^(s)8=b&L44Hs_R+xT4L+QE%F&&c@_Et)sQR*5uA0#ZJ>|awxziol z?CpOI-tNGXJa&pyUTZrXHeZFm+4ms(J_OhEZS@;zK3@uzh@x?-2<8Ko{@oMVv##or z8##|8K)kZx*(4#*Yj;dc zFm6<(&rT*@V!9;gEmCyYC(9pko7bYgq>hMme4^`rd~HcTW>4j4e6^6FiGe&3BWo5j zMt{+e2%{|+B_xrJYrDRXaka7@uO{$q~V|}$cc&X?|Qqx29e)^Bt{e>?L#ErJF(DOk}uU|+ZLck98Kbh(>rfJd^{?RIW6}26LlZh{t z_KN+P^s7jj8N2eDY{Brx!f1ri~pxKg} zy~-x|)lgoJl&Ga5JbJraoRo#_L5edOL zj4ryrhGXvK*4Q${ZJmGque(B-KiotZsPx$=+hiSb+ol{)PY($FV%ium_p!fGq^|w@ zRloD;>CW{w`&&!*;Xk(#o(!!%ZS+Z~8u|+jwLt**0m%(h(B3a5*1=_ZeaK9Fi}|d3 z3zMiP0z0kXUS@4_QBr7|ya8KuztB?xEZQ}EotIl4HRQFotLl?xY=@n_W8&&GzIlebo1JD%mUwH=Ewl&8W>lk=L+DGxp7k^0|i!&16MNC zP~Lh%!AZJ3aqu6l&k((*#=S_@NOFZ;*U+8cVsIM zJj|k%dO6rqqFnuiEq|_pQeZBXqL%euy>e5xmhUqjm@Rq#3KkG07Pbzn^|ghYrVIp= zCYwIewqwu0ZT&NoK|I`|f~xT^nRnr4x`A7bYr3vFzs_s2?p7$~4J3gWd~If2G8RQ> zt_YF`1vj0g-4a>;sM^o8kGx}@Fh6z}wUK=!Xr!rND(e+J529IP?tB$Na+)m>G%?d( zqZaZsWS`uY{ba&R=u>%TBO4bgNocsVb66h!Y~-t8`8i7F*5T>OJK=c&PfN-eTJ66- zLC$G&<;6}q+TE5_%*-%wQ|1)t3|**YmfaFXuCzLh;wO7ma8) zkB$IBg;s(m|JmEU+p z<2f!?pJ?e&XW-4Q5Nq>Hp1FsrubGf+SoA|cXbAf5r771m_%-Eu@AQ=*vSIMQP@c@M4S!3bU{%ts+s`Mcx3<4Oqy3@JLM;Ar2RX}1-Pklc zB`=%A{hYK@%GzGsf+*Urz0@8Ey)5_;dbr4?P|wU~q|w@>W!6)TNrq9OXW$^q3IJ$J zNJZ*4>Fl)26h(7SVl%I0Nu?7$*@e5}-!Ep|Vsv9!d)QJtoCUK(G+;KfaBsA>)H8#) zj$2x!9zpD^mM9fAdG6npH^eu-xtSKhAYLDdABy<2Fovz;WPTjkKZkGZ)M1wW4HkLz z>znS)^?=$e&d1;h)y+Ub?un<(gAsRvyvu)eXggG!oPpo`z&8kHUl;#8Xyn`L))f+k zBGv?&vA;6p#0qkIuEja~YVn_y3N{e;e;bf%^zm3gWI}GQ`Sx?y(5iKt$X}g}%xi0? z%mXeyPHNUj-DvGTK|xiAo?qMka1Mi|bUw$v0iMS0c7lSCoqT61X9fi2wptLj^kM47 z;}&xIN_5mqv6dM=STBxEn^#SEQ*Kgg|1zw~3&wG4ci{8u>tYJ&~h>+=5Enz^%@t6=pe zbO1-J`Gc)mcs&;}?irQU>{BqEKNmyV`@UkGuY1Kp{7dYK_kGMU)qjkYG@`H(_Xd~< zdtj)uHpMV%7l~V4&@`U>yP%d@Cw$klHj%c{ob=l(;GybnC-FaEC$qq5)K$Rb{8}6v z#l$#ktEJFDnDvcmJ&`z4z64`yKagHR&ofE?LIQx;9(s#y=jx<+IrbQ zsM(VK`f%bw>VhyJ;mDRAL+{~yUqAze&)R}71fRcDwE9qFPe$5-B)(7(`S!Z0)zby>d0Er>;iTYN_U_hM(yU~Wfj z9d&?gLG)y{+a=QjU#Yhq#XnR02UMCwEb>4;9t*BNY%No=OMx>M))|}%WDCff#=nT% z+0m4-DtAQpR9$Q0o?^sktCAu{f`=H07!$>Br1}$}#wXXPgsso8;iV6YC3RHB2t7x8 z+gXcp4V{9;MC7e83Q0dKtFpM7U!MiKwZ!}8A*SeFBugcYnm*i#k@?krbD-1#uKDDC z&HPF%8L(ZD1tL{z{w&##E$vxNy6$ndcRCw#dpS-Je=SgJaUCCONUU+kEH>CeWX}I%#ZPJJ)ej_(! z893o}z`w!+SqU8m5Pb9eenDufJ3Sw59$qaOgs7qaBf|iY%|I~@=IWAc>S?@~gVa_> zm{A8{sc2zYbt-P}P74HdFSV!pC^Gq=El3!7A+0bz#PBvYEF9Nz@mbyKeYi3o_vDn# zHSXNV>MI7&@G41=P8z8YuFw-C(4+np1KBX`UR`7SBc{N3M=r0#XB}0UtmrM%GWUL{ zqVQRI^cMSY?2CI!CD=j4E|1Q)oR`ipFX!;e%Qi@S;!NHJFll~>YISvl>dl{z^zYwy zYQ^?o7k*QKT>!GTcI#AFGcp`pfc;-J;3#|Y@t<4rYgVVrCVFkSJj}wEOM8~T8Laon za1}}qG(GgV>$mart6{WD^l^OYgb{k+yl#Z_Z$xP(wbSM~G?#HdUv1oi^gq|NiPY+X z7tM@pIq#YLaZbe()aKOJr&5@>wM^91=c-%uFBzaJQ0}Y9wVM=qeKn@Atf{FyZTU#e zcJZ1x1x?@uop?RX8ziQdD5LK#bnB zB383i7z#w91qDAh`%2PQQ6HzyJ$}zcf9i32t5AhsxTPu!tRx{KuSLPSw<9+B{(~3l zDhyNVcy$$0Up6m$7^^AVOS|v}{!s2xMe1>&8Mk2Csk8C!VYm5;!te5W_nQ)65gd*6 zbf*K^&8K7TEJr!tLZBm$_E5AKLtS$Eb8iLNs^fOvS1hKte)cN?qILxcTLi&QH6Q&@9_W51uX|rca^HZ^T9T-1aaMonTh- z5n7ow6Gn5C5(@YojhEXq>`z_|($v&AI)42vzZZk=7{657A@ITlD>!0)d^)N-c5Y%l zh8VtvoX&q>?R={88SPQaGg$q2krat??#C2$DDo7)gYZ@y+r2++S2PqVZ3f;$ zs=5E2{)85jb=lR(hm?(PnQ zOVHpB!CeOr5ZoEu-5mydoO|Cpb?cq;PQ9vCtJdt=Kh|{h?$y1z`}^+OEn*m*OQp`0 z|GJ7p(>H$=+V6kdeGDl65jNMB^~Q@6fIfdDC#0+UOb?$`{z$ch~Be0jcWKm)Yp4!ewqJg(@t`9 zNx0J4`rXcJxJQDSxO{D`m54MH zb5qTxKh(TpUJgl1-`T=E42(&D_GhMruX*3=rwxmOUM;E+G<9YpPCH6*q>a-tC5Yg` zhgyg*4O6XF1gn-2ZdUH;YhV$afRa^6; z5XyMLH;2B0I6vy9kO@FL*t4xQb`pWMB!tW#vap_1A&(85A|Sg==Ra^*OLvAjBnRW^|TTRS}97Nr_0Mhd{kHr_CG<{9rO^j!!p)_z@4-1dj91 zIQSwM;ffS%e1}7nEmlJXFD`u%1ojk6(=(qvYA{@i7|D1!-!$!LZJsAb+T;^sTB zJ>R=;IfP+fYw_*N{r+|QgkiJyIs*o&NDE|2zvZ>^`Dp_m$CnY-*6>>4J1h4SG!Mkw zx(ewz%jfjGtZc-0Nf0O|k~xf;F%Ey`gS>@u9AzaxJXT!gjVh6u%o;!Jr#Bp?AC)>- zIjrxxHPtl!X-%#}QSa`to8|WjCJ{>fvj-&^NfBd`1!Gc@S#!zj<|r4!qr5Smll&75 z&a3($fgYcm`z`LwctN(aFJa0Z@ zt`5eH-jG)hli+A(30O(S8*b*2iHIa!JsI`5wwuJDHOB}YtdR1wKkat8V(6!Aw5tM( zCN|POs_1Fhvs=d=9%?aPoETCsMZBv>PsMxf{;ruK+EAT}HsYgnZe2g}?-B*&_3pgc zHX^bST=_3(3$fjx#|kcQwMB|^VC2|hN51wl&0S|}m6J`<&ZLKGRPakR-JUGjR!&Hk zX`#)$-TbRioCGeC_6Yt?>nJYl&B{W3~3& z4V?r2o?8=gkG2!FSPBlypL6e!^e8gw|53dYj`}*ZId?8)l}s^9Kzx9db{$#z({VXD zPHnJ0-JkUOAfnE1zr%AxJGOQ9eu=!Mvv%$>dr^*~cqvaELAa5uMb$` z-XxXCY;B{19CZ&e60PbJuh?G?!bb&`B6PW=N{w+PX>mU1f>U#Tcioqh!C2B)#wnfQ zPJcLzdHQgiSsN51cg^zTcTO%d7DXUwgbj;ym0)6ncnNYlU zOp!3BTdhpxDT?$Q<1ZP;S#K+qI4@gp3CY!7rjQu0Qky}k&~Cu$We+dlxC^G2*u(wY z6Y~Eti5rh&tV>zN(+drs&*NNziXk|rW&G@lbk~7sS&KYB)7N?avFE-3c3%(#+H3-W z`tXm#@$a)7X(c_qU!QV~WV=Qv^Y7D9M1R3;sy_5}gudFAK>4J{lnhsRv}%<{I9GeJ zWzkNQQh*v-T3Bc=x(te@?S<5v$V={f7qK=hJhO#&5g7~7TFI9RO=}w^w4t>$Hw?(| zTTWNu{pOFGm1p%Ogx((9o$Ci z%@cIIwAxVFo|E?t#(NNcl;*X?@Jr_Zg9T8tql96dfjv49b_---wj?= z3(eW8;h3`z6>SLJDS}O?`MKzn<1ls@v+cleL9mk10`1}_GV{t{Tsi`OVE{W?=9&+3 zg`&?*bg9@k74asJe`2YB`WOg_h%M`|HDe@poN}g!MohXBhy?4ioe0MGRH_b&29hm;lIx{I_2XCVp@bDr*s)94-h@D!;>cz=!(t<`cjxL1g%Rg@1%aokR}NV0J3pJR`iX^oNF4 znokM_Kl_mHoG`r^w(HWMrg8R`)Tf6YTy28OI z?J2jvmVV))9%}BG_}s2|1aK^$@GlZip(1uIZ&`Gy@Fu-oNZS+BO~OavwHNl7%IWx^ zw50K=+$Wu1%1?&euqoegZ)3B zw!Un7-txBz*)Dj&??AgOl{sc_7`OTJ5Bu;hGF1|PXJ#WC8O1w#NJM7#yUyY05h5}2 zx?CxT%kAC5y8_H3p1rN-V!l{&y@Bf=1oDU|i3w_w5&_75IehL9JGKW8KQ!n#w7$=& zc1kwl@zk35-6zZ^>LGnSDK?m6>CT~8)F(BZCK0w(E6z{-YVAdT{+Q^gQg_&CgjS_+ zn=3+&e_UkcWh1bE3c{{|Da}`Z1$@stZK~FszXu+uY&yt#ZO_NkXjA=ew~I?u&D&bF zsacrA7x1C$OXt~oHB(1@x;5jH^WhS=}ARKS@&!GXZ2FLf=UdV{dSm>Jgit> zb#lhv5hb)RZx;SY0jXqVUwt5bK0y!S#tmN1-HMMe2BZIRGY|tMv^{|>kDe)VNQ8`{ z82P)kFFwr;yz3ds!{~`K zO1kxVs;5fW@$i$1q2d5Ue_%M~Nd2>hF4j;7c>{m-1X|9#q#Qnc)f3nqhjP)1jn`D|E|=WA8k*>6~u#p9fG<<`}&Qer6ZN>8WRj#RZmuQ3@{)dM^%Fj>oJi4oU7$ z;H7fmiqoiR8KNjh!4)KkU7OP9-K(G4nxpMHeQlSfAo>EcWhJ(ePA`WSzGHk9QT%S9pKLX{sXn9Ywxd71ncORE zrn?k6t8-RJ6IZw6|J|}JCS?DIhgew+WKOl3(|DY%d(I4W%e~O|eJN|Ou2LfTP~w7g z)=|j~)UddCdHOl>FKRqZ$c(~S(JiMZ`+;XxRLG)Fv}OPD@BZZ6LZaM7&pP)-_gNwB zwCkhn4_eWty25^O*OmgBr^G8&0>`))+2Gqjj&SwtFOCjUQj?>l7@;3D^5^W45eLRZ z9vsT8y=ifHg{kCq!37Ji-_c(aY){`(E94hUa*)($}$Ux z-WJeoz>M!@G;24gbo-A-($JoQ|gHbA!y0^j3DosR==GA@e}_a*k8o!Q0mtY^;y z7G{?YMzT?O2iH9tKWVaVD$ib3zu53SF&0VIf>mGnx_GywrlZ{2N~dvUuKTM8`7L9# z#>$6Rj0Wf&>H&Z0j-n#QeANGH9ld8jX~WPc*Tgr1uQNS=E%A20r+dR_T##yI41Je) zAL5BylXRqX1boD+ofH6Vm-etNiY`~_206`VyY|uD(~53r@nqh2MzLnC;%46=78!bL z5mWReEpj*Hqf2_PV@>Y%9>T{A{OHaL5f|d zU;*xh_&TH(|GA$-mROEW%j$(y)`JAnm`64L>1!zQaAo&JdAHXeztVm1b5FK3D6)!1 zO^-zW^x!!Ungt+(YsxBUMenDCCt+(NES*~SLee+kl@_on`zPfI-JF}P+c`Pqe)2hI zcGYv-P0Ql4JuP8E6G!}tG8b73wD;_HwYvufky5iGOWAbMX87D~V3)EwA4QZF9uy^9 zD_RQvVe#I~z<*y1Q*MBhn8M%J(TFPke696;vw`2}@ z-PavM7xM-fwGM9nM!%unA3P$wqb@*j`B$QUC+e8LO?+Pd!+uS)4v!SGzK*9iV}DdV z9xga0+i_A+^1i&c*mI&xYLS_{+=1pG(z>i&(ByZdb<3p*a9qA5v4G^K85KGt-e5`ZC8khU>4t25%=tXJ@xt_AjcWdJ|xU zI^~G3=EM{$+efI5iX$u<#Oh!b)U$%MSJK^k%Tr0dD z7dNe|UeLmS#nOLSE>t~4nFLI7E#YiXn;7%a(B3pUGyKB*uyp+x9VDiNG%nH6U1wS9H&M)5ii8!WUZ&q7$3rQs0aBp;x4cROQ=EhgqUFtp~wH(23d0!N~aX82q? zEn;Lc$Q4{gFP6Or^Pydw_eRLpwjG8IbQ=2PfFl>r7JXX2|26}TV(6Fk4VzR3!9g}- zog3?$to4HCxLdE8gUd6+3mGT}%xr8e-=r_B@-k@1++r&^OKWU*S46D{HH3GR3Y z<*-3Og$VU6Pk#3%b`F42PfJOi2?emo!08HpjxsRre1JbcdPB9w5p|VKiwGgTZ#SMk zm~0vY|FIU?lsziQ41b6!=i5pJRG+wMdA}M#w#8W$)iFRq=7Q5=kqVa`;d&#uqQU@i zD2oCV>!MRdz7K}g&BXU%2IAu)x1}s@`f>(9SMvRd)o_u|K4LR;mb#Y&^I4zlyLSp% z&<%01av2+?2<|jDrKT74c9NEH$*sqM3E91oLV*MP3O+-?fH zf>s!`?YuyiWj&@Gry~TnN$bYuA?jl}e=YCJgM&D#Eg}hF+JEFf9o=<|pPwbACjxcz z<&IyTxrCH&e@*$i!iSVulcS;EBgEWdK?;Bt$*ri)AWBDx_kkKDwB5u=QRYYBFJlje6 z!$lCvBjV;EaxHq%8gOq0gE9 z#n&Z&jTa~bu#@XgLHP2H#xo!FcHV^Ud~A%+U6%*^8Pd$upPC(nfCzdF(ShKz-t;t0 zpbwp)yBi7$cE7|B^NeDMOZB=yN{wnN=_OpNVbw z_0sk>tt)zpWIdcCPoqFHc#+Sm03@kJE7-0y7M>I`v9X;^+We#^3LV()4({>UkW||> zTeeSX31F^uo`^lCji%@K9orsZjw7be-}c=k>D~S=fWjo9FB%{kMX8Db`)oX)8>^eeOD8~mr)dD^sY7ogujxP zg`k1|!(Y;M4p?5{}?69J?wZB^QEQQ3rYRBsUTre_I3Jluk|I{14Bg*(h zxFSqjA_*I;<#HFP! zB>jmUovOGlr#TeXJMNanp3n(TOEybfdNU|~jnMVFR(wo@dogR2&L7iq35L3a$350Q zFwBj5#tE7uU69C1mQI3Z66HU#{2N8q*=!<36rF5u-sE?L=QnD;SyGkP6P~HLnM#XW zLnd1F17S z2gB)TiWvq*AP6@Lg_@#Rb5;m{0dL4^0QrO*s_|7F} z1PbOvmA?nEKmwuoiVY+jIQ~Qu>@-&yL8zT0@!2*njGN))>1Lh)&VC8S*6w5R)YIw# zwE%icL%Uo)x`R3Vj)Pv_=Z(KPZfPLJv1ZLBR9-zHD$UvW{((5?cppHH6AYjCJR+SG zo>|-z3=eW{kK5VDp5w~G+wZ#0jos0O$Vj*@@0I9zs8j+TL^wnQO35wwcU(q7vj^)? zo3+}4Wlz7HQ*gT&Vm2%wkPY!a#n*i%VBO`FraYb<}Y9{FDNQB%jT*-)?ZDKQ1 z5$I=T3PhpAAL4LEvyBDKp~D8*s`(}h`&(w8O3Gfq)3DKl;He(Pw7xJM1Rxr$UQsMg z*{i~plN_f@wh>AeSZ@9u7i2A^RqC^7TZ>ixU?s zkhgHPeAnl|wpApa38Vh)$1sgY$Nz?4=OTMb*LM1@iwZyzPh8l~jX?7Qrxnux#2j>c zEW^4uY3VkmQi%`hb3B{fNoN*WZAF{1!|9vQ>_xq@-1((Lxj``f&0e>WQU}u}&!NuT zSX9((5SAzA+~AR@r^?SYwH3ejTq+AH-GQ`lAir2(x83_qp9p7ad;!g>m1qqi()u$d zEFtsq3mmy(wsR=oY+K-hvX*@pX=kQcx%y=OARjrMgM@$QatDSv)vP%6FAR6RK>fo( zSuqcR4dGgx8zbj9v+!_hT8n}zYw%qxU(wKW8W)2IR~&C}5mA9#Wi^10ofFs5b?WdB zK|pFL(9zc9r?56{*rnn+iG;oVXSpE~&XJj6m0;xdFMN)gLoHgZtn6ZPJKm20;f{`D z0vkTPibgj-!Ukd125J;APc_uF0(S|es12j z5Pfj*9Kxh7-h3x8T+#mA%s*>}$yT;rMLBL17|9fs@sTpN+qoa-!PB?Bl@zzWIMer-q)RH12V_z0eB{TOXiNd z2@+-kPd?ZsNDMY2nEEY|Bf@6c2rC>XylG0Lup-{XT?}F2p5Q`uQ@7P)WV~?k=BJ>? zM6x6!Onu3L>fQ#6&wG=V&U80lJNVC5`gAj$$$A3ongL>~Rdx>ygPrWfa!iQuR zK13b=U{CvM{Ctxk?A30Hcn;z2UdRc^x6sYO-Isf_Nxx?cJM%#}w}Q!3UeR)FSgKkZ zN`3zh3R*6Bj2HQ>r1{g3%Up1}BO6;lg>!i3xB+jZkNiZi=4*61J~+^I@=zL|jjHOq zIp^1@BXm!gBWj^P*yd|`OoG{I>@&^=hV-6&CtvOM+;RrkV&^Ulja{s)Kpp3X(1oNMF z2q#hRr}m(~w|B9O5M_g7JM`g(Qd?I~`J!VNNbwSh6@wS1=k|MogFP`QjFr*Rn9lM| zrcgNrwD~3HW5dc{(NDyJHI%|T^b}V8bszWl;MW_OkeaR)OS{-{*Zpr)igdVcKvVRr zd}TC${B;!Vr^)C5(efqMj-iJ4wt04-kc`6o$S*PUhp}y%TujwfNK9}?ej5ERKRC^V z(ScJfRPL*`W<EEL({j=T>b-_h5}vjPgW^tXmuIunEIgY= zA(@_eyl;4bu=`g}FcZ|H|b$g zvjl?49NFO+l9agPVn*7c#Xoq_#%LyQ$zqG0D5y~y3)f&gv_=GlA z@7TP$2CGc=s(UzSEFTWnlw8h_ELtpQa)H!%^%Q$T3>j<>VHUV zGtfG6t5@$FEQ`u|d9gS|Vbq)wCOYc-*pG#t)>&_h=eZWri*^x+w>ZnvuIWHK1kfSN zq>-)yz@-?vsHA{9`qz&}zaI`|$-ERAxlHhHTOT<+a9V;&WgfRFQG`43EnqGoKT>ec zkx-Gi?{;Dch+c5QXz!czV|18w?jwiB(XWAU!DKlhM_WV59iAB&3S0eo@ zJsC$h&S01lUt$^583hWpfwY^|pxZn0u+hSK%9`PWd7N1jsm|61VB%mQWgya3yq^G~+QWq1N4k(gaCW+m=H zApcpJ17mSUQ3&w&JJVitC{g4XwLuQfh9bv|I0OTFpQo4yzCdrFtc=3Vf){(&M^mdp zm;Ea#`p|TOTnp}FwG)DSvr!Jl%s^L6I8{x%x=b%P>vPcMmBiES6~Nv*0F(6aR8ilm zRRl`hcNAwvR#GKo8?J`s5-I9W1Z(U7So${}L|eqR{vLC&*H`y9AeF#umo7h?kfwct zMj)fwiz*@R_W`PpNu4;vE`?P3ZH79imJPaG(4>*M2o zl7<9?;kH!fjVX5DRo~hN7v#ZrOdan_`=Y>T8hd}TaB+`CGX{XQo5LRnyU76h1B-Tl zw#>NBRWYv~T%=u=^!F2lo`kUJmeI#l#7(2%^Ywt8nP3yDExb>&#Ch4vwgvgh4(4&( z_UWq}e`30@-$TscKs;P3tgqi}$Tx`eni_RQzHX2wQhp0_0?ihb1wdyD1_WI=#)$qo zT_>~1XDe>3)SF5=s~Hm=#4tpQfApV{;#s*?cKiHjQYC8z;FT`?z{f>$u&2>cpJ3d4 z*he~AMb|nr+m%IN7@L3d=S>D49@B{6>bpL9mH`zm#Zo&<^E7VWLWCejRvtOYr^re+ zTk!cGEh+dnG8R6`dttpHmr+f6D(ZQ2zd8*a+7;tEjp%*`En z3^Jocc4)+P|7-GB%HJ86TXy27udKES3eiQ)G5zH|-PwTlra<>f7M0Z4-0#5_))y7*OdZ?N$PsoK4BSzoRi{?Xfj4vJ(#$IA z5AWnNT`)5O_nS=vrAUx9(9KxPLptBZ!C=nG2g-9WfKEsXs{UgC<6r2j&l3Wie4H;2 zRC8;$^U2^se!XnruAHVucr&cU3)VEo?xD8HjJ_4jxI^v2yCwdZM6{yh#Df2B`<>#z zStKYU2Qs}Nhu6a)e=_0uRj)Ytf3FtI48NzZIr;3m7+hc?+OWL+zIrYzeBb1aiX;V` zrHE8;$7Uv8aP}J=HI2)3)dx_g;tA({t-HFSTZe;qw)8Mxb5Nc`^>FjwrS)pMz&uoz z`?L}-ge~A!+J0+Z#=Y$O2&AwmW%D-2Y3jvhYCFB#dKpB4IfwJ@1;+$w?@=0cYL-+X zb&(!A`hK1mk`5%uGL~ybi7AhUDeo$&qegh3Z1wMX-?tyz^u4ZYu1gY_M9dJpRXh}r zVfQ*JPLw9MXB|5WaRL9$0?MZ|!9Xuy3O`}!z(X>T($P+T63CJ|@{@x$>yI3D6bRm2 zdH0&cjw?0}MrI1xvH_hHgn{t|El}t(appwC{6C_|FGZyM{{X>gUt9kQu9N78o}6E< z>k6Q9U_0Sb7wh7;NqxsuCF-F(d6JCq-U?ggYD{@u{T45*vuK)cw28S7kwvF(Hd+1P zbUAbMo*Fw&63rSK5C1y`pX5Q$BJe>45?bIo6HsG~VvClaOeb3MkgOW__i&a{Bp@7j zB|Ipqi$+Vu1gJLxFDLsIg$`zdC$*>RF3pAig9iM99W za`W4X*fCwDtgyd*u=v}fx1IiCTBpzp4dVW`F6YH_$g_(yQG%E4Rj^T~w*aXigL67j{tIvvB5EYlhIe2j0^6J> zVK67i-SsdSnRyzd4-a=eIWeax6N&6zc(G>^i{TbaHw<%QH%L!oR<}a5^vY>Q>?=U1 z_G&ixLu}jHMqE_8D{0_(JlzOObY(6CS|l<^d? zX!>32ps6*8Bc+~|NV>#eOgMZL)yKvSbfBR=q4E#IeIHx#wti~)$b=m5W)tw)6)4CE z5O#}_e~OV)SrF#zy*#3PMMis}=Ntu)czP?G^G+1Fm{d>;%3?yyhko!YMx7D8r_b$2 zq87{t4&Em9srgPa3doAvD-gk~_>ORGWa|;dWk~NfAlO$B2>zM*fVIOIv}1#qa^EJ6 zmO!}?z-hLXAOA(fv2~9>MfKM+M?zUr^xKLq{JR$68IEOF#*0_3dxB2{9eoaqrm~LH zf4Er~#9JAJfUcLpHT)xM@wm^AHY=iq>9K!*ye)nhUiD* z+2#{ywV6QqXm$xvpCN8m27)`^#L>5=p0pct*do}iNEAvWasBmJ#+hbA5>~$ug9mop zA7v<^K3j=qx}+!}-vhAAM*Q4UN>ZQ>yHw5c*Pne>`&0+e`WB9c3hfkd_w*0?Ue4%eiG-0_jh}=n zp!akNi80i_I1LHhq#=Q)^dY|%Kg&^1Fk=Ef(8^>_>XskHD7yCZBz?048KB-=66x{GEbUB9%E!vTKFG! zaa<9ByaKLLTr{Y;n6AosaCoP*mj|J@lIxq5l&mO&Td~&)OJQA98(hTiP4k`cT+5P) zZf@JgpL1fRa5q+<9f(dLl@dfIilZaGJLmg^PPo=e`}>Q^Q0`&vS-#(Q!s6s&l%>we zKD+loQt)OGxK<<7J|S^0iNSuS?UFpl@T-Un0%Y`t%f1%Nh$}t5TWZy>x6RMQUh~ja ze8tU7D0Ag_K9DS&JIrFL%}b}2uK!z<90(E&i+mo;4{|M_w>lx3!5K+UIv@1IjwWcZ zVGUWwjW`v%h4)hb#%a%%Ipy>5JS}+KjRm@WBh12amelbA+^n7HU=m5N5I}F_42T7p zhy}4|M!$7NE16coFeBr2yoQf|AvN+&6TJd%R`WMlBeLfQ93`nyPDb%AXVJn9%_)Q9 z^)DDJzNn=TA>3^mRF~1l-*$;D=bWBCJ9@+M>jmW@_CE-t5r&(}=|2GLc@eL${F*#K z1p3M`^G3uq!Ti+>iTNGaqY|S1@_kEL=z9<&(EQ`oLH%vwTx&q%aH$^dFb$rLTne>Co5fD7O z6eJY(c2c>gqn=8>8Vrsp!FmDG0QJh`Q4ey834i-@O&AN5D~79!h2+BX#W@gs zvlwH=dM@*60Nj@vp9llat|4|ZHC$Cs<<9*;AF#!qCfLfvBc23f|LSmkSG*dymcm7Y_7X0pc@XhpxX1*kWsy8U&oDEF*Nh z|1vEKP64OMUF@Re*9264J&0XA>uIL2iPa@J5XI`9Qa(e~BtM7!IOUF3H0iOS^y ze#h3oyq=A%&yl-Td!wcDq1AK;jdjQZtA2-YPKm(#y3-Wh}r z?207SKc??~jS!`E-Kqqc7lph7)2QL%rN`U9Jvl?jP3P_iYo*V}f>tr^{kEc%di<#dwJg6Mj^yMtms(mA0!;zat=Wi1`_TGo zVQ@w0D3$ExyTA>&2*^XMG8 zR`lvyB`YI500zb>><>@7Tg5pwT|WZo=#S9VcB|`@6Hb^~HFUXNwX8e^)`!j9v@q=9m+fU))-hgY$T zAZ3=G^LHBkN2GPa3n=@&v)RW(yWv7Nxdpr3H03Rv6nbmVwi~qnW6?qm8R2rWTg7pH z@QgoFygOpO8xi0sAIXN(zpDx+U_X7kUW8$ zTd#D|;>{Nh&>bJPqpG2D#5)q0p{iEj{S;;_hykxZOZpS918HxXu;8?dgktGqacayv zQrsCPD)D>hx}Pg*V&qhn7)d2hEv?wp8EnK}t_H+&0o9pW0hq&ARbH)Yj|IytQRl7e zk2(`hu_LU|Xko%mcz#4gXU!`Hhj3nYn7_svz|%6do=DSOs(x!iD1X|XvGPoLNS+U} zaaaA{{|EOM_ad#*>F1BqW3-dXcG=QE)p{oTT}*kA^X5GI73kAEWfxNJB3sI3pQGkY z)jJg|!p(4K_*4QC%b~YJ0^lzfhYm@vAJy9WH=R?7M+*oHQi);?%Qb|s#Z6md4ioiH z(?2ZIm|HV(-5hx-!&4(jh~$n=;lIn=njfg3(QXWl6svW|0o%CGVG6vy9RP>_Uey07 z{A1a3452?fWS&txhV1EylqtErDGq^$h9KWS;;slnTso`NJgMYqq*|3Uh6KKY-@x2I zW)EoDfrtjETo4Y;q#&oausUteu*4WF*%!e4SfSUwhSo#)aI#J-hDI#h@RY_ zK6FKa-Dy_VaOtmPSpE-v{;wMTpHEu8Lq@>#BtoIc*!f;1sS!*lK0Jy4L(X1}FFX;5 zj`Q@BYMccJR{Uw5r#DM(-#GSc3LXbga-sS6I)N*rPVHULm#(1?%SDC(8gEK7ap~N8 zh7yEB4y18YuekboQ{zpM-&_YHy=9{Baydx5uLf4i0JwTC9!Q=Tzc3!Z&tn|mgiUrb)DsWqfP6z?f=Va z{HIL+bJ0>wpQuK&yOf664zi&j#EoB;ONoL5pluUii;o~nsZ9pODz2C{;|r(YZ{}D* zEhc}xM>yY7O6)fO`QB&X|AEn2i>yDF=*EoM`N6U0O6f6I|4aUVSOVpQ3Y(j6qymH7 zm#u}+0JAF<@sFR>nY9D2cW_tMw0aK%_O*JoQ33m&?Y0h{?W^6R;n}wm%LeYPjaPMU zUQPco3H&#<;W+#fqb|OY$t#vyau;VE!AH!l8;1v{KuG(;@WmAwn9j;Cv8wcK zP;GQc*J=dRzjV}!dz-`ILkFkpEpvX0R3iM?Khqi2>gc-_6=Z*N!3HQ5(SY7YiD_daxCuaaRdaaiU>&q66KdXcbf%34fOq^)q<#i=894GP8#x z$8RNDMfmrb7X+JJ9KGJ#-!*jzaU8nX42QaD{ime=>wQ zm$Kyp&|NEdU8SoJ_&Dk8`XwEn0#xehio&G>Ir5GLBO9i0)94=uBj0!>96W2+@x5jux&)T#NPK;G)qNBdl6bSijg}R^@Thi(2&dgq${c>cx#U)AOkVqUt3Q-K6H%AZJUt|2PPJL(R)I!$v9q zgbCvN8tj?l=4%kSm%N}nJ?H?BL(1yeg1M%KC1w_OWVU7LT8pVN*rrNfM- zJ+AAC=&x4R{=c{SpL;&0y}}T(<6-vn-dbjAn8)-Fdq&m!8f2=<;#Y3+i}2pNt-{se zCD0nPPhG!%fTR*9=~$xS3vuQd2~lur!i-YwtDR}~c010e)VO&a>=+qt8!8KOER7v$ zV6^##GC4pAh;Dar-i+@|JBc@Tn%U8;o*8Tyc47FFvQ^SWbAuM^eu^siFW{? zJyJ;=bLa){u?6Qk1)~B6fEjw7<*v$(uH}X~tRlPL1%9_L>Hbb^3mw#Bd95A>_>>w7 z8PpEyO?@%ay23F{E7|yWf}lpk@%kddFEx_4d$WR-!Dw1E<(aAE9nyhZ+bbdD*ajMT zD-rg;2iP?Azj#gm^&2dG0(Z}$5s*0bvE>=9Hh_O`YHA2ibY zjWl2`YWQl+Cg!Q$eSV-9Azs)o*ITm=K53qCpEye%@&|^@s&D?P2{)Z7 zAjjHZCSN!$$e9j`(1x^+(`D*`0kdF7sr0dfK&L7JM{|Gw1(8VDJ~I5NcZmO&Y4*MO zP@>Ub_AZ*?!0qa*CC2d4JE0>cy#cUoQlo&`z&j85kgf0}@DUq9(1RGO^qPC`UCU}g z4rfRDcN#T+^F#S?Inky0WGbJ#AMUO;yqOL8yl>3DFz}S{qC0yzn3@{@O?0!p0R_2R zS=e%_d@^*k%vwTsQM1T`;8x0}TO6`Q_`0ijnpe{IZJ1@>wL~%NOOks^CQ>DBtA8-m zHTjyUJ(k!Whjycdrx*Ago6!x`jW1uv=t{w0gfry|h{q;(6@Ma%PiTJHvfRC|MsCS4{fUa8o@Zx~VIAjY-EOgB+i;f&;uqx^9;976P-F6F*PK3{0b9Zz) zy-NJlKsmjM%d_cpm*AStZRqpcKr-9oW}={DxT^adx!ne1wccB|DRsthKK9F^eDAFb z92A+4?SAomcGwN#4!X}(-Vd1$ihi&{*~wi#cC@^QC2~Htd+HI|WuQ7}peV2HB{(>Z zQ`@?vP{;`3bW?=BabdIx7i*fJSbaA3$Oz%Vxd^y+y9~~7mG6D-rA1X04cQzd@BT6v zDZiLz%o|en!+&^M_Pm~=?b8Lib!(2z{~9;DUZ2;}xUNzfwg!ZZ{s-IhWOB;82pJ^i z%}D_(82I|6lG_T6gI3UxkxY0>$?LFr)}){daikTy2{FG^S+-gS{lo}q=wC5E*K6H| zC=XJ+w6YLnFo+X%TgUv6YdX+rnnr`svBKr3)|wY~gK^6wuGjuF&abzx~pNzXxpzZ@oPZyrxJ|N6} zZQ3$}PLz6{Ome#_iJV&lICof-5p#6Q>0M=mIywXN7iIVW*7Q>@Q;PKlwU?54qb*7@ znJQQZ^2ho|DV*76ejcVr{=4vX3*+H|)!4D0y)Om^23~E`UtPLHz9r_rt3$ow+8kc3 zyJI=#Ac01h1D&s}x)^i@yegM|gJ%T+`@hD;@DJXf~Z9>zKCC z?I?2=NIZLjjdU4oTQ#dkJxg5IDA+UV6!8}&y69~i{euO5{ey9{-wM!f*RCm$07nMX zBe+>^syYaOFFhIP4A805kN)T_a=j9PCLSZ&ma4RWd%UV&I@5mMu~ZSYebXU8ol|x} z7w@DJmZU+w_DDm0_bXJ7^yOze?bFhUpGZU*)oRY}_WE$NFegt(Yc@IHLsZYTIB8wH zsCkZE@ZvY(w>2qVFZ4misGM-hXyea|G0)z={% zac&R_mS33?2J*rvwW$x66h+-)^kO_h;RB!j0RqtFa~ALI!t;KoE79#(u`DC&l63i< zhTYVEhi#vq*kfDp^e+1~O)*gSfHLP~J~)j>{E=a|d+G4*0tqIOfD!x{^+_Pxi3)mM z9(ms1k;rvQtECG+kKXbZYYbmT`z=0}7^EJwj zG9}!{mtOpin(pjAmv-!XRL+gtuGlLL4W}_9AJxN4!)^K${Iv*HIn!Hvd92*5z={CS zwy)vR3BnG=*P2c;S2kw`t8P2TZUp|v(6xmMQXa>4LD%tc{C#up*@jY!RMh-Cp^3Mj zwWB>hS4-|=`V$g?9i;ggookJI%j+cAHeY;FU?+J|K;zY`(e#vNCDL%uZv4DHgw+)h z?hVIHW9L@tuq>Esa@b#B{YRarjT5LttNkY5SHXEspg3(4{&j`EfP&Myb*pvkmQvwf zdjA)EUDW)!gfsD|9q~^7z?^#%UZf$l20<`I2%J)lE_OSK0IcMy3yzDB+)KvMLHFH~ z%OUj{$3cO|1Vy|4!rzr$oQj(3+qRDyXTN}Je5T^!<|?)}BY?{4I-g$BM7)0+A$J}i zi1_%=ieX^u7n@Wo2N8OqSTtJ|@;a6?`C{C*f_oFFa{9U2u4xfdZY0rQRg{k{xHt9A z+nu;jnMQ%2e5!RS8&|gnrXNYP$~--N^!(*ald@lbH_f=);5zXrtlLHpv(y;oHM+VYiz zObUJG**$cuIiHwo*uv8i;`rSqxVwVM19p;cY_w&ZI(c+l0jr;JaAD2rkvQcQ%i9!& z&Ik3XoH6`ge7$8?oAJ{vT#7@HAO(uML!mgqC0LO_ffkAvDDDv4U5mBFtw3>icZcHc z?rupq`Ja0oS!X@Zy{?Y z$P>r&bn`8;G|0abz*Bn&sH%|@H+ySj_}fAJuApK})T1(I-8gVSUPPa(DzQ1oZPgeb zE8OMq_lG}QlsB2?NPi7kM4V1c+jNYO4WYjY6Ry$K$(|G7JQACyll>I4krGIc!k=fH z6JD});`5Y*a+Skp7Kmca6X}Gxj7M!8?H$d2#5%MrQ-A4P1)8U%`^O-h*E7=tp#^(V z0yu{y$=v2dhi93KHi2>Ut60;TJ^oQ+Kmk@;2jodBZGZT*N;Tx)Pm){nCai-fR41$} zlHZjpO7*&`6Ix3{dtw^`FLMd-%i6B zm!xH{-{IuS7n2(96~Et0hsG*B3ts;c!g$1K%97}l+|ZI|JiFkb9@5WIV+8)@)I-xo zW40d(=~WfLD}AGgmY@_8z)Gj?c6qvHweX1iqD8%x14A}I?&^`2W~Ol?!l1(I#jEt) z`67z~*mS|)h43;Fcl*Uo2yVq?@jf)&}E;mc4EV(YICSml3;tb&n5CbuWJ){bs zz{0!)Q8yVNRg)>bTW&Zexztp#hYY;gj>e!`Qxg_N<2IACp->;UK<f~}|QM7O1=adliQD#LBEP^^Kh7=)ABQw$hjM!dl zP7sL`@j@z1?Cb_mdoERCf9d5!_Ww+6gA)18|e^RiV zfZC>A7Q@-y5ZQ;yxrRB^Cr;lE?*@YRju!2DSRewzC9ePF1<+3Hu%n0b^C0UalV^{o zN`74Waeh|(oYi&|axMeoy>JcUeNED+y7w=RDNO?wkT z85z7ZF)3cB$SDOs*xBgjBsTi4KpTY+agUdE`fo^y$la`fLsSwzqRNUCpcQ!T#Xuq@ zy3MWeKRgLSS>nUfdj1A<26(e5F+&r(r>qPR2bt4cL`2SB4KG4PkcimrrycKAjrP}d zJ!+Skw}RKYByS>~YkF$>Rf=Oq*N#kE3G>+9831ITj?>2TqpOa`%X`Kha|h(p`w&6{ z*}d7=9Y;`|@K({DxWfwixXyLJ_Wyi#kpKO6&rX1S3w04_<=}vYUo)RQ_T||%mzmx1 z@2=UFb9HF_>b}sOa|IksVK3yf#d;Ht?7Z2io$2lNr=v5&f!H6L^ zB~HT}NAibZ1R3}cW%{pwB_lolBo&EP>z5VSFNY$iHD-wZ3iZ*2k7Ctv8jOjV(N!GKMD>jV zmO_zO_;hy3Ozix5L2x>%C#NGu;+Qj8s9BX#n|$g#ZV}X~dLap4@ju{^-ALc6urgJx z6udR3q5P`zI&)KU$B#pN#>HicdV$%TdPic=5EYceDTp`ZjTQXy2gy@5e2Sl9O#2N_ zlw0(;AOf|da|`3tWbxE)LtA^(M*5}B-A@SHb>w?-?HN6e+;?SrV;LPd;GaX?4<}be zpIxs--8rgE6EHG^io!5TV8cJv78K#t7L#eek~jHB4SltC-D!PXS{#5%Z)F9JfOcN3f-TGirqg7!StmxUP6gz<#6&I5}jFDiBFdOK~5 z)vi#f=nQ)4t=^(p=Doqph>`YmuH%^q$FZtM0`v+T@4impwQBhibu%y~a`$Q{tj}Ax zm|%@nrgt=)fcqxYhTa5iUh+mus`G&!x?FWBF-v`Z&rbG1SeR*%1f}z#`@(UP0N zMTvSZF8U`+lZKb!Y(YxGZ%pktWAvxm?squb)kF=RFy-nUu4ri%TIPG=c2rAx&jZ!W zRGR5kIWHUxTHmGR;;AfXulKr*3yB6lkoPrAy3M}rGo|T)eDh~@`Y|LTJJ}PhFDH&kn)?w z7EhMIu&3*G_aq5qZ}ss}T(!wn1yeSkfa$C74Jj{XlCV^J)_11!h*OM?x%+|i%l~Ny z8Cae5jQDso;Z>A8Ztl({>Z#d@HQh)4|2McgXRnYaYWmh*PvJY#zde*>n!!0_`eExU zdjO<91SEW*ejXXS5XLbCjQ@wDB5a_l=362S`1Q58< z!}bX1-2W|Dss(Kz@u<(9m!y)#KJgxlAw4oarW^d_iNC5cdM%K~{NBZ=zwzcEyrvAw z`Z1N}bZ+^^DinjNMovQIaEm0Jsgy!0h=p*e}CnEZR^eXbRQr*E{G(-!~Dp8uy65HyVfVO z@;!XxQS#h~rhVsaJJBI^^Hw7!rW5I*ENULt>`g z;1j;!qkgp-7lX^wOuT{hWpPH&b(t%#!J~6D-pfq}M+?V#P6~$00^_LvS zOas!iwmjJcjqPDR`~Us?xUJ4bWF8FGBD?A_!3)|pnTQ1OpD~!w@c_0bS39ci;-*)l5SCd&+9kW* z<+-Bes>gBuZqT&F4tizp_{bK)T`?ThGi}emcsbV0%Yz4`MeVAkZPT}#CyGdk-HE3MG ze(UL+2|G*#c;Ws(P4Iy8AJhvwoM2lzJ2TlCJ{dxKC%U%%Q5kP>xPgyqD5z?7m>~ zU~r%Gg!}>(abnfK=Fs-TB2erW%L40hU9O~IqYrLelm}V*b5ZY#CWqhv_P0>oZP}Wt$yX=%=*{}_W-^f z*;dIS@3ugVH)!o!?q4|+LbO-IaKfEWihL(O?D2_?k|>x`8Asg=BDM-|qxAEmS-mEl znxpnV!Lj+pqA+L3Zx}YH;H}NvNYZlDiPsu%zvQFQ-u>p3hsNyyPiGed(PQDE92FRiCDOR@~wwF`4*^Iz3ULX^@U?22ac3#efZn& z&9JtSmf)*I`vVlT0SMnff@}M5+&P(Ms#_CtcIG@H4RKkn52C1nWyc3!-+SfwFx<q1fSgwr22(ARvmLu4NVI}dTx&0NT*L!GtE)r7=bN|`@Q0Vm;1#Ua6Zqq zcb5d9+C`j>xL))<+ned|4a2ZYF<2}_#=j^^;9(^SKGJrOm7w;!j#Nz)uVbJ8Qg0TD zeC2d2Dk9-Vzf`|n5puoAAuA?uZVy`aV{IFuY-og&K%FlS<@R>Lw|;upoL$bk)Ozlm=helhMK3M1e;yujT9BAST4r;6lJt{GWT}{v)qc??=Vw$g^CC z40oza;iwlCK#cz~Q~xzE5ASDK{7aL!4Cf||(TuUw=#qV_`>2WSsGbQ)7G_J~V~&43 z#4!1h!D_sencMVD${mf};Z z&W)IOtoSr_M8TvXBZ(EAd1#>?fmjI+iW)>cFxD*ZMtqXFyO88bqL(^8+i)gUWuKsd zCMz~6uf<`{^FCSrb+UIt#WaoOPMA0P(K8Vzv&sGkS=?5%$7o+Y`)x$c{>MmvE|Sp- z>jWJjp&)^DWbxsG1H^!LLFguZp41q`BEi^a?5As-t=7?7K`5LuSrv|$m3zpi=tWA2 zMuo4ihRUkBD}}9;DY;WUuB}2$;hHa*)D|REedgy2RSAMp`LW$XCGiUgz>>X~!K8d7 zcO*S68#%#tRv^CyT^9>=TKf7j-eKbhU!nMY4#Xg=xR@P$;Vj~ytK6&cVi&G;cCzva zjXlU~@i-d{*oc^09b?6ho}kHPj%2Aho+)4UWKcUQtUEsE>z6N@jiB<9H71(UX7)gc z2lxm?Wufsa!5fEJ?P89|SAK+D*&kWerV_gmhjRAU2EZkhrE#O zlr$NAg^IoiUV|WqSM`~TSMctK9i0x}_7fq|!2K<1BkmHCQRi0IZP@qAVBMHq$AXC_ z&h_Z`gWsNKMJ%}1;RnN$-U3rgs@CiBH@(Z&5o#swKdIlhRJE5$#2gPq#GSwEGR166 z-Eq4t{iASH-#D<$X>i3w;V0VO5g(T}Tl&}aERh?&(tPQ- zy)E!Fef|FxxBUm9vdgF!2C1+1F!4VSpy1e}e@wEIrVESJ#>Swe+Nxn!&@cL~ zc-}{>>Nb#{s(FFOEoiW=fQzDGd0lKli49LeSEan=9u}C$->I$-u5w9wovk8x%~Ko3 zyhyK@OLJ3^{7TmNM;I_D-~#m0@=^4jfPYd4;eA-LVd{TgwREJ|r=in7!r3sWAf5P^ z*UE1C>QAECv1cHk0SA{sG1N!~;hYo*jl(Fr3EGWBqWv$qe?P~rcz8tAP$rJek%p;> z()zxBo*59o(Uvsm-@oW$k>KN@SrkK;X69j8ta(j`3aXfzVxq5U`tnw&{{2j0i}BU0 z#!wc*bZM~#+BKPFke+0t80?Puk&Do=<}+v5*Rpj@ZqI`T;E>@bNgwGBtjFMcwDoTM z%lvuI4?fwtCFXyo?D5sfajs^`k-D7a+rHI1-GrUbPvlb6Rp{ZIvcI|V%BD=&AUkVd z2ye{ETYPOYKp+wk(0A4szi=4vpR(Xao>(t(b!tu8n2m)7Ulh^PC_=m9evs-uP^d%P zm+#=+Tc6#RVi>31sdz2jzlI1EO7bC1&~=DVZxzy*@3%V$4X_td6Gm$S(t5b=ydUF% zz4^yVaPVs9$Gxn>;Vg#$qbN;;Xv~7x;@jH!@|Hgdz+!T%dCGRE0%C->A)JdBQO$RY z^VmTOH5CdRr`9`8?YP0VE&eiUp{+Nf*F8XWx@Ul4YluNf8ON;*)Q`kJvJ~agnXofk zb~T!k5C2-;R`KO!B({d$gR8wgwYX2dQ(__J3E8`1@sMnK;2f;%-csvVb?v9u3_9%) z3%bw2r57!26A~ZX`&k?kyIgm7+FW;MBi8V=YW))JS(e#nQ>_OFeQ(uC)WnkcAoQF6 z`nvmLG6H*iSK#h38;6M}KVJMU)@rt=-awiRa|!#M6TSOwI<5Q0!{og93~H_f0$r?Z zO=8YiPIle@!U*RKKlr5jUhdDw#F0}sRBc1U{=Z779BPkHZbW<70|j*k5Q&yV>qv+% zl(epJ5KjRRdYc8feneLA>mQwW7E%wpnzm~HZA(-0=$#@fY@f+eWSy{41ycFS)s+Z6 zyg9C-HH&Mk1{uuKyGJ%UTY!!Mp9NFk1$XxgKR?s$4Gk@XlYQRy6;K4F;9PhiuBSUD z8xQGO_XD}+sy0DZHE{r!Yo(g+?c|ZZ`@o`nfWGfK5Kf9sXF!xUbOwXSrwPyRD zk!yt5N`-i&PZ+K*bo)9O#Jv-V%E zq0dl@Wn9YQda%DF@1TCESrG)QpRJ!*rSDBZ^e{fsAdobdCL4c@7Tl4+aG>O zi{0kM+xhYOavI8shM48y+rMnW0<$iNa_$_@NEW+2KtOvIxp}XxS4S^FeoSgkKnwN` zZZ8h*bjFJ)v-&7bBk;c_uimi0lePMEpo?l$GB97ktF^@Wl8Dt~Q0h?-E(kXyc=0%s zAl>q|tW4wIs0a>oMxh?Nc0ML#m4-=q)I2M|4uvOu>p=@EHh#_HW%5pD)6JOth|?r+ zBXMDc^zAd9kv%S^edq#>j$YdlO~N#^|sIM!|!x5Yu@NI0@Q#+)SSdR7=R34 z?AISl;iI&~n6vjf!(_z~RT>%$%6O?{iBsig_pF(C-x^4+{kqp`aIsk8yQAi=31W%Q zi!NkXEo$~=6bMmb?@M(z6d%i5JKb`#=tSI*BzWmw!Dq z1!*ty6>PEZgVhD@Q)gWpObwj8Jlp6Mft+S4DpRn~@2c}AARpETGkKRNV4~3$k6$A2 zf4Q}Zp=9ClantU;vaS9XEj^CWwWj^z5b|3}r0Y-VfcI zTBw4}J?GymipJLZOu0!eBiW+YQcnJ#pN+KB&b#;2BDSK?wVI8%#!#E~WOkCJQW6)VvHPNoLIALd5kD0AA2ZlMt5)lHE z@`8zgA^18wEQMxwh$yFuUA2FiLgO+(Ot4C(x?S5ah$~kE} z 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%0A4Wv7Z5G=m@v1 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%0AKtc` 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

P-9 z#C%2?b*Eov<)NRknT24ocmKg=_OjctyMtz)OBDIPZ}m%%bCtiD!tD;OPQpiixsdRl zf4=@P_lN${=ik$K0Xw8miKOZ14Z7A&IP-g#?E`ubz}?O8B_Zaji1))Ibw6fa-8jj& zP?+0Gkapz3E>67Rn4Y%2%%cAv8R!TlMbURCzM;>W}n`{8MO?iutLH?Rky z_i-oX)$^Y=q;vBE!0Q>Il``r=aK{pLqQ6h4^kH$)Hxwh?FS0F$oP`B2TT}nb>-B43 zt{Fc@T)96@Ng_mbU(rRMCA$^qFeY&J^WWkcfCtyZctk%5{AA8co{@wn9;xOjs04T1 zBfLD!v=fb+=}ww5#huJal)@@a9cJ28T6CHf3<$L(S-(2VQd_aPRGD<)!r~^YvGsKQ zuu2k=J#VUV?D5=9Csq;f1&!_4qXy58PezyTk2236-&}E{uQa0bvlTcLu$*}V_z2%c z+V2#*^V0K|RQ)bs3}Rky-Be~4c(D4{n=DVDFaC&=gP5}ffRBEM6IL_39J6@feU#N| zw!3;ya@(4S`6W~4BaxujCUeaDZnXH9$;TNa4pg+yj|r2#hQWS3eP=NQv6L3oSN*v&0E?G@bR={q-Dj>0>WgW*i~7 zaZhbUH7Z>dmAzzotb)xC04!e1$4oS0<2slvfCr+0Wf-#$;%iVbWEb#}rCMUyP{y2f zZb&t35$JXs<~%feZVRh4QOkmSRTie!cDcRrrOL!HWoDUF{k}h-%_oEyUolAbLc3*_ zZYBR!WQ8k^ds4q5CPSZ+(^V=8)ZTmiwMI8cZmxmfYamM{!W^621Pos~F$dkkp0%@B zr;NuNj>pyPT)lkm6nEMe_U?@qz{ECj&;-kpDKdHiCZyVJoP}G_E9ZG|8%NCCE@h~> z&2F7{je!w2JTQNLN;+8X#Zt%7@1iSQ6SKSQm{p!fM{e=l^&O*Nv%4T`VTI;}m=}w! zixocO0Jv%Q5YR?I?nvI>m^m>Go8LzGJOTH#OS`BU>gO-@l0 zuBo8-2>qt*+f%}oTRz>WxUA{Et>}5~nTBPcnxCWj=|`FR85;m7Cu<`n(NghQsW9!-h^UVrgDTv4w2UqmCj?(pQYPSGJ4Xd+nJta@A+vGUqHW# zf8yP+o=a;LV|baLf$nBVTp8^aXOwVGw41*e)xhqxtbTp5{YL5A1?gk(zV1I73JkDe z)q&T{77t?oS{&n_-{HUpJF@bF6j-e9JeRFynnuWB0!zou@z2_{Ps&O_A9%0h{swsm zneEeh!f;$?(JHwi9P5_N%rFNO?=2tQsdI4X8bC5En#d+1OT@*nMA zuk$3_f7qOT(?-BIZ}z8defLoPiNOUf;4Vf9Fe7}&pH~h&qB@;V#ZVs6HKmZJdqG@w zDSuZ!J`b{k7urqld%YEVz$e}Gpi?7CJp=YxeH_m@Z}3ZiAjwL15o@HRicj3@zvnF` z+7yTDUHNNMg7Lk0ABa**P=ujguWh$rKZh_lt@9SmCe#AISu`M6OWlvQr_Q1s}dWKbf>E#GkYzcP6kNHVsdf{Q8)W))t zScizhfn)s`AsAuQXu?c7iXY%xnW%b>>5lsNg8S`b*L~tqe@_ls(utLESk<#YON)nH zxr?c;)SNq0ejv2{Pbqxz08;@jMJ4r$RmJBk3YxsOTsDj`XFe5M*y8>-zHyNrGr$@| z7+y9PM7mPkXW;?VzYorZ74&f+`;3qOK0AjHjPf3cYS;)Lr`=_1fqkVjB+ffFo?2cX zk+I^d=SO_Hi*Tgn&0j0q=BXFL0X+_HWcevoMTb~hr6&-+=KMXB>W$w-rGttA>Db@t z-L#+#+*Z6re8KHZkuHW;J-|Y+_wr-My-w=)d$zi-O%#7RUb4>%ChZy}=O+YSX$>IH zyqYn}#2mtGM}58&RiEbwo{5U9(GE{r+F$#4()2i$d1YRuLa!ykDaru#RxL07o@2Jj zB#+%o66wifN58kE?Tzn&ko8ED+Y0DyKP?nf|7oCLZnQsSaOJcgYIFFM<2*tCU!0Bu zz6~ZGrry@<>#%}GUleO~+Po8FcL@jv!B<+mWV+Y1Fus>YZF6=+@Q2X@(%3<{FSV|T z%Q3Fz4|XL6t7n#|MfSUII9m zt=!W$=T~Yh_LVKD2;S+jOSQT z*2XKce0byNk$qS>e&+eRIS=%j?L8pv;IA|GH;|*UsaR#w9w%|j>t1De_yw4qROMUg z+{QzB-q0bw_`T*HO>cyAsXtqvJ0QKqdZB%v8MJ>^T@Xk__cF8BH`+Z2p|zFx{3y`E zYj3?@o9%DkHd)1w8gcwGbxT$IwZM?cN80;#3tH%<)E$2E$jo68^5q6NwP%f<glZ z^GSaq^YrOOdbjw+joanQ|8cF`{R%{hqjGxu&e^^D(#@Hn?)treNc|;+;t@7*PA&+k z8T$V6G;qfvyjO!I?gNt(c=XtM&jJk1sVZKqB`$R+sn`K-Jk5_xoTB|Mz*g=`FTChy zkzuN?OLIi*-7p2Ivv)CJ3rM}F0qZ>lVDuD_e*&l$syX!m$;8a=M9`Na^p_Wu+YD^X z zx8wqJ{qouXNIE^|pzsw0=oQv0uzj@KDy;9`+-W)%pH84X5T6#A%Piel$GURI(p8gQ zeXWkwk@*a26%@t@nHlkOl*Ec)T{zP@6!M(m-*sF8VT6x|kf|A_BH`eTyqBnglf^Mn zZvpJl_MP8xxxk@g^lh&4_~kI$+|DNJ`C&?*+6e8Q@Uf4CKkEb2gP z%_lKO`BHWSUl&%IU5?PrruT%aPpp>CdP$WUL@&42R+nrJa5}}&lrNulv%37+#btvq zMIeYD3-Q7y#(@Bz_9956y@b#_WVbUA_{@YrRBwC@bIb_~J{b6Pe4^7BzVzK&|NRI( zvyrMmhVL&RcBXNNm(Xz6B3QqUV11_5_fni(tQBK+0OGlCaUl$JwIaVI#u)VORjnHs zmS(KK@NMWO@WziP46k_mIN|Y6XC;e@ChiL+=aj005p9Ak?B!`+5|ri5+)kobqR0a9 z?#kb0w=3H!Uah@b_9v#G}mZbi@D+a1=CUq5hOH=v!nf}m0%VxB% zt{^?~A%2ooU(O^7Q+fP`_p3X2K=ui?E&ud+Kl$pe(&qRCCm| z@_z3yjn^c9-jJ9_Wl7+It7B@-dWN@_$PAkX`Z2Z$nP^;>d)$SJwb$`mz;fhOzq>Wh z8m!KnE+L@H862uVinlndow23JD08%9#@kw$f-X^CyPEbtBpxyYWVuCo-en>9Smowg zU@AsIS>#sq$%DY(YWFeck_2@MNO~oNV)1&lSj>V-yv1RsctPNsO>gBFTt{5qF)+K@ zcAXYC5iMlo)1YGa@Ev+d<9gx|tx@pW-AT3c2#b?EQ7{0yxj@+~=^2qlott>bF9gT> zZ*m&lLytX1HyqwG`xWO|b^p82$&<^l`jC*7I^Mmzda>r*Wr+UTcThhz6Ini$y7_S*9-590;}!Ei5W zYVlDL49iV530XGB5I>#lhzx%<(HZ)QQ^{Krf3u&d5`f@~+GPJ-Y@6%uxclRUYgv#T z%K2gq(|QR8c=j)U5H6r|61SOe9n3b`hWX@d*YX?#`$MwLR74nlr`I44L;e&Nlb7OC z&Fi2;!igQB=S~ z%xZs*oK7>2-m^LWX7|tF(a>RJV4c}%KE7PW(6>~7wel6f@TT9oe%0DeiO8A~XxDeQ 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

H9}WyPveTstv$%dSre1{qs3Kj%nr18*6|!^Pu2T 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Μ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

@^h)B_b-Vp8)u)fP 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

e@F?^VW!^}4qj=C3K$jhgfAtST(+knZaW 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 oARQ! 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

  • DKVgi{bN(7`~T5 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%0DjC-+QA68m>%DV^hTZK4)6%jxlYhS+@~dw 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/lib/cards/cards.dart b/packages/wyatt_ui_kit/example/lib/cards/cards.dart new file mode 100644 index 00000000..9915af69 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/cards/cards.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit_example/cards/information_card/information_cards.dart'; + +class Cards extends StatelessWidget { + const Cards({super.key}); + + @override + Widget build(BuildContext context) => ListView( + shrinkWrap: true, + children: [ + Text( + 'Cards', + style: Theme.of(context) + .textTheme + .titleLarge! + .copyWith(color: Colors.white), + ), + const InformationCards(), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart new file mode 100644 index 00000000..75196e6a --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart @@ -0,0 +1,152 @@ +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class InformationCards extends StatelessWidget { + const InformationCards({super.key}); + + @override + Widget build(BuildContext context) => ListView( + shrinkWrap: true, + children: [ + Text( + 'Information Cards', + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith(color: Colors.white), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + InformationCard( + icons: const [ + FlutterLogo(size: 60), + FlutterLogo(size: 60), + FlutterLogo(size: 60), + ], + title: const TextWrapper('Flutter'), + subtitle: TextWrapper.text('One single code base.'), + body: TextWrapper.text( + 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + 'elit sint ex cupidatat ullamco Lorem amet elit ' + 'ipsum sunt ex voluptate. Eiusmod quis laborum velit ' + 'excepteur eu commodo consectetur qui exercitation ' + 'officia consequat ullamco sit adipisicing. Ullamco ' + 'magna cupidatat Lorem nulla cupidatat voluptate ' + 'irure ex reprehenderit.', + ), + ), + const Gap(20), + InformationCard( + background: Center( + child: Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage('assets/asset_1.png'), + fit: BoxFit.fitHeight, + alignment: Alignment.centerRight, + ), + ), + ), + ), + icons: const [ + FlutterLogo(size: 60), + FlutterLogo(size: 60), + ], + title: 'Flutter'.wrap( + gradient: [Colors.blue, Colors.green], + ), + subtitle: TextWrapper.text('One single code base.'), + body: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + 'elit sint ex cupidatat ullamco Lorem amet elit ' + 'ipsum sunt ex voluptate. Eiusmod quis laborum velit ' + 'excepteur eu commodo consectetur qui exercitation ' + 'officia consequat ullamco sit adipisicing. Ullamco ' + 'magna cupidatat Lorem nulla cupidatat voluptate ' + 'irure ex reprehenderit.' + .wrap(), + ), + ], + ), + const Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + InformationCard( + icons: const [ + FlutterLogo(size: 60), + ], + axis: Axis.horizontal, + title: TextWrapper.text('Flutter'), + subtitle: TextWrapper.text('One single code base.'), + body: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + 'elit sint ex cupidatat ullamco Lorem amet elit ' + 'ipsum sunt ex voluptate. Eiusmod quis laborum velit ' + 'excepteur eu commodo consectetur qui exercitation ' + 'officia consequat ullamco sit adipisicing. Ullamco ' + 'magna cupidatat Lorem nulla cupidatat voluptate ' + 'irure ex reprehenderit.' + .wrap( + gradient: [ + Colors.red, + Colors.orange, + ], + ), + ), + const Gap(20), + InformationCard( + background: Center( + child: Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage('assets/asset_1.png'), + fit: BoxFit.fitHeight, + alignment: Alignment.centerRight, + ), + ), + ), + ), + icons: const [ + FlutterLogo(size: 60), + ], + axis: Axis.horizontal, + title: TextWrapper.text('Flutter'), + subtitle: 'One single code base.'.wrap( + gradient: [Colors.blue, Colors.green], + style: TextStyle( + fontWeight: FontWeight.bold, + ), + ), + body: TextWrapper.text( + 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + 'elit sint ex cupidatat ullamco Lorem amet elit ' + 'ipsum sunt ex voluptate. Eiusmod quis laborum velit ' + 'excepteur eu commodo consectetur qui exercitation ' + 'officia consequat ullamco sit adipisicing. Ullamco ' + 'magna cupidatat Lorem nulla cupidatat voluptate ' + 'irure ex reprehenderit.', + ), + ), + ], + ), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/main.dart b/packages/wyatt_ui_kit/example/lib/main.dart index 1b8dc3bf..b4a6308f 100644 --- a/packages/wyatt_ui_kit/example/lib/main.dart +++ b/packages/wyatt_ui_kit/example/lib/main.dart @@ -14,7 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:wyatt_ui_kit_example/cards/cards.dart'; void main(List args) { runApp(const App()); @@ -26,14 +29,29 @@ class App extends StatelessWidget { static const String title = 'Wyatt Ui Kit Example'; @override - Widget build(BuildContext context) => MaterialApp( - title: title, - theme: ThemeData( - primarySwatch: Colors.blue, + Widget build(BuildContext context) => CupertinoApp( + localizationsDelegates: const [ + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + theme: const CupertinoThemeData( + primaryColor: Colors.blue, ), - home: Scaffold( - appBar: AppBar( - title: const Text(title), + supportedLocales: const [ + Locale('fr', ''), + ], + title: title, + home: CupertinoPageScaffold( + navigationBar: const CupertinoNavigationBar( + middle: Text(title), + ), + child: Padding( + padding: const EdgeInsets.all(8), + child: ListView( + shrinkWrap: true, + children: const [Cards()], + ), ), ), ); diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index 1f5a0745..1681e8b3 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -10,9 +10,19 @@ environment: dependencies: flutter: { sdk: flutter } + flutter_localizations: + sdk: flutter + + gap: ^2.0.1 + wyatt_ui_kit: path: "../" + wyatt_ui_components: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_ui_components + dev_dependencies: flutter_test: { sdk: flutter } @@ -23,3 +33,6 @@ dev_dependencies: # The following section is specific to Flutter. flutter: uses-material-design: true + + assets: + - ./assets/ diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/cards.dart b/packages/wyatt_ui_kit/lib/src/components/cards/cards.dart new file mode 100644 index 00000000..29a2da59 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/cards.dart @@ -0,0 +1,17 @@ +// 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 . + +export './information_card/information_card.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart new file mode 100644 index 00000000..f52131ba --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart @@ -0,0 +1,93 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_horizontal_header.dart'; +import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_vertical_header.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; + +part 'information_card.g.dart'; + +const _bodyTopSpacing = 25.0; + +@ComponentCopyWithExtension() +class InformationCard extends InformationCardComponent + with $InformationCardCWMixin { + const InformationCard({ + super.icons, + super.title, + super.subtitle, + super.body, + super.axis, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.minSize, + super.maxSize = const Size(330, double.infinity), + super.shadow, + super.background, + super.key, + }); + + @override + Widget build(BuildContext context) => CardWrapper( + background: background, + padding: padding, + backgroundColor: backgroundColor, + borderColors: borderColors, + shadow: shadow, + maxSize: maxSize, + minSize: minSize, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (axis == Axis.horizontal) ...[ + InformationCardHorizontalHeader( + icons: icons, + axis: axis, + title: title, + subtitle: subtitle, + ), + ] else if (axis == Axis.vertical) ...[ + InformationCardVerticalHeader( + icons: icons, + axis: axis, + title: title, + subtitle: subtitle, + ) + ], + if (body != null) ...[ + const Gap(_bodyTopSpacing), + Text( + body!.text, + style: body!.style ?? context.textTheme.bodyMedium, + ).toGradient( + LinearGradientHelper.fromNullableColors( + body!.gradient, + ), + ), + ], + ], + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart new file mode 100644 index 00000000..6540af1b --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart @@ -0,0 +1,81 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'information_card.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $InformationCardCWProxyImpl implements $InformationCardComponentCWProxy { + const $InformationCardCWProxyImpl(this._value); + final InformationCard _value; + @override + InformationCard icons(List? icons) => this(icons: icons); + @override + InformationCard title(TextWrapper? title) => this(title: title); + @override + InformationCard subtitle(TextWrapper? subtitle) => this(subtitle: subtitle); + @override + InformationCard body(TextWrapper? body) => this(body: body); + @override + InformationCard axis(Axis? axis) => this(axis: axis); + @override + InformationCard radius(double? radius) => this(radius: radius); + @override + InformationCard padding(double? padding) => this(padding: padding); + @override + InformationCard borderColors(List? borderColors) => + this(borderColors: borderColors); + @override + InformationCard backgroundColor(Color? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + InformationCard minSize(Size? minSize) => this(minSize: minSize); + @override + InformationCard maxSize(Size? maxSize) => this(maxSize: maxSize); + @override + InformationCard shadow(BoxShadow? shadow) => this(shadow: shadow); + @override + InformationCard background(Widget? background) => + this(background: background); + @override + InformationCard key(Key? key) => this(key: key); + @override + InformationCard call({ + List? icons, + TextWrapper? title, + TextWrapper? subtitle, + TextWrapper? body, + Axis? axis, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + Widget? background, + Key? key, + }) => + InformationCard( + icons: icons ?? _value.icons, + title: title ?? _value.title, + subtitle: subtitle ?? _value.subtitle, + body: body ?? _value.body, + axis: axis ?? _value.axis, + radius: radius ?? _value.radius, + padding: padding ?? _value.padding, + borderColors: borderColors ?? _value.borderColors, + backgroundColor: backgroundColor ?? _value.backgroundColor, + minSize: minSize ?? _value.minSize, + maxSize: maxSize ?? _value.maxSize, + shadow: shadow ?? _value.shadow, + background: background ?? _value.background, + key: key ?? _value.key, + ); +} + +mixin $InformationCardCWMixin on Component { + $InformationCardComponentCWProxy get copyWith => + $InformationCardCWProxyImpl(this as InformationCard); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart new file mode 100644 index 00000000..cc438603 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart @@ -0,0 +1,52 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_titles.dart'; + +const _avatarAndTitlesSpacing = 25.0; + +class InformationCardHorizontalHeader extends StatelessWidget { + const InformationCardHorizontalHeader({ + this.title, + this.subtitle, + this.axis, + this.icons, + super.key, + }); + + final TextWrapper? title; + final TextWrapper? subtitle; + final Axis? axis; + final List? icons; + + @override + Widget build(BuildContext context) => Row( + children: [ + if (icons?.first != null) ...[ + icons!.first, + const Gap(_avatarAndTitlesSpacing), + InformationCardTitles( + title: title, + subtitle: subtitle, + axis: axis, + ), + ], + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_icons.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_icons.dart new file mode 100644 index 00000000..7e4d2bdf --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_icons.dart @@ -0,0 +1,42 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; + +const _iconSpacing = 25.0; + +class InformationCardIcons extends StatelessWidget { + const InformationCardIcons({ + super.key, + this.icons, + }); + + final List? icons; + + @override + Widget build(BuildContext context) { + final result = []; + for (final widget in icons ?? List.empty()) { + result.addAll([widget, const Gap(_iconSpacing)]); + } + result.removeLast(); + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: result, + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart new file mode 100644 index 00000000..153110eb --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart @@ -0,0 +1,63 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +const _titlesLineSpacing = 5.0; + +class InformationCardTitles extends StatelessWidget { + const InformationCardTitles({ + this.title, + this.subtitle, + this.axis, + super.key, + }); + + final TextWrapper? title; + final TextWrapper? subtitle; + final Axis? axis; + + @override + Widget build(BuildContext context) => Column( + crossAxisAlignment: axis == Axis.horizontal + ? CrossAxisAlignment.start + : CrossAxisAlignment.center, + children: [ + if (title != null) ...[ + Text( + title!.text, + style: title!.style ?? context.textTheme.titleLarge, + ).toGradient( + LinearGradientHelper.fromNullableColors(title!.gradient), + ), + ], + if (subtitle != null) ...[ + const Gap(_titlesLineSpacing), + Text( + subtitle!.text, + style: subtitle!.style ?? context.textTheme.titleSmall, + ).toGradient( + LinearGradientHelper.fromNullableColors(subtitle!.gradient), + ), + ], + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_vertical_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_vertical_header.dart new file mode 100644 index 00000000..409d43bf --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_vertical_header.dart @@ -0,0 +1,55 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_icons.dart'; +import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_titles.dart'; + +const _avatarAndTitlesSpacing = 25.0; + +class InformationCardVerticalHeader extends StatelessWidget { + const InformationCardVerticalHeader({ + this.title, + this.subtitle, + this.axis, + this.icons, + super.key, + }); + + final TextWrapper? title; + final TextWrapper? subtitle; + final Axis? axis; + final List? icons; + + @override + Widget build(BuildContext context) => Column( + children: [ + if (icons != null && icons!.isNotEmpty) ...[ + InformationCardIcons( + icons: icons, + ), + const Gap(_avatarAndTitlesSpacing), + ], + InformationCardTitles( + title: title, + subtitle: subtitle, + axis: axis, + ), + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart new file mode 100644 index 00000000..1acbda5f --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -0,0 +1,124 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; + +class CardWrapper extends StatefulWidget { + const CardWrapper({ + required this.child, + required this.backgroundColor, + required this.borderColors, + required this.shadow, + required this.minSize, + required this.maxSize, + required this.padding, + required this.background, + super.key, + }); + + final Widget? background; + final Widget child; + final Color? backgroundColor; + final List? borderColors; + final BoxShadow? shadow; + final Size? minSize; + final Size? maxSize; + final double? padding; + + @override + State createState() => _CardWrapperState(); +} + +class _CardWrapperState extends State { + Size _cardSize = Size.zero; + final GlobalKey _key = GlobalKey(); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + final RenderObject? renderBox = _key.currentContext?.findRenderObject(); + if (renderBox != null) { + setState(() { + _cardSize = + Size(renderBox.paintBounds.width, renderBox.paintBounds.height); + }); + } + }); + } + + Widget _buildChild(Widget child) => (widget.background != null) + ? Stack( + alignment: Alignment.center, + children: [ + SizedBox( + width: _cardSize.width, + height: _cardSize.height, + child: Center(child: widget.background), + ), + Padding( + padding: EdgeInsets.all( + widget.padding ?? 25, + ), + child: child, + ), + ], + ) + : Padding( + padding: EdgeInsets.all( + widget.padding ?? 25, + ), + child: child, + ); + + @override + Widget build(BuildContext context) => SelectionArea( + child: DecoratedBox( + key: _key, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(12)), + color: widget.backgroundColor ?? Theme.of(context).cardColor, + border: GradientBoxBorder( + gradient: LinearGradient( + colors: (widget.borderColors != null && + widget.borderColors!.length >= 2) + ? widget.borderColors! + : [ + Theme.of(context).cardColor, + Theme.of(context).cardColor + ], + ), + width: 1, + ), + boxShadow: [ + if (widget.shadow != null) ...[widget.shadow!] + ], + ), + child: (widget.minSize != null && widget.maxSize != null) + ? ConstrainedBox( + constraints: BoxConstraints( + minWidth: widget.minSize!.width, + minHeight: widget.minSize!.height, + maxWidth: widget.maxSize!.width, + maxHeight: widget.maxSize!.height, + ), + child: _buildChild(widget.child), + ) + : _buildChild(widget.child), + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart new file mode 100644 index 00000000..75c4ba26 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -0,0 +1,17 @@ +// 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 . + +export './cards/cards.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart new file mode 100644 index 00000000..36941942 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart @@ -0,0 +1,85 @@ +// 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 . + +import 'package:flutter/painting.dart'; + +class GradientBoxBorder extends BoxBorder { + const GradientBoxBorder({this.gradient, this.width = 0}); + + final Gradient? gradient; + final double width; + + @override + BorderSide get bottom => BorderSide.none; + + @override + BorderSide get top => BorderSide.none; + + @override + EdgeInsetsGeometry get dimensions => EdgeInsets.all(width); + + @override + bool get isUniform => true; + + @override + ShapeBorder scale(double t) => this; + + @override + void paint( + Canvas canvas, + Rect rect, { + TextDirection? textDirection, + BoxShape shape = BoxShape.rectangle, + BorderRadius? borderRadius, + }) { + switch (shape) { + case BoxShape.circle: + assert( + borderRadius == null, + 'A borderRadius can only be given for rectangular boxes.', + ); + _paintCircle(canvas, rect); + break; + case BoxShape.rectangle: + if (borderRadius != null) { + _paintRRect(canvas, rect, borderRadius); + return; + } + _paintRect(canvas, rect); + break; + } + } + + Paint _getPaint(Rect rect) => Paint() + ..strokeWidth = width + ..shader = gradient?.createShader(rect) + ..style = PaintingStyle.stroke; + + void _paintRect(Canvas canvas, Rect rect) { + canvas.drawRect(rect.deflate(width / 2), _getPaint(rect)); + } + + void _paintRRect(Canvas canvas, Rect rect, BorderRadius borderRadius) { + final RRect rrect = borderRadius.toRRect(rect).deflate(width / 2); + canvas.drawRRect(rrect, _getPaint(rect)); + } + + void _paintCircle(Canvas canvas, Rect rect) { + final Paint paint = _getPaint(rect); + final double radius = (rect.shortestSide - width) / 2.0; + canvas.drawCircle(rect.center, radius, paint); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart new file mode 100644 index 00000000..6f7864e3 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart @@ -0,0 +1,71 @@ +// 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 . + +import 'package:flutter/widgets.dart'; + +extension GradientTextExtension on Icon { + GradientIcon toGradient(Gradient? gradient) => + GradientIcon.from(this, gradient); +} + +class GradientIcon extends Icon { + const GradientIcon( + super.icon, { + this.gradient, + super.key, + super.size, + super.fill, + super.weight, + super.grade, + super.opticalSize, + super.color, + super.shadows, + super.semanticLabel, + super.textDirection, + }); + + factory GradientIcon.from(Icon icon, Gradient? gradient) => GradientIcon( + icon.icon, + gradient: gradient, + key: icon.key, + size: icon.size, + fill: icon.fill, + weight: icon.weight, + grade: icon.grade, + opticalSize: icon.opticalSize, + color: icon.color, + shadows: icon.shadows, + semanticLabel: icon.semanticLabel, + textDirection: icon.textDirection, + ); + + final Gradient? gradient; + + @override + Widget build(BuildContext context) { + if (gradient != null) { + return ShaderMask( + blendMode: BlendMode.srcIn, + shaderCallback: (bounds) => gradient!.createShader( + Rect.fromLTWH(0, 0, bounds.width, bounds.height), + ), + child: super.build(context), + ); + } else { + return super.build(context); + } + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart new file mode 100644 index 00000000..0bed20a9 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart @@ -0,0 +1,81 @@ +// Wyatt Studio Copyright (c) 2023 + +// 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 . + +import 'package:flutter/widgets.dart'; + +extension GradientTextExtension on Text { + GradientText toGradient(Gradient? gradient) => + GradientText.from(this, gradient); +} + +class GradientText extends Text { + const GradientText( + super.data, { + this.gradient, + super.style, + super.strutStyle, + super.textAlign, + super.textDirection, + super.locale, + super.softWrap, + super.overflow, + super.textScaleFactor, + super.maxLines, + super.semanticsLabel, + super.textWidthBasis, + super.textHeightBehavior, + super.selectionColor, + super.key, + }); + + factory GradientText.from(Text text, Gradient? gradient) => GradientText( + text.data ?? '', + style: text.style, + gradient: gradient, + strutStyle: text.strutStyle, + textAlign: text.textAlign, + textDirection: text.textDirection, + locale: text.locale, + softWrap: text.softWrap, + overflow: text.overflow, + textScaleFactor: text.textScaleFactor, + maxLines: text.maxLines, + semanticsLabel: text.semanticsLabel, + textWidthBasis: text.textWidthBasis, + textHeightBehavior: text.textHeightBehavior, + selectionColor: text.selectionColor, + key: text.key, + ); + + final Gradient? gradient; + + @override + Widget build(BuildContext context) { + if (gradient != null) { + return ShaderMask( + blendMode: BlendMode.srcIn, + shaderCallback: (bounds) => gradient!.createShader( + Rect.fromLTWH(0, 0, bounds.width, bounds.height), + ), + child: super.build(context), + ); + } else { + return super.build(context); + } + } +} diff --git a/packages/wyatt_ui_kit/lib/src/core/core.dart b/packages/wyatt_ui_kit/lib/src/core/core.dart new file mode 100644 index 00000000..f2c1fbdc --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/core.dart @@ -0,0 +1,18 @@ +// 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 . + +export './extensions/extensions.dart'; +export './helpers/helpers.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/core/extensions/extensions.dart b/packages/wyatt_ui_kit/lib/src/core/extensions/extensions.dart new file mode 100644 index 00000000..9680493a --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/extensions/extensions.dart @@ -0,0 +1,17 @@ +// 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 . + +export './theme_extensions.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart new file mode 100644 index 00000000..2cf2e32c --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart @@ -0,0 +1,21 @@ +// 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 . + +import 'package:flutter/material.dart'; + +extension ThemeExtension on BuildContext { + TextTheme get textTheme => Theme.of(this).textTheme; +} diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart new file mode 100644 index 00000000..35d48e7f --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart @@ -0,0 +1,17 @@ +// 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 . + +export './linear_gradient_helper.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart new file mode 100644 index 00000000..7e3af2cd --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart @@ -0,0 +1,22 @@ +// 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 . + +import 'package:flutter/material.dart'; + +class LinearGradientHelper { + static LinearGradient? fromNullableColors(List? colors) => + colors != null ? LinearGradient(colors: colors) : null; +} diff --git a/packages/wyatt_ui_kit/lib/src/src.dart b/packages/wyatt_ui_kit/lib/src/src.dart new file mode 100644 index 00000000..eb5aa8b4 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/src.dart @@ -0,0 +1,34 @@ +// 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 . + +// 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 . + +export './components/components.dart'; +export './core/core.dart'; diff --git a/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart index 004e7a9e..815ae892 100644 --- a/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart +++ b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart @@ -16,3 +16,5 @@ /// UIKit and Design System used in Wyatt Studio. library wyatt_ui_kit; + +export './src/src.dart'; diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index 15d313a8..083d7fa6 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -3,11 +3,14 @@ description: UIKit and Design System used in Wyatt Studio. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_kit version: 1.0.0 +publish_to: none + environment: sdk: ">=2.19.0 <3.0.0" dependencies: flutter: { sdk: flutter } + gap: ^2.0.1 flutter_animate: ^3.0.0 wyatt_component_copy_with_extension: git: diff --git a/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart b/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart index 771213c1..3a06c0e1 100644 --- a/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart +++ b/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart @@ -1 +1 @@ -// TODO(wyatt): add some tests \ No newline at end of file +// TODO(wyatt): add some tests -- 2.47.2 From a563bd1fe3c9de9716c71918ab65066a497d5d2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 10 Feb 2023 14:19:32 +0100 Subject: [PATCH 086/320] style(ui_kit): add macos platform in example --- packages/wyatt_ui_kit/example/.metadata | 12 +- .../wyatt_ui_kit/example/lib/cards/cards.dart | 5 +- .../information_card/information_cards.dart | 8 +- .../wyatt_ui_kit/example/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 573 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 +++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../example/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 8 + 30 files changed, 1233 insertions(+), 12 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/macos/.gitignore create mode 100644 packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/AppDelegate.swift create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Configs/Release.xcconfig create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Info.plist create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/MainFlutterWindow.swift create mode 100644 packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements diff --git a/packages/wyatt_ui_kit/example/.metadata b/packages/wyatt_ui_kit/example/.metadata index 30e0d3ce..239e801e 100644 --- a/packages/wyatt_ui_kit/example/.metadata +++ b/packages/wyatt_ui_kit/example/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled. version: - revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + revision: 32fb2f948e9b1a2d1b876ebee3558be7f51b457f channel: stable project_type: app @@ -13,11 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf - base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf - - platform: web - create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf - base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + create_revision: 32fb2f948e9b1a2d1b876ebee3558be7f51b457f + base_revision: 32fb2f948e9b1a2d1b876ebee3558be7f51b457f + - platform: macos + create_revision: 32fb2f948e9b1a2d1b876ebee3558be7f51b457f + base_revision: 32fb2f948e9b1a2d1b876ebee3558be7f51b457f # User provided section diff --git a/packages/wyatt_ui_kit/example/lib/cards/cards.dart b/packages/wyatt_ui_kit/example/lib/cards/cards.dart index 9915af69..c044767e 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/cards.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; import 'package:wyatt_ui_kit_example/cards/information_card/information_cards.dart'; class Cards extends StatelessWidget { const Cards({super.key}); @override - Widget build(BuildContext context) => ListView( - shrinkWrap: true, + Widget build(BuildContext context) => Column( children: [ Text( 'Cards', @@ -15,6 +15,7 @@ class Cards extends StatelessWidget { .titleLarge! .copyWith(color: Colors.white), ), + const Gap(20), const InformationCards(), ], ); diff --git a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart index 75196e6a..ee0d4b24 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart @@ -7,8 +7,7 @@ class InformationCards extends StatelessWidget { const InformationCards({super.key}); @override - Widget build(BuildContext context) => ListView( - shrinkWrap: true, + Widget build(BuildContext context) => Column( children: [ Text( 'Information Cards', @@ -17,6 +16,7 @@ class InformationCards extends StatelessWidget { .titleMedium! .copyWith(color: Colors.white), ), + const Gap(20), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -127,8 +127,8 @@ class InformationCards extends StatelessWidget { title: TextWrapper.text('Flutter'), subtitle: 'One single code base.'.wrap( gradient: [Colors.blue, Colors.green], - style: TextStyle( - fontWeight: FontWeight.bold, + style: const TextStyle( + fontWeight: FontWeight.w500, ), ), body: TextWrapper.text( diff --git a/packages/wyatt_ui_kit/example/macos/.gitignore b/packages/wyatt_ui_kit/example/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..c2efd0b6 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..c2efd0b6 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..cccf817a --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..d9333e47 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,573 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..fb7259e1 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner/AppDelegate.swift b/packages/wyatt_ui_kit/example/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..d53ef643 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/packages/wyatt_ui_kit/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/wyatt_ui_kit/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..dda192bc --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Configs/Debug.xcconfig b/packages/wyatt_ui_kit/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Configs/Release.xcconfig b/packages/wyatt_ui_kit/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Configs/Warnings.xcconfig b/packages/wyatt_ui_kit/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements b/packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Info.plist b/packages/wyatt_ui_kit/example/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner/MainFlutterWindow.swift b/packages/wyatt_ui_kit/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..2722837e --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements b/packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + -- 2.47.2 From 55822ad870d6395367b2d7a00c2341835e23df97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 10 Feb 2023 16:01:07 +0100 Subject: [PATCH 087/320] feat(ui_kit): add quote / skill / portfolio cards (#126) --- .../cards/portfolio_card_component.dart | 4 +- .../cards/portfolio_card_component.g.dart | 8 +- .../wyatt_ui_kit/example/lib/cards/cards.dart | 10 + .../cards/portfolio_card/portfolio_cards.dart | 177 ++++++++++++++++++ .../lib/cards/quote_card/quote_cards.dart | 66 +++++++ .../lib/cards/skill_card/skill_cards.dart | 85 +++++++++ .../lib/src/components/cards/cards.dart | 3 + .../cards/portfolio_card/portfolio_card.dart | 111 +++++++++++ .../portfolio_card/portfolio_card.g.dart | 95 ++++++++++ .../widgets/portfolio_card_description.dart | 60 ++++++ .../widgets/portfolio_card_header.dart | 99 ++++++++++ .../widgets/portfolio_card_images.dart | 57 ++++++ .../cards/quote_card/quote_card.dart | 127 +++++++++++++ .../cards/quote_card/quote_card.g.dart | 88 +++++++++ .../cards/skill_card/skill_card.dart | 85 +++++++++ .../cards/skill_card/skill_card.g.dart | 86 +++++++++ .../skill_card/widgets/skill_card_header.dart | 65 +++++++ .../skill_card/widgets/skill_card_skills.dart | 62 ++++++ 18 files changed, 1282 insertions(+), 6 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart create mode 100644 packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart create mode 100644 packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart index 80399b90..3896ad42 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart @@ -46,9 +46,9 @@ abstract class PortfolioCardComponent extends CardComponent final bool? showImagesOnTop; final List? keyword; - final List? assets; + final List? assets; final TextWrapper? description; - final String? logo; + final Widget? logo; final TextWrapper? projectName; final TextWrapper? subtitle; final List? ctas; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart index 1601c1ee..2a40871a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart @@ -10,11 +10,11 @@ abstract class $PortfolioCardComponentCWProxy { PortfolioCardComponent showImagesOnTop(bool? showImagesOnTop); PortfolioCardComponent keyword(List? keyword); PortfolioCardComponent description(TextWrapper? description); - PortfolioCardComponent logo(String? logo); + PortfolioCardComponent logo(Widget? logo); PortfolioCardComponent projectName(TextWrapper? projectName); PortfolioCardComponent subtitle(TextWrapper? subtitle); PortfolioCardComponent ctas(List? ctas); - PortfolioCardComponent assets(List? assets); + PortfolioCardComponent assets(List? assets); PortfolioCardComponent radius(double? radius); PortfolioCardComponent padding(double? padding); PortfolioCardComponent borderColors(List? borderColors); @@ -28,11 +28,11 @@ abstract class $PortfolioCardComponentCWProxy { bool? showImagesOnTop, List? keyword, TextWrapper? description, - String? logo, + Widget? logo, TextWrapper? projectName, TextWrapper? subtitle, List? ctas, - List? assets, + List? assets, double? radius, double? padding, List? borderColors, diff --git a/packages/wyatt_ui_kit/example/lib/cards/cards.dart b/packages/wyatt_ui_kit/example/lib/cards/cards.dart index c044767e..26076328 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/cards.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_kit_example/cards/information_card/information_cards.dart'; +import 'package:wyatt_ui_kit_example/cards/portfolio_card/portfolio_cards.dart'; +import 'package:wyatt_ui_kit_example/cards/quote_card/quote_cards.dart'; +import 'package:wyatt_ui_kit_example/cards/skill_card/skill_cards.dart'; class Cards extends StatelessWidget { const Cards({super.key}); @@ -17,6 +20,13 @@ class Cards extends StatelessWidget { ), const Gap(20), const InformationCards(), + const Gap(20), + const PortfolioCards(), + const Gap(20), + const QuoteCards(), + const Gap(20), + const SkillCards(), + const Gap(20), ], ); } diff --git a/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart new file mode 100644 index 00000000..fda19baf --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart @@ -0,0 +1,177 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class PortfolioCards extends StatelessWidget { + const PortfolioCards({super.key}); + + @override + Widget build(BuildContext context) => Column( + children: [ + Text( + 'Portfolio Cards', + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith(color: Colors.white), + ), + const Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + PortfolioCard( + logo: const FlutterLogo( + size: 50, + ), + projectName: const TextWrapper('Flutter Project.'), + subtitle: const TextWrapper('Mobile / Web / Macos.'), + description: const TextWrapper('Developpement de 8 mois.'), + ctas: [ + CupertinoButton( + color: Colors.grey.withOpacity(0.3), + padding: EdgeInsets.zero, + onPressed: () {}, + child: const Icon( + Icons.settings, + color: Colors.grey, + ), + ), + ], + assets: [ + Image.asset( + 'assets/mockup_1.png', + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ) + ], + keyword: const [ + TextWrapper('UI Design'), + TextWrapper('Developpement'), + TextWrapper('Deploiement') + ], + ), + const Gap(20), + PortfolioCard( + showImagesOnTop: true, + logo: const FlutterLogo( + size: 50, + ), + projectName: const TextWrapper('Flutter Project.'), + subtitle: const TextWrapper('Mobile / Web / Macos.'), + description: const TextWrapper('Developpement de 8 mois.'), + ctas: [ + CupertinoButton( + color: Colors.grey.withOpacity(0.3), + padding: EdgeInsets.zero, + onPressed: () {}, + child: const Icon( + Icons.settings, + color: Colors.grey, + ), + ), + ], + assets: [ + Image.asset( + 'assets/mockup_1.png', + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ) + ], + ) + ], + ), + const Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + PortfolioCard( + logo: const FlutterLogo( + size: 50, + ), + projectName: const TextWrapper('Flutter Project.'), + subtitle: const TextWrapper('Mobile / Web / Macos.'), + description: const TextWrapper('Developpement de 8 mois.'), + ctas: [ + CupertinoButton( + color: Colors.grey.withOpacity(0.3), + padding: EdgeInsets.zero, + onPressed: () {}, + child: const Icon( + Icons.settings, + color: Colors.grey, + ), + ), + ], + assets: [ + Image.asset( + 'assets/mockup_1.png', + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ), + Image.asset( + 'assets/mockup_1.png', + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ) + ], + keyword: const [ + TextWrapper('UI Design'), + TextWrapper('Developpement'), + TextWrapper('Deploiement') + ], + ), + const Gap(20), + PortfolioCard( + logo: const FlutterLogo( + size: 50, + ), + projectName: const TextWrapper( + 'Flutter Project.', + gradient: [ + Colors.blue, + Colors.green, + ], + ), + subtitle: const TextWrapper('Mobile / Web / Macos.'), + description: const TextWrapper('Developpement de 8 mois.'), + ctas: [ + CupertinoButton( + color: Colors.grey.withOpacity(0.3), + padding: EdgeInsets.zero, + onPressed: () {}, + child: const Icon( + Icons.settings, + color: Colors.grey, + ), + ), + ], + assets: [ + Image.asset( + 'assets/mockup_1.png', + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ), + Image.asset( + 'assets/mockup_2.png', + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ), + Image.asset( + 'assets/mockup_1.png', + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ) + ], + keyword: const [ + TextWrapper('UI Design'), + TextWrapper('Developpement'), + TextWrapper('Deploiement') + ], + ), + ], + ), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart new file mode 100644 index 00000000..54703bce --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart @@ -0,0 +1,66 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class QuoteCards extends StatelessWidget { + const QuoteCards({super.key}); + + @override + Widget build(BuildContext context) => Column( + children: [ + Text( + 'Quote Cards', + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith(color: Colors.white), + ), + const Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + QuoteCard( + quote: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + .wrap(), + ), + const Gap(20), + QuoteCard( + quote: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + .wrap(gradient: [Colors.red, Colors.orange]), + avatar: const FlutterLogo( + size: 40, + ), + name: 'John Doe'.wrap(), + subtitle: 'Agence anonyme'.wrap(), + ), + ], + ), + const Gap(20), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart new file mode 100644 index 00000000..288ee37d --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart @@ -0,0 +1,85 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class SkillCards extends StatelessWidget { + const SkillCards({super.key}); + + @override + Widget build(BuildContext context) => Column( + children: [ + Text( + 'Skill Cards', + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith(color: Colors.white), + ), + const Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SkillCard( + gradient: const [Colors.red, Colors.orange], + icon: Icons.ac_unit_sharp, + title: 'Lorem Ipsum'.wrap(), + description: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + .wrap(), + skills: [ + TextWrapper.text('Firebase'), + TextWrapper.text( + 'Qui ipsum id ea ea nulla labore aute ullamco aute ', + ), + ], + ), + const Gap(20), + SkillCard( + gradient: const [Colors.blue, Colors.green], + icon: Icons.ac_unit_sharp, + title: 'Lorem Ipsum'.wrap(), + description: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do ' + 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' + .wrap(), + skills: [ + TextWrapper.text('Firebase'), + const TextWrapper( + 'Qui ipsum id ea ea nulla labore aute ullamco aute ', + gradient: [Colors.red, Colors.orange], + ), + TextWrapper.text('Firebase'), + TextWrapper.text('Firebase'), + TextWrapper.text('Firebase'), + TextWrapper.text('Firebase'), + TextWrapper.text('Firebase'), + ], + ), + ], + ), + const Gap(20), + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/cards.dart b/packages/wyatt_ui_kit/lib/src/components/cards/cards.dart index 29a2da59..cfd0f523 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/cards.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/cards.dart @@ -15,3 +15,6 @@ // along with this program. If not, see . export './information_card/information_card.dart'; +export './portfolio_card/portfolio_card.dart'; +export './quote_card/quote_card.dart'; +export './skill_card/skill_card.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart new file mode 100644 index 00000000..555d2e9c --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart @@ -0,0 +1,111 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart'; +import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart'; +import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; + +part 'portfolio_card.g.dart'; + +@ComponentCopyWithExtension() +class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { + const PortfolioCard({ + super.showImagesOnTop, + super.keyword, + super.description, + super.logo, + super.projectName, + super.subtitle, + super.ctas, + super.assets, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.minSize, + super.maxSize = const Size(330, double.infinity), + super.shadow, + super.background, + super.key, + }); + + @override + Widget build(BuildContext context) => CardWrapper( + background: background, + padding: padding, + backgroundColor: backgroundColor, + borderColors: borderColors, + shadow: shadow, + maxSize: maxSize, + minSize: minSize, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + if (showImagesOnTop ?? false) ...[ + if (assets != null) ...[ + PortfolioCardImages( + radius: radius, + maxSize: maxSize, + images: assets, + ), + const Gap(20), + ], + PortfolioCardDescription( + description: description, + ctas: ctas, + ), + const Gap(10), + PortfolioCardHeader( + logo: logo, + padding: padding, + radius: radius, + projectName: projectName, + subtitle: subtitle, + keyword: keyword, + ), + ] else ...[ + PortfolioCardHeader( + logo: logo, + padding: padding, + radius: radius, + projectName: projectName, + subtitle: subtitle, + keyword: keyword, + ), + const Gap(10), + if (assets != null) ...[ + PortfolioCardImages( + radius: radius, + maxSize: maxSize, + images: assets, + ), + const Gap(20), + ], + PortfolioCardDescription( + description: description, + ctas: ctas, + ), + ], + ], + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart new file mode 100644 index 00000000..fd2da3ae --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart @@ -0,0 +1,95 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'portfolio_card.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { + const $PortfolioCardCWProxyImpl(this._value); + final PortfolioCard _value; + @override + PortfolioCard showImagesOnTop(bool? showImagesOnTop) => + this(showImagesOnTop: showImagesOnTop); + @override + PortfolioCard keyword(List? keyword) => this(keyword: keyword); + @override + PortfolioCard description(TextWrapper? description) => + this(description: description); + @override + PortfolioCard logo(Widget? logo) => this(logo: logo); + @override + PortfolioCard projectName(TextWrapper? projectName) => + this(projectName: projectName); + @override + PortfolioCard subtitle(TextWrapper? subtitle) => this(subtitle: subtitle); + @override + PortfolioCard ctas(List? ctas) => this(ctas: ctas); + @override + PortfolioCard assets(List? assets) => this(assets: assets); + @override + PortfolioCard radius(double? radius) => this(radius: radius); + @override + PortfolioCard padding(double? padding) => this(padding: padding); + @override + PortfolioCard borderColors(List? borderColors) => + this(borderColors: borderColors); + @override + PortfolioCard backgroundColor(Color? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + PortfolioCard minSize(Size? minSize) => this(minSize: minSize); + @override + PortfolioCard maxSize(Size? maxSize) => this(maxSize: maxSize); + @override + PortfolioCard shadow(BoxShadow? shadow) => this(shadow: shadow); + @override + PortfolioCard background(Widget? background) => this(background: background); + @override + PortfolioCard key(Key? key) => this(key: key); + @override + PortfolioCard call({ + bool? showImagesOnTop, + List? keyword, + TextWrapper? description, + Widget? logo, + TextWrapper? projectName, + TextWrapper? subtitle, + List? ctas, + List? assets, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + Widget? background, + Key? key, + }) => + PortfolioCard( + showImagesOnTop: showImagesOnTop ?? _value.showImagesOnTop, + keyword: keyword ?? _value.keyword, + description: description ?? _value.description, + logo: logo ?? _value.logo, + projectName: projectName ?? _value.projectName, + subtitle: subtitle ?? _value.subtitle, + ctas: ctas ?? _value.ctas, + assets: assets ?? _value.assets, + radius: radius ?? _value.radius, + padding: padding ?? _value.padding, + borderColors: borderColors ?? _value.borderColors, + backgroundColor: backgroundColor ?? _value.backgroundColor, + minSize: minSize ?? _value.minSize, + maxSize: maxSize ?? _value.maxSize, + shadow: shadow ?? _value.shadow, + background: background ?? _value.background, + key: key ?? _value.key, + ); +} + +mixin $PortfolioCardCWMixin on Component { + $PortfolioCardComponentCWProxy get copyWith => + $PortfolioCardCWProxyImpl(this as PortfolioCard); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart new file mode 100644 index 00000000..26ec9ed3 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart @@ -0,0 +1,60 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; + +class PortfolioCardDescription extends StatelessWidget { + const PortfolioCardDescription({ + this.description, + this.ctas, + super.key, + }); + + final TextWrapper? description; + final List? ctas; + + @override + Widget build(BuildContext context) => Row( + children: [ + if (description != null) ...[ + Expanded( + child: Text( + description!.text, + style: description!.style ?? context.textTheme.bodyMedium, + ).toGradient( + LinearGradientHelper.fromNullableColors( + description!.gradient, + ), + ), + ), + ], + if (ctas != null) ...[ + const Gap(5), + ...ctas!.map( + (e) => Padding( + padding: const EdgeInsets.symmetric(horizontal: 5), + child: e, + ), + ), + ], + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart new file mode 100644 index 00000000..989f97b8 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart @@ -0,0 +1,99 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class PortfolioCardHeader extends StatelessWidget { + const PortfolioCardHeader({ + this.logo, + this.padding, + this.radius, + this.projectName, + this.subtitle, + this.keyword, + super.key, + }); + + final Widget? logo; + final double? padding; + final double? radius; + final TextWrapper? projectName; + final TextWrapper? subtitle; + final List? keyword; + + @override + Widget build(BuildContext context) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + if (logo != null) logo!, + const Gap(10), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (projectName != null) + Text( + projectName!.text, + style: + projectName!.style ?? context.textTheme.titleMedium, + ).toGradient( + LinearGradientHelper.fromNullableColors( + projectName!.gradient, + ), + ), + if (subtitle != null) ...[ + const Gap(5), + Text( + subtitle!.text, + style: subtitle!.style ?? context.textTheme.titleSmall, + ).toGradient( + LinearGradientHelper.fromNullableColors( + subtitle!.gradient, + ), + ), + ], + ], + ), + ], + ), + const Gap(10), + Wrap( + children: [ + if (keyword != null) + ...keyword!.map( + (e) => Container( + margin: const EdgeInsets.all(3), + padding: const EdgeInsets.all(6), + decoration: BoxDecoration( + color: Theme.of(context).focusColor, + borderRadius: BorderRadius.circular(8), + ), + child: Text( + e.text, + style: e.style ?? context.textTheme.bodySmall, + ), + ), + ), + ], + ), + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart new file mode 100644 index 00000000..d4bfab47 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart @@ -0,0 +1,57 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; + +class PortfolioCardImages extends StatelessWidget { + const PortfolioCardImages({ + this.images, + this.radius, + this.maxSize, + super.key, + }); + + final List? images; + final double? radius; + final Size? maxSize; + + @override + Widget build(BuildContext context) { + final result = []; + for (final image in images ?? List.empty()) { + result.addAll([ + Expanded( + child: ClipRRect( + borderRadius: BorderRadius.circular(radius ?? 0), + child: Container( + constraints: BoxConstraints( + maxHeight: maxSize != null ? maxSize!.width : 100, + ), + child: image, + ), + ), + ), + const Gap(25), + ]); + } + result.removeLast(); + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: result, + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart new file mode 100644 index 00000000..b134da4d --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart @@ -0,0 +1,127 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; +part 'quote_card.g.dart'; + +@ComponentCopyWithExtension() +class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { + const QuoteCard({ + super.avatar, + super.name, + super.subtitle, + super.gradient, + super.quote, + super.leftQuote, + super.rightQuote, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.minSize, + super.maxSize, + super.shadow, + super.background, + super.key, + }); + + @override + Widget build(BuildContext context) => CardWrapper( + background: background, + padding: padding, + backgroundColor: backgroundColor, + borderColors: borderColors, + shadow: shadow, + maxSize: maxSize, + minSize: minSize, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + leftQuote ?? + Align( + alignment: Alignment.topLeft, + child: GradientText( + '“', + gradient: gradient, + style: context.textTheme.titleLarge + ?.copyWith(fontWeight: FontWeight.bold), + ), + ), + if (quote != null) ...[ + Text( + quote!.text, + style: quote!.style ?? + context.textTheme.bodyMedium + ?.copyWith(fontStyle: FontStyle.italic), + ).toGradient( + LinearGradientHelper.fromNullableColors( + quote!.gradient, + ), + ) + ], + const Gap(15), + rightQuote ?? + Align( + alignment: Alignment.bottomRight, + child: GradientText( + '”', + gradient: gradient, + style: context.textTheme.titleLarge + ?.copyWith(fontWeight: FontWeight.bold), + ), + ), + Row( + children: [ + if (avatar != null) ...[ + avatar!, + const Gap(25), + ], + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (name != null) ...[ + Text( + name!.text, + style: name!.style ?? context.textTheme.titleMedium, + ).toGradient( + LinearGradientHelper.fromNullableColors( + name!.gradient, + ), + ), + ], + if (subtitle != null) ...[ + const Gap(5), + Text( + subtitle!.text, + style: subtitle!.style ?? context.textTheme.titleMedium, + ).toGradient(gradient), + ], + ], + ) + ], + ), + ], + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart new file mode 100644 index 00000000..42a1ac16 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart @@ -0,0 +1,88 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'quote_card.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $QuoteCardCWProxyImpl implements $QuoteCardComponentCWProxy { + const $QuoteCardCWProxyImpl(this._value); + final QuoteCard _value; + @override + QuoteCard avatar(Widget? avatar) => this(avatar: avatar); + @override + QuoteCard name(TextWrapper? name) => this(name: name); + @override + QuoteCard subtitle(TextWrapper? subtitle) => this(subtitle: subtitle); + @override + QuoteCard gradient(Gradient? gradient) => this(gradient: gradient); + @override + QuoteCard quote(TextWrapper? quote) => this(quote: quote); + @override + QuoteCard leftQuote(Widget? leftQuote) => this(leftQuote: leftQuote); + @override + QuoteCard rightQuote(Widget? rightQuote) => this(rightQuote: rightQuote); + @override + QuoteCard radius(double? radius) => this(radius: radius); + @override + QuoteCard padding(double? padding) => this(padding: padding); + @override + QuoteCard borderColors(List? borderColors) => + this(borderColors: borderColors); + @override + QuoteCard backgroundColor(Color? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + QuoteCard minSize(Size? minSize) => this(minSize: minSize); + @override + QuoteCard maxSize(Size? maxSize) => this(maxSize: maxSize); + @override + QuoteCard shadow(BoxShadow? shadow) => this(shadow: shadow); + @override + QuoteCard background(Widget? background) => this(background: background); + @override + QuoteCard key(Key? key) => this(key: key); + @override + QuoteCard call({ + Widget? avatar, + TextWrapper? name, + TextWrapper? subtitle, + Gradient? gradient, + TextWrapper? quote, + Widget? leftQuote, + Widget? rightQuote, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + Widget? background, + Key? key, + }) => + QuoteCard( + avatar: avatar ?? _value.avatar, + name: name ?? _value.name, + subtitle: subtitle ?? _value.subtitle, + gradient: gradient ?? _value.gradient, + quote: quote ?? _value.quote, + leftQuote: leftQuote ?? _value.leftQuote, + rightQuote: rightQuote ?? _value.rightQuote, + radius: radius ?? _value.radius, + padding: padding ?? _value.padding, + borderColors: borderColors ?? _value.borderColors, + backgroundColor: backgroundColor ?? _value.backgroundColor, + minSize: minSize ?? _value.minSize, + maxSize: maxSize ?? _value.maxSize, + shadow: shadow ?? _value.shadow, + background: background ?? _value.background, + key: key ?? _value.key, + ); +} + +mixin $QuoteCardCWMixin on Component { + $QuoteCardComponentCWProxy get copyWith => + $QuoteCardCWProxyImpl(this as QuoteCard); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart new file mode 100644 index 00000000..e741e4d3 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart @@ -0,0 +1,85 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_header.dart'; +import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_skills.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; +part 'skill_card.g.dart'; + +@ComponentCopyWithExtension() +class SkillCard extends SkillCardComponent with $SkillCardCWMixin { + const SkillCard({ + super.icon, + super.gradient, + super.title, + super.description, + super.skills, + super.leadingIcon, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.minSize, + super.maxSize = const Size(330, double.infinity), + super.shadow, + super.background, + super.key, + }); + + @override + Widget build(BuildContext context) => CardWrapper( + background: background, + padding: padding, + backgroundColor: backgroundColor, + borderColors: borderColors, + shadow: shadow, + maxSize: maxSize, + minSize: minSize, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SkillCardHeader( + icon: icon, + title: title, + gradient: gradient, + ), + const Gap(25), + if (description != null) ...[ + Text( + description!.text, + style: description!.style ?? context.textTheme.bodyMedium, + ).toGradient( + LinearGradientHelper.fromNullableColors(description!.gradient), + ), + const Gap(25), + ], + if (skills != null) + SkillCardSkills( + gradient: gradient, + skills: skills, + leadingIcon: leadingIcon, + ), + ], + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart new file mode 100644 index 00000000..42f8200f --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart @@ -0,0 +1,86 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'skill_card.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { + const $SkillCardCWProxyImpl(this._value); + final SkillCard _value; + @override + SkillCard icon(IconData? icon) => this(icon: icon); + @override + SkillCard gradient(List? gradient) => this(gradient: gradient); + @override + SkillCard title(TextWrapper? title) => this(title: title); + @override + SkillCard description(TextWrapper? description) => + this(description: description); + @override + SkillCard skills(List? skills) => this(skills: skills); + @override + SkillCard leadingIcon(IconData? leadingIcon) => + this(leadingIcon: leadingIcon); + @override + SkillCard radius(double? radius) => this(radius: radius); + @override + SkillCard padding(double? padding) => this(padding: padding); + @override + SkillCard borderColors(List? borderColors) => + this(borderColors: borderColors); + @override + SkillCard backgroundColor(Color? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + SkillCard minSize(Size? minSize) => this(minSize: minSize); + @override + SkillCard maxSize(Size? maxSize) => this(maxSize: maxSize); + @override + SkillCard shadow(BoxShadow? shadow) => this(shadow: shadow); + @override + SkillCard background(Widget? background) => this(background: background); + @override + SkillCard key(Key? key) => this(key: key); + @override + SkillCard call({ + IconData? icon, + List? gradient, + TextWrapper? title, + TextWrapper? description, + List? skills, + IconData? leadingIcon, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + Size? minSize, + Size? maxSize, + BoxShadow? shadow, + Widget? background, + Key? key, + }) => + SkillCard( + icon: icon ?? _value.icon, + gradient: gradient ?? _value.gradient, + title: title ?? _value.title, + description: description ?? _value.description, + skills: skills ?? _value.skills, + leadingIcon: leadingIcon ?? _value.leadingIcon, + radius: radius ?? _value.radius, + padding: padding ?? _value.padding, + borderColors: borderColors ?? _value.borderColors, + backgroundColor: backgroundColor ?? _value.backgroundColor, + minSize: minSize ?? _value.minSize, + maxSize: maxSize ?? _value.maxSize, + shadow: shadow ?? _value.shadow, + background: background ?? _value.background, + key: key ?? _value.key, + ); +} + +mixin $SkillCardCWMixin on Component { + $SkillCardComponentCWProxy get copyWith => + $SkillCardCWProxyImpl(this as SkillCard); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart new file mode 100644 index 00000000..5aa7f85d --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart @@ -0,0 +1,65 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +class SkillCardHeader extends StatelessWidget { + const SkillCardHeader({super.key, this.icon, this.title, this.gradient}); + + final IconData? icon; + final TextWrapper? title; + final List? gradient; + + @override + Widget build(BuildContext context) => Column( + children: [ + if (icon != null) ...[ + if (gradient != null) + GradientIcon( + icon, + size: 60, + gradient: LinearGradient(colors: gradient!), + ) + else + Icon( + icon, + size: 60, + ), + const Gap(25), + Column( + children: [ + if (title != null) ...[ + Text( + title!.text, + style: title!.style ?? context.textTheme.titleLarge, + ).toGradient( + LinearGradientHelper.fromNullableColors( + title!.gradient, + ), + ), + ], + ], + ) + ], + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart new file mode 100644 index 00000000..43dca88d --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart @@ -0,0 +1,62 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +class SkillCardSkills extends StatelessWidget { + const SkillCardSkills({ + super.key, + this.skills, + this.leadingIcon, + this.gradient, + }); + + final List? skills; + final IconData? leadingIcon; + final List? gradient; + + @override + Widget build(BuildContext context) => Column( + children: skills! + .map( + (e) => Row( + children: [ + Icon( + leadingIcon ?? Icons.check, + ).toGradient( + LinearGradientHelper.fromNullableColors(gradient), + ), + const Gap(10), + Expanded( + child: Text( + e.text, + style: e.style ?? context.textTheme.bodyMedium, + ).toGradient( + LinearGradientHelper.fromNullableColors(e.gradient), + ), + ), + ], + ), + ) + .toList(), + ); +} -- 2.47.2 From b9f2305bcaa2d6503979e37eb9480435703aba2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 10 Feb 2023 16:17:35 +0100 Subject: [PATCH 088/320] build(ui_kit): add firebase config --- .../.firebase/hosting.YnVpbGQvd2Vi.cache | 23 +++++++++++++++++++ packages/wyatt_ui_kit/example/.firebaserc | 5 ++++ packages/wyatt_ui_kit/example/firebase.json | 16 +++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache create mode 100644 packages/wyatt_ui_kit/example/.firebaserc create mode 100644 packages/wyatt_ui_kit/example/firebase.json diff --git a/packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache b/packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache new file mode 100644 index 00000000..1227eb9e --- /dev/null +++ b/packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache @@ -0,0 +1,23 @@ +favicon.png,1676023875089,fcc7c4545d5b62ad01682589e6fdc7ea03d0a3b42069963c815c344b632eb5cf +index.html,1676041684266,0fd6ccd949f454e500529a27bb2d55749d6423c66ae8a1b89afc3c0a655f8f97 +manifest.json,1676023875090,f81e4554dc7f05633a2c5597416813859de5ace688342db41b201d42790fb8a7 +flutter_service_worker.js,1676041684918,6f9c4bb6dcb6399150546a5538ce4309bebd9137fdb0696fe9f722ba8dec81fe +version.json,1676041684102,9c84a8403d1b717c8b8bc4fc94b678b24577bf9aa2c7d5a8e3a774b5cb5a58a8 +assets/AssetManifest.json,1676041684256,58d7955b4c7122d0a88a5708e3005d65fe0b26cda6b181f10662f0012087aaee +assets/FontManifest.json,1676041684256,2a26cf55926df210ccb9d713372cb114e0a12bf97104f6833e382566e2e7b16e +flutter.js,1676041651769,10d651e2b2f8663d635c78a0d60cfed033bd6de8da34c397123e8657f4b21818 +assets/assets/asset_1.png,1676035298473,bf38b9806c10cb6c7f516a7be9f9ae7bc775c98289f48c6f53e4171dfe4e8f17 +assets/assets/logo.png,1676035298474,10b8f343fb0958fe1daeb840d411cf265e3f5292176136f05910c9ae66bf0a1b +icons/Icon-192.png,1676023875089,d2e0131bb7851eb9d98f7885edb5ae4b4d6b7a6c7addf8a25b9b712b39274c0f +icons/Icon-maskable-192.png,1676023875089,dd96c123fdf6817cdf7e63d9693bcc246bac2e3782a41a6952fa41c0617c5573 +icons/Icon-512.png,1676023875089,7a31ce91e554f1941158ca46f31c7f3f2b7c8c129229ea74a8fae1affe335033 +icons/Icon-maskable-512.png,1676023875090,e7983524dc70254adc61764657d7e03d19284de8da586b5818d737bc08c6d14e +canvaskit/canvaskit.js,315442800000,a9eb298d6bf9ad5c7bb9bbd7a9926adfbcc648b1fc5978af85745cf82c968494 +canvaskit/profiling/canvaskit.js,315442800000,f42d5602540c97cc3b4ace66bcb0d4f2be63575377bd9ad89ef10776239d2e5f +assets/NOTICES,1676041684257,fe781a1cc52156e93fabb6380a214182795a65b414578bb5e44bbe40459664e6 +assets/assets/mockup_2.png,1676035298496,8de1b66a3a13a4849807ae0aa20b4372a2129c7998b96c5e21b29d392c82d924 +assets/assets/mockup_1.png,1676035298486,1c6652f553c5e01f08132e4cf2ca3819b12ac23071b846157565a4780461def1 +assets/fonts/MaterialIcons-Regular.otf,1662536616000,3a631b0761788d7cf2a71e8732a5b31288d6e7aa996c671c70d53a251bbd3848 +main.dart.js,1676041683229,254d5a03651e9140335471eced31f927060bb4e05a451229e649f37ce11b841a +canvaskit/canvaskit.wasm,315442800000,a39dc674e896bd4a546c91ca1572a1f76246b44c57bb304d331a6f45a12ec794 +canvaskit/profiling/canvaskit.wasm,315442800000,4439ff919256b3828692aad8ca3468f712c87f59b84766c18526493b1f09b794 diff --git a/packages/wyatt_ui_kit/example/.firebaserc b/packages/wyatt_ui_kit/example/.firebaserc new file mode 100644 index 00000000..c5fa1ddd --- /dev/null +++ b/packages/wyatt_ui_kit/example/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "studio-landpage" + } +} diff --git a/packages/wyatt_ui_kit/example/firebase.json b/packages/wyatt_ui_kit/example/firebase.json new file mode 100644 index 00000000..66037326 --- /dev/null +++ b/packages/wyatt_ui_kit/example/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "build/web", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} -- 2.47.2 From ea18d39c44fb4a11f6ea86ad57973f7d2939460b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 10 Feb 2023 16:23:08 +0100 Subject: [PATCH 089/320] style(ui_kit): remove cache files --- .../.firebase/hosting.YnVpbGQvd2Vi.cache | 23 ------------------- packages/wyatt_ui_kit/example/.gitignore | 3 +++ 2 files changed, 3 insertions(+), 23 deletions(-) delete mode 100644 packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache diff --git a/packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache b/packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache deleted file mode 100644 index 1227eb9e..00000000 --- a/packages/wyatt_ui_kit/example/.firebase/hosting.YnVpbGQvd2Vi.cache +++ /dev/null @@ -1,23 +0,0 @@ -favicon.png,1676023875089,fcc7c4545d5b62ad01682589e6fdc7ea03d0a3b42069963c815c344b632eb5cf -index.html,1676041684266,0fd6ccd949f454e500529a27bb2d55749d6423c66ae8a1b89afc3c0a655f8f97 -manifest.json,1676023875090,f81e4554dc7f05633a2c5597416813859de5ace688342db41b201d42790fb8a7 -flutter_service_worker.js,1676041684918,6f9c4bb6dcb6399150546a5538ce4309bebd9137fdb0696fe9f722ba8dec81fe -version.json,1676041684102,9c84a8403d1b717c8b8bc4fc94b678b24577bf9aa2c7d5a8e3a774b5cb5a58a8 -assets/AssetManifest.json,1676041684256,58d7955b4c7122d0a88a5708e3005d65fe0b26cda6b181f10662f0012087aaee -assets/FontManifest.json,1676041684256,2a26cf55926df210ccb9d713372cb114e0a12bf97104f6833e382566e2e7b16e -flutter.js,1676041651769,10d651e2b2f8663d635c78a0d60cfed033bd6de8da34c397123e8657f4b21818 -assets/assets/asset_1.png,1676035298473,bf38b9806c10cb6c7f516a7be9f9ae7bc775c98289f48c6f53e4171dfe4e8f17 -assets/assets/logo.png,1676035298474,10b8f343fb0958fe1daeb840d411cf265e3f5292176136f05910c9ae66bf0a1b -icons/Icon-192.png,1676023875089,d2e0131bb7851eb9d98f7885edb5ae4b4d6b7a6c7addf8a25b9b712b39274c0f -icons/Icon-maskable-192.png,1676023875089,dd96c123fdf6817cdf7e63d9693bcc246bac2e3782a41a6952fa41c0617c5573 -icons/Icon-512.png,1676023875089,7a31ce91e554f1941158ca46f31c7f3f2b7c8c129229ea74a8fae1affe335033 -icons/Icon-maskable-512.png,1676023875090,e7983524dc70254adc61764657d7e03d19284de8da586b5818d737bc08c6d14e -canvaskit/canvaskit.js,315442800000,a9eb298d6bf9ad5c7bb9bbd7a9926adfbcc648b1fc5978af85745cf82c968494 -canvaskit/profiling/canvaskit.js,315442800000,f42d5602540c97cc3b4ace66bcb0d4f2be63575377bd9ad89ef10776239d2e5f -assets/NOTICES,1676041684257,fe781a1cc52156e93fabb6380a214182795a65b414578bb5e44bbe40459664e6 -assets/assets/mockup_2.png,1676035298496,8de1b66a3a13a4849807ae0aa20b4372a2129c7998b96c5e21b29d392c82d924 -assets/assets/mockup_1.png,1676035298486,1c6652f553c5e01f08132e4cf2ca3819b12ac23071b846157565a4780461def1 -assets/fonts/MaterialIcons-Regular.otf,1662536616000,3a631b0761788d7cf2a71e8732a5b31288d6e7aa996c671c70d53a251bbd3848 -main.dart.js,1676041683229,254d5a03651e9140335471eced31f927060bb4e05a451229e649f37ce11b841a -canvaskit/canvaskit.wasm,315442800000,a39dc674e896bd4a546c91ca1572a1f76246b44c57bb304d331a6f45a12ec794 -canvaskit/profiling/canvaskit.wasm,315442800000,4439ff919256b3828692aad8ca3468f712c87f59b84766c18526493b1f09b794 diff --git a/packages/wyatt_ui_kit/example/.gitignore b/packages/wyatt_ui_kit/example/.gitignore index 24476c5d..08535692 100644 --- a/packages/wyatt_ui_kit/example/.gitignore +++ b/packages/wyatt_ui_kit/example/.gitignore @@ -32,6 +32,9 @@ migrate_working_dir/ .pub/ /build/ +# Firebase +.firebase/ + # Symbolication related app.*.symbols -- 2.47.2 From 4b37175d1721e3e8689d9818350e32c564a98bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 14 Feb 2023 11:34:45 +0100 Subject: [PATCH 090/320] feat(ui_kit): add card theme extension, fix bugs & update example (close #126) --- .../domain/entities/cards/card_component.dart | 4 +- .../cards/information_card_component.dart | 2 +- .../cards/information_card_component.g.dart | 4 +- .../cards/portfolio_card_component.dart | 4 +- .../cards/portfolio_card_component.g.dart | 7 +- .../entities/cards/quote_card_component.dart | 2 +- .../cards/quote_card_component.g.dart | 4 +- .../entities/cards/skill_card_component.dart | 4 +- .../cards/skill_card_component.g.dart | 7 +- .../wyatt_ui_kit/example/lib/cards/cards.dart | 5 +- .../information_card/information_cards.dart | 11 +- .../cards/portfolio_card/portfolio_cards.dart | 71 +++++---- .../lib/cards/quote_card/quote_cards.dart | 6 +- .../lib/cards/skill_card/skill_cards.dart | 6 +- packages/wyatt_ui_kit/example/lib/home.dart | 39 +++++ packages/wyatt_ui_kit/example/lib/main.dart | 121 ++++++++++++--- .../example/lib/theme_extension.dart | 54 +++++++ .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 4 + packages/wyatt_ui_kit/example/macos/Podfile | 40 +++++ .../wyatt_ui_kit/example/macos/Podfile.lock | 23 +++ .../macos/Runner.xcodeproj/project.pbxproj | 62 +++++++- .../contents.xcworkspacedata | 3 + packages/wyatt_ui_kit/example/pubspec.yaml | 2 + .../information_card/information_card.dart | 20 +-- .../information_card/information_card.g.dart | 8 +- .../information_card_horizontal_header.dart | 6 +- .../widgets/information_card_titles.dart | 20 ++- .../cards/portfolio_card/portfolio_card.dart | 29 ++-- .../portfolio_card/portfolio_card.g.dart | 14 +- .../widgets/portfolio_card_description.dart | 60 -------- .../widgets/portfolio_card_header.dart | 44 ++---- .../cards/quote_card/quote_card.dart | 61 ++++---- .../cards/quote_card/quote_card.g.dart | 8 +- .../cards/skill_card/skill_card.dart | 19 +-- .../cards/skill_card/skill_card.g.dart | 14 +- .../skill_card/widgets/skill_card_header.dart | 53 ++++--- .../skill_card/widgets/skill_card_skills.dart | 11 +- .../components/cards/widgets/card_text.dart | 66 +++++++++ .../cards/widgets/card_wrapper.dart | 140 ++++++++++++++---- .../gradients/gradient_box_border.dart | 2 +- .../lib/src/domain/card_theme_extension.dart | 40 +++++ packages/wyatt_ui_kit/lib/src/src.dart | 1 + 44 files changed, 775 insertions(+), 328 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/home.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme_extension.dart create mode 100644 packages/wyatt_ui_kit/example/macos/Podfile create mode 100644 packages/wyatt_ui_kit/example/macos/Podfile.lock delete mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart index abb87bca..bafc5c9a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart @@ -22,7 +22,7 @@ abstract class CardComponent extends Component { this.radius = 12, this.padding = 25, this.borderColors, - this.backgroundColor, + this.backgroundColors, this.minSize = const Size(330, 230), this.maxSize = const Size(330, 530), this.shadow = const BoxShadow( @@ -44,7 +44,7 @@ abstract class CardComponent extends Component { final List? borderColors; /// Card background color - final Color? backgroundColor; + final List? backgroundColors; /// Minimum size for this card final Size? minSize; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart index 611586b5..374650fd 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart @@ -33,7 +33,7 @@ abstract class InformationCardComponent extends CardComponent super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, super.minSize, super.maxSize, super.shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart index b4387287..4802eb9e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart @@ -15,7 +15,7 @@ abstract class $InformationCardComponentCWProxy { InformationCardComponent radius(double? radius); InformationCardComponent padding(double? padding); InformationCardComponent borderColors(List? borderColors); - InformationCardComponent backgroundColor(Color? backgroundColor); + InformationCardComponent backgroundColors(List? backgroundColors); InformationCardComponent minSize(Size? minSize); InformationCardComponent maxSize(Size? maxSize); InformationCardComponent shadow(BoxShadow? shadow); @@ -30,7 +30,7 @@ abstract class $InformationCardComponentCWProxy { double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart index 3896ad42..f0132bd9 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart @@ -25,6 +25,7 @@ part 'portfolio_card_component.g.dart'; abstract class PortfolioCardComponent extends CardComponent with CopyWithMixin<$PortfolioCardComponentCWProxy> { const PortfolioCardComponent({ + this.secondaryBackgroundColors, this.showImagesOnTop, this.keyword, this.description, @@ -36,7 +37,7 @@ abstract class PortfolioCardComponent extends CardComponent super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, super.minSize, super.maxSize, super.shadow, @@ -52,4 +53,5 @@ abstract class PortfolioCardComponent extends CardComponent final TextWrapper? projectName; final TextWrapper? subtitle; final List? ctas; + final Color? secondaryBackgroundColors; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart index 2a40871a..a21bd6bc 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart @@ -7,6 +7,8 @@ part of 'portfolio_card_component.dart'; // ************************************************************************** abstract class $PortfolioCardComponentCWProxy { + PortfolioCardComponent secondaryBackgroundColors( + Color? secondaryBackgroundColors); PortfolioCardComponent showImagesOnTop(bool? showImagesOnTop); PortfolioCardComponent keyword(List? keyword); PortfolioCardComponent description(TextWrapper? description); @@ -18,13 +20,14 @@ abstract class $PortfolioCardComponentCWProxy { PortfolioCardComponent radius(double? radius); PortfolioCardComponent padding(double? padding); PortfolioCardComponent borderColors(List? borderColors); - PortfolioCardComponent backgroundColor(Color? backgroundColor); + PortfolioCardComponent backgroundColors(List? backgroundColors); PortfolioCardComponent minSize(Size? minSize); PortfolioCardComponent maxSize(Size? maxSize); PortfolioCardComponent shadow(BoxShadow? shadow); PortfolioCardComponent background(Widget? background); PortfolioCardComponent key(Key? key); PortfolioCardComponent call({ + Color? secondaryBackgroundColors, bool? showImagesOnTop, List? keyword, TextWrapper? description, @@ -36,7 +39,7 @@ abstract class $PortfolioCardComponentCWProxy { double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart index d6ea327c..9f76241d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -35,7 +35,7 @@ abstract class QuoteCardComponent extends CardComponent super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, super.minSize, super.maxSize, super.shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart index 12dcf876..0ce84883 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart @@ -17,7 +17,7 @@ abstract class $QuoteCardComponentCWProxy { QuoteCardComponent radius(double? radius); QuoteCardComponent padding(double? padding); QuoteCardComponent borderColors(List? borderColors); - QuoteCardComponent backgroundColor(Color? backgroundColor); + QuoteCardComponent backgroundColors(List? backgroundColors); QuoteCardComponent minSize(Size? minSize); QuoteCardComponent maxSize(Size? maxSize); QuoteCardComponent shadow(BoxShadow? shadow); @@ -34,7 +34,7 @@ abstract class $QuoteCardComponentCWProxy { double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart index 2a04a30b..5f42b430 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart @@ -31,10 +31,11 @@ abstract class SkillCardComponent extends CardComponent this.description, this.skills, this.leadingIcon, + this.secondaryBackgroundColors, super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, super.minSize, super.maxSize, super.shadow, @@ -48,4 +49,5 @@ abstract class SkillCardComponent extends CardComponent final TextWrapper? description; final List? skills; final IconData? leadingIcon; + final Color? secondaryBackgroundColors; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart index 525b8bd7..b6ac4c3a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart @@ -16,11 +16,13 @@ abstract class $SkillCardComponentCWProxy { SkillCardComponent radius(double? radius); SkillCardComponent padding(double? padding); SkillCardComponent borderColors(List? borderColors); - SkillCardComponent backgroundColor(Color? backgroundColor); + SkillCardComponent backgroundColors(List? backgroundColors); SkillCardComponent minSize(Size? minSize); SkillCardComponent maxSize(Size? maxSize); SkillCardComponent shadow(BoxShadow? shadow); SkillCardComponent background(Widget? background); + SkillCardComponent secondaryBackgroundColors( + Color? secondaryBackgroundColors); SkillCardComponent key(Key? key); SkillCardComponent call({ IconData? icon, @@ -32,11 +34,12 @@ abstract class $SkillCardComponentCWProxy { double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, Widget? background, + Color? secondaryBackgroundColors, Key? key, }); } diff --git a/packages/wyatt_ui_kit/example/lib/cards/cards.dart b/packages/wyatt_ui_kit/example/lib/cards/cards.dart index 26076328..c0a4fe7d 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/cards.dart @@ -13,10 +13,7 @@ class Cards extends StatelessWidget { children: [ Text( 'Cards', - style: Theme.of(context) - .textTheme - .titleLarge! - .copyWith(color: Colors.white), + style: Theme.of(context).textTheme.titleLarge, ), const Gap(20), const InformationCards(), diff --git a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart index ee0d4b24..e390b787 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart @@ -11,13 +11,11 @@ class InformationCards extends StatelessWidget { children: [ Text( 'Information Cards', - style: Theme.of(context) - .textTheme - .titleMedium! - .copyWith(color: Colors.white), + style: Theme.of(context).textTheme.titleMedium, ), const Gap(20), Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ InformationCard( @@ -80,6 +78,7 @@ class InformationCards extends StatelessWidget { ), const Gap(20), Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ InformationCard( @@ -126,9 +125,9 @@ class InformationCards extends StatelessWidget { axis: Axis.horizontal, title: TextWrapper.text('Flutter'), subtitle: 'One single code base.'.wrap( - gradient: [Colors.blue, Colors.green], + // gradient: [Colors.blue, Colors.green], style: const TextStyle( - fontWeight: FontWeight.w500, + fontWeight: FontWeight.bold, ), ), body: TextWrapper.text( diff --git a/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart index fda19baf..1e36df0b 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart @@ -12,31 +12,29 @@ class PortfolioCards extends StatelessWidget { children: [ Text( 'Portfolio Cards', - style: Theme.of(context) - .textTheme - .titleMedium! - .copyWith(color: Colors.white), + style: Theme.of(context).textTheme.titleMedium, ), const Gap(20), Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ PortfolioCard( logo: const FlutterLogo( size: 50, ), - projectName: const TextWrapper('Flutter Project.'), + projectName: const TextWrapper('Flutter'), subtitle: const TextWrapper('Mobile / Web / Macos.'), - description: const TextWrapper('Developpement de 8 mois.'), + description: const TextWrapper( + 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do '), ctas: [ CupertinoButton( - color: Colors.grey.withOpacity(0.3), - padding: EdgeInsets.zero, + color: Theme.of(context).primaryColor, onPressed: () {}, - child: const Icon( - Icons.settings, - color: Colors.grey, - ), + child: const Text('En savoir plus >'), ), ], assets: [ @@ -58,18 +56,18 @@ class PortfolioCards extends StatelessWidget { logo: const FlutterLogo( size: 50, ), - projectName: const TextWrapper('Flutter Project.'), + projectName: const TextWrapper('Flutter'), subtitle: const TextWrapper('Mobile / Web / Macos.'), - description: const TextWrapper('Developpement de 8 mois.'), + description: const TextWrapper( + 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do '), ctas: [ CupertinoButton( - color: Colors.grey.withOpacity(0.3), - padding: EdgeInsets.zero, + color: Theme.of(context).primaryColor, onPressed: () {}, - child: const Icon( - Icons.settings, - color: Colors.grey, - ), + child: const Text('En savoir plus >'), ), ], assets: [ @@ -84,24 +82,25 @@ class PortfolioCards extends StatelessWidget { ), const Gap(20), Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ PortfolioCard( logo: const FlutterLogo( size: 50, ), - projectName: const TextWrapper('Flutter Project.'), + projectName: const TextWrapper('Flutter'), subtitle: const TextWrapper('Mobile / Web / Macos.'), - description: const TextWrapper('Developpement de 8 mois.'), + description: const TextWrapper( + 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do '), ctas: [ CupertinoButton( - color: Colors.grey.withOpacity(0.3), - padding: EdgeInsets.zero, + color: Theme.of(context).primaryColor, onPressed: () {}, - child: const Icon( - Icons.settings, - color: Colors.grey, - ), + child: const Text('En savoir plus >'), ), ], assets: [ @@ -128,23 +127,23 @@ class PortfolioCards extends StatelessWidget { size: 50, ), projectName: const TextWrapper( - 'Flutter Project.', + 'Flutter', gradient: [ Colors.blue, Colors.green, ], ), subtitle: const TextWrapper('Mobile / Web / Macos.'), - description: const TextWrapper('Developpement de 8 mois.'), + description: const TextWrapper( + 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' + 'Qui ipsum id ea ea nulla labore aute ullamco aute ' + 'quis elit ut amet velit. Incididunt fugiat proident ' + 'proident deserunt tempor Lorem cillum qui do '), ctas: [ CupertinoButton( - color: Colors.grey.withOpacity(0.3), - padding: EdgeInsets.zero, + color: Theme.of(context).primaryColor, onPressed: () {}, - child: const Icon( - Icons.settings, - color: Colors.grey, - ), + child: const Text('En savoir plus >'), ), ], assets: [ diff --git a/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart index 54703bce..91e52dd0 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart @@ -27,13 +27,11 @@ class QuoteCards extends StatelessWidget { children: [ Text( 'Quote Cards', - style: Theme.of(context) - .textTheme - .titleMedium! - .copyWith(color: Colors.white), + style: Theme.of(context).textTheme.titleMedium, ), const Gap(20), Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ QuoteCard( diff --git a/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart index 288ee37d..54dafd90 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart @@ -27,13 +27,11 @@ class SkillCards extends StatelessWidget { children: [ Text( 'Skill Cards', - style: Theme.of(context) - .textTheme - .titleMedium! - .copyWith(color: Colors.white), + style: Theme.of(context).textTheme.titleMedium, ), const Gap(20), Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ SkillCard( diff --git a/packages/wyatt_ui_kit/example/lib/home.dart b/packages/wyatt_ui_kit/example/lib/home.dart new file mode 100644 index 00000000..2d2d7c20 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/home.dart @@ -0,0 +1,39 @@ +import 'package:adaptive_theme/adaptive_theme.dart'; +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit_example/cards/cards.dart'; + +const String title = 'Wyatt Ui Kit Example'; + +class Home extends StatefulWidget { + const Home({super.key}); + + @override + State createState() => _HomeState(); +} + +class _HomeState extends State { + @override + Widget build(BuildContext context) => Scaffold( + drawer: const Drawer(), + appBar: AppBar( + title: const Text(title), + actions: [ + Switch.adaptive( + value: AdaptiveTheme.of(context).isDefault, + onChanged: (_) { + AdaptiveTheme.of(context).isDefault + ? AdaptiveTheme.of(context).setDark() + : AdaptiveTheme.of(context).setLight(); + }, + ) + ], + ), + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: ListView( + shrinkWrap: true, + children: const [Cards()], + ), + ), + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/main.dart b/packages/wyatt_ui_kit/example/lib/main.dart index b4a6308f..70f24dac 100644 --- a/packages/wyatt_ui_kit/example/lib/main.dart +++ b/packages/wyatt_ui_kit/example/lib/main.dart @@ -14,10 +14,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/cupertino.dart'; +import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:wyatt_ui_kit_example/cards/cards.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_kit_example/home.dart'; +import 'package:wyatt_ui_kit_example/theme_extension.dart'; void main(List args) { runApp(const App()); @@ -29,30 +31,101 @@ class App extends StatelessWidget { static const String title = 'Wyatt Ui Kit Example'; @override - Widget build(BuildContext context) => CupertinoApp( - localizationsDelegates: const [ - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], - theme: const CupertinoThemeData( - primaryColor: Colors.blue, - ), - supportedLocales: const [ - Locale('fr', ''), - ], - title: title, - home: CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text(title), - ), - child: Padding( - padding: const EdgeInsets.all(8), - child: ListView( - shrinkWrap: true, - children: const [Cards()], + Widget build(BuildContext context) => AdaptiveTheme( + initial: AdaptiveThemeMode.light, + light: ThemeData.light().copyWith( + appBarTheme: AppBarTheme( + foregroundColor: const Color.fromRGBO(36, 38, 42, 1), + backgroundColor: Colors.white, + titleTextStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: const Color.fromRGBO(36, 38, 42, 1), ), ), + scaffoldBackgroundColor: Colors.white, + extensions: >[ + CustomCardColorExtension( + backgroundColors: const [ + Color.fromRGBO(246, 246, 246, 1), + ], + secondaryBackgroundColors: Colors.white, + borderColor: const [ + Color.fromRGBO(221, 224, 227, 1), + Color.fromRGBO(202, 204, 212, 1), + ], + title: GoogleFonts.montserrat( + fontSize: 24, + fontWeight: FontWeight.w500, + color: const Color.fromRGBO(36, 38, 42, 1), + ), + subtitle: GoogleFonts.montserrat( + fontSize: 15, + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(36, 38, 42, 1), + ), + body: GoogleFonts.montserrat( + fontSize: 12, + fontWeight: FontWeight.w300, + height: 1.7, + color: const Color.fromRGBO(36, 38, 42, 1), + ), + ), + ], + ), + dark: ThemeData.dark().copyWith( + appBarTheme: AppBarTheme( + foregroundColor: Colors.white, + backgroundColor: const Color.fromRGBO(56, 60, 64, 1), + titleTextStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + ), + scaffoldBackgroundColor: const Color.fromRGBO(56, 60, 64, 1), + extensions: >[ + CustomCardColorExtension( + secondaryBackgroundColors: Colors.white.withOpacity(0.04), + backgroundColors: [ + Colors.white.withOpacity(0.04), + ], + borderColor: const [ + Color.fromRGBO(96, 101, 106, 1), + Color.fromRGBO(56, 60, 64, 1), + ], + title: GoogleFonts.montserrat( + fontSize: 24, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + subtitle: GoogleFonts.montserrat( + fontSize: 15, + fontWeight: FontWeight.w300, + color: Colors.white, + ), + body: GoogleFonts.montserrat( + fontSize: 12, + fontWeight: FontWeight.w300, + height: 1.7, + color: Colors.white, + ), + ), + ], + ), + builder: (light, dark) => MaterialApp( + localizationsDelegates: const [ + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + theme: light, + darkTheme: dark, + supportedLocales: const [ + Locale('fr', ''), + ], + title: title, + home: const Home(), ), ); } diff --git a/packages/wyatt_ui_kit/example/lib/theme_extension.dart b/packages/wyatt_ui_kit/example/lib/theme_extension.dart new file mode 100644 index 00000000..92abc0fb --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme_extension.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart' as ui_kit; + +class CustomCardColorExtension extends ui_kit.CardThemeExtension { + const CustomCardColorExtension({ + super.backgroundColors, + super.secondaryBackgroundColors, + super.borderColor, + super.shadowColor, + super.body, + super.title, + super.subtitle, + }); + + @override + CustomCardColorExtension copyWith({ + List? backgroundColors, + Color? secondaryBackgroundColors, + List? borderColor, + BoxShadow? shadowColor, + TextStyle? body, + TextStyle? title, + TextStyle? subtitle, + }) => + CustomCardColorExtension( + backgroundColors: backgroundColors ?? this.backgroundColors, + secondaryBackgroundColors: + secondaryBackgroundColors ?? this.secondaryBackgroundColors, + borderColor: borderColor ?? this.borderColor, + body: body ?? this.body, + title: title ?? this.title, + subtitle: subtitle ?? this.subtitle, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! CustomCardColorExtension) { + return this; + } + return CustomCardColorExtension( + secondaryBackgroundColors: Color.lerp( + secondaryBackgroundColors, + other.secondaryBackgroundColors, + t, + ), + body: TextStyle.lerp(body, other.body, t), + title: TextStyle.lerp(title, other.title, t), + subtitle: TextStyle.lerp(subtitle, other.subtitle, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b6..4b81f9b2 100644 --- a/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig index c2efd0b6..5caa9d15 100644 --- a/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig +++ b/packages/wyatt_ui_kit/example/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817a..b8e2b22f 100644 --- a/packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/packages/wyatt_ui_kit/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,10 @@ import FlutterMacOS import Foundation +import path_provider_foundation +import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) } diff --git a/packages/wyatt_ui_kit/example/macos/Podfile b/packages/wyatt_ui_kit/example/macos/Podfile new file mode 100644 index 00000000..049abe29 --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Podfile @@ -0,0 +1,40 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/packages/wyatt_ui_kit/example/macos/Podfile.lock b/packages/wyatt_ui_kit/example/macos/Podfile.lock new file mode 100644 index 00000000..d1fc289f --- /dev/null +++ b/packages/wyatt_ui_kit/example/macos/Podfile.lock @@ -0,0 +1,23 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos + +SPEC CHECKSUMS: + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 + +PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 + +COCOAPODS: 1.11.3 diff --git a/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj index d9333e47..ebc2fd78 100644 --- a/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj +++ b/packages/wyatt_ui_kit/example/macos/Runner.xcodeproj/project.pbxproj @@ -26,6 +26,7 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + A5F9CB8747FE7FB1F2C756B2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFE88646077DE7272E46720D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,7 +55,7 @@ /* Begin PBXFileReference section */ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -66,8 +67,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 59A88CF037B2829342F969BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6C156257C212AAC0F946DB4B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + AC438DBB762194E86CC967B1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + BFE88646077DE7272E46720D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -75,6 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A5F9CB8747FE7FB1F2C756B2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -99,6 +105,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 6AE7C512D58B6E237819CA94 /* Pods */, ); sourceTree = ""; }; @@ -145,9 +152,21 @@ path = Runner; sourceTree = ""; }; + 6AE7C512D58B6E237819CA94 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C156257C212AAC0F946DB4B /* Pods-Runner.debug.xcconfig */, + 59A88CF037B2829342F969BD /* Pods-Runner.release.xcconfig */, + AC438DBB762194E86CC967B1 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + BFE88646077DE7272E46720D /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -159,11 +178,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 411BD9D4C8DC9AC52284FE47 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + D4EE7FCF15B3694CC588D1E5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -271,6 +292,45 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 411BD9D4C8DC9AC52284FE47 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + D4EE7FCF15B3694CC588D1E5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16..21a3cc14 100644 --- a/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/packages/wyatt_ui_kit/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index 1681e8b3..9d96d8ef 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -14,6 +14,8 @@ dependencies: sdk: flutter gap: ^2.0.1 + google_fonts: ^4.0.3 + adaptive_theme: ^3.2.0 wyatt_ui_kit: path: "../" diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart index f52131ba..87cbba04 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart @@ -20,10 +20,8 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_horizontal_header.dart'; import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_vertical_header.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; part 'information_card.g.dart'; @@ -41,7 +39,7 @@ class InformationCard extends InformationCardComponent super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, super.minSize, super.maxSize = const Size(330, double.infinity), super.shadow, @@ -53,7 +51,7 @@ class InformationCard extends InformationCardComponent Widget build(BuildContext context) => CardWrapper( background: background, padding: padding, - backgroundColor: backgroundColor, + backgroundColors: backgroundColors, borderColors: borderColors, shadow: shadow, maxSize: maxSize, @@ -74,17 +72,15 @@ class InformationCard extends InformationCardComponent axis: axis, title: title, subtitle: subtitle, - ) + ), ], if (body != null) ...[ const Gap(_bodyTopSpacing), - Text( + CardText( body!.text, - style: body!.style ?? context.textTheme.bodyMedium, - ).toGradient( - LinearGradientHelper.fromNullableColors( - body!.gradient, - ), + textType: TextType.body, + style: body!.style, + gradient: body!.gradient, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart index 6540af1b..1378d99c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart @@ -27,8 +27,8 @@ class $InformationCardCWProxyImpl implements $InformationCardComponentCWProxy { InformationCard borderColors(List? borderColors) => this(borderColors: borderColors); @override - InformationCard backgroundColor(Color? backgroundColor) => - this(backgroundColor: backgroundColor); + InformationCard backgroundColors(List? backgroundColors) => + this(backgroundColors: backgroundColors); @override InformationCard minSize(Size? minSize) => this(minSize: minSize); @override @@ -50,7 +50,7 @@ class $InformationCardCWProxyImpl implements $InformationCardComponentCWProxy { double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, @@ -66,7 +66,7 @@ class $InformationCardCWProxyImpl implements $InformationCardComponentCWProxy { radius: radius ?? _value.radius, padding: padding ?? _value.padding, borderColors: borderColors ?? _value.borderColors, - backgroundColor: backgroundColor ?? _value.backgroundColor, + backgroundColors: backgroundColors ?? _value.backgroundColors, minSize: minSize ?? _value.minSize, maxSize: maxSize ?? _value.maxSize, shadow: shadow ?? _value.shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart index cc438603..d599c643 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_horizontal_header.dart @@ -41,12 +41,14 @@ class InformationCardHorizontalHeader extends StatelessWidget { if (icons?.first != null) ...[ icons!.first, const Gap(_avatarAndTitlesSpacing), - InformationCardTitles( + ], + Expanded( + child: InformationCardTitles( title: title, subtitle: subtitle, axis: axis, ), - ], + ), ], ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart index 153110eb..2b48a39d 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart @@ -17,9 +17,7 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; const _titlesLineSpacing = 5.0; @@ -42,20 +40,20 @@ class InformationCardTitles extends StatelessWidget { : CrossAxisAlignment.center, children: [ if (title != null) ...[ - Text( + CardText( title!.text, - style: title!.style ?? context.textTheme.titleLarge, - ).toGradient( - LinearGradientHelper.fromNullableColors(title!.gradient), + textType: TextType.title, + style: title!.style, + gradient: title!.gradient, ), ], if (subtitle != null) ...[ const Gap(_titlesLineSpacing), - Text( + CardText( subtitle!.text, - style: subtitle!.style ?? context.textTheme.titleSmall, - ).toGradient( - LinearGradientHelper.fromNullableColors(subtitle!.gradient), + textType: TextType.subtitle, + style: subtitle!.style, + gradient: subtitle!.gradient, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart index 555d2e9c..88529fb9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart @@ -18,9 +18,9 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart'; import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart'; import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; part 'portfolio_card.g.dart'; @@ -39,7 +39,8 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, + super.secondaryBackgroundColors, super.minSize, super.maxSize = const Size(330, double.infinity), super.shadow, @@ -51,13 +52,12 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { Widget build(BuildContext context) => CardWrapper( background: background, padding: padding, - backgroundColor: backgroundColor, + backgroundColors: backgroundColors, borderColors: borderColors, shadow: shadow, maxSize: maxSize, minSize: minSize, child: Column( - crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ if (showImagesOnTop ?? false) ...[ @@ -69,12 +69,15 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { ), const Gap(20), ], - PortfolioCardDescription( - description: description, - ctas: ctas, + CardText( + description!.text, + textType: TextType.body, + style: description!.style, + gradient: description!.gradient, ), - const Gap(10), + const Gap(20), PortfolioCardHeader( + secondaryBackgroundColors: secondaryBackgroundColors, logo: logo, padding: padding, radius: radius, @@ -84,6 +87,7 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { ), ] else ...[ PortfolioCardHeader( + secondaryBackgroundColors: secondaryBackgroundColors, logo: logo, padding: padding, radius: radius, @@ -100,11 +104,14 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { ), const Gap(20), ], - PortfolioCardDescription( - description: description, - ctas: ctas, + CardText( + description!.text, + textType: TextType.body, + style: description!.style, + gradient: description!.gradient, ), ], + if (ctas != null) ...[const Gap(20), ...ctas!], ], ), ); diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart index fd2da3ae..0142a408 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart @@ -10,6 +10,9 @@ class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { const $PortfolioCardCWProxyImpl(this._value); final PortfolioCard _value; @override + PortfolioCard secondaryBackgroundColors(Color? secondaryBackgroundColors) => + this(secondaryBackgroundColors: secondaryBackgroundColors); + @override PortfolioCard showImagesOnTop(bool? showImagesOnTop) => this(showImagesOnTop: showImagesOnTop); @override @@ -36,8 +39,8 @@ class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { PortfolioCard borderColors(List? borderColors) => this(borderColors: borderColors); @override - PortfolioCard backgroundColor(Color? backgroundColor) => - this(backgroundColor: backgroundColor); + PortfolioCard backgroundColors(List? backgroundColors) => + this(backgroundColors: backgroundColors); @override PortfolioCard minSize(Size? minSize) => this(minSize: minSize); @override @@ -50,6 +53,7 @@ class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { PortfolioCard key(Key? key) => this(key: key); @override PortfolioCard call({ + Color? secondaryBackgroundColors, bool? showImagesOnTop, List? keyword, TextWrapper? description, @@ -61,7 +65,7 @@ class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, @@ -80,7 +84,9 @@ class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { radius: radius ?? _value.radius, padding: padding ?? _value.padding, borderColors: borderColors ?? _value.borderColors, - backgroundColor: backgroundColor ?? _value.backgroundColor, + backgroundColors: backgroundColors ?? _value.backgroundColors, + secondaryBackgroundColors: + secondaryBackgroundColors ?? _value.secondaryBackgroundColors, minSize: minSize ?? _value.minSize, maxSize: maxSize ?? _value.maxSize, shadow: shadow ?? _value.shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart deleted file mode 100644 index 26ec9ed3..00000000 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart +++ /dev/null @@ -1,60 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:gap/gap.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; - -class PortfolioCardDescription extends StatelessWidget { - const PortfolioCardDescription({ - this.description, - this.ctas, - super.key, - }); - - final TextWrapper? description; - final List? ctas; - - @override - Widget build(BuildContext context) => Row( - children: [ - if (description != null) ...[ - Expanded( - child: Text( - description!.text, - style: description!.style ?? context.textTheme.bodyMedium, - ).toGradient( - LinearGradientHelper.fromNullableColors( - description!.gradient, - ), - ), - ), - ], - if (ctas != null) ...[ - const Gap(5), - ...ctas!.map( - (e) => Padding( - padding: const EdgeInsets.symmetric(horizontal: 5), - child: e, - ), - ), - ], - ], - ); -} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart index 989f97b8..39998629 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart @@ -17,9 +17,11 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_titles.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +const _avatarAndTitlesSpacing = 25.0; + class PortfolioCardHeader extends StatelessWidget { const PortfolioCardHeader({ this.logo, @@ -28,6 +30,7 @@ class PortfolioCardHeader extends StatelessWidget { this.projectName, this.subtitle, this.keyword, + this.secondaryBackgroundColors, super.key, }); @@ -37,6 +40,7 @@ class PortfolioCardHeader extends StatelessWidget { final TextWrapper? projectName; final TextWrapper? subtitle; final List? keyword; + final Color? secondaryBackgroundColors; @override Widget build(BuildContext context) => Column( @@ -45,32 +49,13 @@ class PortfolioCardHeader extends StatelessWidget { Row( children: [ if (logo != null) logo!, - const Gap(10), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (projectName != null) - Text( - projectName!.text, - style: - projectName!.style ?? context.textTheme.titleMedium, - ).toGradient( - LinearGradientHelper.fromNullableColors( - projectName!.gradient, - ), - ), - if (subtitle != null) ...[ - const Gap(5), - Text( - subtitle!.text, - style: subtitle!.style ?? context.textTheme.titleSmall, - ).toGradient( - LinearGradientHelper.fromNullableColors( - subtitle!.gradient, - ), - ), - ], - ], + const Gap(_avatarAndTitlesSpacing), + Expanded( + child: InformationCardTitles( + axis: Axis.horizontal, + title: projectName, + subtitle: subtitle, + ), ), ], ), @@ -83,7 +68,10 @@ class PortfolioCardHeader extends StatelessWidget { margin: const EdgeInsets.all(3), padding: const EdgeInsets.all(6), decoration: BoxDecoration( - color: Theme.of(context).focusColor, + color: secondaryBackgroundColors ?? + Theme.of(context) + .extension() + ?.secondaryBackgroundColors, borderRadius: BorderRadius.circular(8), ), child: Text( diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart index b134da4d..358a3897 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart @@ -17,12 +17,12 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; - import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; + part 'quote_card.g.dart'; @ComponentCopyWithExtension() @@ -38,7 +38,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, super.minSize, super.maxSize, super.shadow, @@ -50,7 +50,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { Widget build(BuildContext context) => CardWrapper( background: background, padding: padding, - backgroundColor: backgroundColor, + backgroundColors: backgroundColors, borderColors: borderColors, shadow: shadow, maxSize: maxSize, @@ -69,16 +69,12 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { ), ), if (quote != null) ...[ - Text( + CardText( quote!.text, - style: quote!.style ?? - context.textTheme.bodyMedium - ?.copyWith(fontStyle: FontStyle.italic), - ).toGradient( - LinearGradientHelper.fromNullableColors( - quote!.gradient, - ), - ) + textType: TextType.body, + style: quote!.style, + gradient: quote!.gradient, + ), ], const Gap(15), rightQuote ?? @@ -97,27 +93,28 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { avatar!, const Gap(25), ], - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (name != null) ...[ - Text( - name!.text, - style: name!.style ?? context.textTheme.titleMedium, - ).toGradient( - LinearGradientHelper.fromNullableColors( - name!.gradient, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (name != null) ...[ + CardText( + name!.text, + textType: TextType.body, + style: name!.style, + gradient: name!.gradient, ), - ), + ], + if (subtitle != null) ...[ + CardText( + subtitle!.text, + textType: TextType.subtitle, + style: subtitle!.style, + gradient: subtitle!.gradient, + ), + ], ], - if (subtitle != null) ...[ - const Gap(5), - Text( - subtitle!.text, - style: subtitle!.style ?? context.textTheme.titleMedium, - ).toGradient(gradient), - ], - ], + ), ) ], ), diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart index 42a1ac16..548c0088 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart @@ -31,8 +31,8 @@ class $QuoteCardCWProxyImpl implements $QuoteCardComponentCWProxy { QuoteCard borderColors(List? borderColors) => this(borderColors: borderColors); @override - QuoteCard backgroundColor(Color? backgroundColor) => - this(backgroundColor: backgroundColor); + QuoteCard backgroundColors(List? backgroundColors) => + this(backgroundColors: backgroundColors); @override QuoteCard minSize(Size? minSize) => this(minSize: minSize); @override @@ -55,7 +55,7 @@ class $QuoteCardCWProxyImpl implements $QuoteCardComponentCWProxy { double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, @@ -73,7 +73,7 @@ class $QuoteCardCWProxyImpl implements $QuoteCardComponentCWProxy { radius: radius ?? _value.radius, padding: padding ?? _value.padding, borderColors: borderColors ?? _value.borderColors, - backgroundColor: backgroundColor ?? _value.backgroundColor, + backgroundColors: backgroundColors ?? _value.backgroundColors, minSize: minSize ?? _value.minSize, maxSize: maxSize ?? _value.maxSize, shadow: shadow ?? _value.shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart index e741e4d3..357f8fcc 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart @@ -20,10 +20,9 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_header.dart'; import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_skills.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart'; + part 'skill_card.g.dart'; @ComponentCopyWithExtension() @@ -31,6 +30,7 @@ class SkillCard extends SkillCardComponent with $SkillCardCWMixin { const SkillCard({ super.icon, super.gradient, + super.secondaryBackgroundColors, super.title, super.description, super.skills, @@ -38,7 +38,7 @@ class SkillCard extends SkillCardComponent with $SkillCardCWMixin { super.radius, super.padding, super.borderColors, - super.backgroundColor, + super.backgroundColors, super.minSize, super.maxSize = const Size(330, double.infinity), super.shadow, @@ -50,7 +50,7 @@ class SkillCard extends SkillCardComponent with $SkillCardCWMixin { Widget build(BuildContext context) => CardWrapper( background: background, padding: padding, - backgroundColor: backgroundColor, + backgroundColors: backgroundColors, borderColors: borderColors, shadow: shadow, maxSize: maxSize, @@ -59,17 +59,18 @@ class SkillCard extends SkillCardComponent with $SkillCardCWMixin { mainAxisSize: MainAxisSize.min, children: [ SkillCardHeader( + secondaryBackgroundColors: secondaryBackgroundColors, icon: icon, title: title, gradient: gradient, ), const Gap(25), if (description != null) ...[ - Text( + CardText( description!.text, - style: description!.style ?? context.textTheme.bodyMedium, - ).toGradient( - LinearGradientHelper.fromNullableColors(description!.gradient), + textType: TextType.body, + style: description!.style, + gradient: description!.gradient, ), const Gap(25), ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart index 42f8200f..96f74491 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart @@ -24,6 +24,9 @@ class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { SkillCard leadingIcon(IconData? leadingIcon) => this(leadingIcon: leadingIcon); @override + SkillCard secondaryBackgroundColors(Color? secondaryBackgroundColors) => + this(secondaryBackgroundColors: secondaryBackgroundColors); + @override SkillCard radius(double? radius) => this(radius: radius); @override SkillCard padding(double? padding) => this(padding: padding); @@ -31,8 +34,8 @@ class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { SkillCard borderColors(List? borderColors) => this(borderColors: borderColors); @override - SkillCard backgroundColor(Color? backgroundColor) => - this(backgroundColor: backgroundColor); + SkillCard backgroundColors(List? backgroundColors) => + this(backgroundColors: backgroundColors); @override SkillCard minSize(Size? minSize) => this(minSize: minSize); @override @@ -51,10 +54,11 @@ class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { TextWrapper? description, List? skills, IconData? leadingIcon, + Color? secondaryBackgroundColors, double? radius, double? padding, List? borderColors, - Color? backgroundColor, + List? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, @@ -64,6 +68,8 @@ class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { SkillCard( icon: icon ?? _value.icon, gradient: gradient ?? _value.gradient, + secondaryBackgroundColors: + secondaryBackgroundColors ?? _value.secondaryBackgroundColors, title: title ?? _value.title, description: description ?? _value.description, skills: skills ?? _value.skills, @@ -71,7 +77,7 @@ class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { radius: radius ?? _value.radius, padding: padding ?? _value.padding, borderColors: borderColors ?? _value.borderColors, - backgroundColor: backgroundColor ?? _value.backgroundColor, + backgroundColors: backgroundColors ?? _value.backgroundColors, minSize: minSize ?? _value.minSize, maxSize: maxSize ?? _value.maxSize, shadow: shadow ?? _value.shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart index 5aa7f85d..cd4bbfee 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart @@ -17,44 +17,57 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; +import 'package:wyatt_ui_kit/src/domain/card_theme_extension.dart'; class SkillCardHeader extends StatelessWidget { - const SkillCardHeader({super.key, this.icon, this.title, this.gradient}); + const SkillCardHeader({ + super.key, + this.icon, + this.title, + this.gradient, + this.secondaryBackgroundColors, + }); final IconData? icon; final TextWrapper? title; final List? gradient; + final Color? secondaryBackgroundColors; @override Widget build(BuildContext context) => Column( children: [ if (icon != null) ...[ - if (gradient != null) - GradientIcon( - icon, - size: 60, - gradient: LinearGradient(colors: gradient!), - ) - else - Icon( - icon, - size: 60, + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: secondaryBackgroundColors ?? + Theme.of(context) + .extension() + ?.secondaryBackgroundColors, ), + child: gradient != null + ? GradientIcon( + icon, + size: 45, + gradient: LinearGradient(colors: gradient!), + ) + : Icon( + icon, + size: 45, + ), + ), const Gap(25), Column( children: [ if (title != null) ...[ - Text( + CardText( title!.text, - style: title!.style ?? context.textTheme.titleLarge, - ).toGradient( - LinearGradientHelper.fromNullableColors( - title!.gradient, - ), + textType: TextType.title, + style: title!.style, + gradient: title!.gradient, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart index 43dca88d..01e9c778 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart @@ -17,9 +17,8 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; class SkillCardSkills extends StatelessWidget { @@ -47,11 +46,11 @@ class SkillCardSkills extends StatelessWidget { ), const Gap(10), Expanded( - child: Text( + child: CardText( e.text, - style: e.style ?? context.textTheme.bodyMedium, - ).toGradient( - LinearGradientHelper.fromNullableColors(e.gradient), + textType: TextType.body, + style: e.style, + gradient: e.gradient, ), ), ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart new file mode 100644 index 00000000..7f841274 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart @@ -0,0 +1,66 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +enum TextType { + title, + subtitle, + body; +} + +class CardText extends StatelessWidget { + const CardText( + this.data, { + required this.textType, + this.gradient, + this.style, + super.key, + }); + final TextType textType; + final TextStyle? style; + final List? gradient; + final String data; + + TextStyle? _getStyle(BuildContext context) { + if (style != null) { + return style; + } else { + final cardThemeExtension = + Theme.of(context).extension(); + switch (textType) { + case TextType.title: + return cardThemeExtension?.title ?? context.textTheme.titleLarge; + case TextType.subtitle: + return cardThemeExtension?.subtitle ?? context.textTheme.titleMedium; + case TextType.body: + return cardThemeExtension?.body ?? context.textTheme.bodyMedium; + } + } + } + + @override + Widget build(BuildContext context) => Text( + data, + style: _getStyle(context), + ).toGradient( + LinearGradientHelper.fromNullableColors( + gradient, + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index 1acbda5f..fe2f1cb8 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -16,11 +16,12 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; +import 'package:wyatt_ui_kit/src/domain/card_theme_extension.dart'; class CardWrapper extends StatefulWidget { const CardWrapper({ required this.child, - required this.backgroundColor, + required this.backgroundColors, required this.borderColors, required this.shadow, required this.minSize, @@ -32,7 +33,7 @@ class CardWrapper extends StatefulWidget { final Widget? background; final Widget child; - final Color? backgroundColor; + final List? backgroundColors; final List? borderColors; final BoxShadow? shadow; final Size? minSize; @@ -50,15 +51,29 @@ class _CardWrapperState extends State { @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { - final RenderObject? renderBox = _key.currentContext?.findRenderObject(); - if (renderBox != null) { - setState(() { - _cardSize = - Size(renderBox.paintBounds.width, renderBox.paintBounds.height); - }); - } - }); + if (widget.background != null) { + WidgetsBinding.instance.addPostFrameCallback((_) { + _resizeCard(); + }); + } + } + + @override + void didUpdateWidget(covariant CardWrapper oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.background != null) { + _resizeCard(); + } + } + + void _resizeCard() { + final RenderObject? renderBox = _key.currentContext?.findRenderObject(); + if (renderBox != null) { + setState(() { + _cardSize = + Size(renderBox.paintBounds.width, renderBox.paintBounds.height); + }); + } } Widget _buildChild(Widget child) => (widget.background != null) @@ -85,28 +100,99 @@ class _CardWrapperState extends State { child: child, ); + Gradient? _cardGradient(BuildContext context) { + if (widget.backgroundColors != null && + widget.backgroundColors!.length >= 2) { + return LinearGradient(colors: widget.backgroundColors!); + } else { + final extensionCardColor = + Theme.of(context).extension(); + + if (extensionCardColor != null && + extensionCardColor.backgroundColors != null && + extensionCardColor.backgroundColors!.length >= 2) { + return LinearGradient(colors: extensionCardColor.backgroundColors!); + } + } + return null; + } + + Color? _cardColor(BuildContext context) { + if (widget.backgroundColors != null && + widget.backgroundColors!.length == 1) { + return widget.backgroundColors!.first; + } else { + final extensionCardColor = + Theme.of(context).extension(); + + if (extensionCardColor != null && + extensionCardColor.backgroundColors != null && + extensionCardColor.backgroundColors!.length == 1) { + return extensionCardColor.backgroundColors!.first; + } + } + return Theme.of(context).cardColor; + } + + BoxBorder? _boxBorder(BuildContext context) { + if (widget.borderColors != null) { + if (widget.borderColors!.length >= 2) { + return GradientBoxBorder( + gradient: LinearGradient( + colors: widget.borderColors!, + ), + ); + } else if (widget.borderColors!.isNotEmpty) { + return Border.all( + color: widget.borderColors!.first, + ); + } + } else { + final extensionCardColor = + Theme.of(context).extension(); + if (extensionCardColor != null && + extensionCardColor.borderColor != null) { + if (extensionCardColor.borderColor!.length >= 2) { + return GradientBoxBorder( + gradient: LinearGradient( + colors: extensionCardColor.borderColor!, + ), + ); + } else if (extensionCardColor.backgroundColors!.isNotEmpty) { + return Border.all( + color: extensionCardColor.backgroundColors!.first, + ); + } + } + } + return null; + } + + List _shadow(BuildContext context) { + final shadows = List.empty(growable: true); + if (widget.shadow != null) { + shadows.add(widget.shadow!); + } else { + final extensionCardColor = + Theme.of(context).extension(); + if (extensionCardColor != null && + extensionCardColor.shadowColor != null) { + shadows.add(extensionCardColor.shadowColor!); + } + } + return shadows; + } + @override Widget build(BuildContext context) => SelectionArea( child: DecoratedBox( key: _key, decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(12)), - color: widget.backgroundColor ?? Theme.of(context).cardColor, - border: GradientBoxBorder( - gradient: LinearGradient( - colors: (widget.borderColors != null && - widget.borderColors!.length >= 2) - ? widget.borderColors! - : [ - Theme.of(context).cardColor, - Theme.of(context).cardColor - ], - ), - width: 1, - ), - boxShadow: [ - if (widget.shadow != null) ...[widget.shadow!] - ], + gradient: _cardGradient(context), + color: _cardColor(context), + border: _boxBorder(context), + boxShadow: _shadow(context), ), child: (widget.minSize != null && widget.maxSize != null) ? ConstrainedBox( diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart index 36941942..912a9c53 100644 --- a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart @@ -17,7 +17,7 @@ import 'package:flutter/painting.dart'; class GradientBoxBorder extends BoxBorder { - const GradientBoxBorder({this.gradient, this.width = 0}); + const GradientBoxBorder({this.gradient, this.width = 1}); final Gradient? gradient; final double width; diff --git a/packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart new file mode 100644 index 00000000..63a0f8a6 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart @@ -0,0 +1,40 @@ +// 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 . + +import 'package:flutter/material.dart'; + +abstract class CardThemeExtension extends ThemeExtension { + const CardThemeExtension({ + this.backgroundColors, + this.secondaryBackgroundColors, + this.borderColor, + this.shadowColor, + this.body, + this.title, + this.subtitle, + }); + + // Colors + final List? backgroundColors; + final Color? secondaryBackgroundColors; + final List? borderColor; + final BoxShadow? shadowColor; + + // TextStyles + final TextStyle? body; + final TextStyle? title; + final TextStyle? subtitle; +} diff --git a/packages/wyatt_ui_kit/lib/src/src.dart b/packages/wyatt_ui_kit/lib/src/src.dart index eb5aa8b4..554793d9 100644 --- a/packages/wyatt_ui_kit/lib/src/src.dart +++ b/packages/wyatt_ui_kit/lib/src/src.dart @@ -32,3 +32,4 @@ export './components/components.dart'; export './core/core.dart'; +export './domain/card_theme_extension.dart'; -- 2.47.2 From 4f71118a655c3f8f98387bbb70c6fe83939c916a Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 8 Feb 2023 20:33:21 +0100 Subject: [PATCH 091/320] chore(uikit): create package with mason --- packages/wyatt_ui_kit/example/pubspec.yaml | 3 +-- .../example/test/widget_test.dart | 0 .../wyatt_ui_kit/lib/src/wyatt_ui_kit.dart | 19 +++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/test/widget_test.dart create mode 100644 packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index 9d96d8ef..c3ced3ca 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -10,8 +10,7 @@ environment: dependencies: flutter: { sdk: flutter } - flutter_localizations: - sdk: flutter + flutter_localizations: { sdk: flutter } gap: ^2.0.1 google_fonts: ^4.0.3 diff --git a/packages/wyatt_ui_kit/example/test/widget_test.dart b/packages/wyatt_ui_kit/example/test/widget_test.dart new file mode 100644 index 00000000..e69de29b diff --git a/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart new file mode 100644 index 00000000..0d483300 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart @@ -0,0 +1,19 @@ +// 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 . + +abstract class WyattUiKit { + static String get testString => 'Package: Wyatt Ui Kit'; +} -- 2.47.2 From 43df08731933dcdfce92072522a37698812a59b7 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 10 Feb 2023 14:43:12 +0100 Subject: [PATCH 092/320] chore: update repo bricks --- mason-lock.json | 2 +- mason.yaml | 30 +++++++++++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/mason-lock.json b/mason-lock.json index 9a9c7463..74703dd6 100644 --- a/mason-lock.json +++ b/mason-lock.json @@ -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":"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"}}}} \ No newline at end of file +{"bricks":{"wyatt_package_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_package_template","ref":"7cea909470ce75b91840f479649b93f953ded596"}}}} \ No newline at end of file diff --git a/mason.yaml b/mason.yaml index e0e797ee..4c3df4a0 100644 --- a/mason.yaml +++ b/mason.yaml @@ -1,13 +1,25 @@ +# 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 . + bricks: - wyatt_clean_code: - git: - url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git" - path: bricks/wyatt_clean_code - wyatt_feature_brick: - git: - url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git" - path: bricks/wyatt_feature_brick wyatt_package_template: git: url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git" - path: bricks/wyatt_package_template \ No newline at end of file + path: bricks/wyatt_package_template + wyatt_component_template: + git: + url: "ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git" + path: bricks/wyatt_component_template \ No newline at end of file -- 2.47.2 From 602a372d7c13a3a45fd26fa9c7d43c449a012f1c Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 10 Feb 2023 14:47:12 +0100 Subject: [PATCH 093/320] fix(uikit): remove useless file --- .../wyatt_ui_kit/lib/src/wyatt_ui_kit.dart | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart diff --git a/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart deleted file mode 100644 index 0d483300..00000000 --- a/packages/wyatt_ui_kit/lib/src/wyatt_ui_kit.dart +++ /dev/null @@ -1,19 +0,0 @@ -// 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 . - -abstract class WyattUiKit { - static String get testString => 'Package: Wyatt Ui Kit'; -} -- 2.47.2 From 160b30d21b3d680ba62cbc4bbcacfe4ec1e2b9cc Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 10 Feb 2023 16:59:47 +0100 Subject: [PATCH 094/320] feat(ui_component): add button components --- mason-lock.json | 2 +- .../lib/src/core/core.dart | 1 + .../lib/src/core/enums/control_state.dart | 42 +++++++++++++++ .../entities/buttons/button_component.dart | 53 +++++++++++++++++++ .../src/domain/entities/buttons/buttons.dart | 17 ++++++ .../buttons/flat_button_component.dart | 43 +++++++++++++++ .../buttons/flat_button_component.g.dart | 14 +++++ .../lib/src/domain/entities/entities.dart | 1 + 8 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 packages/wyatt_ui_components/lib/src/core/enums/control_state.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart diff --git a/mason-lock.json b/mason-lock.json index 74703dd6..83cb506c 100644 --- a/mason-lock.json +++ b/mason-lock.json @@ -1 +1 @@ -{"bricks":{"wyatt_package_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_package_template","ref":"7cea909470ce75b91840f479649b93f953ded596"}}}} \ No newline at end of file +{"bricks":{"wyatt_component_template":{"git":{"url":"ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-bricks.git","path":"bricks/wyatt_component_template","ref":"7cea909470ce75b91840f479649b93f953ded596"}}}} \ No newline at end of file diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index 079c0687..0b041fe7 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export 'enums/control_state.dart'; export 'extensions/build_context_extensions.dart'; export 'extensions/string_extension.dart'; export 'mixins/copy_with_mixin.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart new file mode 100644 index 00000000..ce66679a --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart @@ -0,0 +1,42 @@ +// 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 . + +enum ControlState { + /// When the control is disabled and un-clickable + disabled, + + /// Default state of a control + normal, + + /// When the mouse cursor is hover the control + hovered, + + /// When the control is focused (like pressing tab) + focused, + + /// When the control is selected + selected, + + /// When the control content is invalid + invalid; + + bool isDisabled() => this == ControlState.disabled; + bool isEnabled() => this != ControlState.disabled; + bool isHovered() => this == ControlState.hovered; + bool isFocused() => this == ControlState.focused; + bool isSelected() => this == ControlState.selected; + bool isInvalid() => this == ControlState.invalid; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart new file mode 100644 index 00000000..1a1c30ed --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -0,0 +1,53 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/enums/control_state.dart'; +import 'package:wyatt_ui_components/src/domain/entities/component.dart'; + +abstract class ButtonComponent extends Component { + const ButtonComponent({ + this.state = ControlState.normal, + this.radius = 12, + this.padding = 25, + this.borderColors, + this.backgroundColor, + this.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + super.key, + }); + + /// Actual state of the button + final ControlState? state; + + /// Button radius + final double? radius; + + /// Padding and gaps of this card + final double? padding; + + /// Border gradient color (from left to right) + final List? borderColors; + + /// Button background color + final Color? backgroundColor; + + /// Drop shadow + final BoxShadow? shadow; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart new file mode 100644 index 00000000..8e646b7f --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart @@ -0,0 +1,17 @@ +// 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 . + +export './flat_button_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart new file mode 100644 index 00000000..a5b1c00e --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -0,0 +1,43 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/button_component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'flat_button_component.g.dart'; + +@ComponentProxyExtension() +abstract class FlatButtonComponent extends ButtonComponent + with CopyWithMixin<$FlatButtonComponentCWProxy> { + const FlatButtonComponent({ + this.prefix, + this.suffix, + this.label, + super.state, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.shadow, + super.key, + }); + + final Widget? prefix; + final Widget? suffix; + final TextWrapper? label; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart new file mode 100644 index 00000000..359ec686 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart @@ -0,0 +1,14 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'flat_button_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $FlatButtonComponentCWProxy { + FlatButtonComponent key(Key? key); + FlatButtonComponent call({ + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 0d8a3b29..5a07411a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -16,6 +16,7 @@ export './app_bar_component.dart'; export './bottom_navigation_bar_component.dart'; +export './buttons/buttons.dart'; export './cards/cards.dart'; export './component.dart'; export './error_widget_component.dart'; -- 2.47.2 From 4332eafda0a29cc265fcd578a59e08a54e68b393 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 10 Feb 2023 17:00:22 +0100 Subject: [PATCH 095/320] feat(ui_kit): implement flat button --- .../example/lib/buttons/buttons.dart | 40 +++++++ .../lib/src/components/buttons/buttons.dart | 17 +++ .../buttons/flat_button/flat_button.dart | 101 ++++++++++++++++++ .../buttons/flat_button/flat_button.g.dart | 55 ++++++++++ .../lib/src/components/components.dart | 1 + 5 files changed, 214 insertions(+) create mode 100644 packages/wyatt_ui_kit/example/lib/buttons/buttons.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart new file mode 100644 index 00000000..d9f6cede --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -0,0 +1,40 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class Buttons extends StatelessWidget { + const Buttons({super.key}); + + @override + Widget build(BuildContext context) => Column( + children: [ + Text( + 'Buttons', + style: Theme.of(context) + .textTheme + .titleLarge, + ), + const Gap(20), + const FlatButton( + label: TextWrapper('text'), + ), + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart new file mode 100644 index 00000000..654c0f72 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart @@ -0,0 +1,17 @@ +// 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 . + +export './flat_button/flat_button.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart new file mode 100644 index 00000000..3a231884 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -0,0 +1,101 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +part 'flat_button.g.dart'; + +@ComponentCopyWithExtension() +class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { + const FlatButton({ + super.prefix, + super.suffix, + super.label, + super.state, + super.radius, + super.padding, + super.borderColors, + super.backgroundColor, + super.shadow, + super.key, + }); + + @override + Widget build(BuildContext context) => ElevatedButton( + onPressed: () {}, + style: ElevatedButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(radius ?? 0), + ), + padding: const EdgeInsets.all(0), + ), + child: Ink( + decoration: BoxDecoration( + color: backgroundColor ?? + Theme.of(context).buttonTheme.colorScheme?.onPrimary, + border: GradientBoxBorder( + gradient: LinearGradient( + colors: (borderColors != null && borderColors!.length >= 2) + ? borderColors! + : [ + // TODO(hpcl): change this + Theme.of(context).cardColor, + Theme.of(context).cardColor + ], + ), + width: 1, + ), + boxShadow: [ + if (shadow != null) ...[shadow!] + ], + borderRadius: BorderRadius.all( + Radius.circular(radius ?? 0), + ), + ), + child: Container( + constraints: const BoxConstraints( + minWidth: 88, + minHeight: 36, + ), // min sizes for Material buttons + alignment: Alignment.center, + child: Row( + children: [ + prefix ?? const SizedBox.shrink(), + if (label != null) ...[ + Text( + label!.text, + style: label!.style ?? context.textTheme.titleLarge, + ).toGradient( + LinearGradientHelper.fromNullableColors(label!.gradient), + ), + ], + const Text( + 'OK', + textAlign: TextAlign.center, + ), + suffix ?? const SizedBox.shrink(), + ], + ), + ), + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart new file mode 100644 index 00000000..d844da2f --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -0,0 +1,55 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'flat_button.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { + const $FlatButtonCWProxyImpl(this._value); + final FlatButton _value; + @override + FlatButton prefix(Widget? prefix) => this(prefix: prefix); + @override + FlatButton suffix(Widget? suffix) => this(suffix: suffix); + @override + FlatButton label(TextWrapper? label) => this(label: label); + @override + FlatButton state(ControlState? state) => this(state: state); + @override + FlatButton radius(double? radius) => this(radius: radius); + @override + FlatButton padding(double? padding) => this(padding: padding); + @override + FlatButton borderColors(List? borderColors) => + this(borderColors: borderColors); + @override + FlatButton backgroundColor(Color? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + FlatButton shadow(BoxShadow? shadow) => this(shadow: shadow); + @override + FlatButton key(Key? key) => this(key: key); + @override + FlatButton call({ + Widget? prefix, + Widget? suffix, + TextWrapper? label, + ControlState? state, + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + BoxShadow? shadow, + Key? key, + }) => + FlatButton( + key: key ?? _value.key, + ); +} + +mixin $FlatButtonCWMixin on Component { + $FlatButtonComponentCWProxy get copyWith => + $FlatButtonCWProxyImpl(this as FlatButton); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart index 75c4ba26..b696808e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/components.dart +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -14,4 +14,5 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export './buttons/buttons.dart'; export './cards/cards.dart'; -- 2.47.2 From 07572aeca2695d4f8760fc07d901d7567356ebd8 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 12:19:39 +0100 Subject: [PATCH 096/320] feat(ui_component): add flat/outlined button styles --- .../entities/buttons/button_component.dart | 29 +++------- .../domain/entities/buttons/button_style.dart | 48 ++++++++++++++++ .../src/domain/entities/buttons/buttons.dart | 5 ++ .../buttons/flat_button_component.dart | 11 ++-- .../buttons/flat_button_component.g.dart | 12 ++++ .../entities/buttons/flat_button_style.dart | 50 +++++++++++++++++ .../buttons/outlined_button_component.dart | 42 ++++++++++++++ .../buttons/outlined_button_component.g.dart | 26 +++++++++ .../buttons/outlined_button_style.dart | 55 +++++++++++++++++++ 9 files changed, 250 insertions(+), 28 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index 1a1c30ed..f87c19e7 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -16,38 +16,23 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/enums/control_state.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; abstract class ButtonComponent extends Component { const ButtonComponent({ this.state = ControlState.normal, - this.radius = 12, - this.padding = 25, - this.borderColors, - this.backgroundColor, - this.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + this.mainAxisSize = MainAxisSize.min, + this.style, super.key, }); /// Actual state of the button final ControlState? state; - /// Button radius - final double? radius; + /// Main axis size + final MainAxisSize? mainAxisSize; - /// Padding and gaps of this card - final double? padding; - - /// Border gradient color (from left to right) - final List? borderColors; - - /// Button background color - final Color? backgroundColor; - - /// Drop shadow - final BoxShadow? shadow; + /// Style of this button + final ButtonStyle? style; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart new file mode 100644 index 00000000..47483bb7 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart @@ -0,0 +1,48 @@ +// 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 . + +import 'package:flutter/widgets.dart'; + +abstract class ButtonStyle { + const ButtonStyle({ + this.radius = 15, + this.padding = 10, + this.borderColors, + this.backgroundColor, + this.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + }); + + /// Button radius + final double? radius; + + /// Padding and gaps of this card + final double? padding; + + /// Border gradient color (from left to right) + final List? borderColors; + + /// Button background color + final Color? backgroundColor; + + /// Drop shadow + final BoxShadow? shadow; + + ButtonStyle copyWith(); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart index 8e646b7f..c3c58180 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart @@ -14,4 +14,9 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export './button_component.dart'; +export './button_style.dart'; export './flat_button_component.dart'; +export './flat_button_style.dart'; +export './outlined_button_component.dart'; +export './outlined_button_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index a5b1c00e..33cdbb7f 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -16,7 +16,6 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/domain/entities/buttons/button_component.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'flat_button_component.g.dart'; @@ -29,14 +28,14 @@ abstract class FlatButtonComponent extends ButtonComponent this.suffix, this.label, super.state, - super.radius, - super.padding, - super.borderColors, - super.backgroundColor, - super.shadow, + super.style, + super.mainAxisSize, super.key, }); + @override + FlatButtonStyle? get style; + final Widget? prefix; final Widget? suffix; final TextWrapper? label; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart index 359ec686..2d54e3ca 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart @@ -7,8 +7,20 @@ part of 'flat_button_component.dart'; // ************************************************************************** abstract class $FlatButtonComponentCWProxy { + FlatButtonComponent prefix(Widget? prefix); + FlatButtonComponent suffix(Widget? suffix); + FlatButtonComponent label(TextWrapper? label); + FlatButtonComponent state(ControlState? state); + FlatButtonComponent style(ButtonStyle? style); + FlatButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); FlatButtonComponent key(Key? key); FlatButtonComponent call({ + Widget? prefix, + Widget? suffix, + TextWrapper? label, + ControlState? state, + ButtonStyle? style, + MainAxisSize? mainAxisSize, Key? key, }); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart new file mode 100644 index 00000000..e35b35b7 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -0,0 +1,50 @@ +// ignore_for_file: public_member_api_docs, sort_constructors_first +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; + +class FlatButtonStyle extends ButtonStyle { + const FlatButtonStyle({ + super.radius = 15, + super.padding = 10, + super.borderColors, + super.backgroundColor, + super.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + }); + + @override + FlatButtonStyle copyWith({ + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + BoxShadow? shadow, + double? stroke, + }) => + FlatButtonStyle( + radius: radius ?? this.radius, + padding: padding ?? this.padding, + borderColors: borderColors ?? this.borderColors, + backgroundColor: backgroundColor ?? this.backgroundColor, + shadow: shadow ?? this.shadow, + ); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart new file mode 100644 index 00000000..36ebac09 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart @@ -0,0 +1,42 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'outlined_button_component.g.dart'; + +@ComponentProxyExtension() +abstract class OutlinedButtonComponent extends ButtonComponent + with CopyWithMixin<$OutlinedButtonComponentCWProxy> { + const OutlinedButtonComponent({ + this.prefix, + this.suffix, + this.label, + super.state, + super.style, + super.mainAxisSize, + super.key, + }); + + @override + OutlinedButtonStyle? get style; + + final Widget? prefix; + final Widget? suffix; + final TextWrapper? label; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart new file mode 100644 index 00000000..f2471b16 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart @@ -0,0 +1,26 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'outlined_button_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $OutlinedButtonComponentCWProxy { + OutlinedButtonComponent prefix(Widget? prefix); + OutlinedButtonComponent suffix(Widget? suffix); + OutlinedButtonComponent label(TextWrapper? label); + OutlinedButtonComponent state(ControlState? state); + OutlinedButtonComponent style(ButtonStyle? style); + OutlinedButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); + OutlinedButtonComponent key(Key? key); + OutlinedButtonComponent call({ + Widget? prefix, + Widget? suffix, + TextWrapper? label, + ControlState? state, + ButtonStyle? style, + MainAxisSize? mainAxisSize, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart new file mode 100644 index 00000000..f6babbed --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart @@ -0,0 +1,55 @@ +// ignore_for_file: public_member_api_docs, sort_constructors_first +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; + +class OutlinedButtonStyle extends ButtonStyle { + const OutlinedButtonStyle({ + super.radius = 15, + super.padding = 10, + super.borderColors, + super.backgroundColor, + super.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + this.stroke = 2, + }); + + /// Stroke of the border + final double? stroke; + + @override + OutlinedButtonStyle copyWith({ + double? radius, + double? padding, + List? borderColors, + Color? backgroundColor, + BoxShadow? shadow, + double? stroke, + }) => + OutlinedButtonStyle( + radius: radius ?? this.radius, + padding: padding ?? this.padding, + borderColors: borderColors ?? this.borderColors, + backgroundColor: backgroundColor ?? this.backgroundColor, + shadow: shadow ?? this.shadow, + stroke: stroke ?? this.stroke, + ); +} -- 2.47.2 From 60126fffc4820669c45d7a58ad3d13d5d8ba05e7 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 12:20:04 +0100 Subject: [PATCH 097/320] feat(ui_kit): implement flat/outlined button --- .../example/lib/buttons/buttons.dart | 51 ++++++++-- .../lib/src/components/buttons/buttons.dart | 1 + .../buttons/flat_button/flat_button.dart | 86 ++++++++-------- .../buttons/flat_button/flat_button.g.dart | 25 ++--- .../outlined_button/outlined_button.dart | 98 +++++++++++++++++++ .../outlined_button/outlined_button.g.dart | 50 ++++++++++ packages/wyatt_ui_kit/pubspec.yaml | 4 + 7 files changed, 244 insertions(+), 71 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index d9f6cede..2c679ec8 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -1,24 +1,28 @@ // 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 . -import 'package:flutter/material.dart'; +import 'package:flutter/material.dart' hide OutlinedButton; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +const _color1 = Color(0xFF3C97FB); +const _color2 = Color(0xFF446DF4); +const _colors = [_color1, _color2]; + class Buttons extends StatelessWidget { const Buttons({super.key}); @@ -27,13 +31,42 @@ class Buttons extends StatelessWidget { children: [ Text( 'Buttons', - style: Theme.of(context) - .textTheme - .titleLarge, + style: Theme.of(context).textTheme.titleLarge, ), const Gap(20), - const FlatButton( - label: TextWrapper('text'), + const OutlinedButton( + label: TextWrapper('Voir notre savoir faire', gradient: _colors), + style: OutlinedButtonStyle( + borderColors: _colors, + stroke: 3, + ), + prefix: Icon( + Icons.arrow_forward_rounded, + color: _color1, + ), + suffix: Icon( + Icons.arrow_forward_rounded, + color: _color2, + ), + ), + const Gap(20), + FlatButton( + label: TextWrapper( + 'Voir notre savoir faire', + style: + context.textTheme.titleLarge?.copyWith(color: Colors.white), + ), + style: const FlatButtonStyle( + borderColors: _colors, + ), + prefix: const Icon( + Icons.arrow_forward_rounded, + color: Colors.white, + ), + suffix: const Icon( + Icons.arrow_forward_rounded, + color: Colors.white, + ), ), ], ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart index 654c0f72..fe86edbe 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart @@ -15,3 +15,4 @@ // along with this program. If not, see . export './flat_button/flat_button.dart'; +export './outlined_button/outlined_button.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index 3a231884..075fd505 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -14,10 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/material.dart'; +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:gap/gap.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; @@ -31,69 +31,61 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { super.suffix, super.label, super.state, - super.radius, - super.padding, - super.borderColors, - super.backgroundColor, - super.shadow, + super.style, super.key, }); @override - Widget build(BuildContext context) => ElevatedButton( - onPressed: () {}, - style: ElevatedButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(radius ?? 0), - ), - padding: const EdgeInsets.all(0), - ), + FlatButtonStyle? get style => super.style as FlatButtonStyle?; + + @override + Widget build(BuildContext context) => Material( child: Ink( decoration: BoxDecoration( - color: backgroundColor ?? + color: style?.backgroundColor ?? Theme.of(context).buttonTheme.colorScheme?.onPrimary, - border: GradientBoxBorder( - gradient: LinearGradient( - colors: (borderColors != null && borderColors!.length >= 2) - ? borderColors! - : [ - // TODO(hpcl): change this - Theme.of(context).cardColor, - Theme.of(context).cardColor - ], - ), - width: 1, + gradient: LinearGradient( + colors: (style?.borderColors != null && + style!.borderColors!.length >= 2) + ? style!.borderColors! + : [ + // TODO(hpcl): change this + Theme.of(context).cardColor, + Theme.of(context).cardColor + ], ), boxShadow: [ - if (shadow != null) ...[shadow!] + if (style?.shadow != null) ...[style!.shadow!] ], borderRadius: BorderRadius.all( - Radius.circular(radius ?? 0), + Radius.circular(style?.radius ?? 0), ), ), - child: Container( + child: ConstrainedBox( constraints: const BoxConstraints( minWidth: 88, minHeight: 36, ), // min sizes for Material buttons - alignment: Alignment.center, - child: Row( - children: [ - prefix ?? const SizedBox.shrink(), - if (label != null) ...[ - Text( - label!.text, - style: label!.style ?? context.textTheme.titleLarge, - ).toGradient( - LinearGradientHelper.fromNullableColors(label!.gradient), - ), + child: Padding( + padding: EdgeInsets.all(style?.padding ?? 0), + child: Row( + mainAxisSize: mainAxisSize ?? MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + prefix ?? const SizedBox.shrink(), + Gap(style?.padding ?? 10), + if (label != null) ...[ + Text( + label!.text, + style: label!.style ?? context.textTheme.titleLarge, + ).toGradient( + LinearGradientHelper.fromNullableColors(label!.gradient), + ) + ], + Gap(style?.padding ?? 10), + suffix ?? const SizedBox.shrink(), ], - const Text( - 'OK', - textAlign: TextAlign.center, - ), - suffix ?? const SizedBox.shrink(), - ], + ), ), ), ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index d844da2f..d8a75583 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -18,17 +18,10 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { @override FlatButton state(ControlState? state) => this(state: state); @override - FlatButton radius(double? radius) => this(radius: radius); + FlatButton style(ButtonStyle? style) => this(style: style); @override - FlatButton padding(double? padding) => this(padding: padding); - @override - FlatButton borderColors(List? borderColors) => - this(borderColors: borderColors); - @override - FlatButton backgroundColor(Color? backgroundColor) => - this(backgroundColor: backgroundColor); - @override - FlatButton shadow(BoxShadow? shadow) => this(shadow: shadow); + FlatButton mainAxisSize(MainAxisSize? mainAxisSize) => + this(mainAxisSize: mainAxisSize); @override FlatButton key(Key? key) => this(key: key); @override @@ -37,14 +30,16 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { Widget? suffix, TextWrapper? label, ControlState? state, - double? radius, - double? padding, - List? borderColors, - Color? backgroundColor, - BoxShadow? shadow, + ButtonStyle? style, + MainAxisSize? mainAxisSize, Key? key, }) => FlatButton( + prefix: prefix ?? _value.prefix, + suffix: suffix ?? _value.suffix, + label: label ?? _value.label, + state: state ?? _value.state, + style: style ?? _value.style, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart new file mode 100644 index 00000000..06d7e217 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart @@ -0,0 +1,98 @@ +// 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 . + +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:gap/gap.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +part 'outlined_button.g.dart'; + +@ComponentCopyWithExtension() +class OutlinedButton extends OutlinedButtonComponent + with $OutlinedButtonCWMixin { + const OutlinedButton({ + super.prefix, + super.suffix, + super.label, + super.state, + super.style, + super.key, + }); + + @override + OutlinedButtonStyle? get style => super.style as OutlinedButtonStyle?; + + @override + Widget build(BuildContext context) => Material( + child: Ink( + decoration: BoxDecoration( + color: style?.backgroundColor ?? + Theme.of(context).buttonTheme.colorScheme?.onPrimary, + border: GradientBoxBorder( + gradient: LinearGradient( + colors: (style?.borderColors != null && + style!.borderColors!.length >= 2) + ? style!.borderColors! + : [ + // TODO(hpcl): change this + Theme.of(context).cardColor, + Theme.of(context).cardColor + ], + ), + width: style?.stroke ?? 2, + ), + boxShadow: [ + if (style?.shadow != null) ...[style!.shadow!] + ], + borderRadius: BorderRadius.all( + Radius.circular(style?.radius ?? 0), + ), + ), + child: ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 88, + minHeight: 36, + ), // min sizes for Material buttons + child: Padding( + padding: EdgeInsets.all(style?.padding ?? 0), + child: Row( + mainAxisSize: mainAxisSize ?? MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + prefix ?? const SizedBox.shrink(), + Gap(style?.padding ?? 10), + if (label != null) ...[ + Text( + label!.text, + style: label!.style ?? context.textTheme.titleLarge, + ).toGradient( + LinearGradientHelper.fromNullableColors(label!.gradient), + ) + ], + Gap(style?.padding ?? 10), + suffix ?? const SizedBox.shrink(), + ], + ), + ), + ), + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart new file mode 100644 index 00000000..6529baa6 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart @@ -0,0 +1,50 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'outlined_button.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $OutlinedButtonCWProxyImpl implements $OutlinedButtonComponentCWProxy { + const $OutlinedButtonCWProxyImpl(this._value); + final OutlinedButton _value; + @override + OutlinedButton prefix(Widget? prefix) => this(prefix: prefix); + @override + OutlinedButton suffix(Widget? suffix) => this(suffix: suffix); + @override + OutlinedButton label(TextWrapper? label) => this(label: label); + @override + OutlinedButton state(ControlState? state) => this(state: state); + @override + OutlinedButton style(ButtonStyle? style) => this(style: style); + @override + OutlinedButton mainAxisSize(MainAxisSize? mainAxisSize) => + this(mainAxisSize: mainAxisSize); + @override + OutlinedButton key(Key? key) => this(key: key); + @override + OutlinedButton call({ + Widget? prefix, + Widget? suffix, + TextWrapper? label, + ControlState? state, + ButtonStyle? style, + MainAxisSize? mainAxisSize, + Key? key, + }) => + OutlinedButton( + prefix: prefix ?? _value.prefix, + suffix: suffix ?? _value.suffix, + label: label ?? _value.label, + state: state ?? _value.state, + style: style ?? _value.style, + key: key ?? _value.key, + ); +} + +mixin $OutlinedButtonCWMixin on Component { + $OutlinedButtonComponentCWProxy get copyWith => + $OutlinedButtonCWProxyImpl(this as OutlinedButton); +} diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index 083d7fa6..58388d01 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -12,6 +12,10 @@ dependencies: flutter: { sdk: flutter } gap: ^2.0.1 flutter_animate: ^3.0.0 + wyatt_bloc_helper: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_bloc_helper wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git -- 2.47.2 From 442baa68822901ea06d2bdfea580c65e0f45c1aa Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 14:05:36 +0100 Subject: [PATCH 098/320] feat(ui_component): add MultiColor util class --- .../lib/src/core/core.dart | 1 + .../lib/src/core/utils/multi_color.dart | 45 +++++++++++++++++++ .../domain/entities/buttons/button_style.dart | 11 ++--- .../entities/buttons/flat_button_style.dart | 11 ++--- .../buttons/outlined_button_style.dart | 15 ++++--- 5 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index 0b041fe7..d850e320 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -18,4 +18,5 @@ export 'enums/control_state.dart'; export 'extensions/build_context_extensions.dart'; export 'extensions/string_extension.dart'; export 'mixins/copy_with_mixin.dart'; +export 'utils/multi_color.dart'; export 'utils/text_wrapper.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart new file mode 100644 index 00000000..47ff4488 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart @@ -0,0 +1,45 @@ +// ignore_for_file: public_member_api_docs, sort_constructors_first +// 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 . + +import 'package:flutter/widgets.dart'; + +class MultiColor { + const MultiColor(this._colors) : _color = null; + const MultiColor.single(this._color) : _colors = null; + + final List? _colors; + final Color? _color; + + Color get color { + if (_color != null) { + return _color!; + } + if (_colors?.isNotEmpty ?? false) { + return _colors!.first; + } + throw IndexError.withLength( + 0, + _colors?.length ?? 0, + message: '_color is not defined or _colors is empty.', + ); + } + + List get colors => _colors ?? []; + + bool get isGradient => + (_colors?.isNotEmpty ?? false) && (_colors?.length ?? 0) > 1; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart index 47483bb7..362ecb8d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart @@ -15,13 +15,13 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; abstract class ButtonStyle { const ButtonStyle({ this.radius = 15, this.padding = 10, - this.borderColors, - this.backgroundColor, + this.backgroundColors, this.shadow = const BoxShadow( blurRadius: 30, offset: Offset(0, 5), @@ -35,11 +35,8 @@ abstract class ButtonStyle { /// Padding and gaps of this card final double? padding; - /// Border gradient color (from left to right) - final List? borderColors; - - /// Button background color - final Color? backgroundColor; + /// Button background gradient colors (from left to right) + final MultiColor? backgroundColors; /// Drop shadow final BoxShadow? shadow; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index e35b35b7..aca7e5a2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // @@ -16,14 +15,14 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; class FlatButtonStyle extends ButtonStyle { const FlatButtonStyle({ super.radius = 15, super.padding = 10, - super.borderColors, - super.backgroundColor, + super.backgroundColors, super.shadow = const BoxShadow( blurRadius: 30, offset: Offset(0, 5), @@ -35,16 +34,14 @@ class FlatButtonStyle extends ButtonStyle { FlatButtonStyle copyWith({ double? radius, double? padding, - List? borderColors, - Color? backgroundColor, + MultiColor? backgroundColors, BoxShadow? shadow, double? stroke, }) => FlatButtonStyle( radius: radius ?? this.radius, padding: padding ?? this.padding, - borderColors: borderColors ?? this.borderColors, - backgroundColor: backgroundColor ?? this.backgroundColor, + backgroundColors: backgroundColors ?? this.backgroundColors, shadow: shadow ?? this.shadow, ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart index f6babbed..7ba8de93 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // @@ -16,22 +15,26 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; class OutlinedButtonStyle extends ButtonStyle { const OutlinedButtonStyle({ super.radius = 15, super.padding = 10, - super.borderColors, - super.backgroundColor, + super.backgroundColors, super.shadow = const BoxShadow( blurRadius: 30, offset: Offset(0, 5), color: Color.fromRGBO(0, 0, 0, 0.05), ), + this.borderColors, this.stroke = 2, }); + /// Border colors (from left to right). + final MultiColor? borderColors; + /// Stroke of the border final double? stroke; @@ -39,8 +42,8 @@ class OutlinedButtonStyle extends ButtonStyle { OutlinedButtonStyle copyWith({ double? radius, double? padding, - List? borderColors, - Color? backgroundColor, + MultiColor? borderColors, + MultiColor? backgroundColors, BoxShadow? shadow, double? stroke, }) => @@ -48,7 +51,7 @@ class OutlinedButtonStyle extends ButtonStyle { radius: radius ?? this.radius, padding: padding ?? this.padding, borderColors: borderColors ?? this.borderColors, - backgroundColor: backgroundColor ?? this.backgroundColor, + backgroundColors: backgroundColors ?? this.backgroundColors, shadow: shadow ?? this.shadow, stroke: stroke ?? this.stroke, ); -- 2.47.2 From 9e1b76e07b13d03f7a3a610d0253bd3a69b4fb95 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 14:05:56 +0100 Subject: [PATCH 099/320] feat(ui_kit): use MultiColor in button style --- .../example/lib/buttons/buttons.dart | 88 ++++++++++++++++++- .../buttons/flat_button/flat_button.dart | 21 ++--- .../outlined_button/outlined_button.dart | 27 +++--- 3 files changed, 107 insertions(+), 29 deletions(-) diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 2c679ec8..2bcd564c 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -22,6 +22,10 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; const _color1 = Color(0xFF3C97FB); const _color2 = Color(0xFF446DF4); const _colors = [_color1, _color2]; +const _disabled = Color(0xFF6B7280); +const _background = Color(0xFF16191D); +const _disabledBackground = Color(0xFF16191D + 0x66FFFFFF); +const _disabledColors = [Color(0xFF60656A), Color(0xFF383C40)]; class Buttons extends StatelessWidget { const Buttons({super.key}); @@ -37,7 +41,7 @@ class Buttons extends StatelessWidget { const OutlinedButton( label: TextWrapper('Voir notre savoir faire', gradient: _colors), style: OutlinedButtonStyle( - borderColors: _colors, + borderColors: MultiColor(_colors), stroke: 3, ), prefix: Icon( @@ -57,7 +61,7 @@ class Buttons extends StatelessWidget { context.textTheme.titleLarge?.copyWith(color: Colors.white), ), style: const FlatButtonStyle( - borderColors: _colors, + backgroundColors: MultiColor(_colors), ), prefix: const Icon( Icons.arrow_forward_rounded, @@ -68,6 +72,86 @@ class Buttons extends StatelessWidget { color: Colors.white, ), ), + const Gap(20), + ColoredBox( + color: _background, + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Column( + children: [ + const Gap(20), + OutlinedButton( + label: TextWrapper( + 'Démarrer mon projet', + style: context.textTheme.titleLarge + ?.copyWith(color: _disabled), + ), + style: const OutlinedButtonStyle( + borderColors: MultiColor(_disabledColors), + backgroundColors: + MultiColor.single(_disabledBackground), + stroke: 1, + ), + ), + const Gap(20), + FlatButton( + label: TextWrapper( + 'Démarrer mon projet', + style: context.textTheme.titleLarge + ?.copyWith(color: Colors.white), + ), + style: const FlatButtonStyle( + backgroundColors: MultiColor(_colors), + ), + ), + const Gap(20), + ], + ), + const Gap(20), + Column( + children: [ + const Gap(20), + OutlinedButton( + label: TextWrapper( + 'Aller voir nos réalisations', + style: context.textTheme.titleLarge + ?.copyWith(color: Colors.white), + ), + style: const OutlinedButtonStyle( + borderColors: MultiColor(_colors), + backgroundColors: + MultiColor.single(_disabledBackground), + stroke: 3, + ), + suffix: const Icon( + Icons.arrow_forward_rounded, + color: Colors.white, + ), + ), + const Gap(20), + FlatButton( + label: TextWrapper( + 'Aller voir nos réalisations', + style: context.textTheme.titleLarge + ?.copyWith(color: Colors.white), + ), + style: const FlatButtonStyle( + backgroundColors: MultiColor(_colors), + ), + suffix: const Icon( + Icons.arrow_forward_rounded, + color: Colors.white, + ), + ), + const Gap(20), + ], + ), + ], + ), + ), + ), ], ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index 075fd505..9b110970 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -40,20 +40,17 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { @override Widget build(BuildContext context) => Material( + color: const Color(0x00000000), child: Ink( decoration: BoxDecoration( - color: style?.backgroundColor ?? - Theme.of(context).buttonTheme.colorScheme?.onPrimary, - gradient: LinearGradient( - colors: (style?.borderColors != null && - style!.borderColors!.length >= 2) - ? style!.borderColors! - : [ - // TODO(hpcl): change this - Theme.of(context).cardColor, - Theme.of(context).cardColor - ], - ), + color: (style != null) + ? style!.backgroundColors?.color + : Theme.of(context).buttonTheme.colorScheme?.onPrimary, + gradient: (style?.backgroundColors?.isGradient ?? false) + ? LinearGradient( + colors: style!.backgroundColors!.colors, + ) + : null, boxShadow: [ if (style?.shadow != null) ...[style!.shadow!] ], diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart index 06d7e217..5bf9da67 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart @@ -42,23 +42,20 @@ class OutlinedButton extends OutlinedButtonComponent @override Widget build(BuildContext context) => Material( + color: const Color(0x00000000), child: Ink( decoration: BoxDecoration( - color: style?.backgroundColor ?? - Theme.of(context).buttonTheme.colorScheme?.onPrimary, - border: GradientBoxBorder( - gradient: LinearGradient( - colors: (style?.borderColors != null && - style!.borderColors!.length >= 2) - ? style!.borderColors! - : [ - // TODO(hpcl): change this - Theme.of(context).cardColor, - Theme.of(context).cardColor - ], - ), - width: style?.stroke ?? 2, - ), + color: (style != null) + ? style!.backgroundColors?.color + : Theme.of(context).buttonTheme.colorScheme?.onPrimary, + border: (style?.borderColors?.isGradient ?? false) + ? GradientBoxBorder( + gradient: LinearGradient( + colors: style!.borderColors!.colors, + ), + width: style?.stroke ?? 2, + ) + : null, boxShadow: [ if (style?.shadow != null) ...[style!.shadow!] ], -- 2.47.2 From 5050e2c2bb7cad5ac8fcce031ff99fcadacdc935 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 17:06:56 +0100 Subject: [PATCH 100/320] feat(ui_component): add tapped control state --- .../wyatt_ui_components/lib/src/core/enums/control_state.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart index ce66679a..a3c36727 100644 --- a/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart +++ b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart @@ -24,6 +24,9 @@ enum ControlState { /// When the mouse cursor is hover the control hovered, + /// When the control is clicked + tapped, + /// When the control is focused (like pressing tab) focused, @@ -36,6 +39,7 @@ enum ControlState { bool isDisabled() => this == ControlState.disabled; bool isEnabled() => this != ControlState.disabled; bool isHovered() => this == ControlState.hovered; + bool isTapped() => this == ControlState.tapped; bool isFocused() => this == ControlState.focused; bool isSelected() => this == ControlState.selected; bool isInvalid() => this == ControlState.invalid; -- 2.47.2 From 61e28ce5e7bc91313b98c026c9a54c4c3ac1bea7 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 17:07:39 +0100 Subject: [PATCH 101/320] refactor(ui_component): merge flat and outline buttons in only one style --- .../entities/buttons/button_component.dart | 31 +++++++--- .../domain/entities/buttons/button_style.dart | 12 ++++ .../src/domain/entities/buttons/buttons.dart | 2 - .../buttons/flat_button_component.dart | 22 ++++++- .../buttons/flat_button_component.g.dart | 16 +++-- .../entities/buttons/flat_button_style.dart | 10 +++- .../buttons/outlined_button_component.dart | 42 -------------- .../buttons/outlined_button_component.g.dart | 26 --------- .../buttons/outlined_button_style.dart | 58 ------------------- 9 files changed, 75 insertions(+), 144 deletions(-) delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index f87c19e7..ee8f3473 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -15,24 +15,39 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/core/enums/control_state.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; abstract class ButtonComponent extends Component { const ButtonComponent({ - this.state = ControlState.normal, this.mainAxisSize = MainAxisSize.min, - this.style, + this.disabledStyle, + this.normalStyle, + this.hoveredStyle, + this.focusedStyle, + this.tappedStyle, + this.onPressed, super.key, }); - /// Actual state of the button - final ControlState? state; - /// Main axis size final MainAxisSize? mainAxisSize; - /// Style of this button - final ButtonStyle? style; + /// Style of this button in disabled state + final ButtonStyle? disabledStyle; + + /// Style of this button in normal state + final ButtonStyle? normalStyle; + + /// Style of this button in hovered state + final ButtonStyle? hoveredStyle; + + /// Style of this button in focused state + final ButtonStyle? focusedStyle; + + /// Style of this button in tapped state + final ButtonStyle? tappedStyle; + + /// Callback on button press + final VoidCallback? onPressed; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart index 362ecb8d..22620337 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart @@ -21,7 +21,10 @@ abstract class ButtonStyle { const ButtonStyle({ this.radius = 15, this.padding = 10, + this.foregroundColors, this.backgroundColors, + this.borderColors, + this.stroke = 2, this.shadow = const BoxShadow( blurRadius: 30, offset: Offset(0, 5), @@ -35,9 +38,18 @@ abstract class ButtonStyle { /// Padding and gaps of this card final double? padding; + /// Button foreground gradient colors (from left to right) + final MultiColor? foregroundColors; + /// Button background gradient colors (from left to right) final MultiColor? backgroundColors; + /// Border colors (from left to right). + final MultiColor? borderColors; + + /// Stroke of the border + final double? stroke; + /// Drop shadow final BoxShadow? shadow; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart index c3c58180..940eb03a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart @@ -18,5 +18,3 @@ export './button_component.dart'; export './button_style.dart'; export './flat_button_component.dart'; export './flat_button_style.dart'; -export './outlined_button_component.dart'; -export './outlined_button_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index 33cdbb7f..29156d3c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -27,14 +27,30 @@ abstract class FlatButtonComponent extends ButtonComponent this.prefix, this.suffix, this.label, - super.state, - super.style, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.onPressed, super.mainAxisSize, super.key, }); @override - FlatButtonStyle? get style; + FlatButtonStyle? get disabledStyle; + + @override + FlatButtonStyle? get normalStyle; + + @override + FlatButtonStyle? get hoveredStyle; + + @override + FlatButtonStyle? get focusedStyle; + + @override + FlatButtonStyle? get tappedStyle; final Widget? prefix; final Widget? suffix; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart index 2d54e3ca..7b6dac39 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart @@ -10,16 +10,24 @@ abstract class $FlatButtonComponentCWProxy { FlatButtonComponent prefix(Widget? prefix); FlatButtonComponent suffix(Widget? suffix); FlatButtonComponent label(TextWrapper? label); - FlatButtonComponent state(ControlState? state); - FlatButtonComponent style(ButtonStyle? style); + FlatButtonComponent disabledStyle(ButtonStyle? disabledStyle); + FlatButtonComponent normalStyle(ButtonStyle? normalStyle); + FlatButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + FlatButtonComponent focusedStyle(ButtonStyle? focusedStyle); + FlatButtonComponent tappedStyle(ButtonStyle? tappedStyle); + FlatButtonComponent onPressed(void Function()? onPressed); FlatButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); FlatButtonComponent key(Key? key); FlatButtonComponent call({ Widget? prefix, Widget? suffix, TextWrapper? label, - ControlState? state, - ButtonStyle? style, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + void Function()? onPressed, MainAxisSize? mainAxisSize, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index aca7e5a2..355965ab 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -22,7 +22,10 @@ class FlatButtonStyle extends ButtonStyle { const FlatButtonStyle({ super.radius = 15, super.padding = 10, + super.foregroundColors, super.backgroundColors, + super.borderColors, + super.stroke = 2, super.shadow = const BoxShadow( blurRadius: 30, offset: Offset(0, 5), @@ -34,14 +37,19 @@ class FlatButtonStyle extends ButtonStyle { FlatButtonStyle copyWith({ double? radius, double? padding, + MultiColor? foregroundColors, MultiColor? backgroundColors, - BoxShadow? shadow, + MultiColor? borderColors, double? stroke, + BoxShadow? shadow, }) => FlatButtonStyle( radius: radius ?? this.radius, padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, shadow: shadow ?? this.shadow, ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart deleted file mode 100644 index 36ebac09..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.dart +++ /dev/null @@ -1,42 +0,0 @@ -// 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 . - -import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; - -part 'outlined_button_component.g.dart'; - -@ComponentProxyExtension() -abstract class OutlinedButtonComponent extends ButtonComponent - with CopyWithMixin<$OutlinedButtonComponentCWProxy> { - const OutlinedButtonComponent({ - this.prefix, - this.suffix, - this.label, - super.state, - super.style, - super.mainAxisSize, - super.key, - }); - - @override - OutlinedButtonStyle? get style; - - final Widget? prefix; - final Widget? suffix; - final TextWrapper? label; -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart deleted file mode 100644 index f2471b16..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_component.g.dart +++ /dev/null @@ -1,26 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'outlined_button_component.dart'; - -// ************************************************************************** -// ComponentProxyGenerator -// ************************************************************************** - -abstract class $OutlinedButtonComponentCWProxy { - OutlinedButtonComponent prefix(Widget? prefix); - OutlinedButtonComponent suffix(Widget? suffix); - OutlinedButtonComponent label(TextWrapper? label); - OutlinedButtonComponent state(ControlState? state); - OutlinedButtonComponent style(ButtonStyle? style); - OutlinedButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); - OutlinedButtonComponent key(Key? key); - OutlinedButtonComponent call({ - Widget? prefix, - Widget? suffix, - TextWrapper? label, - ControlState? state, - ButtonStyle? style, - MainAxisSize? mainAxisSize, - Key? key, - }); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart deleted file mode 100644 index 7ba8de93..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/outlined_button_style.dart +++ /dev/null @@ -1,58 +0,0 @@ -// 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 . - -import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; -import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; - -class OutlinedButtonStyle extends ButtonStyle { - const OutlinedButtonStyle({ - super.radius = 15, - super.padding = 10, - super.backgroundColors, - super.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), - this.borderColors, - this.stroke = 2, - }); - - /// Border colors (from left to right). - final MultiColor? borderColors; - - /// Stroke of the border - final double? stroke; - - @override - OutlinedButtonStyle copyWith({ - double? radius, - double? padding, - MultiColor? borderColors, - MultiColor? backgroundColors, - BoxShadow? shadow, - double? stroke, - }) => - OutlinedButtonStyle( - radius: radius ?? this.radius, - padding: padding ?? this.padding, - borderColors: borderColors ?? this.borderColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - shadow: shadow ?? this.shadow, - stroke: stroke ?? this.stroke, - ); -} -- 2.47.2 From b6f25dd5b5d3a4d51c143101b5574a0cc2afef19 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 17:08:02 +0100 Subject: [PATCH 102/320] refactor(ui_kit): use tapped state and merged styles --- .../example/lib/buttons/buttons.dart | 65 ++++- .../lib/src/components/buttons/buttons.dart | 1 - .../buttons/cubit/button_cubit.dart | 65 +++++ .../buttons/flat_button/flat_button.dart | 86 +++---- .../buttons/flat_button/flat_button.g.dart | 34 ++- .../flat_button/flat_button_screen.dart | 234 ++++++++++++++++++ .../outlined_button/outlined_button.dart | 95 ------- .../outlined_button/outlined_button.g.dart | 50 ---- .../src/core/extensions/theme_extensions.dart | 2 + .../models/button_state_diagram.puml | 13 + packages/wyatt_ui_kit/pubspec.yaml | 5 +- 11 files changed, 430 insertions(+), 220 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart delete mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart delete mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart create mode 100644 packages/wyatt_ui_kit/models/button_state_diagram.puml diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 2bcd564c..3b049711 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -14,14 +14,17 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/material.dart' hide OutlinedButton; +import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; const _color1 = Color(0xFF3C97FB); const _color2 = Color(0xFF446DF4); +const _color3 = Color.fromARGB(255, 26, 132, 247); +const _color4 = Color.fromARGB(255, 19, 68, 228); const _colors = [_color1, _color2]; +const _colorsDarken = [_color2, _color3]; const _disabled = Color(0xFF6B7280); const _background = Color(0xFF16191D); const _disabledBackground = Color(0xFF16191D + 0x66FFFFFF); @@ -38,19 +41,31 @@ class Buttons extends StatelessWidget { style: Theme.of(context).textTheme.titleLarge, ), const Gap(20), - const OutlinedButton( - label: TextWrapper('Voir notre savoir faire', gradient: _colors), - style: OutlinedButtonStyle( + const FlatButton( + label: TextWrapper('Voir notre savoir faire'), + normalStyle: FlatButtonStyle( + foregroundColors: MultiColor(_colors), + backgroundColors: MultiColor.single(Colors.transparent), borderColors: MultiColor(_colors), stroke: 3, ), + hoveredStyle: FlatButtonStyle( + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor(_colors), + borderColors: MultiColor(_colors), + stroke: 3, + ), + tappedStyle: FlatButtonStyle( + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor(_colorsDarken), + borderColors: MultiColor(_colorsDarken), + stroke: 3, + ), prefix: Icon( Icons.arrow_forward_rounded, - color: _color1, ), suffix: Icon( Icons.arrow_forward_rounded, - color: _color2, ), ), const Gap(20), @@ -60,7 +75,7 @@ class Buttons extends StatelessWidget { style: context.textTheme.titleLarge?.copyWith(color: Colors.white), ), - style: const FlatButtonStyle( + normalStyle: const FlatButtonStyle( backgroundColors: MultiColor(_colors), ), prefix: const Icon( @@ -82,13 +97,13 @@ class Buttons extends StatelessWidget { Column( children: [ const Gap(20), - OutlinedButton( + FlatButton( label: TextWrapper( 'Démarrer mon projet', style: context.textTheme.titleLarge ?.copyWith(color: _disabled), ), - style: const OutlinedButtonStyle( + normalStyle: const FlatButtonStyle( borderColors: MultiColor(_disabledColors), backgroundColors: MultiColor.single(_disabledBackground), @@ -102,7 +117,7 @@ class Buttons extends StatelessWidget { style: context.textTheme.titleLarge ?.copyWith(color: Colors.white), ), - style: const FlatButtonStyle( + normalStyle: const FlatButtonStyle( backgroundColors: MultiColor(_colors), ), ), @@ -113,13 +128,13 @@ class Buttons extends StatelessWidget { Column( children: [ const Gap(20), - OutlinedButton( + FlatButton( label: TextWrapper( 'Aller voir nos réalisations', style: context.textTheme.titleLarge ?.copyWith(color: Colors.white), ), - style: const OutlinedButtonStyle( + normalStyle: const FlatButtonStyle( borderColors: MultiColor(_colors), backgroundColors: MultiColor.single(_disabledBackground), @@ -137,7 +152,7 @@ class Buttons extends StatelessWidget { style: context.textTheme.titleLarge ?.copyWith(color: Colors.white), ), - style: const FlatButtonStyle( + normalStyle: const FlatButtonStyle( backgroundColors: MultiColor(_colors), ), suffix: const Icon( @@ -152,6 +167,30 @@ class Buttons extends StatelessWidget { ), ), ), + const Gap(20), + FlatButton( + onPressed: () => print('pressed'), + label: TextWrapper( + 'Démarrer mon projet', + style: + context.textTheme.titleLarge?.copyWith(color: Colors.white), + ), + disabledStyle: const FlatButtonStyle( + backgroundColors: MultiColor.single(Colors.blue), + ), + normalStyle: const FlatButtonStyle( + backgroundColors: MultiColor(_colors), + ), + hoveredStyle: const FlatButtonStyle( + backgroundColors: MultiColor.single(Colors.green), + ), + focusedStyle: const FlatButtonStyle( + backgroundColors: MultiColor.single(Colors.yellow), + ), + tappedStyle: const FlatButtonStyle( + backgroundColors: MultiColor.single(Colors.red), + ), + ), ], ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart index fe86edbe..654c0f72 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart @@ -15,4 +15,3 @@ // along with this program. If not, see . export './flat_button/flat_button.dart'; -export './outlined_button/outlined_button.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart new file mode 100644 index 00000000..1af53d3c --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart @@ -0,0 +1,65 @@ +import 'dart:async'; + +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class ButtonCubit extends Cubit { + ButtonCubit() : super(ControlState.normal); + + FutureOr onMouseEnter() async { + if (state == ControlState.disabled) { + return; + } + emit(ControlState.hovered); + } + + FutureOr onMouseLeave() async { + if (state == ControlState.disabled) { + return; + } + emit(ControlState.normal); + } + + FutureOr onFocus() async { + if (state == ControlState.disabled) { + return; + } + emit(ControlState.focused); + } + + FutureOr onUnfocus() async { + if (state == ControlState.disabled) { + return; + } + emit(ControlState.normal); + } + + FutureOr onClickDown() async { + if (state == ControlState.disabled) { + return; + } + emit(ControlState.tapped); + } + + FutureOr onClickUpIn() async { + if (state == ControlState.disabled) { + return; + } + emit(ControlState.hovered); + } + + FutureOr onClickUpOut() async { + if (state == ControlState.disabled) { + return; + } + emit(ControlState.normal); + } + + FutureOr disable() async { + emit(ControlState.disabled); + } + + FutureOr enable() async { + emit(ControlState.normal); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index 9b110970..3779e590 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -15,12 +15,9 @@ // along with this program. If not, see . import 'package:flutter/material.dart' hide ButtonStyle; -import 'package:gap/gap.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_screen.dart'; part 'flat_button.g.dart'; @@ -30,61 +27,42 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { super.prefix, super.suffix, super.label, - super.state, - super.style, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.onPressed, super.key, }); @override - FlatButtonStyle? get style => super.style as FlatButtonStyle?; + FlatButtonStyle? get disabledStyle => super.disabledStyle as FlatButtonStyle?; @override - Widget build(BuildContext context) => Material( - color: const Color(0x00000000), - child: Ink( - decoration: BoxDecoration( - color: (style != null) - ? style!.backgroundColors?.color - : Theme.of(context).buttonTheme.colorScheme?.onPrimary, - gradient: (style?.backgroundColors?.isGradient ?? false) - ? LinearGradient( - colors: style!.backgroundColors!.colors, - ) - : null, - boxShadow: [ - if (style?.shadow != null) ...[style!.shadow!] - ], - borderRadius: BorderRadius.all( - Radius.circular(style?.radius ?? 0), - ), - ), - child: ConstrainedBox( - constraints: const BoxConstraints( - minWidth: 88, - minHeight: 36, - ), // min sizes for Material buttons - child: Padding( - padding: EdgeInsets.all(style?.padding ?? 0), - child: Row( - mainAxisSize: mainAxisSize ?? MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - prefix ?? const SizedBox.shrink(), - Gap(style?.padding ?? 10), - if (label != null) ...[ - Text( - label!.text, - style: label!.style ?? context.textTheme.titleLarge, - ).toGradient( - LinearGradientHelper.fromNullableColors(label!.gradient), - ) - ], - Gap(style?.padding ?? 10), - suffix ?? const SizedBox.shrink(), - ], - ), - ), - ), - ), + FlatButtonStyle? get normalStyle => super.normalStyle as FlatButtonStyle?; + + @override + FlatButtonStyle? get hoveredStyle => super.hoveredStyle as FlatButtonStyle?; + + @override + FlatButtonStyle? get focusedStyle => super.focusedStyle as FlatButtonStyle?; + + @override + FlatButtonStyle? get tappedStyle => super.tappedStyle as FlatButtonStyle?; + + @override + Widget build(BuildContext context) => FlatButtonScreen( + prefix: prefix, + suffix: suffix, + label: label, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + onPressed: onPressed, + mainAxisSize: mainAxisSize, + key: key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index d8a75583..e797d659 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -16,9 +16,23 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { @override FlatButton label(TextWrapper? label) => this(label: label); @override - FlatButton state(ControlState? state) => this(state: state); + FlatButton disabledStyle(ButtonStyle? disabledStyle) => + this(disabledStyle: disabledStyle); @override - FlatButton style(ButtonStyle? style) => this(style: style); + FlatButton normalStyle(ButtonStyle? normalStyle) => + this(normalStyle: normalStyle); + @override + FlatButton hoveredStyle(ButtonStyle? hoveredStyle) => + this(hoveredStyle: hoveredStyle); + @override + FlatButton focusedStyle(ButtonStyle? focusedStyle) => + this(focusedStyle: focusedStyle); + @override + FlatButton tappedStyle(ButtonStyle? tappedStyle) => + this(tappedStyle: tappedStyle); + @override + FlatButton onPressed(void Function()? onPressed) => + this(onPressed: onPressed); @override FlatButton mainAxisSize(MainAxisSize? mainAxisSize) => this(mainAxisSize: mainAxisSize); @@ -29,8 +43,12 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { Widget? prefix, Widget? suffix, TextWrapper? label, - ControlState? state, - ButtonStyle? style, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + void Function()? onPressed, MainAxisSize? mainAxisSize, Key? key, }) => @@ -38,8 +56,12 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { prefix: prefix ?? _value.prefix, suffix: suffix ?? _value.suffix, label: label ?? _value.label, - state: state ?? _value.state, - style: style ?? _value.style, + disabledStyle: disabledStyle ?? _value.disabledStyle, + normalStyle: normalStyle ?? _value.normalStyle, + hoveredStyle: hoveredStyle ?? _value.hoveredStyle, + focusedStyle: focusedStyle ?? _value.focusedStyle, + tappedStyle: tappedStyle ?? _value.tappedStyle, + onPressed: onPressed ?? _value.onPressed, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart new file mode 100644 index 00000000..51a8be42 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -0,0 +1,234 @@ +// 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 . + +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:flutter/services.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +class FlatButtonScreen extends CubitScreen { + const FlatButtonScreen({ + this.prefix, + this.suffix, + this.label, + this.disabledStyle, + this.normalStyle, + this.hoveredStyle, + this.focusedStyle, + this.tappedStyle, + this.onPressed, + this.mainAxisSize, + super.key, + }); + + final Widget? prefix; + final Widget? suffix; + final TextWrapper? label; + + final FlatButtonStyle? disabledStyle; + final FlatButtonStyle? normalStyle; + final FlatButtonStyle? hoveredStyle; + final FlatButtonStyle? focusedStyle; + final FlatButtonStyle? tappedStyle; + + final VoidCallback? onPressed; + + final MainAxisSize? mainAxisSize; + + @override + ButtonCubit create(BuildContext context) => ButtonCubit(); + + @override + Widget onBuild(BuildContext context, ControlState state) { + // Set a default style + FlatButtonStyle? style = normalStyle ?? const FlatButtonStyle(); + + switch (state) { + case ControlState.disabled: + style = disabledStyle ?? style; + break; + case ControlState.hovered: + style = hoveredStyle ?? style; + break; + case ControlState.tapped: + style = tappedStyle ?? style; + break; + case ControlState.focused: + style = focusedStyle ?? style; + break; + case ControlState.normal: + case ControlState.selected: + case ControlState.invalid: + break; + } + + return Focus( + onFocusChange: (hasFocus) => + hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), + onKeyEvent: (focusNode, event) { + if (event.logicalKey == LogicalKeyboardKey.enter && state.isFocused()) { + onPressed?.call(); + bloc(context).onClickUpOut(); + return KeyEventResult.handled; + } + return KeyEventResult.ignored; + }, + child: MouseRegion( + cursor: SystemMouseCursors.click, + onEnter: (event) { + bloc(context).onMouseEnter(); + }, + onExit: (event) { + bloc(context).onMouseLeave(); + }, + child: GestureDetector( + onTapDown: (details) { + bloc(context).onClickDown(); + }, + onTapUp: (details) { + onPressed?.call(); + bloc(context).onClickUpIn(); + }, + onTapCancel: () { + onPressed?.call(); + bloc(context).onClickUpOut(); + }, + child: Material( + color: const Color(0x00000000), + child: Ink( + decoration: BoxDecoration( + color: style.backgroundColors?.color ?? + context.colorScheme.primary, + // If no border color => no default value + border: (style.borderColors != null) + ? (style.borderColors?.isGradient ?? false) + ? GradientBoxBorder( + gradient: LinearGradient( + colors: style.borderColors!.colors, + ), + width: style.stroke ?? 2, + ) + : Border.all( + color: style.borderColors!.color, + width: style.stroke ?? 2, + ) + : null, + // if no gradient colors => no default value + gradient: (style.backgroundColors?.isGradient ?? false) + ? LinearGradient( + colors: style.backgroundColors!.colors, + ) + : null, + boxShadow: [ + if (style.shadow != null) ...[style.shadow!] + ], + borderRadius: BorderRadius.all( + Radius.circular(style.radius ?? 0), + ), + ), + child: ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 88, + minHeight: 36, + ), // min sizes for Material buttons + child: Padding( + padding: EdgeInsets.all(style.padding ?? 0), + child: Row( + mainAxisSize: mainAxisSize ?? MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Builder( + builder: (context) { + final color = style?.foregroundColors?.color; + if (color != null) { + return ColorFiltered( + colorFilter: + ColorFilter.mode(color, BlendMode.srcIn), + child: prefix ?? const SizedBox.shrink(), + ); + } else { + return prefix ?? const SizedBox.shrink(); + } + }, + ), + Gap(style.padding ?? 10), + // Choose color + // label.style.color ?? + // buttonStyle.foregroundColor.color ?? + // context.textTheme.titleLarge.color + // + // Choose gradient + // label.gradient ?? + // buttonStyle.foregroundColor.colors ?? + // null + if (label != null) ...[ + Builder( + builder: (context) { + final color = label?.style?.color ?? + style?.foregroundColors?.color ?? + context.textTheme.titleLarge?.color; + final buttonStyleGradient = + (style?.foregroundColors?.isGradient ?? false) + ? style?.foregroundColors?.colors + : null; + final gradient = + label?.gradient ?? buttonStyleGradient; + + return Text( + label!.text, + style: + (label!.style ?? context.textTheme.titleLarge) + ?.copyWith(color: color), + ).toGradient( + LinearGradientHelper.fromNullableColors( + gradient, + ), + ); + }, + ), + ], + Gap(style.padding ?? 10), + Builder( + builder: (context) { + final color = style?.foregroundColors?.color; + if (color != null) { + return ColorFiltered( + colorFilter: + ColorFilter.mode(color, BlendMode.srcIn), + child: suffix ?? const SizedBox.shrink(), + ); + } else { + return suffix ?? const SizedBox.shrink(); + } + }, + ), + ], + ), + ), + ), + ), + ), + ), + ), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart deleted file mode 100644 index 5bf9da67..00000000 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart +++ /dev/null @@ -1,95 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart' hide ButtonStyle; -import 'package:gap/gap.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; - -part 'outlined_button.g.dart'; - -@ComponentCopyWithExtension() -class OutlinedButton extends OutlinedButtonComponent - with $OutlinedButtonCWMixin { - const OutlinedButton({ - super.prefix, - super.suffix, - super.label, - super.state, - super.style, - super.key, - }); - - @override - OutlinedButtonStyle? get style => super.style as OutlinedButtonStyle?; - - @override - Widget build(BuildContext context) => Material( - color: const Color(0x00000000), - child: Ink( - decoration: BoxDecoration( - color: (style != null) - ? style!.backgroundColors?.color - : Theme.of(context).buttonTheme.colorScheme?.onPrimary, - border: (style?.borderColors?.isGradient ?? false) - ? GradientBoxBorder( - gradient: LinearGradient( - colors: style!.borderColors!.colors, - ), - width: style?.stroke ?? 2, - ) - : null, - boxShadow: [ - if (style?.shadow != null) ...[style!.shadow!] - ], - borderRadius: BorderRadius.all( - Radius.circular(style?.radius ?? 0), - ), - ), - child: ConstrainedBox( - constraints: const BoxConstraints( - minWidth: 88, - minHeight: 36, - ), // min sizes for Material buttons - child: Padding( - padding: EdgeInsets.all(style?.padding ?? 0), - child: Row( - mainAxisSize: mainAxisSize ?? MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - prefix ?? const SizedBox.shrink(), - Gap(style?.padding ?? 10), - if (label != null) ...[ - Text( - label!.text, - style: label!.style ?? context.textTheme.titleLarge, - ).toGradient( - LinearGradientHelper.fromNullableColors(label!.gradient), - ) - ], - Gap(style?.padding ?? 10), - suffix ?? const SizedBox.shrink(), - ], - ), - ), - ), - ), - ); -} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart deleted file mode 100644 index 6529baa6..00000000 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart +++ /dev/null @@ -1,50 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'outlined_button.dart'; - -// ************************************************************************** -// ComponentCopyWithGenerator -// ************************************************************************** - -class $OutlinedButtonCWProxyImpl implements $OutlinedButtonComponentCWProxy { - const $OutlinedButtonCWProxyImpl(this._value); - final OutlinedButton _value; - @override - OutlinedButton prefix(Widget? prefix) => this(prefix: prefix); - @override - OutlinedButton suffix(Widget? suffix) => this(suffix: suffix); - @override - OutlinedButton label(TextWrapper? label) => this(label: label); - @override - OutlinedButton state(ControlState? state) => this(state: state); - @override - OutlinedButton style(ButtonStyle? style) => this(style: style); - @override - OutlinedButton mainAxisSize(MainAxisSize? mainAxisSize) => - this(mainAxisSize: mainAxisSize); - @override - OutlinedButton key(Key? key) => this(key: key); - @override - OutlinedButton call({ - Widget? prefix, - Widget? suffix, - TextWrapper? label, - ControlState? state, - ButtonStyle? style, - MainAxisSize? mainAxisSize, - Key? key, - }) => - OutlinedButton( - prefix: prefix ?? _value.prefix, - suffix: suffix ?? _value.suffix, - label: label ?? _value.label, - state: state ?? _value.state, - style: style ?? _value.style, - key: key ?? _value.key, - ); -} - -mixin $OutlinedButtonCWMixin on Component { - $OutlinedButtonComponentCWProxy get copyWith => - $OutlinedButtonCWProxyImpl(this as OutlinedButton); -} diff --git a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart index 2cf2e32c..22efeb80 100644 --- a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart +++ b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart @@ -18,4 +18,6 @@ import 'package:flutter/material.dart'; extension ThemeExtension on BuildContext { TextTheme get textTheme => Theme.of(this).textTheme; + ColorScheme get colorScheme => Theme.of(this).colorScheme; + ButtonThemeData get buttonTheme => Theme.of(this).buttonTheme; } diff --git a/packages/wyatt_ui_kit/models/button_state_diagram.puml b/packages/wyatt_ui_kit/models/button_state_diagram.puml new file mode 100644 index 00000000..adf43bdf --- /dev/null +++ b/packages/wyatt_ui_kit/models/button_state_diagram.puml @@ -0,0 +1,13 @@ +@startuml button_state_diagram +[*] --> normal +[*] --> disabled +normal --> hovered : on mouse enter +hovered --> normal : on mouse leave +hovered --> tapped : on mouse click down +tapped --> hovered : on mouse click up in (the cursor is in button) +tapped --> normal : on mouse click up out (the cursor is out of button) +normal --> focused : on focus +focused --> normal : on unfocus +focused --> tapped : on space bar press down +tapped --> focused : on space bar press up +@enduml \ No newline at end of file diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index 58388d01..f600885d 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -9,9 +9,12 @@ environment: sdk: ">=2.19.0 <3.0.0" dependencies: + equatable: ^2.0.5 flutter: { sdk: flutter } - gap: ^2.0.1 flutter_animate: ^3.0.0 + flutter_bloc: ^8.1.2 + gap: ^2.0.1 + meta: ^1.8.0 wyatt_bloc_helper: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git -- 2.47.2 From aea71fa32c2862eadbab528d482444de05467629 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 21:20:34 +0100 Subject: [PATCH 103/320] feat(ui_kit): add symbol button --- .../lib/src/core/enums/control_state.dart | 10 +-- .../entities/buttons/button_component.dart | 18 +++--- .../src/domain/entities/buttons/buttons.dart | 2 + .../buttons/flat_button_component.dart | 3 +- .../buttons/flat_button_component.g.dart | 8 +-- .../buttons/symbol_button_component.dart | 61 +++++++++++++++++++ .../buttons/symbol_button_component.g.dart | 30 +++++++++ .../entities/buttons/symbol_button_style.dart | 55 +++++++++++++++++ 8 files changed, 165 insertions(+), 22 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart diff --git a/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart index a3c36727..e4629e75 100644 --- a/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart +++ b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart @@ -28,19 +28,11 @@ enum ControlState { tapped, /// When the control is focused (like pressing tab) - focused, - - /// When the control is selected - selected, - - /// When the control content is invalid - invalid; + focused; bool isDisabled() => this == ControlState.disabled; bool isEnabled() => this != ControlState.disabled; bool isHovered() => this == ControlState.hovered; bool isTapped() => this == ControlState.tapped; bool isFocused() => this == ControlState.focused; - bool isSelected() => this == ControlState.selected; - bool isInvalid() => this == ControlState.invalid; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index ee8f3473..ffaa015a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -14,25 +14,21 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -import 'package:wyatt_ui_components/src/domain/entities/component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; abstract class ButtonComponent extends Component { const ButtonComponent({ - this.mainAxisSize = MainAxisSize.min, this.disabledStyle, this.normalStyle, this.hoveredStyle, this.focusedStyle, this.tappedStyle, + this.selectedStyle, + this.invalidStyle, this.onPressed, super.key, }); - /// Main axis size - final MainAxisSize? mainAxisSize; - /// Style of this button in disabled state final ButtonStyle? disabledStyle; @@ -48,6 +44,12 @@ abstract class ButtonComponent extends Component { /// Style of this button in tapped state final ButtonStyle? tappedStyle; + /// Style of this button in selected state + final ButtonStyle? selectedStyle; + + /// Style of this button in invalid state + final ButtonStyle? invalidStyle; + /// Callback on button press - final VoidCallback? onPressed; + final void Function(ControlState state)? onPressed; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart index 940eb03a..f645fbd3 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart @@ -18,3 +18,5 @@ export './button_component.dart'; export './button_style.dart'; export './flat_button_component.dart'; export './flat_button_style.dart'; +export './symbol_button_component.dart'; +export './symbol_button_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index 29156d3c..6f5ecb88 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -24,6 +24,7 @@ part 'flat_button_component.g.dart'; abstract class FlatButtonComponent extends ButtonComponent with CopyWithMixin<$FlatButtonComponentCWProxy> { const FlatButtonComponent({ + this.mainAxisSize = MainAxisSize.min, this.prefix, this.suffix, this.label, @@ -33,7 +34,6 @@ abstract class FlatButtonComponent extends ButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, - super.mainAxisSize, super.key, }); @@ -52,6 +52,7 @@ abstract class FlatButtonComponent extends ButtonComponent @override FlatButtonStyle? get tappedStyle; + final MainAxisSize? mainAxisSize; final Widget? prefix; final Widget? suffix; final TextWrapper? label; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart index 7b6dac39..442de52f 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart @@ -7,6 +7,7 @@ part of 'flat_button_component.dart'; // ************************************************************************** abstract class $FlatButtonComponentCWProxy { + FlatButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); FlatButtonComponent prefix(Widget? prefix); FlatButtonComponent suffix(Widget? suffix); FlatButtonComponent label(TextWrapper? label); @@ -15,10 +16,10 @@ abstract class $FlatButtonComponentCWProxy { FlatButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); FlatButtonComponent focusedStyle(ButtonStyle? focusedStyle); FlatButtonComponent tappedStyle(ButtonStyle? tappedStyle); - FlatButtonComponent onPressed(void Function()? onPressed); - FlatButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); + FlatButtonComponent onPressed(void Function(ControlState)? onPressed); FlatButtonComponent key(Key? key); FlatButtonComponent call({ + MainAxisSize? mainAxisSize, Widget? prefix, Widget? suffix, TextWrapper? label, @@ -27,8 +28,7 @@ abstract class $FlatButtonComponentCWProxy { ButtonStyle? hoveredStyle, ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, - void Function()? onPressed, - MainAxisSize? mainAxisSize, + void Function(ControlState)? onPressed, Key? key, }); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart new file mode 100644 index 00000000..a811af66 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart @@ -0,0 +1,61 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'symbol_button_component.g.dart'; + +@ComponentProxyExtension() +abstract class SymbolButtonComponent extends ButtonComponent + with CopyWithMixin<$SymbolButtonComponentCWProxy> { + const SymbolButtonComponent({ + this.mainAxisSize = MainAxisSize.min, + this.label, + this.icon, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.selectedStyle, + super.onPressed, + super.key, + }); + + @override + SymbolButtonStyle? get disabledStyle; + + @override + SymbolButtonStyle? get normalStyle; + + @override + SymbolButtonStyle? get hoveredStyle; + + @override + SymbolButtonStyle? get focusedStyle; + + @override + SymbolButtonStyle? get tappedStyle; + + @override + SymbolButtonStyle? get selectedStyle; + + final MainAxisSize? mainAxisSize; + final Widget? icon; + final TextWrapper? label; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart new file mode 100644 index 00000000..db10e4fb --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart @@ -0,0 +1,30 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'symbol_button_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $SymbolButtonComponentCWProxy { + SymbolButtonComponent icon(Widget? icon); + SymbolButtonComponent disabledStyle(ButtonStyle? disabledStyle); + SymbolButtonComponent normalStyle(ButtonStyle? normalStyle); + SymbolButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + SymbolButtonComponent focusedStyle(ButtonStyle? focusedStyle); + SymbolButtonComponent tappedStyle(ButtonStyle? tappedStyle); + SymbolButtonComponent selectedStyle(ButtonStyle? selectedStyle); + SymbolButtonComponent onPressed(void Function(ControlState)? onPressed); + SymbolButtonComponent key(Key? key); + SymbolButtonComponent call({ + Widget? icon, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + void Function(ControlState)? onPressed, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart new file mode 100644 index 00000000..2885b0c5 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -0,0 +1,55 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; + +class SymbolButtonStyle extends ButtonStyle { + const SymbolButtonStyle({ + super.radius = 15, + super.padding = 10, + super.foregroundColors, + super.backgroundColors, + super.borderColors, + super.stroke = 2, + super.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + }); + + @override + SymbolButtonStyle copyWith({ + double? radius, + double? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + SymbolButtonStyle( + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); +} -- 2.47.2 From 168d840b872938b6e1156c769ebd35c125836499 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 13 Feb 2023 21:21:05 +0100 Subject: [PATCH 104/320] feat(ui_kit): add symbol button + enhance bloc control over state --- .../example/lib/buttons/buttons.dart | 85 +++++- .../lib/src/components/buttons/buttons.dart | 1 + .../buttons/cubit/button_cubit.dart | 70 +++-- .../buttons/cubit/button_state.dart | 71 +++++ .../cubit/selectable_button_cubit.dart | 40 +++ .../buttons/flat_button/flat_button.dart | 39 ++- .../buttons/flat_button/flat_button.g.dart | 12 +- .../flat_button/flat_button_screen.dart | 19 +- .../buttons/symbol_button/symbol_button.dart | 86 ++++++ .../symbol_button/symbol_button.g.dart | 65 +++++ .../symbol_button/symbol_button_screen.dart | 249 ++++++++++++++++++ .../lib/src/core/mixin/export_bloc_mixin.dart | 26 ++ .../models/button_state_diagram.puml | 3 +- .../selectable_button_state_diagram.puml | 14 + 14 files changed, 721 insertions(+), 59 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/mixin/export_bloc_mixin.dart create mode 100644 packages/wyatt_ui_kit/models/selectable_button_state_diagram.puml diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 3b049711..363ced46 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -24,11 +24,12 @@ const _color2 = Color(0xFF446DF4); const _color3 = Color.fromARGB(255, 26, 132, 247); const _color4 = Color.fromARGB(255, 19, 68, 228); const _colors = [_color1, _color2]; -const _colorsDarken = [_color2, _color3]; +const _colorsDarken = [_color3, _color4]; const _disabled = Color(0xFF6B7280); const _background = Color(0xFF16191D); const _disabledBackground = Color(0xFF16191D + 0x66FFFFFF); const _disabledColors = [Color(0xFF60656A), Color(0xFF383C40)]; +const _selectedColors = [Color(0xFF50CE99), Color(0xFF339572)]; class Buttons extends StatelessWidget { const Buttons({super.key}); @@ -41,30 +42,30 @@ class Buttons extends StatelessWidget { style: Theme.of(context).textTheme.titleLarge, ), const Gap(20), - const FlatButton( - label: TextWrapper('Voir notre savoir faire'), - normalStyle: FlatButtonStyle( + FlatButton( + label: const TextWrapper('Voir notre savoir faire'), + normalStyle: const FlatButtonStyle( foregroundColors: MultiColor(_colors), backgroundColors: MultiColor.single(Colors.transparent), borderColors: MultiColor(_colors), stroke: 3, ), - hoveredStyle: FlatButtonStyle( + hoveredStyle: const FlatButtonStyle( foregroundColors: MultiColor.single(Colors.white), backgroundColors: MultiColor(_colors), borderColors: MultiColor(_colors), stroke: 3, ), - tappedStyle: FlatButtonStyle( + tappedStyle: const FlatButtonStyle( foregroundColors: MultiColor.single(Colors.white), backgroundColors: MultiColor(_colorsDarken), borderColors: MultiColor(_colorsDarken), stroke: 3, ), - prefix: Icon( + prefix: const Icon( Icons.arrow_forward_rounded, ), - suffix: Icon( + suffix: const Icon( Icons.arrow_forward_rounded, ), ), @@ -169,7 +170,7 @@ class Buttons extends StatelessWidget { ), const Gap(20), FlatButton( - onPressed: () => print('pressed'), + onPressed: (state) => print('pressed, from $state'), label: TextWrapper( 'Démarrer mon projet', style: @@ -191,6 +192,72 @@ class Buttons extends StatelessWidget { backgroundColors: MultiColor.single(Colors.red), ), ), + const Gap(20), + ColoredBox( + color: _background, + child: Center( + child: Column( + children: [ + const Gap(20), + SymbolButton( + icon: const Icon( + Icons.android, + size: 25, + ), + label: const TextWrapper('Texte'), + normalStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_disabledBackground), + stroke: 1, + ), + hoveredStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_background), + stroke: 1, + ), + selectedStyle: const SymbolButtonStyle( + borderColors: MultiColor(_selectedColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_disabledBackground), + stroke: 1, + ), + ) + ..bloc.onClickUpIn() + ..bloc.freeze(), + const Gap(20), + SymbolButton( + icon: const Icon( + Icons.android, + size: 25, + ), + label: const TextWrapper('Texte'), + normalStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_disabledBackground), + stroke: 1, + ), + hoveredStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_background), + stroke: 1, + ), + selectedStyle: const SymbolButtonStyle( + borderColors: MultiColor(_selectedColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_disabledBackground), + stroke: 1, + ), + )..bloc.freeze(), + const Gap(20), + ], + ), + ), + ), + const Gap(20), ], ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart index 654c0f72..c8bab7cb 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart @@ -15,3 +15,4 @@ // along with this program. If not, see . export './flat_button/flat_button.dart'; +export './symbol_button/symbol_button.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart index 1af53d3c..d317a181 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart @@ -1,65 +1,99 @@ +// 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 . + import 'dart:async'; +import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -class ButtonCubit extends Cubit { - ButtonCubit() : super(ControlState.normal); +part 'button_state.dart'; + +class ButtonCubit extends Cubit { + ButtonCubit() : super(const ButtonState.initial(ControlState.normal)); FutureOr onMouseEnter() async { - if (state == ControlState.disabled) { + if (state.isDisabled || state.isFreezed) { return; } - emit(ControlState.hovered); + emit(state.copyWith(state: ControlState.hovered)); } FutureOr onMouseLeave() async { - if (state == ControlState.disabled) { + if (state.isDisabled || state.isFreezed) { return; } - emit(ControlState.normal); + + emit(state.copyWith(state: ControlState.normal)); } FutureOr onFocus() async { - if (state == ControlState.disabled) { + if (state.isDisabled || state.isFreezed) { return; } - emit(ControlState.focused); + emit(state.copyWith(state: ControlState.focused)); } FutureOr onUnfocus() async { - if (state == ControlState.disabled) { + if (state.isDisabled || state.isFreezed) { return; } - emit(ControlState.normal); + emit(state.copyWith(state: ControlState.normal)); } FutureOr onClickDown() async { - if (state == ControlState.disabled) { + if (state.isDisabled || state.isFreezed) { return; } - emit(ControlState.tapped); + emit(state.copyWith(state: ControlState.tapped)); } FutureOr onClickUpIn() async { - if (state == ControlState.disabled) { + if (state.isDisabled) { return; } - emit(ControlState.hovered); + emit(state.copyWith(state: ControlState.hovered)); } FutureOr onClickUpOut() async { - if (state == ControlState.disabled) { + if (state.isDisabled) { return; } - emit(ControlState.normal); + emit(state.copyWith(state: ControlState.normal)); } FutureOr disable() async { - emit(ControlState.disabled); + if (state.isFreezed) { + return; + } + emit(state.copyWith(state: ControlState.disabled)); } FutureOr enable() async { - emit(ControlState.normal); + if (state.isFreezed) { + return; + } + emit(state.copyWith(state: ControlState.normal)); + } + + FutureOr freeze() async { + emit(state.copyWith(freezed: true)); + } + + FutureOr unfreeze() async { + emit(state.copyWith(freezed: false)); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart new file mode 100644 index 00000000..1d2e5350 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart @@ -0,0 +1,71 @@ +// ignore_for_file: public_member_api_docs, sort_constructors_first +// 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 . + +part of 'button_cubit.dart'; + +class ButtonState extends Equatable { + const ButtonState({ + required this.state, + required this.selected, + required this.invalid, + required this.freezed, + }); + + const ButtonState.initial(this.state) + : selected = false, + invalid = false, + freezed = false; + + final ControlState state; + + // Not in control state, because a button state can be + // a control state + extra state + // e.g : hover + invalid, or selected + tapped + final bool selected; + final bool invalid; + final bool freezed; + + bool get isDisabled => state.isDisabled(); + bool get isEnabled => state.isEnabled(); + bool get isFocused => state.isFocused(); + bool get isHovered => state.isHovered(); + bool get isTapped => state.isTapped(); + + // only for consistence + bool get isSelected => selected; + bool get isInvalid => invalid; + bool get isFreezed => freezed; + + @override + List get props => [state, selected, invalid, freezed]; + + @override + bool? get stringify => true; + + ButtonState copyWith({ + ControlState? state, + bool? selected, + bool? invalid, + bool? freezed, + }) => + ButtonState( + state: state ?? this.state, + selected: selected ?? this.selected, + invalid: invalid ?? this.invalid, + freezed: freezed ?? this.freezed, + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart new file mode 100644 index 00000000..a271e09a --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart @@ -0,0 +1,40 @@ +// 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 . + +import 'dart:async'; + +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; + +class SelectableButtonCubit extends ButtonCubit { + @override + FutureOr onClickUpIn() async { + if (state.isDisabled || state.isFreezed) { + return; + } + emit( + state.copyWith(state: ControlState.hovered, selected: !state.selected), + ); + } + + @override + FutureOr onClickUpOut() async { + if (state.isDisabled || state.isFreezed) { + return; + } + emit(state.copyWith(state: ControlState.normal, selected: !state.selected)); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index 3779e590..4821a2c3 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -17,13 +17,16 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_screen.dart'; +import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'flat_button.g.dart'; @ComponentCopyWithExtension() -class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { - const FlatButton({ +class FlatButton extends FlatButtonComponent + with $FlatButtonCWMixin, ExportBloc { + FlatButton({ super.prefix, super.suffix, super.label, @@ -33,9 +36,15 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { super.focusedStyle, super.tappedStyle, super.onPressed, + super.mainAxisSize, super.key, }); + final ButtonCubit _cubit = ButtonCubit(); + + @override + ButtonCubit get bloc => _cubit; + @override FlatButtonStyle? get disabledStyle => super.disabledStyle as FlatButtonStyle?; @@ -52,17 +61,19 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { FlatButtonStyle? get tappedStyle => super.tappedStyle as FlatButtonStyle?; @override - Widget build(BuildContext context) => FlatButtonScreen( - prefix: prefix, - suffix: suffix, - label: label, - disabledStyle: disabledStyle, - normalStyle: normalStyle, - hoveredStyle: hoveredStyle, - focusedStyle: focusedStyle, - tappedStyle: tappedStyle, - onPressed: onPressed, - mainAxisSize: mainAxisSize, - key: key, + Widget build(BuildContext context) => exportBloc( + child: FlatButtonScreen( + prefix: prefix, + suffix: suffix, + label: label, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + onPressed: onPressed, + mainAxisSize: mainAxisSize, + key: key, + ), ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index e797d659..fc436468 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -10,6 +10,9 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { const $FlatButtonCWProxyImpl(this._value); final FlatButton _value; @override + FlatButton mainAxisSize(MainAxisSize? mainAxisSize) => + this(mainAxisSize: mainAxisSize); + @override FlatButton prefix(Widget? prefix) => this(prefix: prefix); @override FlatButton suffix(Widget? suffix) => this(suffix: suffix); @@ -31,15 +34,13 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { FlatButton tappedStyle(ButtonStyle? tappedStyle) => this(tappedStyle: tappedStyle); @override - FlatButton onPressed(void Function()? onPressed) => + FlatButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override - FlatButton mainAxisSize(MainAxisSize? mainAxisSize) => - this(mainAxisSize: mainAxisSize); - @override FlatButton key(Key? key) => this(key: key); @override FlatButton call({ + MainAxisSize? mainAxisSize, Widget? prefix, Widget? suffix, TextWrapper? label, @@ -48,8 +49,7 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { ButtonStyle? hoveredStyle, ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, - void Function()? onPressed, - MainAxisSize? mainAxisSize, + void Function(ControlState)? onPressed, Key? key, }) => FlatButton( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 51a8be42..1d44a8f0 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -25,7 +25,7 @@ import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; -class FlatButtonScreen extends CubitScreen { +class FlatButtonScreen extends CubitScreen { const FlatButtonScreen({ this.prefix, this.suffix, @@ -50,7 +50,7 @@ class FlatButtonScreen extends CubitScreen { final FlatButtonStyle? focusedStyle; final FlatButtonStyle? tappedStyle; - final VoidCallback? onPressed; + final void Function(ControlState state)? onPressed; final MainAxisSize? mainAxisSize; @@ -58,11 +58,11 @@ class FlatButtonScreen extends CubitScreen { ButtonCubit create(BuildContext context) => ButtonCubit(); @override - Widget onBuild(BuildContext context, ControlState state) { + Widget onBuild(BuildContext context, ButtonState state) { // Set a default style FlatButtonStyle? style = normalStyle ?? const FlatButtonStyle(); - switch (state) { + switch (state.state) { case ControlState.disabled: style = disabledStyle ?? style; break; @@ -76,8 +76,7 @@ class FlatButtonScreen extends CubitScreen { style = focusedStyle ?? style; break; case ControlState.normal: - case ControlState.selected: - case ControlState.invalid: + // already done break; } @@ -85,8 +84,8 @@ class FlatButtonScreen extends CubitScreen { onFocusChange: (hasFocus) => hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), onKeyEvent: (focusNode, event) { - if (event.logicalKey == LogicalKeyboardKey.enter && state.isFocused()) { - onPressed?.call(); + if (event.logicalKey == LogicalKeyboardKey.enter && state.isFocused) { + onPressed?.call(state.state); bloc(context).onClickUpOut(); return KeyEventResult.handled; } @@ -105,11 +104,11 @@ class FlatButtonScreen extends CubitScreen { bloc(context).onClickDown(); }, onTapUp: (details) { - onPressed?.call(); + onPressed?.call(state.state); bloc(context).onClickUpIn(); }, onTapCancel: () { - onPressed?.call(); + onPressed?.call(state.state); bloc(context).onClickUpOut(); }, child: Material( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart new file mode 100644 index 00000000..04a44790 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart @@ -0,0 +1,86 @@ +// 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 . + +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_screen.dart'; +import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; + +part 'symbol_button.g.dart'; + +@ComponentCopyWithExtension() +class SymbolButton extends SymbolButtonComponent + with $SymbolButtonCWMixin, ExportBloc { + SymbolButton({ + super.icon, + super.label, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.selectedStyle, + super.mainAxisSize, + super.onPressed, + super.key, + }); + + final SelectableButtonCubit _cubit = SelectableButtonCubit(); + + @override + SelectableButtonCubit get bloc => _cubit; + + @override + SymbolButtonStyle? get disabledStyle => + super.disabledStyle as SymbolButtonStyle?; + + @override + SymbolButtonStyle? get normalStyle => super.normalStyle as SymbolButtonStyle?; + + @override + SymbolButtonStyle? get hoveredStyle => + super.hoveredStyle as SymbolButtonStyle?; + + @override + SymbolButtonStyle? get focusedStyle => + super.focusedStyle as SymbolButtonStyle?; + + @override + SymbolButtonStyle? get tappedStyle => super.tappedStyle as SymbolButtonStyle?; + + @override + SymbolButtonStyle? get selectedStyle => + super.selectedStyle as SymbolButtonStyle?; + + @override + Widget build(BuildContext context) => exportBloc( + child: SymbolButtonScreen( + icon: icon, + label: label, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + selectedStyle: selectedStyle, + onPressed: onPressed, + mainAxisSize: mainAxisSize, + key: key, + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart new file mode 100644 index 00000000..30476ddd --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart @@ -0,0 +1,65 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'symbol_button.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { + const $SymbolButtonCWProxyImpl(this._value); + final SymbolButton _value; + @override + SymbolButton icon(Widget? icon) => this(icon: icon); + @override + SymbolButton disabledStyle(ButtonStyle? disabledStyle) => + this(disabledStyle: disabledStyle); + @override + SymbolButton normalStyle(ButtonStyle? normalStyle) => + this(normalStyle: normalStyle); + @override + SymbolButton hoveredStyle(ButtonStyle? hoveredStyle) => + this(hoveredStyle: hoveredStyle); + @override + SymbolButton focusedStyle(ButtonStyle? focusedStyle) => + this(focusedStyle: focusedStyle); + @override + SymbolButton tappedStyle(ButtonStyle? tappedStyle) => + this(tappedStyle: tappedStyle); + @override + SymbolButton selectedStyle(ButtonStyle? selectedStyle) => + this(selectedStyle: selectedStyle); + @override + SymbolButton onPressed(void Function(ControlState)? onPressed) => + this(onPressed: onPressed); + @override + SymbolButton key(Key? key) => this(key: key); + @override + SymbolButton call({ + Widget? icon, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + void Function(ControlState)? onPressed, + Key? key, + }) => + SymbolButton( + icon: icon ?? _value.icon, + disabledStyle: disabledStyle ?? _value.disabledStyle, + normalStyle: normalStyle ?? _value.normalStyle, + hoveredStyle: hoveredStyle ?? _value.hoveredStyle, + focusedStyle: focusedStyle ?? _value.focusedStyle, + tappedStyle: tappedStyle ?? _value.tappedStyle, + selectedStyle: selectedStyle ?? _value.selectedStyle, + onPressed: onPressed ?? _value.onPressed, + key: key ?? _value.key, + ); +} + +mixin $SymbolButtonCWMixin on Component { + $SymbolButtonComponentCWProxy get copyWith => + $SymbolButtonCWProxyImpl(this as SymbolButton); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart new file mode 100644 index 00000000..11f9050d --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -0,0 +1,249 @@ +// 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 . + +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:flutter/services.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +class SymbolButtonScreen + extends CubitScreen { + const SymbolButtonScreen({ + this.icon, + this.label, + this.disabledStyle, + this.normalStyle, + this.hoveredStyle, + this.focusedStyle, + this.tappedStyle, + this.selectedStyle, + this.onPressed, + this.mainAxisSize, + super.key, + }); + + final Widget? icon; + final TextWrapper? label; + + final SymbolButtonStyle? disabledStyle; + final SymbolButtonStyle? normalStyle; + final SymbolButtonStyle? hoveredStyle; + final SymbolButtonStyle? focusedStyle; + final SymbolButtonStyle? tappedStyle; + final SymbolButtonStyle? selectedStyle; + + final void Function(ControlState state)? onPressed; + + final MainAxisSize? mainAxisSize; + + @override + SelectableButtonCubit create(BuildContext context) => SelectableButtonCubit(); + + @override + Widget onBuild(BuildContext context, ButtonState state) { + // Set a default style + SymbolButtonStyle? style = normalStyle ?? const SymbolButtonStyle(); + + switch (state.state) { + case ControlState.disabled: + style = disabledStyle ?? style; + break; + case ControlState.hovered: + style = hoveredStyle ?? style; + break; + case ControlState.tapped: + style = tappedStyle ?? style; + break; + case ControlState.focused: + style = focusedStyle ?? style; + break; + case ControlState.normal: + break; + } + + if (state.isSelected) { + style = selectedStyle ?? style; + } + + return Focus( + onFocusChange: (hasFocus) => + hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), + onKeyEvent: (focusNode, event) { + if (event.logicalKey == LogicalKeyboardKey.enter && state.isFocused) { + onPressed?.call(state.state); + bloc(context).onClickUpOut(); + return KeyEventResult.handled; + } + return KeyEventResult.ignored; + }, + child: MouseRegion( + cursor: SystemMouseCursors.click, + onEnter: (event) { + bloc(context).onMouseEnter(); + }, + onExit: (event) { + bloc(context).onMouseLeave(); + }, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTapDown: (details) { + bloc(context).onClickDown(); + }, + onTapUp: (details) { + onPressed?.call(state.state); + bloc(context).onClickUpIn(); + }, + onTapCancel: () { + onPressed?.call(state.state); + bloc(context).onClickUpOut(); + }, + child: Row( + mainAxisSize: mainAxisSize ?? MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox.square( + dimension: 60, + child: AspectRatio( + aspectRatio: 1, + child: DecoratedBox( + decoration: BoxDecoration( + color: style.backgroundColors?.color ?? + context.colorScheme.primary, + // If no border color => no default value + border: (style.borderColors != null) + ? (style.borderColors?.isGradient ?? false) + ? GradientBoxBorder( + gradient: LinearGradient( + colors: style.borderColors!.colors, + ), + width: style.stroke ?? 2, + ) + : Border.all( + color: style.borderColors!.color, + width: style.stroke ?? 2, + ) + : null, + // if no gradient colors => no default value + gradient: (style.backgroundColors?.isGradient ?? false) + ? LinearGradient( + colors: style.backgroundColors!.colors, + ) + : null, + boxShadow: [ + if (style.shadow != null) ...[style.shadow!] + ], + borderRadius: BorderRadius.all( + Radius.circular(style.radius ?? 0), + ), + ), + child: ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 50, + ), // min sizes for Material buttons + child: Padding( + padding: EdgeInsets.all(style.padding ?? 0), + child: Center( + // Choose color + // button.foreground.colors (gradient) ?? + // buttonStyle.foregroundColor.color ?? + // context.colorScheme.secondary + child: Builder( + builder: (context) { + final gradient = + (style?.foregroundColors?.isGradient ?? false) + ? LinearGradient( + colors: + style!.foregroundColors!.colors, + ) + : null; + final color = style?.foregroundColors?.color ?? + context.colorScheme.secondary; + if (gradient != null) { + return ShaderMask( + blendMode: BlendMode.srcIn, + shaderCallback: (bounds) => + gradient.createShader( + Rect.fromLTWH( + 0, + 0, + bounds.width, + bounds.height, + ), + ), + child: icon, + ); + } + return ColorFiltered( + colorFilter: + ColorFilter.mode(color, BlendMode.srcIn), + child: icon, + ); + }, + ), + ), + ), + ), + ), + ), + ), + // Choose color + // label.style.color ?? + // buttonStyle.foregroundColor.color ?? + // context.textTheme.titleLarge.color + // + // Choose gradient + // label.gradient ?? + // buttonStyle.foregroundColor.colors ?? + // null + if (label != null) ...[ + const Gap(10), + Builder( + builder: (context) { + final color = label?.style?.color ?? + style?.foregroundColors?.color ?? + context.textTheme.titleLarge?.color; + final buttonStyleGradient = + (style?.foregroundColors?.isGradient ?? false) + ? style?.foregroundColors?.colors + : null; + final gradient = label?.gradient ?? buttonStyleGradient; + + return Text( + label!.text, + style: (label!.style ?? context.textTheme.titleMedium) + ?.copyWith(color: color), + ).toGradient( + LinearGradientHelper.fromNullableColors( + gradient, + ), + ); + }, + ), + ], + ], + ), + ), + ), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/core/mixin/export_bloc_mixin.dart b/packages/wyatt_ui_kit/lib/src/core/mixin/export_bloc_mixin.dart new file mode 100644 index 00000000..f2ae41bf --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/mixin/export_bloc_mixin.dart @@ -0,0 +1,26 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +mixin ExportBloc> { + T get bloc; + Widget exportBloc({required Widget child}) => BlocProvider.value( + value: bloc, + child: child, + ); +} diff --git a/packages/wyatt_ui_kit/models/button_state_diagram.puml b/packages/wyatt_ui_kit/models/button_state_diagram.puml index adf43bdf..1f3ed7ef 100644 --- a/packages/wyatt_ui_kit/models/button_state_diagram.puml +++ b/packages/wyatt_ui_kit/models/button_state_diagram.puml @@ -8,6 +8,5 @@ tapped --> hovered : on mouse click up in (the cursor is in button) tapped --> normal : on mouse click up out (the cursor is out of button) normal --> focused : on focus focused --> normal : on unfocus -focused --> tapped : on space bar press down -tapped --> focused : on space bar press up +focused --> tapped : on enter press down @enduml \ No newline at end of file diff --git a/packages/wyatt_ui_kit/models/selectable_button_state_diagram.puml b/packages/wyatt_ui_kit/models/selectable_button_state_diagram.puml new file mode 100644 index 00000000..ca56770e --- /dev/null +++ b/packages/wyatt_ui_kit/models/selectable_button_state_diagram.puml @@ -0,0 +1,14 @@ +@startuml selectable_button_state_diagram +[*] --> normal +[*] --> disabled +normal --> hovered : on mouse enter +hovered --> normal : on mouse leave +hovered --> tapped : on mouse click down +tapped --> selected : on mouse click up and the previous state was not selected +selected --> tapped : on mouse click down +tapped --> hovered : on mouse click up in (the cursor is in button) +tapped --> normal : on mouse click up out (the cursor is out of button) +normal --> focused : on focus +focused --> normal : on unfocus +focused --> tapped : on enter press down +@enduml \ No newline at end of file -- 2.47.2 From 4f1a0642985044325f974b80cb023cdfe19dc067 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 10:32:54 +0100 Subject: [PATCH 105/320] feat(ui_component): add simple icon button and dimension style --- .../src/domain/entities/buttons/buttons.dart | 2 + .../buttons/simple_icon_button_component.dart | 58 ++++++++++++++++++ .../simple_icon_button_component.g.dart | 30 ++++++++++ .../buttons/simple_icon_button_style.dart | 60 +++++++++++++++++++ .../buttons/symbol_button_component.g.dart | 4 ++ .../entities/buttons/symbol_button_style.dart | 5 ++ 6 files changed, 159 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart index f645fbd3..8517b268 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart @@ -18,5 +18,7 @@ export './button_component.dart'; export './button_style.dart'; export './flat_button_component.dart'; export './flat_button_style.dart'; +export './simple_icon_button_component.dart'; +export './simple_icon_button_style.dart'; export './symbol_button_component.dart'; export './symbol_button_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart new file mode 100644 index 00000000..8080ce5a --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart @@ -0,0 +1,58 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/simple_icon_button_style.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'simple_icon_button_component.g.dart'; + +@ComponentProxyExtension() +abstract class SimpleIconButtonComponent extends ButtonComponent + with CopyWithMixin<$SimpleIconButtonComponentCWProxy> { + const SimpleIconButtonComponent({ + this.icon, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.selectedStyle, + super.onPressed, + super.key, + }); + + @override + SimpleIconButtonStyle? get disabledStyle; + + @override + SimpleIconButtonStyle? get normalStyle; + + @override + SimpleIconButtonStyle? get hoveredStyle; + + @override + SimpleIconButtonStyle? get focusedStyle; + + @override + SimpleIconButtonStyle? get tappedStyle; + + @override + SimpleIconButtonStyle? get selectedStyle; + + final Icon? icon; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart new file mode 100644 index 00000000..017a62ff --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart @@ -0,0 +1,30 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'simple_icon_button_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $SimpleIconButtonComponentCWProxy { + SimpleIconButtonComponent icon(Icon? icon); + SimpleIconButtonComponent disabledStyle(ButtonStyle? disabledStyle); + SimpleIconButtonComponent normalStyle(ButtonStyle? normalStyle); + SimpleIconButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + SimpleIconButtonComponent focusedStyle(ButtonStyle? focusedStyle); + SimpleIconButtonComponent tappedStyle(ButtonStyle? tappedStyle); + SimpleIconButtonComponent selectedStyle(ButtonStyle? selectedStyle); + SimpleIconButtonComponent onPressed(void Function(ControlState)? onPressed); + SimpleIconButtonComponent key(Key? key); + SimpleIconButtonComponent call({ + Icon? icon, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + void Function(ControlState)? onPressed, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart new file mode 100644 index 00000000..fc311faf --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -0,0 +1,60 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; + +class SimpleIconButtonStyle extends ButtonStyle { + const SimpleIconButtonStyle({ + this.dimension = 30, + super.radius = 5, + super.padding = 5, + super.foregroundColors, + super.backgroundColors, + super.borderColors, + super.stroke = 2, + super.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + }); + + final double? dimension; + + @override + SimpleIconButtonStyle copyWith({ + double? dimension, + double? radius, + double? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + SimpleIconButtonStyle( + dimension: dimension ?? this.dimension, + radius: radius ?? radius, + padding: padding ?? padding, + foregroundColors: foregroundColors ?? foregroundColors, + backgroundColors: backgroundColors ?? backgroundColors, + borderColors: borderColors ?? borderColors, + stroke: stroke ?? stroke, + shadow: shadow ?? shadow, + ); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart index db10e4fb..6b2fda5c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart @@ -7,6 +7,8 @@ part of 'symbol_button_component.dart'; // ************************************************************************** abstract class $SymbolButtonComponentCWProxy { + SymbolButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); + SymbolButtonComponent label(TextWrapper? label); SymbolButtonComponent icon(Widget? icon); SymbolButtonComponent disabledStyle(ButtonStyle? disabledStyle); SymbolButtonComponent normalStyle(ButtonStyle? normalStyle); @@ -17,6 +19,8 @@ abstract class $SymbolButtonComponentCWProxy { SymbolButtonComponent onPressed(void Function(ControlState)? onPressed); SymbolButtonComponent key(Key? key); SymbolButtonComponent call({ + MainAxisSize? mainAxisSize, + TextWrapper? label, Widget? icon, ButtonStyle? disabledStyle, ButtonStyle? normalStyle, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index 2885b0c5..2e94d3b3 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -20,6 +20,7 @@ import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dar class SymbolButtonStyle extends ButtonStyle { const SymbolButtonStyle({ + this.dimension = 60, super.radius = 15, super.padding = 10, super.foregroundColors, @@ -33,8 +34,11 @@ class SymbolButtonStyle extends ButtonStyle { ), }); + final double? dimension; + @override SymbolButtonStyle copyWith({ + double? dimension, double? radius, double? padding, MultiColor? foregroundColors, @@ -44,6 +48,7 @@ class SymbolButtonStyle extends ButtonStyle { BoxShadow? shadow, }) => SymbolButtonStyle( + dimension: dimension ?? this.dimension, radius: radius ?? this.radius, padding: padding ?? this.padding, foregroundColors: foregroundColors ?? this.foregroundColors, -- 2.47.2 From e4d904eb8de606b15add84c9ba6132aa1c2ad62f Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 10:33:20 +0100 Subject: [PATCH 106/320] feat(ui_kit): implement simple icon button and use dimension style --- .../example/lib/buttons/buttons.dart | 182 +++++++++++----- .../lib/src/components/buttons/buttons.dart | 1 + .../buttons/flat_button/flat_button.g.dart | 1 + .../simple_icon_button.dart | 84 ++++++++ .../simple_icon_button.g.dart | 66 ++++++ .../simple_icon_screen.dart | 196 ++++++++++++++++++ .../symbol_button/symbol_button.g.dart | 9 + .../symbol_button/symbol_button_screen.dart | 6 +- 8 files changed, 487 insertions(+), 58 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 363ced46..f7e312e3 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -170,7 +170,6 @@ class Buttons extends StatelessWidget { ), const Gap(20), FlatButton( - onPressed: (state) => print('pressed, from $state'), label: TextWrapper( 'Démarrer mon projet', style: @@ -196,63 +195,136 @@ class Buttons extends StatelessWidget { ColoredBox( color: _background, child: Center( - child: Column( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ + Column( + children: [ + const Gap(20), + SymbolButton( + icon: const Icon( + Icons.android, + size: 25, + ), + label: const TextWrapper('Texte'), + normalStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: + MultiColor.single(_disabledBackground), + stroke: 1, + ), + hoveredStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_background), + stroke: 1, + ), + selectedStyle: const SymbolButtonStyle( + borderColors: MultiColor(_selectedColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: + MultiColor.single(_disabledBackground), + stroke: 1, + ), + ) + ..bloc.onClickUpIn() + ..bloc.freeze(), + const Gap(20), + SymbolButton( + icon: const Icon( + Icons.android, + size: 25, + ), + label: const TextWrapper('Texte'), + normalStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: + MultiColor.single(_disabledBackground), + stroke: 1, + ), + hoveredStyle: const SymbolButtonStyle( + borderColors: MultiColor(_disabledColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor.single(_background), + stroke: 1, + ), + selectedStyle: const SymbolButtonStyle( + borderColors: MultiColor(_selectedColors), + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: + MultiColor.single(_disabledBackground), + stroke: 1, + ), + )..bloc.freeze(), + const Gap(20), + ], + ), const Gap(20), - SymbolButton( - icon: const Icon( - Icons.android, - size: 25, - ), - label: const TextWrapper('Texte'), - normalStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_disabledBackground), - stroke: 1, - ), - hoveredStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_background), - stroke: 1, - ), - selectedStyle: const SymbolButtonStyle( - borderColors: MultiColor(_selectedColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_disabledBackground), - stroke: 1, - ), - ) - ..bloc.onClickUpIn() - ..bloc.freeze(), - const Gap(20), - SymbolButton( - icon: const Icon( - Icons.android, - size: 25, - ), - label: const TextWrapper('Texte'), - normalStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_disabledBackground), - stroke: 1, - ), - hoveredStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_background), - stroke: 1, - ), - selectedStyle: const SymbolButtonStyle( - borderColors: MultiColor(_selectedColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_disabledBackground), - stroke: 1, - ), - )..bloc.freeze(), + Row( + children: [ + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + normalStyle: const SimpleIconButtonStyle( + backgroundColors: MultiColor.single(_disabled), + ), + hoveredStyle: SimpleIconButtonStyle( + backgroundColors: + MultiColor.single(_disabledColors.last), + ), + ), + const Gap(10), + SimpleIconButton( + icon: const Icon( + Icons.sunny, + size: 17, + ), + normalStyle: const SimpleIconButtonStyle( + backgroundColors: MultiColor.single(_disabled), + ), + hoveredStyle: SimpleIconButtonStyle( + backgroundColors: + MultiColor.single(_disabledColors.last), + ), + ), + const Gap(10), + SimpleIconButton( + icon: const Icon( + Icons.wechat, + size: 17, + ), + normalStyle: const SimpleIconButtonStyle( + backgroundColors: MultiColor.single(_disabled), + ), + hoveredStyle: SimpleIconButtonStyle( + backgroundColors: + MultiColor.single(_disabledColors.last), + ), + ) + ], + ), const Gap(20), + Row( + children: [ + SymbolButton( + icon: const FlutterLogo( + size: 50, + ), + normalStyle: const SymbolButtonStyle( + dimension: 73, + backgroundColors: MultiColor.single(Colors.white), + ), + hoveredStyle: SymbolButtonStyle( + dimension: 73, + backgroundColors: MultiColor.single(Colors.grey[300]), + ), + ), + ], + ), ], ), ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart index c8bab7cb..c3cd55d7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart @@ -15,4 +15,5 @@ // along with this program. If not, see . export './flat_button/flat_button.dart'; +export './simple_icon_button/simple_icon_button.dart'; export './symbol_button/symbol_button.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index fc436468..379f13ba 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -62,6 +62,7 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { focusedStyle: focusedStyle ?? _value.focusedStyle, tappedStyle: tappedStyle ?? _value.tappedStyle, onPressed: onPressed ?? _value.onPressed, + mainAxisSize: mainAxisSize ?? _value.mainAxisSize, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart new file mode 100644 index 00000000..db4a188e --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -0,0 +1,84 @@ +// 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 . + +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_screen.dart'; +import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; + +part 'simple_icon_button.g.dart'; + +@ComponentCopyWithExtension() +class SimpleIconButton extends SimpleIconButtonComponent + with $SimpleIconButtonCWMixin, ExportBloc { + SimpleIconButton({ + super.icon, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.selectedStyle, + super.onPressed, + super.key, + }); + + final ButtonCubit _cubit = ButtonCubit(); + + @override + ButtonCubit get bloc => _cubit; + + @override + SimpleIconButtonStyle? get disabledStyle => + super.disabledStyle as SimpleIconButtonStyle?; + + @override + SimpleIconButtonStyle? get normalStyle => + super.normalStyle as SimpleIconButtonStyle?; + + @override + SimpleIconButtonStyle? get hoveredStyle => + super.hoveredStyle as SimpleIconButtonStyle?; + + @override + SimpleIconButtonStyle? get focusedStyle => + super.focusedStyle as SimpleIconButtonStyle?; + + @override + SimpleIconButtonStyle? get tappedStyle => + super.tappedStyle as SimpleIconButtonStyle?; + + @override + SimpleIconButtonStyle? get selectedStyle => + super.selectedStyle as SimpleIconButtonStyle?; + + @override + Widget build(BuildContext context) => exportBloc( + child: SimpleIconButtonScreen( + icon: icon, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + selectedStyle: selectedStyle, + onPressed: onPressed, + key: key, + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart new file mode 100644 index 00000000..87f97ab8 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart @@ -0,0 +1,66 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'simple_icon_button.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $SimpleIconButtonCWProxyImpl + implements $SimpleIconButtonComponentCWProxy { + const $SimpleIconButtonCWProxyImpl(this._value); + final SimpleIconButton _value; + @override + SimpleIconButton icon(Icon? icon) => this(icon: icon); + @override + SimpleIconButton disabledStyle(ButtonStyle? disabledStyle) => + this(disabledStyle: disabledStyle); + @override + SimpleIconButton normalStyle(ButtonStyle? normalStyle) => + this(normalStyle: normalStyle); + @override + SimpleIconButton hoveredStyle(ButtonStyle? hoveredStyle) => + this(hoveredStyle: hoveredStyle); + @override + SimpleIconButton focusedStyle(ButtonStyle? focusedStyle) => + this(focusedStyle: focusedStyle); + @override + SimpleIconButton tappedStyle(ButtonStyle? tappedStyle) => + this(tappedStyle: tappedStyle); + @override + SimpleIconButton selectedStyle(ButtonStyle? selectedStyle) => + this(selectedStyle: selectedStyle); + @override + SimpleIconButton onPressed(void Function(ControlState)? onPressed) => + this(onPressed: onPressed); + @override + SimpleIconButton key(Key? key) => this(key: key); + @override + SimpleIconButton call({ + Icon? icon, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + void Function(ControlState)? onPressed, + Key? key, + }) => + SimpleIconButton( + icon: icon ?? _value.icon, + disabledStyle: disabledStyle ?? _value.disabledStyle, + normalStyle: normalStyle ?? _value.normalStyle, + hoveredStyle: hoveredStyle ?? _value.hoveredStyle, + focusedStyle: focusedStyle ?? _value.focusedStyle, + tappedStyle: tappedStyle ?? _value.tappedStyle, + selectedStyle: selectedStyle ?? _value.selectedStyle, + onPressed: onPressed ?? _value.onPressed, + key: key ?? _value.key, + ); +} + +mixin $SimpleIconButtonCWMixin on Component { + $SimpleIconButtonComponentCWProxy get copyWith => + $SimpleIconButtonCWProxyImpl(this as SimpleIconButton); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart new file mode 100644 index 00000000..64e5bc49 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart @@ -0,0 +1,196 @@ +// 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 . + +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:flutter/services.dart'; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; + +class SimpleIconButtonScreen extends CubitScreen { + const SimpleIconButtonScreen({ + this.icon, + this.disabledStyle, + this.normalStyle, + this.hoveredStyle, + this.focusedStyle, + this.tappedStyle, + this.selectedStyle, + this.onPressed, + super.key, + }); + + final Icon? icon; + + final SimpleIconButtonStyle? disabledStyle; + final SimpleIconButtonStyle? normalStyle; + final SimpleIconButtonStyle? hoveredStyle; + final SimpleIconButtonStyle? focusedStyle; + final SimpleIconButtonStyle? tappedStyle; + final SimpleIconButtonStyle? selectedStyle; + + final void Function(ControlState state)? onPressed; + + @override + ButtonCubit create(BuildContext context) => ButtonCubit(); + + @override + Widget onBuild(BuildContext context, ButtonState state) { + // Set a default style + SimpleIconButtonStyle? style = normalStyle ?? const SimpleIconButtonStyle(); + + switch (state.state) { + case ControlState.disabled: + style = disabledStyle ?? style; + break; + case ControlState.hovered: + style = hoveredStyle ?? style; + break; + case ControlState.tapped: + style = tappedStyle ?? style; + break; + case ControlState.focused: + style = focusedStyle ?? style; + break; + case ControlState.normal: + break; + } + + return Focus( + onFocusChange: (hasFocus) => + hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), + onKeyEvent: (focusNode, event) { + if (event.logicalKey == LogicalKeyboardKey.enter && state.isFocused) { + onPressed?.call(state.state); + bloc(context).onClickUpOut(); + return KeyEventResult.handled; + } + return KeyEventResult.ignored; + }, + child: MouseRegion( + cursor: SystemMouseCursors.click, + onEnter: (event) { + bloc(context).onMouseEnter(); + }, + onExit: (event) { + bloc(context).onMouseLeave(); + }, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTapDown: (details) { + bloc(context).onClickDown(); + }, + onTapUp: (details) { + onPressed?.call(state.state); + bloc(context).onClickUpIn(); + }, + onTapCancel: () { + onPressed?.call(state.state); + bloc(context).onClickUpOut(); + }, + child: SizedBox.square( + dimension: style.dimension ?? 30, + child: AspectRatio( + aspectRatio: 1, + child: DecoratedBox( + decoration: BoxDecoration( + color: style.backgroundColors?.color ?? + context.colorScheme.tertiary, + // If no border color => no default value + border: (style.borderColors != null) + ? (style.borderColors?.isGradient ?? false) + ? GradientBoxBorder( + gradient: LinearGradient( + colors: style.borderColors!.colors, + ), + width: style.stroke ?? 2, + ) + : Border.all( + color: style.borderColors!.color, + width: style.stroke ?? 2, + ) + : null, + // if no gradient colors => no default value + gradient: (style.backgroundColors?.isGradient ?? false) + ? LinearGradient( + colors: style.backgroundColors!.colors, + ) + : null, + boxShadow: [ + if (style.shadow != null) ...[style.shadow!] + ], + borderRadius: BorderRadius.all( + Radius.circular(style.radius ?? 0), + ), + ), + child: ConstrainedBox( + constraints: BoxConstraints( + minWidth: style.dimension ?? 30, + ), // min sizes for Material buttons + child: Padding( + padding: EdgeInsets.all(style.padding ?? 0), + child: Center( + // Choose color + // button.foreground.colors (gradient) ?? + // buttonStyle.foregroundColor.color ?? + // context.colorScheme.onTertiary + child: Builder( + builder: (context) { + if (icon?.color != null) { + return icon!; + } + final gradient = + (style?.foregroundColors?.isGradient ?? false) + ? LinearGradient( + colors: style!.foregroundColors!.colors, + ) + : null; + final color = style?.foregroundColors?.color ?? + context.colorScheme.onTertiary; + if (gradient != null) { + return ShaderMask( + blendMode: BlendMode.srcIn, + shaderCallback: (bounds) => gradient.createShader( + Rect.fromLTWH( + 0, + 0, + bounds.width, + bounds.height, + ), + ), + child: icon, + ); + } + return ColorFiltered( + colorFilter: + ColorFilter.mode(color, BlendMode.srcIn), + child: icon, + ); + }, + ), + ), + ), + ), + ), + ), + ), + ), + ), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart index 30476ddd..7aa6b439 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart @@ -10,6 +10,11 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { const $SymbolButtonCWProxyImpl(this._value); final SymbolButton _value; @override + SymbolButton mainAxisSize(MainAxisSize? mainAxisSize) => + this(mainAxisSize: mainAxisSize); + @override + SymbolButton label(TextWrapper? label) => this(label: label); + @override SymbolButton icon(Widget? icon) => this(icon: icon); @override SymbolButton disabledStyle(ButtonStyle? disabledStyle) => @@ -36,6 +41,8 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { SymbolButton key(Key? key) => this(key: key); @override SymbolButton call({ + MainAxisSize? mainAxisSize, + TextWrapper? label, Widget? icon, ButtonStyle? disabledStyle, ButtonStyle? normalStyle, @@ -48,12 +55,14 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { }) => SymbolButton( icon: icon ?? _value.icon, + label: label ?? _value.label, disabledStyle: disabledStyle ?? _value.disabledStyle, normalStyle: normalStyle ?? _value.normalStyle, hoveredStyle: hoveredStyle ?? _value.hoveredStyle, focusedStyle: focusedStyle ?? _value.focusedStyle, tappedStyle: tappedStyle ?? _value.tappedStyle, selectedStyle: selectedStyle ?? _value.selectedStyle, + mainAxisSize: mainAxisSize ?? _value.mainAxisSize, onPressed: onPressed ?? _value.onPressed, key: key ?? _value.key, ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index 11f9050d..0b993bc2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -122,7 +122,7 @@ class SymbolButtonScreen mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox.square( - dimension: 60, + dimension: style.dimension ?? 60, child: AspectRatio( aspectRatio: 1, child: DecoratedBox( @@ -157,8 +157,8 @@ class SymbolButtonScreen ), ), child: ConstrainedBox( - constraints: const BoxConstraints( - minWidth: 50, + constraints: BoxConstraints( + minWidth: style.dimension ?? 60, ), // min sizes for Material buttons child: Padding( padding: EdgeInsets.all(style.padding ?? 0), -- 2.47.2 From d49a4cad3190fae0a73ecde1d33b9bb3b3a94fbe Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 11:54:01 +0100 Subject: [PATCH 107/320] feat(ui_component): add file selection component --- .../src/domain/entities/buttons/buttons.dart | 2 + .../file_selection_button_component.dart | 69 +++++++++++++++++++ .../file_selection_button_component.g.dart | 39 +++++++++++ .../buttons/file_selection_button_style.dart | 55 +++++++++++++++ 4 files changed, 165 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart index 8517b268..da89e0e5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart @@ -16,6 +16,8 @@ export './button_component.dart'; export './button_style.dart'; +export './file_selection_button_component.dart'; +export './file_selection_button_style.dart'; export './flat_button_component.dart'; export './flat_button_style.dart'; export './simple_icon_button_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart new file mode 100644 index 00000000..4d08b13e --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart @@ -0,0 +1,69 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'file_selection_button_component.g.dart'; + +@ComponentProxyExtension() +abstract class FileSelectionButtonComponent extends ButtonComponent + with CopyWithMixin<$FileSelectionButtonComponentCWProxy> { + const FileSelectionButtonComponent({ + this.mainAxisSize = MainAxisSize.min, + this.leading, + this.title, + this.subTitle, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.selectedStyle, + super.invalidStyle, + super.onPressed, + super.key, + }); + + @override + FileSelectionButtonStyle? get disabledStyle; + + @override + FileSelectionButtonStyle? get normalStyle; + + @override + FileSelectionButtonStyle? get hoveredStyle; + + @override + FileSelectionButtonStyle? get focusedStyle; + + @override + FileSelectionButtonStyle? get tappedStyle; + + // When a file is selected + @override + FileSelectionButtonStyle? get selectedStyle; + + // When the input file is invalid (too large, not supported format... etc) + @override + FileSelectionButtonStyle? get invalidStyle; + + final MainAxisSize? mainAxisSize; + final Widget? leading; + final TextWrapper? title; + final TextWrapper? subTitle; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart new file mode 100644 index 00000000..d8708923 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart @@ -0,0 +1,39 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'file_selection_button_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $FileSelectionButtonComponentCWProxy { + FileSelectionButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); + FileSelectionButtonComponent leading(Widget? leading); + FileSelectionButtonComponent title(TextWrapper? title); + FileSelectionButtonComponent subTitle(TextWrapper? subTitle); + FileSelectionButtonComponent disabledStyle(ButtonStyle? disabledStyle); + FileSelectionButtonComponent normalStyle(ButtonStyle? normalStyle); + FileSelectionButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + FileSelectionButtonComponent focusedStyle(ButtonStyle? focusedStyle); + FileSelectionButtonComponent tappedStyle(ButtonStyle? tappedStyle); + FileSelectionButtonComponent selectedStyle(ButtonStyle? selectedStyle); + FileSelectionButtonComponent invalidStyle(ButtonStyle? invalidStyle); + FileSelectionButtonComponent onPressed( + void Function(ControlState)? onPressed); + FileSelectionButtonComponent key(Key? key); + FileSelectionButtonComponent call({ + MainAxisSize? mainAxisSize, + Widget? leading, + TextWrapper? title, + TextWrapper? subTitle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + ButtonStyle? invalidStyle, + void Function(ControlState)? onPressed, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart new file mode 100644 index 00000000..5e0bd378 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -0,0 +1,55 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; +import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; + +class FileSelectionButtonStyle extends ButtonStyle { + const FileSelectionButtonStyle({ + super.radius = 12, + super.padding = 13, + super.foregroundColors, + super.backgroundColors, + super.borderColors, + super.stroke = 2, + super.shadow = const BoxShadow( + blurRadius: 30, + offset: Offset(0, 5), + color: Color.fromRGBO(0, 0, 0, 0.05), + ), + }); + + @override + FileSelectionButtonStyle copyWith({ + double? radius, + double? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + FileSelectionButtonStyle( + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); +} -- 2.47.2 From 4695cf06188b18fd686e6bdd5c4b6a68f60db495 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 11:54:32 +0100 Subject: [PATCH 108/320] feat(ui_kit): implement file selection button with invalid cubit and dotted package --- .../example/lib/buttons/buttons.dart | 42 +++ .../lib/src/components/buttons/buttons.dart | 1 + .../buttons/cubit/invalid_button_cubit.dart | 73 +++++ .../cubit/selectable_button_cubit.dart | 20 ++ .../file_selection_button.dart | 96 +++++++ .../file_selection_button.g.dart | 85 ++++++ .../file_selection_button_screen.dart | 251 ++++++++++++++++++ .../flat_button/flat_button_screen.dart | 205 +++++++------- packages/wyatt_ui_kit/pubspec.yaml | 1 + 9 files changed, 670 insertions(+), 104 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index f7e312e3..8d9cbd9f 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -30,6 +30,7 @@ const _background = Color(0xFF16191D); const _disabledBackground = Color(0xFF16191D + 0x66FFFFFF); const _disabledColors = [Color(0xFF60656A), Color(0xFF383C40)]; const _selectedColors = [Color(0xFF50CE99), Color(0xFF339572)]; +const _invalidColor = Color(0xFFFB5E3C); class Buttons extends StatelessWidget { const Buttons({super.key}); @@ -325,6 +326,47 @@ class Buttons extends StatelessWidget { ), ], ), + const Gap(20), + FileSelectionButton( + leading: const DecoratedBox( + decoration: BoxDecoration( + color: _disabled, + borderRadius: BorderRadius.all( + Radius.circular(5), + ), + ), + child: Padding( + padding: EdgeInsets.all(8), + child: Icon( + Icons.file_upload_outlined, + color: Colors.white, + ), + ), + ), + title: TextWrapper( + 'Ajouter un fichier', + style: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith(color: _disabled), + ), + subTitle: TextWrapper.text('Taille max: 20 Mo'), + normalStyle: const FileSelectionButtonStyle( + backgroundColors: MultiColor.single(_disabledBackground), + foregroundColors: MultiColor.single(_disabled), + borderColors: MultiColor.single(_disabled), + ), + hoveredStyle: const FileSelectionButtonStyle( + backgroundColors: MultiColor.single(_disabledBackground), + foregroundColors: MultiColor.single(_disabled), + borderColors: MultiColor.single(Colors.white), + ), + invalidStyle: const FileSelectionButtonStyle( + backgroundColors: MultiColor.single(_disabledBackground), + foregroundColors: MultiColor.single(_invalidColor), + borderColors: MultiColor.single(_invalidColor), + ), + ) ], ), ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart index c3cd55d7..bf04a627 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export './file_selection_button/file_selection_button.dart'; export './flat_button/flat_button.dart'; export './simple_icon_button/simple_icon_button.dart'; export './symbol_button/symbol_button.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart new file mode 100644 index 00000000..e90832d8 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart @@ -0,0 +1,73 @@ +// 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 . + +import 'dart:async'; +import 'dart:math'; + +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; + +class InvalidButtonCubit extends ButtonCubit { + @override + FutureOr onClickUpIn() async { + if (state.isDisabled || state.isFreezed) { + return; + } + + emit( + state.copyWith( + state: ControlState.hovered, + // TODO(hpcl): change this + invalid: Random().nextBool(), + ), + ); + } + + @override + FutureOr onClickUpOut() async { + if (state.isDisabled || state.isFreezed) { + return; + } + + emit( + state.copyWith( + state: ControlState.normal, + // TODO(hpcl): change this + invalid: Random().nextBool(), + ), + ); + } + + FutureOr invalidate() async { + if (state.isDisabled || state.isFreezed) { + return; + } + + emit( + state.copyWith(invalid: true), + ); + } + + FutureOr fix() async { + if (state.isDisabled || state.isFreezed) { + return; + } + + emit( + state.copyWith(invalid: false), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart index a271e09a..9b747ad4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart @@ -37,4 +37,24 @@ class SelectableButtonCubit extends ButtonCubit { } emit(state.copyWith(state: ControlState.normal, selected: !state.selected)); } + + FutureOr select() async { + if (state.isDisabled || state.isFreezed) { + return; + } + + emit( + state.copyWith(selected: true), + ); + } + + FutureOr unselect() async { + if (state.isDisabled || state.isFreezed) { + return; + } + + emit( + state.copyWith(selected: false), + ); + } } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart new file mode 100644 index 00000000..44759cc7 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart @@ -0,0 +1,96 @@ +// 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 . + +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_screen.dart'; +import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; + +part 'file_selection_button.g.dart'; + +@ComponentCopyWithExtension() +class FileSelectionButton extends FileSelectionButtonComponent + with $FileSelectionButtonCWMixin, ExportBloc { + FileSelectionButton({ + super.leading, + super.title, + super.subTitle, + super.disabledStyle, + super.normalStyle, + super.hoveredStyle, + super.focusedStyle, + super.tappedStyle, + super.selectedStyle, + super.invalidStyle, + super.onPressed, + super.mainAxisSize, + super.key, + }); + + final InvalidButtonCubit _cubit = InvalidButtonCubit(); + + @override + InvalidButtonCubit get bloc => _cubit; + + @override + FileSelectionButtonStyle? get disabledStyle => + super.disabledStyle as FileSelectionButtonStyle?; + + @override + FileSelectionButtonStyle? get normalStyle => + super.normalStyle as FileSelectionButtonStyle?; + + @override + FileSelectionButtonStyle? get hoveredStyle => + super.hoveredStyle as FileSelectionButtonStyle?; + + @override + FileSelectionButtonStyle? get focusedStyle => + super.focusedStyle as FileSelectionButtonStyle?; + + @override + FileSelectionButtonStyle? get tappedStyle => + super.tappedStyle as FileSelectionButtonStyle?; + + @override + FileSelectionButtonStyle? get selectedStyle => + super.selectedStyle as FileSelectionButtonStyle?; + + @override + FileSelectionButtonStyle? get invalidStyle => + super.invalidStyle as FileSelectionButtonStyle?; + + @override + Widget build(BuildContext context) => exportBloc( + child: FileSelectionButtonScreen( + leading: leading, + title: title, + subTitle: subTitle, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + selectedStyle: selectedStyle, + invalidStyle: invalidStyle, + onPressed: onPressed, + mainAxisSize: mainAxisSize, + key: key, + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart new file mode 100644 index 00000000..d70db729 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart @@ -0,0 +1,85 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'file_selection_button.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $FileSelectionButtonCWProxyImpl + implements $FileSelectionButtonComponentCWProxy { + const $FileSelectionButtonCWProxyImpl(this._value); + final FileSelectionButton _value; + @override + FileSelectionButton mainAxisSize(MainAxisSize? mainAxisSize) => + this(mainAxisSize: mainAxisSize); + @override + FileSelectionButton leading(Widget? leading) => this(leading: leading); + @override + FileSelectionButton title(TextWrapper? title) => this(title: title); + @override + FileSelectionButton subTitle(TextWrapper? subTitle) => + this(subTitle: subTitle); + @override + FileSelectionButton disabledStyle(ButtonStyle? disabledStyle) => + this(disabledStyle: disabledStyle); + @override + FileSelectionButton normalStyle(ButtonStyle? normalStyle) => + this(normalStyle: normalStyle); + @override + FileSelectionButton hoveredStyle(ButtonStyle? hoveredStyle) => + this(hoveredStyle: hoveredStyle); + @override + FileSelectionButton focusedStyle(ButtonStyle? focusedStyle) => + this(focusedStyle: focusedStyle); + @override + FileSelectionButton tappedStyle(ButtonStyle? tappedStyle) => + this(tappedStyle: tappedStyle); + @override + FileSelectionButton selectedStyle(ButtonStyle? selectedStyle) => + this(selectedStyle: selectedStyle); + @override + FileSelectionButton invalidStyle(ButtonStyle? invalidStyle) => + this(invalidStyle: invalidStyle); + @override + FileSelectionButton onPressed(void Function(ControlState)? onPressed) => + this(onPressed: onPressed); + @override + FileSelectionButton key(Key? key) => this(key: key); + @override + FileSelectionButton call({ + MainAxisSize? mainAxisSize, + Widget? leading, + TextWrapper? title, + TextWrapper? subTitle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + ButtonStyle? invalidStyle, + void Function(ControlState)? onPressed, + Key? key, + }) => + FileSelectionButton( + leading: leading ?? _value.leading, + title: title ?? _value.title, + subTitle: subTitle ?? _value.subTitle, + disabledStyle: disabledStyle ?? _value.disabledStyle, + normalStyle: normalStyle ?? _value.normalStyle, + hoveredStyle: hoveredStyle ?? _value.hoveredStyle, + focusedStyle: focusedStyle ?? _value.focusedStyle, + tappedStyle: tappedStyle ?? _value.tappedStyle, + selectedStyle: selectedStyle ?? _value.selectedStyle, + invalidStyle: invalidStyle ?? _value.invalidStyle, + onPressed: onPressed ?? _value.onPressed, + mainAxisSize: mainAxisSize ?? _value.mainAxisSize, + key: key ?? _value.key, + ); +} + +mixin $FileSelectionButtonCWMixin on Component { + $FileSelectionButtonComponentCWProxy get copyWith => + $FileSelectionButtonCWProxyImpl(this as FileSelectionButton); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart new file mode 100644 index 00000000..fd92b971 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -0,0 +1,251 @@ +// 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 . + +import 'package:dotted_border/dotted_border.dart'; +import 'package:flutter/material.dart' hide ButtonStyle; +import 'package:flutter/services.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; + +class FileSelectionButtonScreen + extends CubitScreen { + const FileSelectionButtonScreen({ + this.leading, + this.title, + this.subTitle, + this.disabledStyle, + this.normalStyle, + this.hoveredStyle, + this.focusedStyle, + this.tappedStyle, + this.selectedStyle, + this.invalidStyle, + this.onPressed, + this.mainAxisSize, + super.key, + }); + + final Widget? leading; + final TextWrapper? title; + final TextWrapper? subTitle; + + final FileSelectionButtonStyle? disabledStyle; + final FileSelectionButtonStyle? normalStyle; + final FileSelectionButtonStyle? hoveredStyle; + final FileSelectionButtonStyle? focusedStyle; + final FileSelectionButtonStyle? tappedStyle; + final FileSelectionButtonStyle? selectedStyle; + final FileSelectionButtonStyle? invalidStyle; + + final void Function(ControlState state)? onPressed; + + final MainAxisSize? mainAxisSize; + + @override + InvalidButtonCubit create(BuildContext context) => InvalidButtonCubit(); + + @override + Widget onBuild(BuildContext context, ButtonState state) { + // Set a default style + FileSelectionButtonStyle? style = + normalStyle ?? const FileSelectionButtonStyle(); + + switch (state.state) { + case ControlState.disabled: + style = disabledStyle ?? style; + break; + case ControlState.hovered: + style = hoveredStyle ?? style; + break; + case ControlState.tapped: + style = tappedStyle ?? style; + break; + case ControlState.focused: + style = focusedStyle ?? style; + break; + case ControlState.normal: + // already done + break; + } + + if (state.isSelected) { + style = selectedStyle ?? style; + } + + if (state.isInvalid) { + style = invalidStyle ?? style; + } + + print(state); + + return Focus( + onFocusChange: (hasFocus) => + hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), + onKeyEvent: (focusNode, event) { + if (event.logicalKey == LogicalKeyboardKey.enter && state.isFocused) { + onPressed?.call(state.state); + bloc(context).onClickUpOut(); + return KeyEventResult.handled; + } + return KeyEventResult.ignored; + }, + child: MouseRegion( + cursor: SystemMouseCursors.click, + onEnter: (event) { + bloc(context).onMouseEnter(); + }, + onExit: (event) { + bloc(context).onMouseLeave(); + }, + child: GestureDetector( + onTapDown: (details) { + bloc(context).onClickDown(); + }, + onTapUp: (details) { + onPressed?.call(state.state); + bloc(context).onClickUpIn(); + }, + onTapCancel: () { + onPressed?.call(state.state); + bloc(context).onClickUpOut(); + }, + child: DottedBorder( + padding: EdgeInsets.zero, + dashPattern: const [5, 5], + strokeWidth: style.stroke ?? 3, + color: style.borderColors?.color ?? context.colorScheme.primary, + borderType: BorderType.RRect, + radius: Radius.circular(style.radius ?? 0), + strokeCap: StrokeCap.square, + child: DecoratedBox( + decoration: BoxDecoration( + color: style.backgroundColors?.color ?? + context.colorScheme.primary, + // if no gradient colors => no default value + gradient: (style.backgroundColors?.isGradient ?? false) + ? LinearGradient( + colors: style.backgroundColors!.colors, + ) + : null, + boxShadow: [ + if (style.shadow != null) ...[style.shadow!] + ], + borderRadius: BorderRadius.all( + Radius.circular(style.radius ?? 0), + ), + ), + child: ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 200, + minHeight: 50, + ), // min sizes for Material buttons + child: Padding( + padding: EdgeInsets.all(style.padding ?? 0), + child: Row( + mainAxisSize: mainAxisSize ?? MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + if (leading != null) ...[ + leading ?? const SizedBox.shrink(), + Gap(style.padding ?? 10), + ], + + // Choose color + // label.style.color ?? + // buttonStyle.foregroundColor.color ?? + // context.textTheme.titleLarge.color + // + // Choose gradient + // label.gradient ?? + // buttonStyle.foregroundColor.colors ?? + // null + Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (title != null) ...[ + Builder( + builder: (context) { + final color = title?.style?.color ?? + style?.foregroundColors?.color ?? + context.textTheme.titleLarge?.color; + final buttonStyleGradient = + (style?.foregroundColors?.isGradient ?? + false) + ? style?.foregroundColors?.colors + : null; + final gradient = + title?.gradient ?? buttonStyleGradient; + + return Text( + title!.text, + style: (title!.style ?? + context.textTheme.titleLarge) + ?.copyWith(color: color), + ).toGradient( + LinearGradientHelper.fromNullableColors( + gradient, + ), + ); + }, + ), + ], + if (subTitle != null) ...[ + Builder( + builder: (context) { + final color = subTitle?.style?.color ?? + style?.foregroundColors?.color ?? + context.textTheme.bodyMedium?.color; + final buttonStyleGradient = + (style?.foregroundColors?.isGradient ?? + false) + ? style?.foregroundColors?.colors + : null; + final gradient = + subTitle?.gradient ?? buttonStyleGradient; + + return Text( + subTitle!.text, + style: (subTitle!.style ?? + context.textTheme.bodyMedium) + ?.copyWith(color: color), + ).toGradient( + LinearGradientHelper.fromNullableColors( + gradient, + ), + ); + }, + ), + ], + ], + ), + ], + ), + ), + ), + ), + ), + ), + ), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 1d44a8f0..050ab61e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -111,117 +111,114 @@ class FlatButtonScreen extends CubitScreen { onPressed?.call(state.state); bloc(context).onClickUpOut(); }, - child: Material( - color: const Color(0x00000000), - child: Ink( - decoration: BoxDecoration( - color: style.backgroundColors?.color ?? - context.colorScheme.primary, - // If no border color => no default value - border: (style.borderColors != null) - ? (style.borderColors?.isGradient ?? false) - ? GradientBoxBorder( - gradient: LinearGradient( - colors: style.borderColors!.colors, - ), - width: style.stroke ?? 2, - ) - : Border.all( - color: style.borderColors!.color, - width: style.stroke ?? 2, - ) - : null, - // if no gradient colors => no default value - gradient: (style.backgroundColors?.isGradient ?? false) - ? LinearGradient( - colors: style.backgroundColors!.colors, - ) - : null, - boxShadow: [ - if (style.shadow != null) ...[style.shadow!] - ], - borderRadius: BorderRadius.all( - Radius.circular(style.radius ?? 0), - ), + child: DecoratedBox( + decoration: BoxDecoration( + color: style.backgroundColors?.color ?? + context.colorScheme.primary, + // If no border color => no default value + border: (style.borderColors != null) + ? (style.borderColors?.isGradient ?? false) + ? GradientBoxBorder( + gradient: LinearGradient( + colors: style.borderColors!.colors, + ), + width: style.stroke ?? 2, + ) + : Border.all( + color: style.borderColors!.color, + width: style.stroke ?? 2, + ) + : null, + // if no gradient colors => no default value + gradient: (style.backgroundColors?.isGradient ?? false) + ? LinearGradient( + colors: style.backgroundColors!.colors, + ) + : null, + boxShadow: [ + if (style.shadow != null) ...[style.shadow!] + ], + borderRadius: BorderRadius.all( + Radius.circular(style.radius ?? 0), ), - child: ConstrainedBox( - constraints: const BoxConstraints( - minWidth: 88, - minHeight: 36, - ), // min sizes for Material buttons - child: Padding( - padding: EdgeInsets.all(style.padding ?? 0), - child: Row( - mainAxisSize: mainAxisSize ?? MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ + ), + child: ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 88, + minHeight: 36, + ), // min sizes for Material buttons + child: Padding( + padding: EdgeInsets.all(style.padding ?? 0), + child: Row( + mainAxisSize: mainAxisSize ?? MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Builder( + builder: (context) { + final color = style?.foregroundColors?.color; + if (color != null) { + return ColorFiltered( + colorFilter: + ColorFilter.mode(color, BlendMode.srcIn), + child: prefix ?? const SizedBox.shrink(), + ); + } else { + return prefix ?? const SizedBox.shrink(); + } + }, + ), + Gap(style.padding ?? 10), + // Choose color + // label.style.color ?? + // buttonStyle.foregroundColor.color ?? + // context.textTheme.titleLarge.color + // + // Choose gradient + // label.gradient ?? + // buttonStyle.foregroundColor.colors ?? + // null + if (label != null) ...[ Builder( builder: (context) { - final color = style?.foregroundColors?.color; - if (color != null) { - return ColorFiltered( - colorFilter: - ColorFilter.mode(color, BlendMode.srcIn), - child: prefix ?? const SizedBox.shrink(), - ); - } else { - return prefix ?? const SizedBox.shrink(); - } - }, - ), - Gap(style.padding ?? 10), - // Choose color - // label.style.color ?? - // buttonStyle.foregroundColor.color ?? - // context.textTheme.titleLarge.color - // - // Choose gradient - // label.gradient ?? - // buttonStyle.foregroundColor.colors ?? - // null - if (label != null) ...[ - Builder( - builder: (context) { - final color = label?.style?.color ?? - style?.foregroundColors?.color ?? - context.textTheme.titleLarge?.color; - final buttonStyleGradient = - (style?.foregroundColors?.isGradient ?? false) - ? style?.foregroundColors?.colors - : null; - final gradient = - label?.gradient ?? buttonStyleGradient; + final color = label?.style?.color ?? + style?.foregroundColors?.color ?? + context.textTheme.titleLarge?.color; + final buttonStyleGradient = + (style?.foregroundColors?.isGradient ?? false) + ? style?.foregroundColors?.colors + : null; + final gradient = + label?.gradient ?? buttonStyleGradient; - return Text( - label!.text, - style: - (label!.style ?? context.textTheme.titleLarge) - ?.copyWith(color: color), - ).toGradient( - LinearGradientHelper.fromNullableColors( - gradient, - ), - ); - }, - ), - ], - Gap(style.padding ?? 10), - Builder( - builder: (context) { - final color = style?.foregroundColors?.color; - if (color != null) { - return ColorFiltered( - colorFilter: - ColorFilter.mode(color, BlendMode.srcIn), - child: suffix ?? const SizedBox.shrink(), - ); - } else { - return suffix ?? const SizedBox.shrink(); - } + return Text( + label!.text, + style: + (label!.style ?? context.textTheme.titleLarge) + ?.copyWith(color: color), + ).toGradient( + LinearGradientHelper.fromNullableColors( + gradient, + ), + ); }, ), ], - ), + Gap(style.padding ?? 10), + Builder( + builder: (context) { + final color = style?.foregroundColors?.color; + if (color != null) { + return ColorFiltered( + colorFilter: + ColorFilter.mode(color, BlendMode.srcIn), + child: suffix ?? const SizedBox.shrink(), + ); + } else { + return suffix ?? const SizedBox.shrink(); + } + }, + ), + ], ), ), ), diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index f600885d..319289e2 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -9,6 +9,7 @@ environment: sdk: ">=2.19.0 <3.0.0" dependencies: + dotted_border: ^2.0.0+3 equatable: ^2.0.5 flutter: { sdk: flutter } flutter_animate: ^3.0.0 -- 2.47.2 From 82eeba4d7dc6d253755a590ba57328e2e7c0a1e7 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 12:50:17 +0100 Subject: [PATCH 109/320] feat(ui_kit): add multicolor support in linear gradient helper --- .../lib/src/core/helpers/linear_gradient_helper.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart index 7e3af2cd..e102ba2e 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart @@ -15,8 +15,12 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; class LinearGradientHelper { static LinearGradient? fromNullableColors(List? colors) => colors != null ? LinearGradient(colors: colors) : null; + + static LinearGradient? fromMultiColor(MultiColor multiColor) => + multiColor.isGradient ? LinearGradient(colors: multiColor.colors) : null; } -- 2.47.2 From c942e2aacf8742759cb8e2d213f2f6efe45c5c87 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 12:50:46 +0100 Subject: [PATCH 110/320] feat(ui_kit): update example with drawer and custom launch parameters --- packages/wyatt_ui_kit/example/README.md | 19 ++---- .../example/lib/buttons/buttons.dart | 63 ++++++++++--------- .../wyatt_ui_kit/example/lib/cards/cards.dart | 11 ++-- packages/wyatt_ui_kit/example/lib/home.dart | 52 ++++++++++++--- packages/wyatt_ui_kit/example/lib/main.dart | 13 ++-- .../wyatt_ui_kit/example/macos/Podfile.lock | 7 +++ .../macos/Runner/DebugProfile.entitlements | 16 ++--- .../example/macos/Runner/Release.entitlements | 2 + 8 files changed, 118 insertions(+), 65 deletions(-) diff --git a/packages/wyatt_ui_kit/example/README.md b/packages/wyatt_ui_kit/example/README.md index 2b3fce4c..510ce200 100644 --- a/packages/wyatt_ui_kit/example/README.md +++ b/packages/wyatt_ui_kit/example/README.md @@ -1,16 +1,9 @@ -# example +# Wyatt UIKIt Example -A new Flutter project. +You can force the launch page. (For debug purposes). -## Getting Started +```shell +flutter run -d macos --dart-define PAGE=1 +``` -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +> This will forces button page. \ No newline at end of file diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 8d9cbd9f..010d26f3 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -36,38 +36,43 @@ class Buttons extends StatelessWidget { const Buttons({super.key}); @override - Widget build(BuildContext context) => Column( + Widget build(BuildContext context) => ListView( children: [ - Text( - 'Buttons', - style: Theme.of(context).textTheme.titleLarge, + const Gap(20), + Align( + child: Text( + 'Buttons', + style: Theme.of(context).textTheme.titleLarge, + ), ), const Gap(20), - FlatButton( - label: const TextWrapper('Voir notre savoir faire'), - normalStyle: const FlatButtonStyle( - foregroundColors: MultiColor(_colors), - backgroundColors: MultiColor.single(Colors.transparent), - borderColors: MultiColor(_colors), - stroke: 3, - ), - hoveredStyle: const FlatButtonStyle( - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor(_colors), - borderColors: MultiColor(_colors), - stroke: 3, - ), - tappedStyle: const FlatButtonStyle( - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor(_colorsDarken), - borderColors: MultiColor(_colorsDarken), - stroke: 3, - ), - prefix: const Icon( - Icons.arrow_forward_rounded, - ), - suffix: const Icon( - Icons.arrow_forward_rounded, + Center( + child: FlatButton( + label: const TextWrapper('Voir notre savoir faire'), + normalStyle: const FlatButtonStyle( + foregroundColors: MultiColor(_colors), + backgroundColors: MultiColor.single(Colors.transparent), + borderColors: MultiColor(_colors), + stroke: 3, + ), + hoveredStyle: const FlatButtonStyle( + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor(_colors), + borderColors: MultiColor(_colors), + stroke: 3, + ), + tappedStyle: const FlatButtonStyle( + foregroundColors: MultiColor.single(Colors.white), + backgroundColors: MultiColor(_colorsDarken), + borderColors: MultiColor(_colorsDarken), + stroke: 3, + ), + prefix: const Icon( + Icons.arrow_forward_rounded, + ), + suffix: const Icon( + Icons.arrow_forward_rounded, + ), ), ), const Gap(20), diff --git a/packages/wyatt_ui_kit/example/lib/cards/cards.dart b/packages/wyatt_ui_kit/example/lib/cards/cards.dart index c0a4fe7d..4c99cdea 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/cards.dart @@ -9,11 +9,14 @@ class Cards extends StatelessWidget { const Cards({super.key}); @override - Widget build(BuildContext context) => Column( + Widget build(BuildContext context) => ListView( children: [ - Text( - 'Cards', - style: Theme.of(context).textTheme.titleLarge, + const Gap(20), + Align( + child: Text( + 'Cards', + style: Theme.of(context).textTheme.titleLarge, + ), ), const Gap(20), const InformationCards(), diff --git a/packages/wyatt_ui_kit/example/lib/home.dart b/packages/wyatt_ui_kit/example/lib/home.dart index 2d2d7c20..69ab4cec 100644 --- a/packages/wyatt_ui_kit/example/lib/home.dart +++ b/packages/wyatt_ui_kit/example/lib/home.dart @@ -1,20 +1,61 @@ import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit_example/buttons/buttons.dart'; import 'package:wyatt_ui_kit_example/cards/cards.dart'; -const String title = 'Wyatt Ui Kit Example'; +const String title = 'Wyatt UIKit Example'; class Home extends StatefulWidget { - const Home({super.key}); + const Home({super.key, this.forceIndex = 0}); + + final int forceIndex; @override State createState() => _HomeState(); } class _HomeState extends State { + final List pages = const [Cards(), Buttons()]; + + int currentIndex = 0; + + @override + void initState() { + currentIndex = widget.forceIndex; + super.initState(); + } + @override Widget build(BuildContext context) => Scaffold( - drawer: const Drawer(), + drawer: Drawer( + child: ListView( + padding: EdgeInsets.zero, + children: [ + ListTile( + title: const Text('Cards'), + onTap: () { + if (currentIndex != 0) { + setState(() { + currentIndex = 0; + }); + Navigator.pop(context); + } + }, + ), + ListTile( + title: const Text('Buttons'), + onTap: () { + if (currentIndex != 1) { + setState(() { + currentIndex = 1; + }); + Navigator.pop(context); + } + }, + ), + ], + ), + ), appBar: AppBar( title: const Text(title), actions: [ @@ -30,10 +71,7 @@ class _HomeState extends State { ), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 8), - child: ListView( - shrinkWrap: true, - children: const [Cards()], - ), + child: pages[currentIndex], ), ); } diff --git a/packages/wyatt_ui_kit/example/lib/main.dart b/packages/wyatt_ui_kit/example/lib/main.dart index 70f24dac..48398c02 100644 --- a/packages/wyatt_ui_kit/example/lib/main.dart +++ b/packages/wyatt_ui_kit/example/lib/main.dart @@ -22,13 +22,16 @@ import 'package:wyatt_ui_kit_example/home.dart'; import 'package:wyatt_ui_kit_example/theme_extension.dart'; void main(List args) { - runApp(const App()); + const forcePage = int.fromEnvironment('PAGE'); + runApp(const App( + defaultPage: forcePage, + ),); } class App extends StatelessWidget { - const App({super.key}); + const App({required this.defaultPage, super.key}); - static const String title = 'Wyatt Ui Kit Example'; + final int defaultPage; @override Widget build(BuildContext context) => AdaptiveTheme( @@ -125,7 +128,9 @@ class App extends StatelessWidget { Locale('fr', ''), ], title: title, - home: const Home(), + home: Home( + forceIndex: defaultPage, + ), ), ); } diff --git a/packages/wyatt_ui_kit/example/macos/Podfile.lock b/packages/wyatt_ui_kit/example/macos/Podfile.lock index d1fc289f..9127443a 100644 --- a/packages/wyatt_ui_kit/example/macos/Podfile.lock +++ b/packages/wyatt_ui_kit/example/macos/Podfile.lock @@ -3,20 +3,27 @@ PODS: - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS DEPENDENCIES: - FlutterMacOS (from `Flutter/ephemeral`) - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/macos`) EXTERNAL SOURCES: FlutterMacOS: :path: Flutter/ephemeral path_provider_foundation: :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/macos SPEC CHECKSUMS: FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 + shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 diff --git a/packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements b/packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements index dddb8a30..dccb3959 100644 --- a/packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements +++ b/packages/wyatt_ui_kit/example/macos/Runner/DebugProfile.entitlements @@ -1,12 +1,12 @@ - - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - - com.apple.security.network.server - - + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + diff --git a/packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements b/packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements index 852fa1a4..3618034f 100644 --- a/packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements +++ b/packages/wyatt_ui_kit/example/macos/Runner/Release.entitlements @@ -2,6 +2,8 @@ + com.apple.security.network.client + com.apple.security.app-sandbox -- 2.47.2 From bd636e9d2471f89041a1ad14f638717dbdaa5c86 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 14:20:00 +0100 Subject: [PATCH 111/320] docs(ui_kit): add theme negociation explaination --- packages/wyatt_ui_kit/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/wyatt_ui_kit/README.md b/packages/wyatt_ui_kit/README.md index 86e4538b..5f2c54c7 100644 --- a/packages/wyatt_ui_kit/README.md +++ b/packages/wyatt_ui_kit/README.md @@ -25,6 +25,21 @@ UIKit and Design System used in Wyatt Studio. +## Theme negociation + +When building a component, most of its attributes can be 'null'. +The `build()` method then starts to negotiate the theme in the tree to obtain the most consistent style possible. + +Explanation: + +When you build a component `Button({double? radius})`. +You have several possibilities: +1) Pass the "radius" into the constructor, `Button(radius: 12)`. +2) Set up a theme extension `ButtonThemeExtension(radius: 15)`. +3) Let `wyatt_ui_kit` "negotiate" and try to find a suitable style in the flutter theme. If this negotiation phase fails, then the style is simply not applied. + +If, for example, you don't use option 1, then the radius will be 15. If you use neither option 1 nor option 2 then the radius will be 4 as this is the [official Material Design value](https://m2.material.io/design/shape/about-shape.html#shape-customization-tool). + ## Features TODO: List what your package can do. Maybe include images, gifs, or videos. -- 2.47.2 From 198d83b663f2b1a664ebfcc53bed464b0970f375 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 14:48:11 +0100 Subject: [PATCH 112/320] fix(ui_kit): add local font assets + compress images --- .../wyatt_ui_kit/example/assets/asset_1.png | Bin 3402 -> 0 bytes .../fonts/montserrat/Montserrat-Black.ttf | Bin 0 -> 197888 bytes .../montserrat/Montserrat-BlackItalic.ttf | Bin 0 -> 202304 bytes .../fonts/montserrat/Montserrat-Bold.ttf | Bin 0 -> 198072 bytes .../montserrat/Montserrat-BoldItalic.ttf | Bin 0 -> 202492 bytes .../fonts/montserrat/Montserrat-ExtraBold.ttf | Bin 0 -> 198148 bytes .../montserrat/Montserrat-ExtraBoldItalic.ttf | Bin 0 -> 202460 bytes .../montserrat/Montserrat-ExtraLight.ttf | Bin 0 -> 197784 bytes .../Montserrat-ExtraLightItalic.ttf | Bin 0 -> 202364 bytes .../fonts/montserrat/Montserrat-Italic.ttf | Bin 0 -> 202380 bytes .../fonts/montserrat/Montserrat-Light.ttf | Bin 0 -> 198072 bytes .../montserrat/Montserrat-LightItalic.ttf | Bin 0 -> 202524 bytes .../fonts/montserrat/Montserrat-Medium.ttf | Bin 0 -> 198104 bytes .../montserrat/Montserrat-MediumItalic.ttf | Bin 0 -> 202492 bytes .../fonts/montserrat/Montserrat-Regular.ttf | Bin 0 -> 197976 bytes .../fonts/montserrat/Montserrat-SemiBold.ttf | Bin 0 -> 198204 bytes .../montserrat/Montserrat-SemiBoldItalic.ttf | Bin 0 -> 202660 bytes .../fonts/montserrat/Montserrat-Thin.ttf | Bin 0 -> 197464 bytes .../montserrat/Montserrat-ThinItalic.ttf | Bin 0 -> 201924 bytes .../example/assets/images/asset_1.png | Bin 0 -> 3391 bytes .../example/assets/{ => images}/logo.png | Bin .../example/assets/images/mockup_1.png | Bin 0 -> 195203 bytes .../example/assets/images/mockup_2.png | Bin 0 -> 105203 bytes .../wyatt_ui_kit/example/assets/mockup_1.png | Bin 1647053 -> 0 bytes .../wyatt_ui_kit/example/assets/mockup_2.png | Bin 774560 -> 0 bytes .../information_card/information_cards.dart | 4 ++-- .../cards/portfolio_card/portfolio_cards.dart | 14 +++++++------- packages/wyatt_ui_kit/example/pubspec.yaml | 3 ++- 28 files changed, 11 insertions(+), 10 deletions(-) delete mode 100644 packages/wyatt_ui_kit/example/assets/asset_1.png create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Black.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-BlackItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Bold.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-BoldItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraBold.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraBoldItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraLight.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraLightItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Italic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Light.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-LightItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Medium.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-MediumItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Regular.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-SemiBold.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-SemiBoldItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Thin.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ThinItalic.ttf create mode 100644 packages/wyatt_ui_kit/example/assets/images/asset_1.png rename packages/wyatt_ui_kit/example/assets/{ => images}/logo.png (100%) create mode 100644 packages/wyatt_ui_kit/example/assets/images/mockup_1.png create mode 100644 packages/wyatt_ui_kit/example/assets/images/mockup_2.png delete mode 100644 packages/wyatt_ui_kit/example/assets/mockup_1.png delete mode 100644 packages/wyatt_ui_kit/example/assets/mockup_2.png diff --git a/packages/wyatt_ui_kit/example/assets/asset_1.png b/packages/wyatt_ui_kit/example/assets/asset_1.png deleted file mode 100644 index 230d42fb89c38dcaae21b187f636cd266516ce03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3402 zcmb7G3pkT~8=u2yGg8}XIYng&g}10gnMu^fFsaO82nj9cjEGIhp@W=_kqi-1A%~hA z-V&%G3ib^V{~`ThU*egE$J{{8Rgx}G?K#Sv+!925is zNt>IQSc50Y^N1 zgn}Cx9Rb$p=;(-G8T^+u_BRg8vHu#lax47A;=?X z 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

    @7c3r#U77jx*qo!`T0^iIbodq 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

    2VX32Tj8SHc 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 QaBDj+0d8VvCH%hp16hyhmjD0& literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-BlackItalic.ttf b/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-BlackItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..172e2498827d740f3c06f41877ebdeba886246d3 GIT binary patch literal 202304 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�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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraBold.ttf b/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..30595072ca1015520dda6755872d1d097a81cf66 GIT binary patch literal 198148 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≤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 z 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̳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
    GtB0vgqbj-6BQJif<6Pf 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�qWECxLfm+w%UzaskWJ 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 N?*Zv)j#C_$e*u_C5xoEa literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraLightItalic.ttf b/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ExtraLightItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..382293d22f00426b3b463a38bbecb52dfb7e001a GIT binary patch literal 202364 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 `n0cR4=GdP_3X& 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Italic.ttf b/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..eee45ba97c0ff8a2304c14a23874170105867c0a GIT binary patch literal 202380 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�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

    <@j64`IYesu7?)-gT(_d6}y}Z*kwatbFlb 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

    }X?55*^Ryu}MX@@X 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\hdc25jd`*bQUuX=T($O)(rJ&P@LNgJu9ImzDH>d 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�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 SOmYxb#i&B7_;u}Kr3C>x*-&QlbD2_R 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-SemiBold.ttf b/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cbf44db93188aa3f540453461f19b1f355e8f7f8 GIT binary patch literal 198204 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 z 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

    aYM;Fu76 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 mNk&M7{s`P2oEGYkog)&Zl`;`w6cNZIZ&jFdq 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�>PMw;-ZP_vbBA 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⁡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 S#QGos^B!>a%p51`m;VE=j?bq6 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ThinItalic.ttf b/packages/wyatt_ui_kit/example/assets/fonts/montserrat/Montserrat-ThinItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..94bcf553999f7a4fa82e25b0a08905b2019df642 GIT binary patch literal 201924 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

    n9)up#I%TS`^$JXgM)J%0ShKR*6_ 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

    lE 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 z

    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%0DY+GiTZOeOR+cI0Hfpg5lWv*Gc z%rgs@_szoP1G8|MZx${enuW^(vv65x7A}j-!ey~pxGXUXm!)Rmvdk=8J~9iJkIlkm zxmmcZFbkKJX5q5REL@7r!ezBtxU4Y?mru;XWvyAbtTPLj^=9F+!7N-hnuW_IvvB#; zEL=95h07MRaM@}WE}xl&%Qmxc`P?jAwwr~^7iQtI!z^5OnuW`kX5sRcS-2FNh089p zaM^7Z&iV|N9QGzD_)T&=Xxdm|y=EdfHsS8EV#D2I)rR}Vn$2tA^9gr}6&vnSQj{vV zI>p+PH7VAfe3J5O$=Wmn*QLjS>(e}NLs|mdm~xh66A_)HZPT9Mp!7CyaC$p9B)tP1 znliGi=-dc)Wo}#DF8Max!TU^qp-y$m%t+j4WoILQp%o3pyVlMs)1;)3_otG{$qb(R z=dn7|%VorpJBbHN5s}qS8?(PT`7-%7Elu2fV%miLEy-8OcWI6&x=z}Z{jEuHvY&cy zCs4_)8T+3lyOINGSt9IuX><0sCA*V@X*uHUg0uzupC@~gLuq-U@A_#=_O~Zrr!K8P zEZzWSMMjjqH}z>nBJ+l6YxZ{}-$2%^M4a9z#d{p9aMZ|f&MIP5W3|5v>-%T89@Mbt z>H4`2&T3nnLp_V(?p$Y8-!3Og{j?}B-Tq?N=1e|w>nl~SVO$q9wksWs-UfvelVjBQDI@I52l~@<*g!@ zuMozDvA&||#(gCsw|YL`DlPfSL~kv872>v&eKk`f`|1|A`5G3h`&t%-`!=XjJNXV4 zi}{WgdHK^VlJZ?+RMd_BxBmzGf9H|@Ulx0QdF=TevF9UW&mW3Ce>L`eV(j^X*xQA% zpDSVySH>RhvmUyGR+-J0vYKobx9Dj^1s%0J&*C21i)ZUa+MA~&br*Q*4bY)H^~UKq zo>_(Z5znmUTI3&K4d-(|CJYb5{dn%zX#XVD1s?Rz#=G{SRT1zLs2?!azeH7l=ln!d z{QE*v_WLQOzxS`Bk}vX8O%3m71a$CzrfJ{(yQXpX@0q&Y&rYaw<>zq68~eH3@s@tR zslfdr?s$8@m^*%^UuH^fzmj@QxA|38oyo5={j}eZ+@IXtl`D*@M66>5?O8t-* zsLf|JL;Cplso&R^%6+R`|5&H*79!kYceme9oI9Ej^Emf_l#oX55qQF~?;&_ye<8eY9kGgR@>c#PB8ONhl9FOzj zcw89Aqn}lN@crX>TpdT^I!59#KOm08jd3If#gQ0n6&3sttD@kC#!(p-N9EQyDkI{k zjEtjlPaKtd`I5Cdmq*T+A{x!>i z{dCiP`#EXnw6mXUIfS2QIf(zjavs0Pavs0javr}Dh4nzc%5omR&T<~V-f|wl!EzqI zk(_6%-xTd*vt>Shi)B83mt{VFZ&o*}Ct^8|1ldDugrbyx)6+ft_03DqjC%v+Yd)cN zC%DU6_{&p_t@UMO#d0^cFZ63@Km4ho!|ps5XTN6XTrT4oK>ldY0Lg}f`Q)I&b?_^+ z-x}L_X3)+vgZ6vC=Gnbq)9gO5V>TK*DZ4ASkBsei$M#Xy&RK%>4Mssb&Sz(~f5wG6 zx@CLZ0*)@9@q7b$YLV9xmvIHeN3aiwj6k9um|`!M-nB`LX?!9n(}nbLV5s{ z^blA+D{CzoF&+1~Tx_WnTZrapsmQiu4Z-GF1F&h<2s||-hN6XdikSo=DOx(j79uHH z+JjBG_P^xbC5~j>^|_L!e6tOAc&rAWc1!dyh PfXL+f9QlrmpSb@7XeMX3 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/images/asset_1.png b/packages/wyatt_ui_kit/example/assets/images/asset_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6e88a0b14974ffa64ed17d8b07df451675ea67a1 GIT binary patch literal 3391 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�AcC*!eHs(+_dHdla{*OGvkNFQd0?c~m`# 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Ⓢ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∾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

    mru8f$0yI9FBg+< zo23VZwfgkmLGu(y^BnE3ErHSjc&dek>6bh8+S1y7Go*Th`W*v@jucz>CUHJbdLncG z$NcVJe@uQe`^0l0nx23&=$tuN@Zb=5luVR-u>x`|p!~(+To>~$+VLo1JQCp?zq}xL z&`2ZE6T(n3%2C*V1ML81b&Bc|a18Q&5J} zRU9=Q+KU$58^jT*Qg?t%O3rN%RX2%s1Re7ttyC^Ylma}uUqfLezmOFW^BgE6iH%vN zV@pG)N)9qX!!K+|lcBzG=aV@A)8Wd9Wu7^z;Mv{&`0trbX*Ec7fG&06RUi^N6(4XM zty`U54wfw@nsT^-RX!mamf3*9WZs2n!Gg!vJnqc#;?~LO_V(*v7K_IK&qn?a<&%85 zxYdepl~2yf?~jY`%csd^bG2Gst4`NJOTU z^BD|%wY{N%S6M*^AesL$cLlADBUu<4UnVDAyb(j=z$}_5O{|cPJL^e;39HL8p6DRQ zbca1G7DYkfrDwX?_O_t318Q3nW<@W#2)E`S(mC`*VB;_sbscmFxPL)lFbw$<^8>Q) zm7JO0Sy;L++i`asRmplP#qX>4eXmL?0M9MqCVs-$(}Q|FcH?K?9#DD^uaxP*%>xh0 zet6Tgr02QNp<+Zq@MtE=S9B2UxvMDRHFG{&4xAbI9H#OVd}sxZ^T8o-M6Ckv8@B-y zA0c>@Id-IkM+E3dvSeKxgTLvP>%1A|nnVXOEqtk^A~Z?LBuA{&x$?o7hj2z5Bb;KJ z#i+lK1A!oirUO!tG^r8+GIszG1w@CAVM#tv2vF*aLs@ZlJGEuQ1o?4}wtI#^AN2X$(HBAgPs?2x7^U(oL_J5>{vt5e5LlZOwUW8``D0KoJ7@k8Klhfi?&LAe0W(K|+-g(}cCxkkp;_LqB!;3P>Bm;F6) ziQpnhc*sO@!@z^ttO7ht6Cd?l13XcdnQda$3f=g+AC@UKoL>q-1YjjAWR}geq`c5H zh*}neEGW=q#+g}Y@!K+HfyyvV;B}^Dfe+UHA%qJWT&GEsgcc^=AOM14L;@U!i3i=p z>=W=fQ>t$SI8$X{K}?`!iv{8UVwj?vMdrc+;;Dla+LlpH+A=}&SEO{Rff+bYjABla z2*S*SgeiijEqp-{lQK+V;4n)|OY+h+i>F&|Y}<(4koWo*woCsj8}I?av-?))*-IeAFisYePdskBoQcrpgur)HUwOoR-zQ@( z1b@AH^7X_0e;q#l`Si)-!^2lEj#f`zygJ<9-+%JY{Z}s@?%%z;f4KkfR8BpRW2*1Q z+z>pU?;&mb!^a=5FmZ=-mj{nRfDPZ~$;zKe&iMkz;{X6407*naR1@yGHx4|d0xa+? zi}POFzyvM!^&oi)moH|>>85ml1>CTz>Y9NGE1WM^ML`T71ziCi2i>l1+vtFL7}}Pq zSF3;*RYoxs_8_Y8g;{js^a!A>R$;kqgUl*{O_}Ecj|b3NR<&XkVFXHgMb)7X2ir!$ z_)JYYtr0p-Vrf;3MVQ<&E!(m*X-7qgW~xhyj%Nh!2KorIT1YyPh~mWoV7D<=fo#&W zG3i}7Z9_vwTG3GQAj;ta+(r6K-!j|0n|J0B?kQMEKRLcO=zA~190kKSf(Q? z8iu4=&9d$7F=>v1$u!8kB(DCi@w5*?+lmFT%d6#LInk9xT#$OTSS)^Zaq+LKt1I=z zJzS>x(WYG0;N-NJV1U2mES=LAFHW%r*G0f#p07_&06e?%`+klV-Vr>1j5qJy!wCjk z03PBp!e1|ngvYmtyCc|-ZXo>D%>s{9=-@@SG1Q3jN!zZV7j9GxQ2YcgL93wiD5aQE zs{+nogcRr&qqvirv5Dj2)RhHzS#fa`bk1=O@x-Duq%J3vL2Lpq4&`oeW=450*oeVN2D}nh6~doCWOA13Zg84$ixiLE~lGZ_=vrfB074Q}f8! zBWDQA7a^4;xxB#&Zq>^_0JLyHh0hlLf}^6VM~Dy9Gk9AM0BJy$zf?%z;GTt}6GYMK zf84eGF5uZ+SaJ;CEYFJ?) zvcQuyT5ZFc?*^LY3U4q#7ER;CC(JS#)PNO10A*DQ2Mc)^1I$%$Fvqfqn4d`IOR7j-rfA{CNSbMfHUqBCX{iJRYeYbS3fDHbp#W_O$*8cUmvrLKvczxl zTyzGFv^j&;{L&UckBVcLDr?D_8L=?JDOG6nq_NhSfh{}dc>SG#AdZmCX^Q3wKgo?; z9+ZT3kmBR?&$>h3efIXWjGFTrQ;cAiC@Ns&HBpT=Dlb2m0O!-%5N5UFhL|E53nN% z9wWvqu1bSXqfaldq9MA3s#Z-ty-aigpyB9@Q)2QF$ zmaY+JJ&pR^{(9OTo3)A_LnMT*{;CJ3@?G2JX>@t{=2(zk)NS;m=*@x5%>i}F(!PA$ ziNm2`QRKOr>UvQ(;Z8ISY-U5t``MUJF7>TBW zg?TnPTWbXE5C@#9HxE45OMsM5>L-92_*uQi&986eJLR|MU;lb@&-Ih2io($^h4%ta z`5867_(Jlw&%XU;b8Ba3YxmC1=es*N__HN{wsvnEcx2WL6R=Di19&!KOhUPSG~*<5 z`aVb(;P6`RUHMeA#(df%00J*-U(AN*t}*7lu9IC{1jAtviuK`)Ut}F{+T1%106gBb z(d6xHGWA-vMxEa5qK!r=<)d^k$}+-2AG~_(Hls8ED^9;hq>Fb)P)fVAF-Qp=q(kUU zC%o0l2FD`INBt&<*=7b@Dotm=r(#SA>ZU=CyWQoNlg4u2X^;7N)NBF$^w!fXA2qt2 z(8d^$wpxS!+V`VbdNvSYnDy`fbhdsRw9~=b@>-e>dERXNG#QP+N;5YU#nP=9z_8Zo zq}~23*OXG#q|L$F@9z)N<53Q9ZLGbVEO#4DZZQ997#OjU4Z59nJ3ULAoizZDka~AtzswX`0}H z85Ao`TgJ3I(@8fbtoE>sCW4d@b69e)D9qOC?jC`(2e(v#r7pP`7`ET^Xv1~yq{pz{MlY}qF9N8j)F)vJ0RZPkA8fuOD9JNRV0!j~N= zic?0E{#Oq-t!<}!`#%6JdwZu3_kaHTGn{L+nR)g6=|Ao!Jh(hARqz~Q=gGw321!V^ zh8rjZlA4t8Ym0&p(|oN+`Yt6TF)x=c5!!U%!ZV97H0XL68xZQvoKA$-3M;Gu7mQ7+8iN?xcFIkY2llv}t?ZFzDw3lCJR(c|DNPFPovkIj z>tC#9M%?gwC=cHSUYwc2jRXG`U%7=F`B65T!4(lz;AO!l_Cqf-3?BFvNSUfigk~3Z zt8_#2{bjdtk(p*3%^N&nn%&~kp^`P`J(ITJZHz4MH(9=3^vdOO*jF}H!RAhF=Z?X% zZ2`SsHCF>Yw@=mGzfH!$uUkvOo!xX)f4Xh%{%7p6d-2gC>C0mrrifGE?t$F=1^cUy z&;IqxQ+9rOd~&{j`uzOcI|dI{N;jK+Zr}mihFx5Oh{EL2+9bMM19<3q&52ICATWf$ zufkYeF2lqajAIa|=FWr(eq~YcafI|)yVP@!u2*RV*Ww}2b z@mZlQwL(|m;dsY8f$mZJ*C*+U{mV>)L6V=NhnJ5MJOil=)=r{7~| z=)J13`Uv207!AV{`o?*>cY6M}yH{sGY#o)QVmKNWb@+qY+>y8N1n|A>OcV#<0q;e*W~C{>qcb{K z(+)_=MtL0XIwN&>VdmN?O-$>WHai{S4wh8G27|gN{lM}(%d^%HdZ@P;Te%5w43y`L zVHI22t<`lpZbP_w-T69ev{Q2f579Ta4X9kUHPDWE`d(O#Zg;v^ES7E1Lq2b7?-gBA zlNGRGCWMr&cRw|z)2ZE_hD}`3l4W6XFHNI{ojSM*Ou&dCJW2-)TKg4E0At?rE%6aN zBJTQj)XPL&nYeC2T(_@pD*W5F^1BSrZ~nMhwYizZdr-xtxBmvG_o0w*>p1H#foK04 z=VY^y2e%;rJlL9Z^dzKi9u8@qQ-J5I;T>G(*{%LVxA0)^r7B#2BZ34F06bW`-c`bB zv@*P_7@R#F4)8&Q#|77>Nbrn~4)Ekc#+K5ZTBSV12-YEy4;4_JOp!(A;bjrRBh$fv z)@l%@03PC4wyVehk8r2(^#|pl^+UK}TT4^IV!96SSb3hGcQg0MBE{JVZA=P#&hcgHf7k-L59YMYjQ;Vhz7blV$UE`CgZI zCtG+JDI4$bQ$}gzy=h{<(2h=f0feal$I{~}s5)sn08gl6x`B(7dPhf3R}k&Gg>?yp z#{e~ox^p{qaUlx#RNxY_D%a%Q+8nfqZ3WL(QYw0GRiwAVb89Eh z{m&0QU=m+E{p%Av=p8$%@10f~d-k4$F3-X28=;^u6H2b=4tJiEIpso?RJF~P-5aAe@=5T52?M?!cMpjy=-nn2bf3YtO* zA){q5Ex|lO=3%G{1;5o`O_Wn|_)_&mME45(r3t$`YmuNKhUj zL%YEt4)U(uD->d^%8RbA34MZx72qKS@}>d(4~{&)4?G7bHJb&W2bEdFpVi3H{o`BS z>;p2t4(|DA`qjZ__O?CybN}VTqwgW~+`|oUr<=*7$3RY4h(tK~o6~1^tW>?To#KaT z(^Nruj6_mS)FunB2Nbh?1n|hU&Hj2(Mwi-1b98V`R~bqEgYXbxEj&Y!PMBlNvgOzn zYF!ev*uX;)V-4`=I@q>#Ch6JI!xu$(AoEzjp(-h8+lUy#{TtzN@EsItEoi+XE3Rdm z$)>l5xz_`iFo+vw!FDHoz$gyV0^WX*6S9fnk7Opi?z7z^l{Yg3TD#^fHrEwg!+L4RHRqS*) zOzlx=NOcB8wOT<5;hs+YM#{OiTzU@6-uY!8F0TQOC2pLClBa5yZKZ+BY?c z_S&s7i~q~s`MkERWpNyecC>g z-g~a@`DpqAgNFQ4%pY8yzqrY3vqk@cGP}H{4%*XpBN$zfZ`MD#*gBu3 zKH1sb*nazD?|5(b{=?n9H5)J}0z9LX`YZn!o-LQls}{VDpHB1B@r&iMoyKkhvnPYY z*6{4SO}(kb^>BHTU;O^VavoE+YkW06$)A#?VTk#|G(Wu>b{7l0Bn==Q*V5$kj7da? z7t5P``r%?oty*KyA70(u0NuiHGMh1f2=x zK~5FbA$)L)dU3Ivbf2ERpp7NvJX+F$zn@X_97i1Sq-}z-A3EYzaM6F&hi#7U9=Ca)6-V%vX+y}oucJY?qHPXml{)< z+qKEGb#mR!N3ok`{d{tMKFP^k2c6m}t)F(=>0q9Z+<4LLzP1(lJl)^DBn9+a(`jDo zx4Icwa1*0>-R5B4>R@6I4<<}ob4*Li{_ABr{@p;FuiOy zXm4wjR4Y}wM3eHGP-*B=e7M#b#2i$c9?}l#w4StTO@sCf7Wtc}^Aanc^m zFK6vRgL-~hr+?Y+EHGECosc7+Wr?qptFxn|l#-i28+Dosx`5|J@q#WvXJs!FOsp9k z&gOmO5=Rjw*I^`od5*HJ{+4K|9B`_n<1k(Ki zQ0IS4Jm9t+Kik|ju*195sapa4uwLSUH*Ux`nB&IS{+{n(26PH%CkR}xD#6q?j=CJ8 z7B?CQQ*lcOXNJ`c28fF$KiZ{L>UV(;;QI(d2wc2Uw|(DNI4$OYO^)`Af*>W+L$Dg< z8O4p1a%s?(@{k-a6Zx-1kwO`gcgZW!Wzs>6Xdn)AND;*2aFh>uN0d#&je+LzxHPyT zA{#0eBB2F|K9D^Q1hAr_rqBjoFT!AsI zD(MUW8rF_g;;2!9)4+I1Ms%izcxch!k1+g6csU$`ifB8&JXi_zU)AJLMIPl7Z321@Y zR+xGqpb!rJiAt7GI$F8n%9^pY3h} z_`$fT&o1jW+7`*bq}aL!CqN>VU9GFW<#D^@l%X+Up{W9YNKHZ*gdvDy3_~o_t{B!* zq8guBi&AS_%=5r!>Nu1P&N8S0w8kg_?!NGATBPzlM`o|U&V8Un1byZ(GtFdb*$60A zeq#vlmzgGa-WCHQOru(_zwZC?vU#5d*_6{L_NI9#pJ zoT611Vgn__^3l*yj@)XB(W4S5E3e|Af$)4E2sR`kIpXbp=!S?YeMehS%B?0_wL=Ai zkSnZLFx{wc$4n^>BeJ=$yr4a$vv^_}4^lFs5r7A(V0;@0DiV5`ej8wr6{b|H_^f2% z&KdD&U-meKc+~&9ZQSzU`#jI?Z?4*&&n@dVRL%7^nGrLXn2?j=6&_oO$BaL8xg@4i z7@%U>3WgUdJM8t)K!Eq8(|}GTqYbEE@0a0)Af%fz;|7FH2Ix^cB3H&{Bmyes6i_BN z@+*Rmi+BjbH&{_$9BO<83S31J8?}$j*nm9-F6w-0C4Bf1W!Nx!YF^3!AP8L;40edy z652+Ox>KnuAH`uDf-O7~3l3T&1O=a@?WQi!J=kX82o+kHsZ1Cu1AWdZGvOyxA*Es3 zK^eF0R7kdVNTt^}$*(ZOgo!@f4hd7#GGDh^x6!se^YimZ_I@e#-W}}w-oO1R(rn1b ztv2s2B$mxjmh}rsa7-`WRI-eS0=bFI(}zh2ikD5<5x+rZnBa(Xm&#Ia!zoch(|`}; zSehZZXcnleW@)M1Nv6fDVmLyUFM<`+Cd4C{T_w@}NX}ax49$`%JF*3#P;{!?h{Gz# zX~Pa=7Ba6BdUM3*z!z3n<0L4+84R2dYT_v~wBm~EhJtx~3${EUo;w?Q1@eu1S^!(2 z8DhAQ3T@$o`b^?Qr6W~Nnag4ov7?;YsT3a_lZNMe3{^j&Wdr}yubqu2JG{9=TN|>U ze(y+v;wV<+tc_v?A={jQkM8gRNyfR{Jsm52n#pCgm@CrBj~{RE?>)TL4gW4SAMzOX z`iaMpFPF2?ao55t-kU1s*|4^3*f45o*|c1yOp75@j1SFkT5VhUYHZ4YhD09Itv!+< z*S=iWE64D&S(Z#{^DNUw!0;?}J9AQcZRRr%xQeiRxWA*=b>fmsd7u|#lS*Dn77#0^ z;8_=6msEvz6gMmkDo9;HKnmHx7Hj8|9m_Nq+&^UT@JFbW@#`Qn{55#T$Td{~=!l_h z_)?y2O0CQzH*MIr7muz7M{h%24|OldwrM3u?)4Jd4C>iiTL)oMuV>q|5+rn}UTpSy z$-V8Y?$gSvdM^ol+D|KV)~k9w32^!wN`Jd~?`XS+OnTdIC|R$L+=4)d+ei0klh)s6 z^}w9o(?{jwR|f~>{p05cdssO*esz5CZvWu<0qxm;w@;gE7?NP|XXB*1WQ>HVunIH- zc6U8vXps>~B-UvRP?RP{;1oD!OqYomA!EAt3`bl!SgZGgA3I&2x1`&#DWz82dL?H7 zh!d^QwX1h0X5Pdtv(&Kc?;bbhb}T`_1GXceEt8GZ4Ml+~@3@`ft0~jrGwOkOI5%-- zRt=lO4PH@v<{w74BQ?cS{PyB`W$Qm~Cr5VjM(fx0PTJTp%nS4ZGTQZiU` z+qj71F8Vi@gP#Kr?`}#WF9qHxKXES1y)R8e6 ztbTlYn-kvvfQQwAkAaBwvxiEK#VQN-#rK1`xT{!hVU7}-{~ z)iMnFHL~nAYhe1!`00aTd|(-v)?$2U8LbxkG-E&la>74}lCR*oQ1sUKD0sK2Nmn!!Nc z8Pd5L0RL?U9i~`IaIUa!k(0nUY$~W66r1UpamWx#{#392vfV&IYusxYLX zkTyg5kC9ekvXzqxc#1L|#sE6341Nr`4WR;w1TUXdl(dEo7!}^$U!Yn8(l5@Rw4Ouc zf}^841<}DI|Kl3a!G)g6rROmvPBsEvuhu94UqDV)OP@^ZXvC}DC65oZ2YpBWXal5;cMvwG` zrfpe}096EyQ2h<@hF9qYc&;iCv8`el1hP!kz{_MOGm=$Pg95&>d{utVt3jeUgP#L* z3<_gqAd8kEnqrqL(bdQ2)gugJP^Y(7)mN|Tujp(yf0#6|< zXh}nmMj}3mxUX^;w4N{LaPZ(%P)V$}RD%EjAOJ~3K~$WfL_1$%ku=L0eD^7@xobdb z<%Z{@cx@G9&v)RY#ekAAGJMGf(3laYK=zw8cH>)B_FW6`52~%4UJpRN96{_Uny!Jo zAE4y~JU4et(DGB?4z=!Cy_zYwX*dDlFT2v=&#OMx} zC`sUo1~Vxx%Y?-decfn&C`)aw0dy*CFwn$t6*VaH59b zA%nRr29{g`zAxip@Y6qx1+`u4Ovjtr_V-K*d?#tLAN(_p4U7c$s{+PvEX$q%l{|ol zD>(?CSA-mz!=VhSADnL+c9;Y^Ob1BjFA%9*b(ek13W8A>_5=UkZTEYU@b=s>*`bdN zbtY5~bmDWNpXC zwB|&}P{`p=FPFYhfoXxeYy-Vc|6%GBRM<27$Bhq4AUI#M`g7z{j;=bj9kW@o zO-CjX$Z3J)v^Sx=Gf_T3@Eji}k#V+B*p4}dQWuYT#^34Oc6=6n{|&dc)$3_9+o8JW ze11Vvyur*$?R{#G{K>>`cvc(0WA$J_HEyC7;)W)0>7TCvJX|Hfb@y`blNEnkI4?9B0z7Kuh0et9MQl{A zDM0@b^?cunS#R`Mq8Bzi=OJ)n7e;@((X@(}P1r3KH+|ns znYeIRc~37z@kQ+TEcb=)1DlAhL5FL2%AtU&z=N6i5XzwBS_MgxTgQu zyqi9IEWke6#iH5pVCx?~C5#Q=;pg_Eg2_!R2Xg$Ez?0%d;NVH;`nRGSe&+c8{KZzq z`AQ{EN&w~A1Wjk)xyZALj1~s%#eF=tdIdWkb%zh_iD%Yo1(QL^558M3T7|=db#$&vwr|}^_fIy-py}Wk&tz5 z-?k$tX)2t7-z`ZO;V#e+Ql&@p7^o@Gt>S z=08S{kv)&Te@<}udL_>mJgE5Qd!H_wo*R`lFKGLPxNSLwxW8iE?q)O5YPBdTgv(WX zv}kWErWVcCcil~M)Sk}T3_NT?7p{lHXPxml@Gpzw&agP`yM^9#I2^B*%T?#;YP^~> z7B|DE^J&rQMg3wC;@Wh+8;@7xz+qFSV)16ydFY3YU{x#@-xr6AW>D<>>3#8GX|kDC z{%SK^jsLc6&WfGcZE@z?z+N)$6vrFCIUg2Ti=8{~+@G<+EctR+9KOd0rDK*V4qtZ0 z!%nf^^Zf3(^K|%k?#}1MZS9KV8*h@8Hv=Ywp&P|+h&7l=7Sk!l;9W(uxI%?c%6nFY zctVTrlqa}13yrKmxtnZ^Q5Qm4r7{u{u03yNc<+_8uc2?E z#l-q`uLAn`d(QE>=Zp%Sgc~^Sz`+`8SB>5W3&)u^A2cJt3C5IYvmi**AgMT+c0027 z`&}guyU|qo<!I=pv&|%7 zs%WcK>AKi&V@kjUX;!Po*qSwf1{NKUD41=YXHQSNw%HaV*RMilGgivXa1sjeyiZw0 z%{EPnw$io2Das~uPGYNd9HUZ}n}k(tGY`30EM`rktl_JlIpbNF%@>LeIu*>a%0xF~ zXl{d)WoG3pGqX$s>>U(r+t4?Bvkej@%nD~sb8LLjhK1u4ZJREXS~C_)r84?X>Su39 zE>*qCD5>HkWgf#tS!Rs3CJ*Pq+b~q-LE7Y%GtZi`Son20ca)|vc7~p-!_#i``sIsZ zr}O#Cfd1d%dGo`52v2Uq^Rw)>uSA!GFGYDoHp|d^G@s2F^Q34G5A(R<%)$!Z@hw(i zKPRQT&8jL(*D*JeR_C@Vdss#k#0nfI@OeN(I5h(Fe9Cmws$Mcy!2hsyW6g9_ma(8K)fzHYTu>&(L%9>>r@M_}f7jzvGizZzv8yRM90zCZqDUgluoM26CcRVj}2xf*S4$U$A2c}xcRRX;EoX(Sq zc*u$gc;*OCa57V1^YvW8=5jT{Lr{4*2Ad^YHn&)* z({n+2z|&V^E$jn4*tv(M3xvmH2+uaDR8j&w7&#a4_(Vo{NZxF=F)!U@o)+UPcsNZq zC8&*|$tu7z2Y7brOiWkD|s2v0iB zcP~Cn}G~FnIO_C{K3}59V)5-i|ezZferO zY*S1U7b&e*dR1BAF!yASZ9tZl}%=}8dkRJMD(R6N2d=zQ<~c6g6CG^=Z_YO5;@eE zKzb%JM)x{2`Re}B+2hIM$)Sh*1drj4$SH*bhiX)3_r(%7@$V;Y(YN-q-&`f-+*#%6 zh@3_&0n!m>+vTHVy<=A7E@RnR!^_L7%S**i7F$mS(@w%TFY}FELh0qwSCXxklWe^< z{$O2TX&aAy%{<|I;I?l0b91+=)Zyts6*><@W zcRixSxHRhLmj73Ss#XPuHoiLSMbFJY-K$hv22)a8sCag{6`!_^&amh8!U^*aWpb|~ z@=Gw#NZl@6(=#raB%64Y(90wSiCf^syNtw_+t?=M;%gA8Rt!2?Bs8xT(II=mKzb7K z$;Gbsrx%{P^Cc|s(7S`7>dAGx-XF$}u_gQw=0S_K1BV`?_n%DmJ$laeP2(qs&zZ=0 z10kBcd2-0l{?84!$#=j0?X&OUxwFwW0gs3noJ;Vg`nXk*3es{BRk1a&t(X}Gt4v~x zYPa0ypKrK^ zA6pUiD=tT|A7fSw3<#c!I7NvB2Q55RdD7Gh!9}9jgiiM0GHEc7aCDbdo~=fQTWs6& zamEtdDzoxm4?Exb)r&69VOjC7;^BpbM~5B^i3Q>f1^%bhHsPYd)bo8%HZO!hl@^W+ zr&@TJfLO6&;C~m38-i6D`c&?UYC3n)Y&*g?{YT&d6?uYq{9QOZzz7PC=oEj1;)9>w z{O!$~t2n}S?Cl1AN1v`cllvF9ek8rK(KfM!QY=>Pfm>eJ7H;;`s_kCavId9Jr>6_GI5b-O$W!3WksS;n#w)Tiw2!YoQir~ zai;stD+|Z8z|(qadt&J608UM%X@n0l04}gtJTBOS%c7@Gqrt$!siT34?W4pkS2J?i z#=+oKk6wwtFobQr`ldUK;P2@}+$Zn_0M7)c zJA!BW7klT^+P0d7@r_qrX`@?Fj06J$rAS%WVsPRtOf}A;B_2q9K^Nl5OsLD`GI*%5 z%Y>u|Qb^6XNN8r|Zo_$>- zm-or}^PclN2hZNhri*9v3MuO#i!qO?s-Iirq>WKLN=8Y{3aQHAM(p;GtCqJ%Ns^3W zK5lfACa+aH{>;A6&t}`Qzt1z{$&lU9y;Wusnw82bCJ)pxSl%*MAqUTL7!gDI*{0~d z?pTiF)lFS9E%eB7DKsZ@9aM~>K-mI?!*NBw5WNchl(9M>w`(Y%t~iPWgXA2CUZMob zhR%(14tmyJ0ZiyQ8l7V#JUSD&3fe+_nx&U??pY&KWO}CSVCoQ(VJ0A>pogNI*#S1% zK~s5!L2eG3-01H>4sd!)15go=M4;j5wYbRC(mb!S3JjveoY0#p2=od1IGiucp8m24 z10f#uzr>Tw4zfWa;(>Oc6+S;=_24w?2f4RuTIYsuRk}-EUOl_37aQ5%=MgX_kuu;e zY|T>kO{HRDu2a2kk$5T)19$vi0?3rJOmySm7RE>C(secCK9y*tGJ%li5rC6ekeoBr z<}=M!DFL2n2(F@n)&jTAT|ttdu5jfty_0>&vx*_q+>#?nb`I*cHO1U#)}w$wayKB5BD$tH z=?5%)J$0eWi)RkmuKp;;YzOV}xIIjU#qqcph(Wy%D9#xL0h^RZ?Qy%+Y6Wz<-6IE1 zs6@@rW|*pJNy3trXR9(Vo{U-^C57HH!kIf|$P%oQHb_AQU1y4I$#OkL1aey!fYG$x z85!tVqR)%bx0b}F(PB0w6O{Psc zha31wWF9s~46;(Z=-@Q*1bR+UaQkMZvTu?Na&>g4p-;#qH%;`+Fe;%?&_ToT_90hs zo5DC~27=PBFYp={6F}q~5R!(Opi3`Pk(1h*2;uU}nk zWUInJisuGJpfJ`jGw5PgBm#aOj765j<$*yi zi%nrtFZZ`O{1JHo3e%|^@U`i~m~?p^y02JFH88#X%!p?;bho@c{r!vMk1H$X@}JDp zXXO*CQcLI)x24|ZcfAg>#)fyE1^g4dc zZw)&US)^7n=#y0nVl}^P(puf!s;0(f<9-$_55*WH1%)R><$!udFEZvfS9lVQ!n333 z6kQ}5hw(=i;!&{J0Boa+;pJ2eMQjc!X;~Z(3DIVFW>L8ykr;yeIY-WcuP7!j$e#YR zw_lk<>*ORII~BR4zolg9oG5L+`5lOy#HHLaE;t6F_PHQlPO?gvMBx zlPo`gEW@yXo7U3nwd}ZUQapBf<=x54r`y{{(|??9PyfC5^k6#u_;h-F^jx)*pj-P; zJ8XT32CYer#53&I!pU#X&T3Ev`DmkIr#87h-2B_5R_g~zLb4$%HK40tunucszZINU zk*{7xI#ue@&n4 zJ$`w7uwsvr!C^F+v^GgRemEe@;@2jV&9m-=w3EbizU_zI;q}?yNjzkEl3*N7$V~Oa z!&bC;-JOIKDaH0@@_0W{3$**Fx-rwu#{I9~@>mRFGB|gY6KE!v`IiW&u~t}H={n-8 z@nzu0={{oD`ad{+Hs+DqvCFH|z4ve493Ou?KKgd=^xgYUPo8}G!{h0}N;&8> zx}<<^=pP=2eviZxh0$5m9Yk=);@BQG{Qh-veRy~{sdY#^?LL_t63?Vd*5`WApOAMq zvUyW=3GLYBhnJ5wGG%$#d?-Q*QXsDGiUFJqWiq6C;N*ZO!+bRH(;N$rEs(2!nF(ii z#}`c)*s8iZ{b34cZU6Y>&EE0HlTYv7?L9s|`M6TvY9N~y4H_XGjbTDwnjey_xu&1L zrkE!lBeY3c{$x_~2M~{63u|GkA9i}thikexYy|Q02?Gqb`X}G)@Ne&?usopw}TewS#u!&%dLXCwTpRXP5+JZ^DR8QLo`ge!t!6 zx9Gy_4xW$VSY1*)>e?e?S5_Eg#_}`~xd`&7h<`Xdm#8t9y)=svW+Wx#26VwNm%bd^ zESMhePCS_uPkF2UX7%2^=NDVg%g@c#dt2p|=Wm{Q7qsS+VXxRDc?^riA7?DWmG+j?ekPL@>b3hT#vb}Js`eK>&WxT~#lk5;D*0hSIGZ4^X@d)+kcjC#QcvM?m|INz!N_p*k9m7F*?qPL(eLY{L zpk~AcIHQEVixRdGj#yL>oX2bDybsDXIx0jWPLIw}ox>N~yIj(C%!56l!9UPNH~bS@GPGf_1AfnirxZZKyKTs-37g5!t%((GdX8mW?&Qw z?p2dy(}+SoekC5F#(2#2#)Da3 z_6=~yzMXjTs_~t1KT|PJDjr3+VIqlEDz-a)Kb+7JMg2yj(T}3YpRj(~%_jUe_VYL= zr`(Ar+v3U3v!g^^+dTe5q6=6zb114C@#GgEyb^W5`ik?nF+3`=ZS(22j94DAS)&UT zHH%|p_r0afF!d9cjC#Uc=8JfgL&!Lsd%Io z@-xu;f@1P>5K&nODz(F=C%@!IkE%Yr%viQfY;;29$|y8m*RhiuRIDFc;^HI^prcIX1n z@G-iB%JNi{1$8WfGBlmmRE_68b#Z)vk0=I2S=tZW`~$&L$X_!X!CdFLRfiT+DBMQk z-I-taY3B)ITcuU8(Nw*l^t=SGYI0eV5gfVi#qDtDBhd(oDwnG|0_6#m1KO4_)_CM4 zR-F1iNArT9{Q%Dk1y7|?`J$&L%>H8T7nbM6tO$!)dKL|BcjUae#o;m0b6Vo@^r!uo zr1OZPE@+&izN6+*7{^^Sr`1)I#FRSjrmW&_=b!ZhsV<@8feh&J-EQ1Ik9-a2s#xOr zn;Qjwl;>w2W0eZBLqR_lnP(x5)qU_RSmKr~*pJT7(+mtudj0MNF^?{x@wr~pd^d@E z9^<$nnX++Wx+aW*Az=WUj-){gI)eh!aE27+@)}wV#Dc$W!86;HinY7PbzzP)^8XpV z|8TbT$g;hLvh@t*N%!~R{pfkbwn{-A#7=;K$})J0AiA?^V~)XF(99xNH@=eXXCA7m zFjc>qBj&-fS>O?>5?R_*o@Q}EmH>?LRPS_97(++413*g^z*E|!X=?&!Y0nBBbvi9p zc;*W|r9&KWl#DS#wEBUrA9S=5FlgAO#Uvg2!)W#29|N83@^4<*{(Csudf@M&#@#O4dG*)G)zXu*rdV-6f47a$k3`%dN`5${BLaH!pcARaoy-bdRjt8EKvAr;S^BGVb{bKxtJL%0d9%)yq7se$d}v(sSlz zbHO9l$ExOb<6guuS`I)(f{D-2slZ`cASh!14?qUjb)Z@;cE@SlPh+dgk#VXr5DBP6 zbMR7Xe8`K~&ouA;x{wkc76g1RG-+MKc7oFr1>XN-i`Ot!?u0 z^xX>Dnd52mf*wja>&CH@k86qosK{Z8yP;)S?KpHLQB^3yr-)I`09oP`*MAhK@nPIf zIW3opB1RCU^&+TBk^&IZ@?24H#Rz0OvJ#A$%NU4)WZsiNhAY7H-I!;Ee)Elq=WGS` zSCie><+kr&FsR%H4>jmt>uZwS9mk&g-O3n>#=}GG+!?LaumfX%X)EcQcl+gESvJl+ zM+Iu}y*N&N5TsDamoznZ!?^4H;f1}#Rnciwr~z*36k`^YB(x7Ggp{ zP3XCN)xrf!<1SqoOIbrIua^x2Ps}IMcmR5p21d{MsR((vvTT}fn>fy0nAI%DAi0Hi zb?)`Th%r!vdZ~hF5J4**%{AMO2tY8vDTDJRPt1^%p} zsrqbfy22wYZEN72FX3lv_MLYz{hdwKdwVS^d&LWnmUHmJVQabUwH7YfD+a(1s_xAO zgmG?%YBlz7oN}bS`IY#pw8~B2^HY1xz*yFF-rXyk1|EQj8)qqC2U&%*7tR4y6sqgG zz0?P$A@J}6UD1loak!s{AqAn}2HiOuwiDXnQ?B$7crZnpA{OAWvdn5vCKf`B#tlI{ ztWD7cm80=s^!`6*_vYQ%_c2v(J!5(1Mbf~wr-mupCR7FnzRP_RUQihu=1I}shl)ML z7xctK>}K}|eLFCrKh*JkN}Z>8Xr7qZ4ccqA4cDHS{eb}$Q#K8_N;YvcI2%BF-&AO{ zF^p#0BGj9~>0wJY`gY$4j7Csa46|>TT^QZv6kh~yV3M6jk(VV-oOeO`zyUrkiu!)1}8T6y8V8>gg+e931}l=HI8k>ZiXR9yh7o zJQ-m(^TNi%foWgZ@<0wob}$O$k!@ZC^56u{n%GS?kL}Fh>I2Kb(Oh3_oMUnTU(s5ll(nO|FhW|6<*v zk0?sQO>yQWa39$@LnB~von%&)08?@&%r3LUV<1#i89WumWt*z;<{qI3b`zXg_Hf_Kk69 zzzfFN4O%zNSqHp|282VI4slqcY`2ZWk-l3HPC+$he|N?_<>0{vF^@pGcvv{WXS^b5 z5~auy6u?NFbaDIjXDfrr2@@jr{)+zceV;|cc9$ulNSkG-d-gR;9_zGWdewT={Y&Ny6U+A9yNEe$>sl;J7eBPl{E}EmTOi=*NQB!U9A)y z$r2jFwRG%ab#s|wbrfzv!IhShmSO}I(rwb9iwqJ`ij64JQCgaoH0Lj*;(z!L-1qwc zJDXda?#OHsV+;eyeh=^W&I~ih*vnKTlF+X!Tu#tb_>?+1ECW^0aR<07;?cz$xAmh= zl=6T#MYAz(pN%ed>X!Cvkw|vb=F2C;#o}Zrs>88wIubs%wRIWM04HA}?E)SMABwDN zry*D;uz-&1G~MRexLI}`*zs_+HU2>t%eu~hwn7ncSxc29s^HU_xIc*XD}HYwl33QH zq0rMX0X&D+6Sqd+F1)%5c&JjVA5?udj;%htwf8o!*|WXP8^;~?cr)WoGi;&{s1GOB zu-~xZU4b8q%+e=d!88_xoR^XuRLHukE*mf9 zN*;8Rr!A5*RmwIyrH(AqQhMA&0by-EJ+)YzG!J$C5(XCJu=NqlllAjb6|(e7z!WBN zA*EC5N+N6}Hhm4PD$^pyJudS*Yp{wdt@VL4> z@xiSzSq5QQlzG>6c`5xyEU7`Kj58iW2Q~o0urMapq-TW2{qAUN>)Xi)4^w54yy$4T z+rbA^2OWoxwLFF}2d$q29&CsOKmCB{bw9ang|OCXTmYVgfNBfCW5CS_1!&_6zUdVA zHsUC8n{SH4OB%vBQ7!p0Xh^;yft0h=xhN>o^RSe%48sBn81$DDWhR|D3TT9_2Zkrf zuoEsukq z%xcFEwjoJVJi>R=(7@h)kwpnTz~lItqA_)-os({$8*Ud}Y!c7U0Kt-G0Nq^RS@0bj z%Coz<4d4NE6KhvGj#J6D2xAh4Bf&H2J+|p&Ds@b=jFGlMdFWs$&t|<_SxJc7_v4d` z*hX%KOh}NM5Xb_}7cw=sliiIGAotU85&)uu6S8i>ZUHtwKEqQ#<~XQI6S`jbvmPFy zO|!yvRp65T5SGX)Y^J)v9mww@4J{L}PFg}4v)0VQ6#A3r438(xBLquOg+Z87!&Vmd z@N|O3P*xS-5lfnu*jN~U&C}|C3eW7K5&i3Q6duBc*QXZ+8Im=IWjYW>>wD%1yU(Wd zDGH(EfyFHsDfE5>Lk40m{aMIy~)BXG_J%&BMe9i5Tb6j0nI}f7N_j4Xecemmm zpj1EYdod02?fY2+XYYZYP)jeujn#9IJOwoJ)PlQDL%L7^-Ti4YHil<-wtIw!s=_lE zXaWX-gat)}$c)@dH!OL`{Q3$53R+dxRV*ygK%k=F)}Y4L;|q@Zlx@JSI<^QJ2eSOtOR!oBAS*iY+_Dn+X-pl5o9F{&#|W56B(sEkgF2#ab=c1{_Efo zJU7N)HptMQg&2kZe9(~D^bE|vg8lv*U&O_*$KD=(>@STkTYH3r*BF*FHrq2s!}jfX z(D3Q-$#!mk`_IGA6T@9V+K($&1P}G0QH2+Dd8dLW^PC!vZj$858R^Qx2hX!;DF`0H_64z7YFXptce~w+;RzANP@bxR z@|0i%u(drrVZh)49=B>X20fni4j%bPm*uI5>gsPgDgxyPT@a~8K%T%uFu;R%)g!h< z3BeO5p8VyQch5gk8rUIqG(8j*4Dck>IVq3z!Bpaw<_nwj(`{b?JljivkLlWUT$`Pf zx7qZ(*N45wuPx_i0}Ml{v8_J*-|2 zJota?;1QbM$MPgqD+6wqT5j&U;F-cF_|g>c$r(a3Z5mI@!Us|Tb>&%7XEtLgJnaQ5 zgL+%j)Sui7^bAiNhB&Bg3x%|&t^i;jD!2lKRm!er3H2ivUxuVSaO0lqmQ5bx<_=A< zZtuDf{wNK@7qTP+H7p`Q6vC*O(i2~hULjqRMJjsvijZnSFhzc(5<|a+Psx#M9finD zr&&L&cJ~&;Lup&t!i(j&E^2pr_`X_0o?!pO2saR?P!XWXpt?$vs3b>eR%E#XLGb)g z&SxD%l1nHLH$hR`5~po6no1hwk%xQ`cNc<(JmFPT7>p@ZZ%AP5`y{Gor;mElB#!5u111%zsMdt^^)q zfTt{?_3CvsnJkz0ma*DIC8bMuP!;N8ZCMYZpo+09)ea0$p%l5G4!)X(H&{~V9;M5G zpHndU(c$|?PB&ajrF~t8XsNg6wMDz6$TQ<358UpAd}zMpgCR+pVF2dxR)szCBU;= zt>AeEcoH}$9H>esLy~EH|9*qt2$!tOQdg}kB5LI;IDWwY5Jv>ce;_{Ra zq%wg&%euo22k@Y*e?w49Qdpp7(G0-`RT(U<2Od_LpNtRtmm%iQ!Ow{Fx`DNEVRUBG zbMp4j-+!l<{^uxW{WANw*yl2~=NxW6|Hpqij5Dy#UJexK(6@eXs$EAjs zntJDew#ct**L7={8DwJ8`~@i(JxcdXaagn1{_cD)ImriWox!?hx+V! zlE!&^%$0m|E0bDh?(grdu0i}BTxtW-aAmMjZGAW#dW$4m_W(QMM_mukipDLuv(^!{ zM0Ip_ZX*KAG@9f8n!92Z$B`hK7{`JG(-_l=44rr}l8ggQaGcf-7NbcNI2bXJhm917 zaWrtrCIWLZI9qYSWex|No7(>Zz)_s$LyOXEtt_3q-9>Cu*$xr zIdkNIEHWo}&}qxr`^I}?yoVd-I!+nq`Fr=*oI#gY=H%?{v))(f0Pl3z$?SNAq+DiF zP;P?wOSYYDvym@PA9MeLJoZ43@9m4-_?I!X*GjS#4&%o$?+>)^CCl;voG@~X6`eLz zY4aVNo#e%K1;?8oW{H?>J4{;^`?RY2CKEk(0Umz)yAau)O}~V`s0F_f^)?t<2x#!r zoVf;+9SeI$`&9R{A@en++oIQdcAtB_Tf)#5bnb1pEngNawhpf#HzKobG z4FSncZ}a79ok^}t03$8iFz4DIuz5Ue5vEqpvM;PjXgXqbEcvLH?cwpzXI`_~l<8;t zJQ1$=HIH&h3Nj?T_T+!^_zJlQjv>e<3L~Zbz+2@xeW&b&*JV(8{KJeidtG2+E#Nu4 z@&vQp0{g6dzmbeMT=|yMrQzuni5ggZ5%b%SRY#zU>k<;~KnoL)!7tp|z+_cmSHyJ( zmDciF%#HIiro#oYj0Ee;eh)fzr#ugft$gz3CtOg(_GWjZXNS13demZ}{40Ny4;8i1{+v>j06f}Ufd_iVXT4}DBhVe& zh=Cn{D4`X5nAoaP3KKk=wEoHWM~;?5A-n>3MwCxUYw!qu`Vu64_^kN)y!m!F;Bjj3XeU%X**9d9v5cQDW=(p^O=RNRG-Qg6rLL>St3sbMH|rtT9^(1Fou!2@e@ z;JOMD9V$L#Bvp49supV%0X?Jz3I;&JFm&W@#g77cAITL2cxVBwk+rI57)8c;a*YKu zY3yoZZ{%n4!>Ob{H~#kJVBg%OHJfZJ>{wWs#?}~YqyD&M;0qwCY135ser?ELqiDJ z?xzsFC)XF2E9r9rOYZ47;6?@X%m~6?;Wql)jwUEVu`LZl|I$l{!ChhMVLWu11xMG3 zf;b*36B4jR=qea!|J#7Xu!clcBEgM~K@AlOdMqa+Wxb@zYUh zOiQR(Tsjszu?3IxD$A9^JorJl)pT0Y|_8?fY;2hYt;UJ|gHJ?3`mUQc&XS00000NkvXX Hu0mjfsJ4t9 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/mockup_1.png b/packages/wyatt_ui_kit/example/assets/mockup_1.png deleted file mode 100644 index 7d8621985955b07816853129798b0abe3b07a181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647053 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

    S+Kf)GG@qcop$mYXvp(6GSJfEcFE_Kva7 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

    8FRN<>JAY=ZeW{`_{MJI)JEMo%~o>&?sQNUS0Zp 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

    AIOd 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%0DVQ>f`7PAx<|W5Ls^U_zw?ls2Qx@AEiB=l;+=jE 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

    ph}L5wUZ|oP~Ufy<_%ptgCoUZ$UYw0_;RN?VoO8 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

    Hg*ydzKZ5)gR%M@6_+`DECzf)ul=!h& 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 C*`&4$a>>+a_5j;hgV-ZMH1KA=A9#s* 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℞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%0Dg(R>bG}q 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ë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 z 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 z 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 z zn}oG<0^PboXf?vi_#+gmqIUbMZN)u^qLvFAXb{rl06*V_rqf>A}iXCb1G z2A$eD85T_Wqoq8UBZgs`fTm!^!f*qCDyN@yfx3jr#ZLo4Fh! z(a43ze-9zR@=E+4F-btB1n2aCL7ppN4<}L+eOe;Da>{Q<_g?4wz;9BJz7QcM{Ax8C zWltVG&oE%cg|M9>IlXOURq_{<@`s;9#elG=X71`?&o8&TK)2Yi!sEF9wZ@HC~Kt>?8zPs z&($}cS+XfYcf|^kave0+EyUv{-dc%`yq7M^1J6vA$a~{`h z#A%n@V(&a#8V3sU(?6L0qd%eI*^$QfT)rRcxP&(!wGyv0pE8RT-etNwKBL|7=|$g% z> z<~nyGMNH*ue7B^@Kk+Ujr6JyIb81Z)cjV7IH6EGArL!hd;c6f**HHz<2c+zMdaib3iHd%pMjuAS@~6dxZw*~5`F z&!g5zPW@XTEoJNEu(gAG`3}MVf;vGx?`3vdH3xN{{m&0^*N8KDlvU!%yi$;F8;VZa~PFiO=I@d8mu>N z%)%TJakr#XJ9&ews=_BC<0FIxO*tSXj74tx_cKA(lE<{6)8&ewgXYc%j#t*O;ERkB z=aGoonX&Mz=?yN&9EF<63Re&Iel{G(7i@Exy|cORtdvO-O(}h<79_ExmYqdsLsX?H zC+vo$a7&Do1Vq9}Cv`f>PatRQhf;N>2M&zKX)0wNnL$c9A|C(sn8f9scx+G0d}VQN zop^B6=LYQr(^xV{mwbMF(#r9sC?W#>%|gJ~t`)UkpJ6g7^L3MplPum7E3hkjh7BL6 z(^KoQ7SuDUOCcZ(VVppc+5JLrg3xxSX6=-_2U40@tFPIK5vs=3XNZF1r<(GemG)D{ zc`~d;_Txy#eH!Rc@pg-v0}c=xO+kRzJfUd*4y#c7kknnsLm9M=u>v6Gw~P2L^YaZ= z6NBn%&?;vdOsC~qrPCj`Z{-c$*mXGNXMsKmUuKoE03b< zbWpAj69;*BFGY6r(8vin(snw-HwF2= z1>-&UZJ9|vJ4MVCzu)0MvYz-9Kc{U7n1|(MJQ3o)d0LP_a+KO0v{U!mINeP%Mk{I~ z`XQ6n4+zlzD=|w#NOroIumzU|PJ5r`Y=3mM^1=VQ#o*W1=qO z2QmX(8eUEfpq+H1VetHC&$VUt2Jaqc#;u?yK+5o99@tdCucwJk4kOu9oKNCwTxA<1 z9G`=U>$^8={xi24P9!k;T&7@dcFlKkU-{BiDPsiQMR@ljP~bh}A$4XVm|3_5De~@I zo^Z!tMeofVgnQNAcq*@kmCxgnp88Ln$NVp<`hPgP24n;*_6 zpYTa5Lm7OLCMTq_rs(Gbo#2U3XA~WnEL=pdRJ*5Zy(5z+%#Ry`%1K|7h0Vz(F)xi` zeFuYiKuCCa$Wb-c#i?{4D9g+*T!JMrA*Y`1ovxdL_O7?_A#FYQf+e?*9NtNNKGzha zVF2LTBb@RhH?&{{!I-aFwT7b&^}e@b;9a<1aaud0Pcb&@NpI~dkufTmcC&i$S_?^uM4<8Mk;i^^ zZM6G&Fb+I?Rh)Ta`*2i(V6{d=mFR$<8#=9pC{(o#N^=&KXEqt46x&I>7L9n(bD*$3 z4QkGvy$Au>Fh-56;yB!o%8QoTa#~!$Of|!YalY)kCic0kyN-9@Myh$#uAaLMPn{US zMPL1WN;mlv+)uc9i#gyoW8XBl^1de5SjO;+(d|OqR383P>)W@yw<9(rjqP(~qYO6h zY0aN3=9RiJ(*Niwdx9BVf-V2cr!w}){}-EC=20P$=wHLnPa>ml@P@$$sc2n^NKEST zUU?F{v&gqukn@^Uhp%!g=>n1$;S&#-Nq!UJyT(76jbcAP##^y+t8Ju9dzE*vjZ_c< z^Iw6nGV&}Xm<){AIYOSDJAg0U&kThtk1LIAu|}EPq)9+&VG#oWxw?Th2Nrn^qE5?m z_TVH@qXiLV=nd1#2^Sosug6D)CD|f67LNRHL|NT2L=`XM18nNduc~nE{P*GO{v9M8 zJ&XOqRk4>rl20K*yK~tPySGDKvhy&}7tt5;6sd1cd{f-HI-y)?ec9RU_>41gl|L6~ z2ZUK&EuqYt1JItzQxU#QilTzEAm3jqFwAxH@4lJJhhL(4Z}NvDlGV=I`Ysl*WQIG! zJ1#05gpd6GDLE!@|DACyYWMIvdmFg_Tt88Ok$D%+CbI4>QYEtwQE1J&rZGTqf)f1T z4R|6ptqKfEV(Wu3Av8@Ki1Vv1t6Oj_CX>)PnY)-JWn&&=nQNC?39%P2tT;0%x>j5o ztP=ktmr-O~aqBuEi8SAmO^#-z9A)C-AyJjWE$M`Mm3#BXvPP3^#ZqFKp3hPO6TRR` zp6Y=F>K~f1H(*rw-FHdiXrAg!px*fw7SXTCRS4ex(=?WVD-NeZTj1iJs~E%vt%9_(UQq@s{>j_b*Nk+Ibe<784lg#G{*itz9*FWYLK5mlu2 zlT>J?*7eAX+Sqxo-+1M$W5Wy%?xp_^Zx2|W#s!Y(m61Jo*+r$3s}8KMV`RJ?4{u0z zK8?_~DlU{ZZYws$OfnvJm=iMxh!uD29R(KWK<*sp8tN~^;#*gg_MOEJ`MlQOFCIgN7nZou{EWNHfjvqIcp z^Nm8bxLE&L*zs(09=(r7c@;?hIbSNDh9nm2Q=t>ytt{+y6god(=c&p~H%g3^JDg~l zE}P{_HT<-3T-+2}Gg#9(cZwoD`HI!LeLfiCW17s*pC|pT4ZqwR+&*l8DfpUM-r7fw z;?q-)PhEvlP9nW0mQvuvs`h~Ot7r}M<>}*FYqdQ)a|Rk zPH`TY8;7{1;dl`*qwXR0gAXYGL zN9@Ms6^fc2aOr#NaFes7iD9n*&&2Dl0dW)BB|mx;Yz;W7R~97!i}KDv0?kG*&z>W` z{@Uvj+FKk19ou51^C%Coa;APd0$Jo}u?N$%25jWShkTX2m_$bh5E&{$1$X$R1H&W0 z55I1UM|Ev;zABK(UZ+SqZ4ghij4gA_Z#)(BYYgUeTy|W(bn`|HoZr+BTX-B^1_iZ` zBRlZDh~0PCLIK;^E9^>f&&dz^@NTQ)m-g0f?&^QA@30;9JXbh%#EZTX)~O6Evg&^) zbRP<0%WCJMa9>p+66Ht-y3+DjrI#MSBzpoLEGTcbyKKD?k2n2AK}sdX6t!yuxeWDa6jVe6_gF)Nq}wxaGkr_*JU& zw9gC6K0tEz7DsAJDy&`Y6U#zKyKUe;D)+{+(fys*#AVsKe=T)wyGi~t*X>#o9bfqS z93NJB5kD8PFCed8cGd|?3R-|r-#mnOj@@g$qZXzf_#{EhCH1iUZz5rj3_!gD{E_lQ zdS>bYyx%h8JK1Q_G@;`O#*Mj+1KvOmkEels^R{t6UFkH_ztnKnZlPV)s!PNl9o!=~ z+s8EQQ`bK=9qi{)#uc3Y@s+rF&RNHU`TnQ%gurw6a!U2!alVJVPpav~i$L(B_26Fc z^bboCR9WHq4)rw#b3M%q_YEci_VhsCG!%Tl^Ii4iM;mLa*Kl{9fwWDfre1Pt%BW*G z_^siLA8QADE3F^~D=rpRa2k_GE?ynj~p6`L`mXy`cpKhAS_%t7T|%8jT#r{uokLA9hH{F?pbV z8&DAbI}wV%%;M0og?h=C>J(|67Q~Cu^p@K6PNh2lu_(rD($48!#*ci9G1O1Q6TF@g z8mU-X8HN^zhO z0B@2+BtBS)N>2S#epo*hs13YOY7%MmESI?fpz&aE+UeADdUO0j?3BY&5Mw2ASO*Zz z-*^N=r89XE{uGV}FV@@im%L9M-0MVM8md(!Ay^Uj=$Fb6v?8Y~gwR>@T+9vsG>e?N znm&}SF*e+_6V>~RiOU`}J}?Bq%kT7PJt#=EvBnT4d9ip{wDMIi+|><_)>rb3Si+@I zmq5`G;+(n6?Z%&-*^t4i#Wj*VK>)+W8$=O|F_bX3_Tb*Dch&8>U2!oo$n3g}4iJ7C z%#jl&_|u$7X9^a)<8J4Iz0R5g>86qZ7`)X9RWV#+|$@X*{*%9}^P_+;|takw!feCaAB(4a=HMJsA)e zK4|1^(^7rU?Art`{%CWg?ywCEJIl*cz*1RixLYF^k?6ZdEXgK`SZJv|>qh6lDL4iI zKC|VsA{yOrm$T*PbdL73-wvp0|`;2aF)Q}m4KI}GV&u3OO&)e%#JW!FP^u_4bt zAJ-cnHmZt|C7xVL`cpsL!+Y5d<|nbK^N9b8f3KHQE}V>E7B*f)1y$0fzmv*m=NSNh z>potts3>$Z9Is|FP49jiomWlg%>??SQ2)z78BO@$m#J!iVecgy!oyfJ0MS+?FK6|L z#H6|oI1zIgOk(iZ8f@C8=hHKB&<0@U5%$!my#n=x$`Luf=N0K?RaOvY;u-xE+^r(K zs1y5?gz@HfWZ1oR65Qm%MK;h&hZGXCU|YL|w>olFS~VJfg(Ygi@@>puuL|=sYoQ#o zaNhe0rRrtwK|)0}S$_qqb;476QyF?O4XWhveYAJUq$xh#L#fH#mMUh!tIJxlXf@BT zN(hEZ>0F33rUhg1t*8E4`WY%Mm$_y2y1t`No`O$#!x9zoKiRd3zJU#Vv&swlM3%E0 zY9__kWa=aL{-a_ve^{X;MTl~=BB}e#0v?+(K*wuAQ+k+w3u2v&z8kw}ge&XEuV#4T z_k|0a*|`0*|H;8EJm|Qr4smm<&z3K1)Tr%OPS>`j&TxjEBx3QI6@nibgF#K~X{%yW zv_3X)9sUNlxgY?J-=X(*`@~pk;#IGzxoq}Xhd?*fKsEC~<5`#N&Bx-M`Ihb&ZT7hY zddoM#mLJ3u2Q=Wx=(%X$XuLk}Vg82ca+3Rqyk>SWzylZ5ow_5A#HgZS$?rsCzem2PxsVFJCMF~$ z!YbE#*?JON!)=n9v}&(O-EAO*L~J=)yxav5DK3GLvKg;CsA z5FehgBa2A0cv)B`dxqeW&bx}sWmu2qdBd9h=>@xO-0gp1t#{OUm>xCc0KGADmFV%% zh-UW<*CjFt=6iIn*^#xr^<2E(qhK+<%w$?GxTqx^wrGsoXH$aeXK%=^DOSmtSz#a0 zpgNwtFDxC*bPAQ8!=6`Bx z-Q6uzUvl+)G82%42X9cJ`g)g@9qINTC zn&Mp&J8ET~7Q8n&yWy2GL+PR1be2(Q&v1@MV|x7z`@x7;TfQr4K|Sp2RgD+;DC{}fsD#e$>Z_mp4iO*iE2 z6GFeSAT*b%h!$D-cQ|FBInVHuSz|>Kn2kgY?-OHrgiMz-{$BILLgae;6K(_j2Nc|;#qw6KaCRX<%YEG6d_BIXylAb{fpsqz9!?Ta=Y z3GUpp*Q2wq{+93%-U2N*3HT$09E_S&x-kc?jA!Y;VEm{r7HkFOsr6%7H=lrDXbh-E za;79zL~WaBV!RIbqtmq1pN30Y&I_SYSwUv9wOWM1tHI*T`dc zujO6O6N#7?X{a`QiOr{N>oSQwpdXPx@jcPf`ct0Yp<}sB9_^3VC-=5l%U)*^4dMxO zN!1n0V$b%XBEI5L6USpI?xYh}b@Of1r)Ae{euf4nUpvG-+hx5I@;rXk#jAz*Fb}+E z6)N&E7Sd4#-<4)?=jOj+=);aFjMs4Saf;S__O=($iJZIJE4(Xb@<3d-xOEi>!`%Iy z1HnKbYN7j$zMg<)LP5k-u&r06jF3A zcdl$ff%mj>;G8${@o>Tv=IgC|4r(2$KMV33>9FMQU#he}A)~*CsS=81IB^_bKXYcR zyTR9HCN|G}aSenzM=>@N5aL9en2u^OoHVW@ zNHF9g-Qv>@!m5xB6G<`GJsiNMOGC_1P}ERP z7rV;4r+DzW|0In(q^pN~c~)~vmgoaKuPoR**qo4KSP78tN?eW15vUEv?Fu)&imh6Y z8qsGp(jG)LZo}DCY3AvEzy5P3T)|$yqnj&^EwGSR~BVXiFCqJm0!ILN&F`yIcF7@w@zoBqCuYMM83XJY?!O6 zF#m|Go|$BKk)@*0H1*~C$B&9lAUgtV4px$=U&c5`6(QiLgzlz>Bh^rUJcrUc#=im4Rqkx zT`s)ZHQ-eGk<;zB7YlIweC(lryGOjng14KNJADD z@t*Ze=P%S2(M21~xh3!=@Ew(SBbD@)Na_arFy-VS9IH$rC#6Ut=RcVj)rH8sLkK}T z`&xp%10=>H-_uh&P5N8tlLx`DCqc|n{}L10 zC6$C>bb#+cw*?qDPw9ES1@UtlDsRTa>o=I0Z1?TTbXjNc^ew4}&QgD;9z_wGCPhVJ z#QVLC!mI^9^Ymm;6!+ire9^I}qSZ|H;SHodxNx;$T{8t&PPG$l15KIQqu|%`rzf7b zjrQ=?+2`DQIYOi*uJ4GdQ&MLkz#suNH*8h@#4;C@RZ}ix(J<^gg?9)~MC>jgty{lD z!9Ky0Q{|69+jg@eN@FtfImc^u$Lw`yqIJHeLetj$>--ow=KP|M>Q-asIV!hUZNH48 zp1g`DCj`wQV?3WEMt%~pNO)&HXasA-vPeUC`yV$cOs(Dpq7ALGl1d2oQKa}gFlwfp zqPCi1Qh}vw3pa*X-Btv4aij3uw2JD@Y!vcEk0Lh6zTw5()#mJAPEsX0d3t-lN0_`% z%!NT&SrgV7D=BO$={)wf`d;#GGpnMdrZ(Hy^kn2N^nZ*@*_Y`OEd2z9$dVI>1Tv20 zwgm|U7P5`3pd1|&=6$_IcamwQdt#W=O#K^vGmp(8Q3eB8@M!6gNS*GGdNJaU@X zo4l2*T;8C3ss?I@LXxWgh%Q+~Di-In??&~jRuMfr_It?Ln1S2hW?~3>skiDDmf3cW z%t5LK2E$}EQR1*-Qe+-~FN9s`K|fU?7h%xGDK{nBR#NB}@`&>0NY{;p$9^n=HNE=- z&{7@dUKjupOMmVGNaMgHKCD@AlhIhpiZf4;ToF=vKC0U>`?Db=G)%k9TR(&_ywSPR zC_72|aI4~Fiiz8q?y{kJ^z??9fUA$*ECy1aNzX9~HXxw%Z_EDnH9CC)Gg(Ptz3-+% zP~xn8T)@tkS<|c?tT+~#3XVvj}WycnO1P2mi+9Je9 zFs6*F?8LWTj)KR?Ug$~y9%P{#J!p?ia3Y=*lKyz%4U0OvcSWQpc#ug1PwS5xg4=%L z76%FHF@@cpFOWb5=VHzo%l2Osp!>t)YT?mJwToeCZEIt9g%sL-u|`;@3b(a!f}#?_ zqu;59t29eVbJV}ztcZAKAdoO6OnKprcjmvRxKPlJ@7y1UqXUtMjqLx*)UzNWty=MJ zlfaNC5>r;`ptFufzhYhly3ZF*`XojD`5FG3%GQl7=x#l2OJ9MApnOI|X_hcS=G?v5 zx8QDD8vraQFCjV-tZ! z98@ZFz3ZpPoM$Dxt#jrdpmXFvDuiLaaJ0;OW1%$$O-yFtT3&JFj`kNb@Z;l%X52R|Gv1FE`S`za$a#1raVcm*Ea^u>EPFz= z8A4mw=9RgU(jwH&BbYP+41VT1I64XtjumT_AsWFbcgfL9{HKu?A}$=M_k)_%#CJ5- zUw?27QyG5$7_BHArN&c|h?>iY{Y{yT>@edMEdll6jbhLwX1|b{d_WaX0#aip_~J$_ zpmR`bIa2p~bxAJrcI0G{3%c1-IECovU0jvi^y1jRlh!eI?O#J2j?evRhGQL{+1|*f z`8Z~TE?9O@KMA6ks(e~E)BXu_SdA$5)QnjtD(5$UhY|7iN|*mAr?G0LD~-Oe7t|st zAS})+dBE4smu@Mu*^`NBu_?YEK2)55xuRpPd%?1|IUYRYkaX{$Afr$4Psu{C3seghuKtgrWT9aT@R{MR7$ddX$iDcyp7idDq77N31r0H)mT zzrgP7dv!H#6x{(2dR6gYs~74&2{Tyj#Gbfx)7CCYNu zJL-nk7wejNS}n;DF~49pV^}+0P03>aO)V^OI=f_%x}78E=2F}&OblOPt>pwV zQ@F@l{|l*)^^)TP#oW-=#}6^+>m>4{iQlfy3;peMtsc(&yP_@LVjTfM6n!p+!Gxzw zEx<)MiTm&;*=-Djw&<3-c75LG&x%GLiWJ=!^Op{u1$yQ1l1l8G71ktL)=wf&nXdKJ zA+dDdUIWBa7h8ZhEwi(@>)>N5qT|H2bvyd^g8=>Lk+ME-&wAK>>4V7p9=8&%nlR)* zBO?*~R#K%H_A|9!a53DB+S0c>mf-D<0&@XI40G!$LhjFHP=$N_YX8Ta z;&T#4^YV+E{h_mZ@+=PIe@`%QFFMTQGU*j?P6Q^{l$&SoPdN}`{?&fz zs|?%7^JwMrgI#N!hpojecOm_m$Po{FqNsm?RIDdLz5Zzgf(XTy%2#mRLg1?B9B#K> z>x-^ajpYXGs{$|04)X5-e$-|EgRQrWYO~$8hJ(Ai6DWnC1q#L8N^x(|B83*G#ogV5 z6$w(jxEC*4EKn@C6)El>^5xm*oW0L`#y655_upi!d#!8EHRrqTOcznH>EMnhG>;mn`p9~#;SwAF>zy#-g%d=R{^AxjWt<=mdR96qF; zNt6poK_4V~^Tb`CQ)Cyy&i`zQfle`OqO8BxK~tX>cS@L(03$IKnmmn1SK&5$*^q1> z*?9sgo{)X|F2u{T{gD-$;qpP=Ye5(Iq1uPp>lDjbxMM8iHSu$o3r$s)kJUm$cDU!N zneX|D#izba({0&@XltNm;`K&cFT(azr1M$)F#B<%u4b343X$j352RMh$bAb)m%^WP zdl2943~;dJjT$*ZklbNe`m4(A!Kw?hTjo%tNL}&tjF#S%!5xtngcY+_U72tAE zoP#YH`x5N~KpR;N|7X=4F9F=bk*{D2qj@Fgw#>MvrCTw31MGps%yin+9kCnTN=x$uZ@&6jScdNE`#MIr{$7JSei)JX&pB5RpV3elyX@q!u4N?#@+BEu zOo(ae5Ol!OB4J0T#K!-hEPy3^;!kth8-m12o8BTc-@3MlvgiOS2_9F&p#;7178IL&~4y3~!yr{M=B=Fcf2K5v%6_O@}pm%E1f zq#DA2mk-M_*srSHxJ@Y{xjDQ#Vp(M1_KzY_BsDM%=#&H;T79w}s2&i`U^&u;D4q zgpbHbRgs^rND1Me=hwT^M(GIN!`p!7dB~h^Wioxi7f4uRVsW+d(G29&V{P{uY^(n_ zxp|~lsXM>m;ePC1?*ljJVZg^4F`w`o+B6fe0=jyL_dkCdP{f)^zdjqCys-LWGPl#b z-s+_}zs8ubjq)?6fB>=Gmupqez4ih?)?B`RqkH-iBc+5b-B2qRc0T7>D75(N9WTUN$y>7p~M^4udNL$?K7fCtXzwaEn_kIkhmTj^8 z;oFeGDO~=@Jh7fY7Otw*WI(r5V>YfKK3>sn=M$n^mX;^q`JKE zwymp#*xJr3{`XvkQcqi{dKV#Oc!}nGns{If%iLFzcEO#-wrWIQP4ij84(SJrzvDk>*w^oI1?eji~J}`p9NP^9hah>v|hy%n@w?8I;T0 zO_jmnQpGl^QrN+ow#|#4Sfcz~#o1xG@wU~1`4swCaRUxs7JQ^BdX6I3yYx|gB4nMP z_w5^b(AqBhtpiSovPnAc{oNp^eMpttSMIUb)gK~tE%h_ICm0!yvXzE~vlSmQIlnCo z+nG~cMQb~C1JJcT={-vZlqfGmKU+LX)-Jv**W8WH8?+7=2VANDQoVVduX8LB{S;3^ zEVZW$Tp*vCrn;EVVjW-A&X@jeNLW9pXVzAPou`0)kv(=u1MuIe)N)S{1r5G%lFDYR zLFcutGLU~ag5jXlf!g}Zh(TjiwXJW-ZhX+6_k$phyE)m4m>>z1D{!z)=lG&I>Mjpl zLk&Gk+w;tk{nZyd80(NWmSI@*SRukPSKt?1n&})gxp7A??0g~UkPVm$Wi$?^G8*=~ zd=t)B-$WS|=|Yy>m(P6uj+C`_V%*YQWFeS^eJs*Xw_x_Va4m9^=SwCVSuXz;Ss zVGayMg8RD8CISqNY1){!OVk!&nqzw>qtPmZpuM&3)}kwpIq zX)8zg>OVS(mb8z{&paK%*i;cf{SN6P65&@%kURuZA}{jWpERYYcIK+9=3yCmGQ2tX zM^W)7es{gqJ&vhS6@o?^SZe9I$LYqL>J|#-$n8XkVkRPkH=cy-P2$^nOj;@S`PnpwI~C)>Nv7dK*U)#A-F2SN1gMQk&7Y@FRjf6Uwq$IBoNXGX*dFKG=0_#%DpgDw+|Vx6F8g zbH^nXYYL|qZ|9|*pFL<_+6i3Dq|_y8$DWUvc8j48pP!eu3fgl;3hR`KMRw3((&1YT zQAs@|N<&yGXFp5s#)a?eXsSsC#x~QcS$-NIuhpubZdYu0qYZ*tWjHceA8O=6ObBDdR1MSn*h zy_dlUAk^2}*X5s;+Wq}z9$uT1=;P{h2rAx|nWxMvYMtb-zW&;&malVe;TPYh=5FE8 z&N4>_A5`MB>eMxAu`0!6mo?c)C|PKumzbkp-gOg&Rt$A)t<2(I#x5A7??JC;)vtL z4-sB)(Uv}*D)S5zwrBkSuzGjA=~Jx~i`Qz485Q)*j~B9H7YOM@;l#4>kUhjCMcy&N zhkG@;5+Vx780a31H=0<;;LmoTVfa-FZxgghaAp zCHDKF9^g^DZ#3lIB1Ji(-HO@!v5lL@``l}ondo2pc~P+8+^Ao-jE?9P(~Tk%esL0Z z{K6`JDgWY`wB4|*;)TbIw#ETlBxyW*Vff-w-)`KB$h70lyqSvVB9p3;<~+|}_XYCv zei6wwRbvmxmUks%Jry5`%><^uTKRa3^?-b7k?T=;=mAp2^vc)i*ZViSK}i85nh!25 z%%GfM5;fS{aD}rj5}?clX-a)*YoPMzfP#`Ci9}-_N*#MWg3!0_A9)m->L%)j?2Wui z4Dra70{UB5!~`i*W1fyt2VY~gj)FqDH%AySp8ay$XT#@JzywmqAm$5!hq50c94#Su z=(MJgs0^KhV>`)k4`UKuD?u7LSpD=Pbsm>#DK+TXa*9irp7e`PdCgg*b|^w=?V5+1;J={xo0 ztDUkQ%}p%n5O>4W9C%ovf=TCvhcc2T6(A-gUHW3*e0~ILpGKT)BRR zuYPOwv3L`gj*g8nF)l_Gle0&y93D`a5Lf@8kiYkf8C{*yM(4EuLe%FIi`MBginG)& z4;CFdPnSA2#fK;cwy91DJt)1?L%ki>nRcibTtCZNve>`)APsP*Wd})x?8=AvOeB(F zLf29G%D7vhB<07{^I!(DGVc!}Te^KI7UaeD>QVA{mJ$qZjWy(Wa^eKrS`OA7+<4oG z{6dnrtw0kep(1}Kx&B64=Keos1yMD9ZV;oA5z9m)TnSRS*P-{RhiuK1nY#Nf9Nz0c z7DpDb^Ik2yt{c!vNGx(d(;`u*M&Gcm!e$pG?f$envUBFAk(*l>KiNjw#p_YDHgNhK zmf*pXq_YVyc2v15gaIiFO~)(cs(_J%#-aC#w@aei(4kef>kzEMAummOtv%ECSW_D4 zM4*H`GUI*|-tEgNWqeCDR`)VH20XF<5ygVTu`<62j>v{c zFW9Pn(o_jcSZ#4$ZCP?Rj{>mzD&unDCaa2eI%Qmu^(v^AY+jKDySINgtl4_FlG@uX zhGcl;uXP5R|Ghy>cp;Y9yz0XrW)w6PmfBBNS4l{IzdiiaKKq~g=1eClPsgjml>Yl_ z!|N8qFoNgl7CWiwc5B(s+hH<-%c!Bo?d*G9$yeRfs2rQwhi0_y?&;~n*n79#sqZ6g zsd(cN_p(!76?7w>2_dDa=uljHenZu--k6>Tb^K(@K8F03TVzc;7Idm<3QeNK+pnhv z_i8z!QbhzQk_DvRLXIMzcE6*g<5o4uO>9`15X=6hl@4}Q-aa;|&J~;lmznU2_jC4X zlwrhRv9NG_R1SfSB5evc3WACDi)1-fpA1Fue!zY@I{3e7TyFd1f!hT+!jX1zsG`S;jzO?PGN z+ZthaBd+F^FEBSbMlB_`IM|iYR~ld$4mOjo&^D2=gHkUsY)Flr)YZyNB)F=6Wtwj< zf0RSqGiPzicYk!!{X~pZYH;oI2UKDtzoSKuYfJz8sK(&|z5~zsmxd$tbi4ODEjuT!u{kQf z&u1c$M2`5wWPo-a*%F)EPA&LU{_4#_#)8jGcbHkMB!~acR|-MbnjNEuY+z}yb3+i) z_qSepF6q$&@R5mr+Ej1WY^)L_hQ=6N8rzMlJcElzuD31WH+8LvZxP|b>90P|1akP_ z1akbn(dv%8mz+5%_}}6YP4UU`*Ci*RkkV}3kE?-96LoaZC)nRx@8cJ}MbV7vr#;TM zrb{?1a>&z7=hH-W?4bMA{c-c1VHBk&_hT1V73JseIEWU25}wV>?uZlPP=Q(6XKLYx zf299|h5i)Tq>f5~il=ICWW7?jZ z_li?o{T4Qo{ChvXFJkPvM6t3?cI)WJo&}bIQvD(Wb+TJYj-^4xJ;#0#v-Quvb?1#S zSuI+61#9QEv$WA?TV(pOOf!7VB}$P4Goe|m%J~5d=Ii?J^S0-fYXy)O;tA=5*Ncp` zgbQwRep#4yC}iCxbuQ5lzE1N?P(!u-m2TlBR>R>VfVSD6=^WqNnzh>BZ$XCDlg+9$ zBrC&4xBOHMPMg5K!4cQIy}Z0oNM!j$&R;wd)1w`hfZI7Y%FW?k$n1g|X88t?>|3f# zdiBd%jYL^=JD~!3z1qIL0JE3C-8CcitAUTWm<0jxCYGQXr(8F3#61UUl2=5Fx3;Zx%EHCE0FC6p5fnjb9mH;?|H^Beb6j213A}9++m9M z3iA_7qJ|M^ZLcoiNU$eH6TFw&P57z|icSYWqpgezz)TmO11R}AdmZ^noqc*`^^n+` ze%ZIoUiidHkMz1>B;iTo93Ih%lu_Ju`eOu0*K7-omw)#fRNCb7^E6alJg@6Py6n=o zY)u}{xPPPdzm>%OgbGT<$D^y%0#(TEY7r#%^P+6wZV66a_A{T6P4{H1-GhIOK`lF- zK$dR}uvut9!$F~|X=hiv<5Q_ZgMA+(XQ2{s_3&*Dr;d@f_JW|>#xkm z91L;f_u*YrvMA)@I0slOlTsp1{?#rPGhz?a)q*{bA0M?Z+YfN^wpZn>Zb7=U!@A>onaUdZ!PS#FYcw8O#_c&w-!)TcOBtpo(JBMBoTf{Yd!_7@<>uC}& z!szSO$X+}0{+R4TUafW+Sj1Zq>OMlxbTnL*dO$_9QAz9|B%`>lXRF-*gFQIwTn6Og z7DhDUo@Jd+uF$lAR50Z0h?-XiKhef%QZTyV;efhlx8AiH%-#ZgF7gRb#OJ1_e5-xBYqv? z@Z}OqPEyf&|Xk~$5RemeQ6S41`*3KF6BNEeb3^Qj+W$2UG>c-71Qoo3dWh4dGdf8=#-LMJ#Rz}$iA z0K!~Ts`!Kbs};u!J|gyeb?w{ss)I@GkfehVJLN~NhN-dnSNBn;Z0tYO_jY5VcUr0U zx1V{k9OjVK#OW0w_7rYZYRJLjJFFgAu}KaKUO(vev2LZ+C1cLuIz$+WfD@mPT~OC# zb`lB@xI-QPkyvt$y9k(&^e%#|W(c!f%Q3Xp^`dP{2w>}*8me6usLMz~za>R!n;eK9 zLwN8K5`3L>RQFtgxMEZU_`yfVOh|)Tf@|A(ThRmum-LPl@-=9)uay~GztsqX=$;-5 z2*04%KMD~cpHPAaMlcQA(9a`X@Y4amrm(lm8<8(7sen_AsHv8>k@vV?K7wN zg`x3Chl7ov%;@-2->=?3OG+WiitA;Q4w@D@EN)Sge}k`P7P;B4D%9o5Q%Vl9QB+Y==A9U(ecM_fO>->a*U$nrJVQiCNi!IJbN3@A24i)p`Y zyD?az8La5E3}RRmXF!`Duud5c@Ryu`rHLr0SlESFdZc;XX9?I6#0r~2&ANr=UP=x` z1(TM(3pz6omNp{%#W;EG<2?rtokHf{FQxYVX9yYKkrn@Ir2gB`xR%V2pCi(>E1AWu zUi<8~eP`mGho0 z<0lbhV}saHUju^(s#(0A-x8d@sSF?}i3t+wbqp~z9UOe%v|iHjx*aM7B9&Z7?7WsV?oTb7RQFjKA{0X=yxXIxjqavsu>Z*S4a@~Wt+b#vex(2 zF)el*-4Gq>`<}zrB5&(%(+F{gFz>&PvK{?i)EJ>j;8d6)E5OKkO zOtebjT!-#TWD$F)}*nYBY8s#0)kqjr1YC zEV;(n4@Q$K3KRJbij#P7MeT&sM&!q>1@jz?W8mutd#XFp~0pyE!BGg5VxhG-%Z{2b z){0KvVXICYxyVG%>`fWr38sUf#M8rJBd|SLvSl0_7DPorWIP2?E~*>#DbH|4#^>`-yY*~Ux87d*_(zm zD{e0@I4#&gjcf-b&_;+(;vA51_&+^-6Oea@NsvrjB`pnzJ2#@PWw3us1-oT8k^YGX z2cAj2G>BmK`OdYWLx_rIsCN_Q8XWEy}17P-z4eTskYQe(f3GGHIX0H_$cAg4dfnEk+ zicEK&hBA+8y*UiY(1rEalVB#n*1Jxj2)U(ZS!vtFL~2M6-}vz`ekoZi{bM};0e zJBJ5c|3T2$QC$g9HMi*UiSlMVudd`Cdv=hxg5bgRA6Kl)n(F&4l(ZCO5`OT-4uPwj zgniKZdn`BjwXyN%heu&wA>|GS%E~^QAW50o{^ni$8P`6{qh!SY17Hyg>7?g+yy!qUs&5MZ_r+M#1E`6=lTZ8*$>9yb(V ziFm=X-B?rydd`1QaF{rudgpan z%5zir*!nPCbF9u%{(k0D+fC=eWK-7T5hfdp6;{JJ;-oJNW2TJ|7IpzPUajjZ347uXKnOAvVo`MV6+vfJN2irim zOp9z@Vk(D|?xQd3$fi8X4-QHHHO`x<{?|As*%}kO^`_9)C2Gfhd9Z=#jF^Kl8)DAg z-}%g%$J^uUS=ZHRi{q^JmbraW11XEG)Fb8TIWg>?(Gwln7}aIltfa^TMR;vk;1*+Y zZJPJNFwJ1k&Jf#Vq3OyYCE^0XwQQ1^bu_zRltQd4&M(=Hs-i0pa)$7Dh)omv>lyPu zHK$o}BM6HVqc^SK?z+{K*dRWi>^`M9L=;3RQvlSB&*#l6e@y?>RRDe!8RrkPMtR;wBd0marI0XQuyCsYW7x;=?zJ3~!M+)R&?=dbstGmptu`N|Y#83r-n& z7lB-1N!b_jZF77x@j-`kvB-xG@gw$bwHmVVP}zmX4EgUXe)n0~lo=|hwSt1t&Yd+IF1rJoSdg+x3Gi}47yjn!SqEivADTfJy zT$`Oi@jJs_o?{t(*w~CzVTov{oL}QAuhiW>k>Y@j<9|heizjwwbi2FNaXK@I1yPq` zLntqodgqKe(N~j++uU6cwlE|@KP7NY0kMr=p+hP8G*8R?7l(u!MD5sZpyw`5Mii+6 z#86ztZ=G~`R_#Hux7_xM(rKZ#p4i)I7(bO7!#|9I{J3$%{=P7dy+%?=b(q_p+un6# zaNcOY;lpJUp4ok**F^`F`xL_rLMI)rzUZ3v5d&EVQ~DW@~i;1p{~vLLR&S@mHHJ( zcntKan4Yx1LHZ5q77{DV^llm1QuI#03bJG;v>XapUxmmqPm22@5+JLkIE-zuuiHWv zp_CDV@jecdg)bnXwq}_`v(4b~EAovO*_v0CK^ic6x@3cqgd(?etbs_^#q3d%ir8Fh z3Cu#EUzY3TLllrbu?jmo)vYAxcceKu2HPi_A$?kn0{0LV66yA}dyJfl`*3G}XE!XuVszI1CgGHNTmTks3FOgjn1*gS7ETGhHBzd?SVR3yb&R4%Peb z@vw5uXQ9Wf8l5;lF)!j{^}qR`l#0bi2frp32@oh=q=P4yGsDThi!J!2?M&i^v)Hz9UhXT(c*~grIDkk4|(tBcl7Ty zi`Jey7iWffvny~;+t8?=E<0kHt<^kj-Z}c6&Frc{1pOzvV)cFt?kKV@9>A6iDAu&Q+8m1 z-52|mbt=saW$l`4XSM2%(v2EA2hoLRzHWiS z)ir*lBLBV*-towzq+7`pb#hASbJnW$G>tY2N^^=VR0TmU5ILWe|Rm!#jmdU)3^D;=|!b>cO}?}IldDRpB( z0#V&I94s4lt?Fg&Pg#L>-#2xhLd;LWsN3_8?)CxLsBFRl)!145XL7?r6kiGE^??g+ zxX6quizm+RWkUsdcgg}-iq@ZJc$qXLUlJQZUyv(hf*VuZ*LAulwP7ruN`Azb%eJoJ ze9-UkycR3g2;S2k$rWfMtJB?0P?0?TlO_>!`Vm)YDD5(CXs|dkQ>XfTCst`4vrZx> z=q?W@Bf?6M`6o2bsW1U$CyLKrbjbTu zzT>bz+_}=RMX|Uld`FvT{z@i~v_PEp9e%`%Vag&k!`@Uu-UA4d`}+|Lu`-4^G@g7g z+w<}YcrT@AlCb{XtIMFPdj#GvBBQ|~Y^Z0|xm8brQyljjxOhpGda@b&YvsDP;>57q z_Fi&2LHPd{6WfTdOFJN7`l3F!2sDAWiAW$UErX;4LM0w$Gr-{)snZmFBJ|G!R~x2BaT;0~*ladtkqjB2PV!9`?6qnn5Reraj1A z2`s<{FzTvhBLlCpCw3QULhlWPS8C!bumq>=T#9pc67eF6zRNX^hsYx`4u!1DuzwDU z*p89AoL=<#i4B56hN5M9`!rk0?}8Qi2n{RXSI``V$v2M%2(Z#kY6i zXPD+=vRbD>uS#Xsy=o%yw57r)t+#&bJpHe(NN}$7x6>2ZfE*yuKQ62ca)rl|>;Vmxg#7ZELuwz!KjMv#jU(ANqT&eFRC1 z&_MIAzd=;DDTKE+k)`#{K8AIB6iI%Vgp?s&BO+SoFQoNia>&#`UK0WwUP0^_a^)yQ zv7MIXk;FchkwySN-5hdb0uBcl=NnLX&TUw~%vj)**eEjIFMbW6hYmHs6ZKVKPWO!= z&S5aP)gph(_4Bp%*ul}pDD{qD!kc1rp8;QuAA7qrqv1M?>c3`6$(~=czs>bRg$wl- zb!YBLzr14l>bXS4;NQJ?{IR|CDDVFuU>B-|;J}o5^zlHDy(F5L2f4Dp(?6oyiF!91dHcp0}!<|l^;y(KP4@BS-n$}#8$kV8N4WfDZRI{Z2$$Z3I9lgo*p12GiR>7S~HN{ zhi$z}g!(PzFcY!lqq-F2O`C4@*(Vmx#(DmoXR^e@@@}-Jsiz@E7QrGf2x+JNK+=Co z?@;AOzI)AU75tQ{od~M}x?K#a|DGFF<8zPx!O5YosLypiDY>Tr ziwkL8a#U!omkb^5D_v!B0?{WLglfb z2nBxI@f{9_nYcd+fzL)RVEEm0kt}_U<4DKbcB`SnP`^TFmP~hD`KJb|k)~wrDKpo` z(of^7IK-6Ew56H`S2YP&FAMzmxl&hLJ1Hh{g%oA!We`)?Cfv4fW6F(5CR%7Go!^TX z&*huH(PCmEN2yC;pg2hW>6aXn$?|UhG5N{rZJ6+Ag6bE;?ZYSq-gylVFJuT_1uOQ{ z4jM)8R!CWN+EBZd9}+!J@=Po3ao8k$O^l+asEzhhtJ&0r~B@ z;dY!y1YWOlt2!O1&i5BF9?Lh*`=1(b4p0guq3>p)q|hXjh?3+yi;+kDHD>)h(mF(q z@E5;KGHLl#K`*T%2DdRK+go9YY2J3!?H~FdX7{Uq^0Ye`+|8j@98}NlyFXOR)hw+b z>1!DTT`)tkfwa<~*|a z>)i*%zTF$^pva}!8=Qd~sk6=#-hdM;VgXa}X^8H0F4ax;-#baWEr>l$y+;2luaPfO`mGYEa)4*@%xZ4NPGhDML~-C2tSs<5?|ycZA`BuQfY@w*aY{5Pli6~L>} z<_%~_!?ty%M9YEUcS?&vPqS^hb-FmgLl0UWUfT2oF(o)nV)sqyArNDP@XlqS7R9KM z#G8)t*5o=&BA;YWw3u*M`|@H>=UN53Smio$c8f7c=C3$Uku14sbpXt5IOu1|x$9r* z!MiF%>60iRbZxJD21kXsXUg@_@A{hr;6dlgZ#0Tlv2>*`CgIF{IIrr^6X!I?aUs%` zsLj_p#`MQh`S#>r&z2=`@B_o2MIe&D_pYLhi604N1ZZlZiF`|nP7|k2l&_mbA(E@x zp3K_^eKW@Q&}-Brmw5Q|E+NPNbv1o6{wGV9P}j)Oh&f)gQ<(x?J%GodSxeNJWl!iC zyAhy}WuNBp)Yaf=QpB4UD?dtR8Z@K_k-2M1x2^Pz=kO`Qn8FhZqCy<){}Kq-c<9n7 zn0{ipZ$oHM<_}@*O_3QZ+KI#KpFGeN6A);KE6TXk&ZL#lJE>I3YR8Mhz1hQt1zD^% zpG)Vz&~(6Z#r8fh?jbbYS@BzrPnXZg-Yltw6$&=UH{J;*@`v^iSY*znN|4VANW3io z2G}iQNx$qT!Z?!$l0*N7UWXf-)ZF?}LZClSaHN?ZgHF+Y5@AcbL_PvS8Mdm@30D7D zuoDC{euDrcJ@*2l*M?p_`j0VN|L`b*kAK-6fPe4_AX>adckodU%0A4Wv7Z5G=m@v1 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%0AKtc` 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

    P-9 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 z zx8wqJ{qouXNIE^|pzsw0=oQv0uzj@KDy;9`+-W)%pH84X5T6#A%Piel$GURI(p8gQ zeXWkwk@*a26%@t@nHlkOl*Ec)T{zP@6!M(m-*sF8VT6x|kf|A_BH`eTyqBnglf^Mn zZvpJl_MP8xxxk@g^lh&4_~kI$+|DNJ`C&?*+6e8Q@Uf4CKkEb2gP z%_lKO`BHWSUl&%IU5?PrruT%aPpp>CdP$WUL@&42R+nrJa5}}&lrNulv%37+#btvq zMIeYD3-Q7y#(@Bz_9956y@b#_WVbUA_{@YrRBwC@bIb_~J{b6Pe4^7BzVzK&|NRI( zvyrMmhVL&RcBXNNm(Xz6B3QqUV11_5_fni(tQBK+0OGlCaUl$JwIaVI#u)VORjnHs zmS(KK@NMWO@WziP46k_mIN|Y6XC;e@ChiL+=aj005p9Ak?B!`+5|ri5+)kobqR0a9 z?#kb0w=3H!Uah@b_9v#G}mZbi@D+a1=CUq5hOH=v!nf}m0%VxB% zt{^?~A%2ooU(O^7Q+fP`_p3X2K=ui?E&ud+Kl$pe(&qRCCm| z@_z3yjn^c9-jJ9_Wl7+It7B@-dWN@_$PAkX`Z2Z$nP^;>d)$SJwb$`mz;fhOzq>Wh z8m!KnE+L@H862uVinlndow23JD08%9#@kw$f-X^CyPEbtBpxyYWVuCo-en>9Smowg zU@AsIS>#sq$%DY(YWFeck_2@MNO~oNV)1&lSj>V-yv1RsctPNsO>gBFTt{5qF)+K@ zcAXYC5iMlo)1YGa@Ev+d<9gx|tx@pW-AT3c2#b?EQ7{0yxj@+~=^2qlott>bF9gT> zZ*m&lLytX1HyqwG`xWO|b^p82$&<^l`jC*7I^Mmzda>r*Wr+UTcThhz6Ini$y7_S*9-590;}!Ei5W zYVlDL49iV530XGB5I>#lhzx%<(HZ)QQ^{Krf3u&d5`f@~+GPJ-Y@6%uxclRUYgv#T z%K2gq(|QR8c=j)U5H6r|61SOe9n3b`hWX@d*YX?#`$MwLR74nlr`I44L;e&Nlb7OC z&Fi2;!igQB=S~ z%xZs*oK7>2-m^LWX7|tF(a>RJV4c}%KE7PW(6>~7wel6f@TT9oe%0DeiO8A~XxDeQ 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

    H9}WyPveTstv$%dSre1{qs3Kj%nr18*6|!^Pu2T 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Μ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

    @^h)B_b-Vp8)u)fP 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

    e@F?^VW!^}4qj=C3K$jhgfAtST(+knZaW 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 oARQ! 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

  • DKVgi{bN(7`~T5 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%0DjC-+QA68m>%DV^hTZK4)6%jxlYhS+@~dw zwp@AIWe|87Ug#yV^m_SfnrHE5J$30u=;10Nmr}4B#Q={44$>ZWbxBG)*qKt40WZLs zPd_uUl!d&@00@8_Z;GoNp&Z5=(U8l@h@5@o7ZMzZ? z(Ny$4w;n0v=eU1D1HcomG?DT%4uKs;VBWw_9X^r{y{!}jJaUq166D{>Pvr=ZDFmDk zpr+>km%TUdj_bJYMez~v4GJFt|Gl-|dhZqz+gFY)%diqVjvc$;*p4+=5+qr(rGmtH zRCAtLph!s^L=u!ZPt}|Ok{}y%cc1Rw4U%%4{U(NJ#uC^zMNUdqys{3Ys;*(@-y!2!b) z+5D!-lUp_X3qu~JoB4nk%55_S1mE(81 zLoSuOD{Ic@NJtdvVHgU<#K^hJ9tODj7QF=cXw%a0EZX@=ezSSKfc2zLt6c)ef>cud zxFl5>vOI}hmqG9^H!xHJ|0)N=F!*_8*wYy2vt7HxYR8DUUUL%odJC>N5`1f;0=e(V)q1l6*h6$?;06hnu#VS1_)xx2;gWhWww*#VgqMs4M!kfkD*WkrL{C&)tN} z7xUHM{6Csl9eDEo;f}>Z!?>+~U^WKqQ+7x$Yv_p?mjrk{R5ay& zUG9XM!#Y)nz%p>$bnH?~6(eRADH^~#+nrvi;fPSz&1v9%H)75KpQ&$i3oIOuEq3B( z;QLL-zOYKspdP=mRWPCxf19buWH z1Nm)FN8NWjaCKZ4_N{L0UlVj3Z1k@p{n4KFn)})hIyd^?_MrbATm3u($4+5Gm}l`G z(X!R71nyT?QoYZJ8qUv%z}`38Cs`rRo7dAN^t*>T>JFb3pRo1FJC4}-b~2Goo6bbqsuqm&%wI%pG{ zXzmNQtsp)9c3Qx?Xy0L%A^#h#OZ2bvcrVE92n!t}Np6Ib2J6#*?28`deK}BGe2&l& zao*n2Tz_xcL)wA<^NtnrQY-a!gL$Kl103qSiVmXR$*6E&#?@ni``rdl$HLcgh)e-r z7V))FU(tt9k8L_^w|Y7pmgr|7cRGY#K)<%R3-*YDW6s@{F$?_{IC{W0-yf812K!WQ zp?|Igj=209_d57@$W?O;{5SnS8VS5|?2z3B{BC}^c`*m zg&n7w-9D0ogBI;R)cR(4x}A=wjbSnPcFGm35w6>DR|f93S3KwW(U!IT zvu4m;178+lep6MXY!CsZYIY3e_Q{~2TVZ85?cdjs zkL!``f=DMsAZ<~ISo5*JE6iEo%!55A!#<7oI_T}N zgP!U5eoIHC2xyN;F`^_|4D`<7eF$_Gv6H^9Xy}`X4jvw~s;LGYSl?Ik_sHD1=jNU3 z;1B6RW*_>h;%tL#u<2izl4uyFV_?c+BWa}5VKWIb%g@SZnDJ#a5oy!qKPw*`_vL4N z8BRMWQWG-T&(Jmu$PLW+nL4xIv(vNkS$c+9`UA^n?KUtgmtj^uqcfZ-FQnb;zn~?K z-$XfOd|9~%Vb)G2m%EmKFeImcsL!T-dntbEp9 z#-E}>KU|EQ$>^XOkuwv`jYA zQ*`J-gUpK_g1F6-BHxmo?b>nFpM!T8LSaK3JvJMufwz4%pe9W<;^X567(Gid|Tv#ZMJ z7@6|-954|6=d@ly0;?U0;}rd|^t``cnrE9W9fMbk>tO z#M8(}KcgOrj-i?93dLMr< zGa{$rVUW>PT|;`&#gp$axa(>FZDCT<_@N!js%BttQ8kzxXb_2pDP933pvNrq)}lWy zo;)55HB$lqX*(GBL;bm)O|k^|LVibTAmT@M&pPzi-LfU5_sMuj6t2opMH#d_;dx$8 zfnMeJ$_|0yIlM1hfh*hrwfgi=~IW1f7*_#o0f)v zcmn@wxNS$lmsjI{K=|#TtL|vP3HA2X>h&B?{BD&M4hAICr%xmOyo15k(?AJ_1=0s~ z!_lJ?RYp2bAafpy7O0~EfjHvecyW-whvC2iRn-b`P=Em#l2F4xQp3JOxd20(<~-Il z=kKB$RdnRcGduNq3&UsEMzaLC+g(-OU>=+G=`7;dzhK4~Spq>UzWPLPfR2BLq zpLXzM5j`~MrTu2UkNTPMS6wVuLwQElu)fT}lVN%y7Ug&q3hPPb1-|3c; znqW}sIw@N%3{CE$-Rl^!bxHLoerx0cOioDGd3V4ta_X$#?_sDnm+cAUdnJ0v@~WGU zbrJMoQ?xY5Zj=jhNa!Fq;5Jz}A`07Np@xCIp7Sra!$6gPz3Z`NMhfg!TMP`#GU)ii zHRx)l>Kle72R-m{9jEiEpf@sZ#b8~y5kon=*xGI0);RIpyv#h?1%qqXR&DeANc{!3 zAAF3EC@B~Y!);wA9e!`PKDV1bf5c(@_066q$iLCH#M5B<9Il{RW8uK@eS!ME$R3hz zjjQk4aZCRqx7t0`;X*Sm}h%nD4bYm zo&YY=@yf5WX4v+j+@O_^*mPZlis!haVR=-Sbxoi@0e1#F$XOCI9PVA&^;exM?JF%X zNKPyk8dm?h8Q++w!_eQp$E{It@D+}lE#UuQ>rVF;=&#q8dOH4iQhg!P({Di-IC#_@ zQv$v(H^gg19OX8;c@F)>m2yuO;K1(bQCkJ`;}F>a9B^W&hm3S#fA+gxa}4yaC!&Mr zq3-#H-voK3HAX_w!84?3xD_db|Ga{Hgoe_q;iQ3qH5^gffKTS$wM#q<@=a^xMU3O2 z`djv~9MYS%DE4=+?)7KE$E*CR3hPc{q(jjZO?RxYU1xHnVrGEzX|1`f*UdMQQ!gZf_T&ERVl6(6f_tUyf_eDq^dMg#n zb;<}z&eybq2lK{qMLa*mBSI$(7#=uyqWvAaIA9(2;2S28+cRzNh85sDriOf<;W`r; z0sU0_yWwrch?(X7nRXcN^YPnbFXs=-MvZ;STnhUf_9=BSd|(mT<}bJp44$|Cy#2r< z-JJ2Hci6l?BD~USMBTKImxm)B`PuszBYg$wi7DBd@Hv!t(gUF`?DuRtQ z3J#u@73wL-iIGB#bb8Aj(wl_xtm^AF9uOG;4*HrDJ>+BSHVHAk1U%&j>{W+)P2L;_ z?z5NVtip5JiW}3s>Z`1-BmK!XI4Y6;&E{pkGl%`ZXPe9yjK^KJhb{EVeymF1<9Lch zGcIKh2a&BQqce@L-Ezq3Vy{l=H&8t|$7`*wxJ zdhA^8pRR{s3fnyQlNY=9hjqy3)s~Bae>SnyKih%+)VG>N;6G}Hd@r!y;@dNV`b@>& z)Z9-G+U>v}HZNAsLtfO!H`?J)*VoK3h4m-D4>iF78TX;)d){AkvHi_qcRF=^Ixw^ksB5=Urjo~2j|8iorywZ$%CYA<9d@Yj0p6^{B zsw!H9VaY%6&DKB{0-kTczA&!J3I`;@Sh!+vV8P&9 zhoFxtT*Zj|qf%1Tn-eH^!&Bde^;v^{P3*I8gZ@Tgh2#GGNa1Zwxp(XH>La9Ild|UX zXw={!O^R@Y3*W<{gNFz*a6J+;eNW$ae0;B|0GZBpo4((;28Mh5S-CmH`zGZCdClQh zR}NoQ$4)lx*@oj_qX9ij|CGTN`$=Y)&GIw;4AXQA!=~k5zy_TDP19*Uk~7CZ#+RjM z{IhX(KKn7ncG5reEB%Z8V|qqU*JGyGmq3H?B-)>nSbjRc(a)@0)~_r-Yi~-}BK|W- zA?xOsTd@fn4e+F)!_eB zxmo=8)yMi#Znj)9In0(DXX6ux{-{rnKjY7k4F46}M>m!F-U^^<&eRcyC0jsS^=NrCij2>&Gi zjITVxv7@46=l42B@X$drrQr~fPo^=DHlJAZB~2%tIdHPbnv6el{G<*RL;iS0B^@V| zGijtxk!HF?KGM_WW~I;MBR|>+Y5A<424>|mqyv2l{286~BTJuI@67t<96WO`a&s@T z>Z|)A`(^!*$s9YpdZ|iz`goFcSl6v+7^Xu>-}L}XwNXgKMS%lOfZAM(0t zO94MrrJ^eu1{jT)5eKxmJDiBr8uCYd*;g&lM8n^ZOR%-WFraIO1}R>BM82_5RRWqP zcB`P%AGQjHcGNQl+PTyELyr@$?em0JXlxD_Bt4-j5{lr%NoJ{P7*rIl2n*<+k#Nfb zRXyBdzNtupd|csVN*?usDhkq7yz`$9iW<^ynwqYGY}u-p16S*#cCS#rHD57t{%aQHT%7Nsf+2(HoPVYV=tDq1LxLI`1`Q2V z4TsKblsKMjTq7nLKFD7~`3E|992{H@<3aB$s6UHH+pFS7mVecaE7}C})3R9TSol@f zyJoTBRW&#KX-k98u)0E&K~DqFUfplKf`QWFq_1a$!;UZ?`488Zdm4I({Km^;^=)Ax z_}^6*^l^cn`I<|B$MuN50sh}~?NJ+nU$4V}k9L3B8BgYKve(r?q@Of(bxp%zXzutC z4+EtVKj>g^G=t_M@Ev5N=@rVIMkzQHUB7^mvB=Yfn2t9a@WP9Q7JBi1F54p+*1KqF$n z!0?IHTlBm-XTNN7a16A;kk<(VekZQVX~$KAP5Z-oO#}X*y9m7E>UPA^F@$eS2v2e! z*E@heY+08Y5Fc(`uAj}p;EiutY()A&tmI4J-w^VqN5g>I8Bef3)Uv|yil>*l_o(#- z^CB^Ve%`Xc4X2UbMdThC81mP9^A@YxeBwV#{ zyy&u~A@Y|!@9QN72I1Dl@?-}bG2NT|LP34usy++6qCS?gg`pDq#eP55wL#4T{mu3_ zEw2uIqu%4T8R&tOO~GS-^6|uczp3eAg?3D@90xwtywSg9Ag7M`@&x4gVy;Iv2N=+? zD#>?4*K}F9uMdT5p7I@Z7c>l}q2w)pq&2?9G;~}o|aSvLGzK(S6JCqy0;Z*~@-`sT6t7qHa@hg%3XzOD98|$rm zOPKGWmvG5_2+Z4}3`sPov!AC_#of?!44m=rfo25A>loKJ>nr?|op4BWgAe`d2VO=miw^DRsvEHUHppp2 z=|CSl*U8IumS1E$d!Uc?J$@6?drVP!J+InILLcata_{OD7KYxAx8xTsnCG0c^N_z& zF013nza&W*0kXY8q_1|~9|Zno;qCAW>it%JiFpcgou`fkCvec}nhYDPYh4Nh;Nx>- zJJP=c2M--$Kke8ceD3t9tCB}Lr0wbk4iKLhbT<_BnBnt_kyUl%!;v4Dj{V(ME$8Rn zbD(T^5I~%G7_j|-?FIeh#5-9anHzA)Qxm6~SklKXTg@f9b6*J~IuCgiGn!)(6KaT4d>2wqMzwP+IZ?udITjighh>=Cl zbmRG%$G*~rh!Z)X-w`_ahV=#TLe z3YXOhg?-f}wjcO%`+>08(xI?Qzk>RI)VbRJ7UN&wddzl1c@@<)@Lf?7#x&;Dh#5ip zCb=j_k^WfQwy+fRck+u3BWQlvu_Y`-`a9vOIf3*6xudzS_RB3js`38iPN*G7|MRBR znvr$98t*r3w|j$my%~;^rd5WKQs3)YA&kUZpg!{Np!^k`D6ad#Afb$U==i=FP@g>z zwuAmb%M$f`E8go`HX7TB_bc76k2~`JUe$yLUrwd#@~?Z=nXbV7_igoj4syxuHLDC9 z9_pq!3%sK1VblVptmsHSBV%$sKu_8}Qd>d)Ah%Ax+5)|==hAhx(0=5*1@kYW3XTUL za9{%Xp}uB3@Tk5P&M7>Pu#4se4j6M)&UvQalwRatv?V)i`Tkb*CFC=L=QNO4gEI2< zn>{P^bIn*+;RD$gu>RCdcNIA75qYTjye#V?@F3*PdGG4luQwY;SYPx#0qv;xt*s08 zwjL9__xZ$9U-%8B_rdqq-D~X2ZJ59I75Zt&<8N9viEYLEoLuu~9rjshY|&!9nfN}< zg90MZTi0;#C^&df&!|cqaVS(m)kUm$r0e*;lO53Eds7AZe2=S!n9t`h`Q~s=4s&`C z*Fom!_^M)1(J&k=4DcEoMTRQUFc^oso`zr0F5;AGAn3F_5#_)WrUZ@(kW&VxX<#r@ zHW(Ue?}kYWS~m>qjr=rSz;E$~Z1A(L`w{i0=?$bI8#RY%bg9Wbr1h|T#-G*aV?TnL zbS#(kV|IJ2h5fkC0b60!R@F#sV zz=Oww$AZD4JRn8a;I|DLz;yimt1<1jLw)G) zOg))Scd_5o`48Yr$BlYs<8-;Ko(voHWc*V)$}epf!=Su49+XeVJ&g`hV0r^Hz6{A1 z4D#`p%ENpla@@J$^>(8wGDT(u$mCrD3XGZxf z{ZokisjR*RvX_$@>24}~VnQH&*GIljh)BPyV> z-9g_Q{H$jZH0vc&9(4Ewlh$L2|K$ED{IlTw-X>BDA^gt$F8qUv5inC4{3beJGKUQu zA$H0)95FM|d=kjdbvh-{VMD$&B1WSgLAq%;ax#>A4xM`r7S!XJ-av!)^u79Kq^Iq% zT-Kj3gO83JmdlWiAm*nI9^a@Bbm}0Id+F2TY_vb;;F)`|oqMrYb1(K^_{APSB&%+Q zynOuOnK^bwRM}N#3(Qe~5P z`~dZcnXpJVWnBfPSD%C#?MgHh^C~170EY~&k^%B0a@EBjz$}M5@=Zk{-&Snd;0HQ> zX5a8QIqKhan?S!hvD2;-{_rlj8=x6Ulz<-ANnn3yh^~Vk(uoz|fGdX@aM;8j(qmF{ zb&YmZ)rmv8L`Or~4+VZxl`7IRM^VXEH2Zl?ie}W%pu1icgSPF5?e+k}fWtRfK)>4h zuB_9DNNAcbFTkKNU-cO0Xi&bak0AY-?(J%sp&@XUw*?qdyEe)aq`xq+9!4A(ESpwX zi*nDjZuF$PL!X>P{w}$qP6QYfJ2%>876z84w*w89EA5BsU8FNYgz_0QF@h#@loWjh zf0Tb&mx1XCXz4xB$kkC=vohZxdv zIATeoJs=|pvh<3B9;ix4JPc+*bQ$^Sx0nQmw!&IJPs32zg26bd;P{S2X z%fbJf_MQH11;ccY(@O&#KpWJX4hGG(m6i_1@6?yeQ@}^_t2IwT|FC&^paE=yKNI!~ z3{jz|22p-g*PVD6`lM)wk-jV(l|2>)xvqubxh@#)x|Rh-@^ltepivE5)MScg%5nz%qht%-sb4L9Es@pu4)9ULCMrWT#r|V5l>f z!%^gKlY%;>u#W3{eNO1$Sty<8cW3w7z;=&>K6SytQRgbA1ezZir`}BKgTZ{MXeg^9 zeZbuIHPActC3W1wFq+$9=Og`Fx%h30A5Y+FG>q?!`aZKEAmT|~G>3qT0vtOUj;7`f z_P0GSSmu_ekxVp{z5@Q`aztooJttK^489&cWG|!KkLw%F8xt_#POS8d%=nA?3d<{w zUd-=yYXyc)Ij(j(=w;7tx5`7V^|uY@>5&{xSl405Y+H}M(9nF{pG7_+V8#shnVKX4 z;|bBgOns;R42Srw1b%DjmSV(BzrCQL2Q3@bB8Pczir;8>29YT%kiI$e>5n`NpP^t* zgPtEg(%XPpgu}!6Wx@!rr&~8`%6pH+Re^?v;EzoyFcJ<99#041di@sYhg#prJqCW; zeNb-&pI0R*01GhRm%w)eyBH0t`*oi`5x9SB@NXjh>xKD32gnQf2GADdd#UPS#|WSS zbsh9lv)gai)Ndy%fjMF1pbPo6=T_;L3(?W`5ziDbh)Yt#JNFarD}_)uRUp6BbOC(NP3+Li1LRg%f@l{QeA{s~TpRSDYd!W- zMt&R#@4FD3x-7?m3+*xYj)noXbF*}T{%+4o)7gY|HW9x?^OpKhZwk>-Gpx|BP*??U1z!wLWd%R<_dedV3`k3C~F<*jx*~E5s2GrZJLGv3|-)&owI^=(n z%emKbkdHeS_Bc2OjQAmo=aH@Gew15bKC;_A9rz1SHysSi%rk9p0JOfBuD|u}OgM;g zE6qv0PhsEg!j*`Eb)QEh1KN2sw4 z-(=r3kgq!;-5L&V(`Sz<@?XT0ijg0O^wxlKT}wRo+0`z7!!2)a_^U|g6?2JTJq9>h zJ@u)i69)&66w~!s)p%lCz9+;3B>3iwR6xJy`oc-@Kh?QIEf&m2*AjWE9qYd}ep`x> zGK|D}rhA85Y8bJ0NN>@Quldk#1$NeVIA9TRKS8{OFNx(}p!xyASDqu^u2X9$&=*`8bwl6ffZeWHezAHskNIee zSHx|%*Zc_s`Raevx4{2l=(FcM)=lRY$M=-)wB_`RosxT%?Y?>RShyaI7IwDXKW4uv)PwH`X6@NGNDX+bz3s3v%e$W;7e zz*eLTzT>)AU$p3FZi`!u^lx?kwuh0dKh9zP+n}fJL+1=4L~ULl0RLP5klz;Y-qyKM zQU2fWSZevc@aMTDmir2?aO*}r7hFXKz{jgX6U*m*Syw=h*%%4RgDqk>o`~ExtH{p| zpzzAvisrn>gDyoCBd}9Pk3%^<=isR+%5~1MH7AGr_28@O*vZBn6b!rACxV56)&N1@ z)i8kSh?5e`T~EVjFyx!GFcqsvPX+KfmIUH2MS&wk0{#td^94{(2J*q+8d0WfTF%cx z6YHm;I&H_rcG<6)bed|}Zp_d4gF~;;&NSX%zfJSAcGRr$8UO5hGCIr8Fsmo)$Ab{< zU__~Wr{$_<(Y8U)K+2uvrpGy>e&nU;tdIGBETU{${&R8GIJ5cqx8mJ^nM3<2q8ned zzKlOB|3%CFAwI5)&y@pn|26W;a%@j&<-tUH>(|y5`zHM&VJ08E=^dBwRG|K2#~;F){DQ#Ez}3(nk&@7#<3Oud+n&~eeQ z^C11mK8l@1Ztw?c)#C)Ez8cO6fAGGm)@c}+d$!sYjt0J}9Reo9J*Fvqh62oj+(34+E?l*Ja@Qp+9)= znfx;US}P25>Xf2E;j*iSv49`^u5PQsdTK#5FvJtSgQg}m$CK+7ogjS(y{sCvYw<%m z#dz0#=7<_m__(~M;aY_K7!J2=&2k)39{fhh80c4W@0s<;f2!qun{zPSv~0DDKtJ2I zMK1&GG4KO^bbMCZ-!PgY^ zAkq<0WD?*|xFwX+MVEwOjg!*$fZY+$Ue{*7+`_pRD1%u zDA7>B$f$Il9Oj99uB0mgsH1+s@ug@m99A$q0JHfTR7t2f)bDTknlSQU*jzDiP!;y5 z4GMDT*`R4SyX=SkFzCd`lh?xv@^$y>zfb>cG;pK_yAbuJ`Wcu-=w#)m_1dF6>dzuf zO0KHe|ExYb?x;rvNo+}Ap!79eHaKbParKUaA-&^m(-mM4Y+7ia&c{fPXP{sIwRw?# zybeQo=REmkGYsvx^6GDa-)fnU=q+H=0z>>x_Y%V^w|}QylI!dAB1Z%4fLsE;Y2OX&JPg_$^ZYX?|LxW;_e3`guq}vW z=%7J)oqjn_L)|*{Vm*Za()4QQ&wvZndu{{Do%aRbXV7m~4P}LOB~@Ft)W3$owIS~T zUkY3wC4Jl70{?lBZ?iZ!ZhVjFM*0uxD+B9)s4ZTJ#;b#VjsE;e%Uk9bO^A4CTC9JS zhvBb#rGKge<7<7Rxg!UML~e&H6&Mz6LDR5!L*LS6O$P`fEr3ha3C(r#P}iIGsRB>x zFHcWuKhzn&9rLyNV*fbm`LhWTY z->xqfp6vd=x?ZpU4CDM-*K+k#C-f=5&@&?EiKcaWp20e@_;y6Veri6J67aon&7MKM zzwBA9yF9*0(f(ZbPf-7B{FW2)&$@Uro{kfqEWaV+p8L^0*XK`x|L5(i)f-(Q{2!gK zbWpK7a|g^O1ILc3sbS=AlM{x9_P=Ugs9$Oh;s0FxTK#Y8sUyenB>!JDt=F#tzgJ)F zU(9o!7U`#&8W9G84yaz`9rk5ak*bB9JRCd%{cu$~4uk>K)D8DpL|`b;*!Rene$x!} z^SF9xsfXNJR~YK&cUxC$Mv(n!&m#XzwDZl5C7OEv_15|Fs}8i^y~sb=hV@ooD!iiX z;pX@ar6)VKyTzIjkb~j8q2u;rl?eJJ*k@ggT)Q0TxZJF1@c(`x8nPd$FSgI1oo{q5 zkS8$CKPh0H7l55h72Ewr>q^C|_85`#IPgukS2k;2(Nw^m9G^2K&vDj-^6&9|!uk4f zVTF3J9rNC~M4oBJI9itJPT-%kEYMGMVg5T7c&_7b=a-ny0_5AV(9+TOeCrljtWdv< z={}8m{cT_Icuu$x?6qhgZr-iP|8{GPwEOGU73#G-)`z+5IPRj0j(WtSS`qBKYAjTN zd=69YX@q2e{tDiUK=S~E80?3xY^y*T&Tnftb|qfX_RGRHvnZh7ZS(zOJ%}`eLu#pF z{|3Sp%XM)}5)Xa#bvNwbs5S@OcF;d+UglnCwZWYR)5FIFv(G%9i?7c4eej9AbGK&|qgrKEL@y zq=Ty>eC~-adN`WH1$PwbkLNe3`M`&|FwfnXkDj+39ci3jI^_SfX_?|xjr^v~6V1ra zFVoylzSFwY(DC@ao`sGE{Ga!%^lyM~uUs}~biDetXc(bVRbUVE?0(sb^zY}E1xAWJ z)UsG}+<)4%L{olk&|mKBf6}y2|1H{mxM#WP1b(x_<{oQKK>nZCam8T=_RkjR6YzU2OTzPL@3EGRYN2LC@tC?M zT$kgP>v7bKLqc$vyRsPoJx}kmn?XO){-*kMGxme_mEo0c><_k2pU`L@=P7T2kMCEb zpx3z5hVK_YZeC+w2j4@jSci4YZ`X3qNSSZ6#(n;qIYbV&fNq&*{6m95Beq5{+ZE8MV-J`;$FqHSP!d~lkdwsy`ns?9lA&Yz zvO1%%pVU_vM&A8N^P7hK=xW3I1^;O~Wc!5sLrsrqI<7AG)4=CiR;&2|^U^)vKGj2g zUFm;=@qDdwnd5uF|DB)jA4ff3!?%il-G%(lMeoSlBm=dJ(pi9NUfT6J-1N2rR7NzV-XX6`D6<5*JcRXij;0Q)bn(sXoAF-z9FnbT2 z!@1wPGuK1r==iE)u=gAQcd=iPPEkdi(w{ci-o;O9@PtX4U5OHrC-X^9$s{@O?@9N0 znDI^7DNDX-lt{xooYn_S^QURc9)jORoNix7I;aMc3w+b%e4`#WrP$tmj-IT&Mmdf< zEw85Q$@=lduu;!+f3kYA^bC=Xkxm=NGkMQM_9N?0hT%c=W%U9v(!k#Tv6zm3Mtz@2 zKR|9-KmS;yeqqK^{mSI?S#o$#{jH<`gajKj>Lwc#`_L`Y!i2@(=l|;(`2z!idKFhv?wpl{W0}s1hq_I_Awqz2bQ2 zsI36`v3Kg}Njs|P09kEL$p=72EYK11gNb;B)1$d~h0>#4IeE4_z+t<=zKZ_5r4N|( zmix^Obq09Ni5fN7Uv$lsLF0->UjltXN@_@WwcBCyKJaJF8|_A37xf826)X%up__D&O`bFbIk2lA$Upr2=eo;WQKrijW<0Gkw_D}WQB&j zn%DW)njyco73R5a&~3}?a~Q`j+8|%>Z8YcPLm;mN@ADc)j zM~(eLA>G~4HSixa1$7?uvz>78Xd0xKo2R?5Z+33iud$u3J$|8}-IjIw1+@QYE@z(a z;Jm(VUdUk`c5T432fs@u_WP|K^0!yRSOz-ps|`K~^ID`*4)~w$Am2bxgU|S7}CSbmZ0|8Vlnn zybtF-_fcF)1^$A*rAq?zHD7X=XEUY>z}4=k-D6?6?~I1~m-F3eWW;gX=dXC`LD|)W z2ITl{nzAoR4g6)Bn403g16RAldN$Y}k&bz?H35dIj05T5`B>qKI;8Yl=wYfss|2J0PqO^485OdxWj3*(>2 zY3^I!$-S-VfcOFA{8}gUpyyr1eP_41qE9-=(I#$KWBf*R8R?9mO(d?*D$*HwTJdmT zxw5G$pe_q>%$IZ->4UDUiUtlCQ`W;sKj?4h^MQ^GTm^>opR{h#ZwmU+yvDtN_P?E9 z>s~hX|?dubm|JFUS0sQ+UI(Dwv zxW6%ixZ*G_gZB}Iap{UJ8-6RMhOu%T9(Vg3p1V!k{4(LygX`Tqg2z0|X*uAa=a}ae26{e`GrVfBy=R5_O()lHPF`$bB$G4q!1rY5Udaib zLlX{bDmum&dq#48X!iiGVWgu-=liD^JZD_V*MOW?B4<}Zs>iwp9I=h}2_MH(a5Y0c zIVAn&vO;_L?QVr*MButGUt|5qQMD&PPt}mS=DE*HC?g$L^LjeG_n3=v0{JgD?bho+ z{}@-LGD7E(uGRXbu6vm3Z5`{dZEINM@VqwhAj2Vj(_a+S=it~uJvT#Hil9eT;;5f^ z>g$>XD(EfpAM{?6y%(hp9*_0vKf}?3^y&8=J@>n>rsm`^rw^ZA2VYgkPB!jfVTg4B zFPezK!TLz)S%|dMKuesIU_J|{9Xw_db)|;ch;|Bppl2ZsxlF$sQq%S{vVNwsA8cnf zPU)EbzGTJb&-(j?>&fc3oB4 zdcNKLa-JT~?E13yX5(zWFF<1^0^7;@G1=(HmxZjC`a(?g3e9EnkYT1z4;(N1*XY-m z)z7S+tX{O8%HcmW&YthtG~|@^e|mf>j%!lSKs94Nke|&%hWJtqc7V8F5VQ6A-{c>| zf7kpyQ8HBd%{Kf|j8&!q+EF4BiA2#*CjsJ`rHP;PJ3hSQGjr6D5 zR|Oity}=K5q~CzSHBm5>yHQ8JH_dxt3-agN9eOk9D`wcx;8PS)?AJi3NP=`4a?3)) zLdho%Xz+s^cp0M_ws0u9lX^es-{e=Tg$4!!8PL~27sBt9C>T=0X}{0YkhL_tI03%8 zGdZLmmV&t~@tY_m&}ZGC>bLyHL%-?`=&!GNj<4Wx0v_~$#BmR~N?`lLI?_C;TK1`7 zTNi~_-JJI)G#vs(cOCTEP}d^{1|N4^?+13_MEhFL2$Iw0BaQiSw^hYqoVIF87IGIv zkRUxZm>9?-G$O4+oVUz@k~w%dZxSFE9j|c94BtEnLs8yv6foaH?!e5ElR895qhB-AGd|Xn>bZeq(1A~9 zSN_3(sW2{A(KVE(VY6mq`xSq0zIpXc#n51u=rQ0i>4$NV-=66g8i)>=g1)SIqP*ZP zAbr0s*z*nsLp!K0ct*4hIr1HY=JW;Vp(~pKq+hk-$`bMSBGF1{1G(+aza059s$?uR3LESR68a zhWb?Z31}L&OTcS_bqPG9i>9DpKvdV=Im5_}^Wg~6H-t0xpu?3(KJN~LKJ0FqOUUnc zRb2!9m=b!8y3{7;n-2sk1BeGehAhD@^6@` zrd-dPq8$ajPr*RyVK9Vy;}GZ#?o{Bq-6Chzp#Xzr==IFM5XxZ$G|O`wgSu=vFLZ2* zaGol990)yAbs+bJn#a89iUt`N3086FhpkCX!yp|hYRu9xcEextSa)*K9tXYMT(CzJ z)+;pPl%~FnhF;)dH)gLQ9}Wk75%ekF@A?Gu<;P^yLw=?z6=1I^Y0{@P9JRZJ0bv=O3l|vEfbWA6}QCCwH;5Ae79N#hDZ?9Oiqpr$D(5Ka?3>fN(=&FYSQq?@m z(NQy`z=wJ-S@hpsvPU)dlT&V=!8r6;bwH4Buj{-5zl-05p@Ez8%Sg0JfE+_vrE-*t z8aI$rs3-wu`+33K@im7?8#55jdl;1S@2F)O2I2Ol(%FItj`sJ$GURWug>VeG&Gnj( zkiXHL4*M)WA~ zO=EreUewHb&xOO_TPvsRJ`a6Vk>2C5UIcRUB|o5}J{Lor_lkkMrRpee=z}VQzG)KS zd|Xk{p?}a8++~gW>?LzdQ6HmYY>Ul@k3hfYFZko&KVt@5pT~1Rs#3P-uT(AN$}3AN zNKd~>1NyWZG5wkc8gA$d2Kr!b$`#Q3CSA!>-qj!~)mv8$&|6p13Ft8?>je3H4p$ub zOf-!1iYm@eA;d_lVYJKje8a?p5WK35>+pc@*XO}^$`4r51Focsn)Q}^*#mvz6Xf%t z1pCbhKJH%!UA&5~J6sOO9p=%WlSANJk0&^GF3OGP``@%G7myj ze3VDkVLY~GYeW;*-f~5^|qB@NH_5Q5c=Xgcy*>C_f_ao}x89!vNdA>&_p7S^q5HX1KK`A+o ziw6_x3aDzK?l2y-Q`LyT38Rn|pT7mUV)(qe;V%LYD?GP6^hJil4U7Kjc#vdRW1xg&|@h(J{KAJETHMgB{DLY`ozf85#)d5ZkQ{I z`}#R|4D=>*IvfPO$@oBdzNc@PGr$8fBIN5)1DJXC`+B&fSoIR~Rt^9+T5k^mcc_c%2=IWvrUAjrNa)8u`fbIJ zfgW^tp9IbKCiZVkqrWa#nC`ZQ*%Kp|9q>lOj)_!L7us@&I-v8hE=nGcS6#MkY;|x8>^eP)~DmR7L zK7Ic@Wb5N@Y&qO@_-2=2{tUi}1Dtt9TW^59$d{yQSr1C+#uaVA?Atq^=>Iox{?l*k z__+w4IS0?&i=V2gxgP>w)gMCB5joj9aG(D}XiP;1Pi8Q`DR6{fgWY0JXc{K?&4`5o zh7o_t><040aYf+=sKg(jG_ceJKWL>9!Gj;TG?elOZ!G{Ve)zihgSVnV`%gP~Xn3kB z7Wta1abmN3rSQc4k#IGf zNB)5PUI}oW&C5Z96X7^P`!ru+4KPef zNf(jMc4@%j6*PRX5i3l`JW&obAXR*7n6|?fkrths&2mA%!WlUjXz;E1VMBvPUpTLE z;#}=auOe9}d)zkgU9jVZh8kS)CW%YuNhKcg57D7R16fVdc~LbR4GG*YIG?pZ0}DQ$ zj`U#{4Y)%Zh8Rb~;4NJfL~4YJ8t`x|d0ZhB5aH6gDEu}L$Ah^BlRN9F*>R-PK#|rj z6;%O$YOqj1gK;81bKFcjcw98(%%(HGtXx_z>dDr37QvI1%M4o7>#D~5`oxw!S=FqOL8OnoK;ZUC#`H*;y3*Tk}UeRNkdfNw@{kbME zkU7e;=F6bzAWMKWcqJxn-&H*1=W431LEEybBA<>Q0Tx`vlnvx#ql2SQmo)cV&j*r z`OphJC_odD`*9KJbV!yB=O^mhuucN|KN_NArxYswHu6V9bPNwFI9eR_^^PLn9vKuG zlAp@&R4W1^S|;L^Qom_=&#eOekt$1{VBYjCHD;k7uA~Pw(ZPc{0Z;Rr=K4fpAMg`#HtbdZgjI8RmZaoof~ zl&|=xk8GFoLgYSOaY(n22T^0)Y1HqdA-vaDT+u+^J=U?MBcri?L&42^pwsS*A2UWks0~NTEPbc8#6{1xW<-qY}2P3#%IZiqz)B1_vA2C?R z7X36>2Sis1{4%CNZd2H6mSIG*}nW|0?pcZ>*(}pN{-+9C+@R zSP#gjqn3v6OS+6YV1O4y-T|p!qsUM9Db0Rh-vLses)6Zo9y9$KLcM9fiO8oO)8Rpf zRVpv?Bc1!c7@&>_Ii%^-6V{(bb_x1p%XY{`hcEGxB$x}#5BND>HzdyAFxqLXm$cm> zDXU6=93}3D>H4zhM~M3#9S#+b@q|Q`P)|WcheEF@dXD>w!}wjC*97^QUZ(r1px#i% zn+L|H636!@wlhvX-M9h~t=9tP+tm!`dq9ikxUz3tF(Q=uP_WQ*kA6tSRvqTaVm*Wq zO15k$-=bjOK>CPnqLsFvNA(?@FeqG2f=7 z`CQ=v8IJQRw78_W9&i9BK(1bNBC-GMH}yZ&TS*+}k?pa68ID=ZpMyLC?@479?u!G!vg1Tb6Y-c3E(d!{k{J-KLXY@vZ={{tUuN(W2gJUO9 z-yvV%psgCpIm021E9z8~e>z?hV_LsLJE%UL@6SW_hxs#6HRuL@Dg8r#SWl);|L*AS&BLek&p;X$G@ar9#AEqq+z&<5$ANgPAf7<`Yhwyji zclIA#2)wfGe*x*x!Q7@eOAN{ zJojQZ_hMJW!k^QF&(?$c96Ub$V7@Os`=Qv#A5)R9-zBExal%!9=-;<+oaFG)Z{QXi zKaxIRaWWh7r=g?j@I%((su&XuEi_Ef(3cu24Eh(4FZjUFNMD`x@>2;ujkW_dE#3msq27Mx#(^ey_V<4Mn68$Xf_ev{X@lB8vISmJn6_^{h= zIj*uU2aH>y17*x7UQ!x{802S$DH@P#j#m)j$}i+Uo!{h_0)JcIV>W~DI7|oZXFd$8 z>mCtBevdfd^R1f=`}2_-4Sm4$8yE_P1q}y>N#*X?4h=jK&|YJHGJ{ZRcyej~RGs+> z^C~nL!N6rv9}L!29V|UklhtvxNTmk<|~|>)fZGA=>x86YDlL6wCY$-G$awL z;A6X0444G2S#O52l4s&7M(XCl$i zR58E+gC=mMfi7{-Ye9V~_M7#vT+OmvG&mB)fcDWKM)@(H`pt4>6|YDt+p>_Rqo<;y zA&7cUgH?(u%7X@;D)I*<8dPccBtO3?RRjO1kC@8Op}a%`=CDG00sT{D$8is%yjakn z*zZA?gqYtj;DM?s_M_$mn61Ce(Kza&A&T;*A$Zio!6D!eWnW9ND3njxz;Nu5?&A6# z(da*D8q{j8A+G>hC!uE1UlaF%F#|^p@^R8Wuzm7ZK~tWIMmf}z2oU+4mthrYI&>(X zkx=v{4|yu|K*4aQ5}nG`BOmGfNH^s*tm{@ZJL$W$5aIz7?+Lv6Af|Pr$$4` zlb=^aib?DBNG2b80Mt>B#!TYV_D~Oz`&AiyG`N=?$0H`OQ7#oj!(udyr-pEa{z;Sr z4R>sZ`=$u$H)T%)FZsEDGUAK<${evY*nRo0~Py31dl8^lj zQgyTd01GKeL_t&@(=f0H$VDaKgkdz?PW!jp4VsHcf4Z>Ct@6AQYpH#yfGh5DyYyPi zh_s^X7mUZ;k{bBNq@pX}<2tIkxPCZJ&I9LUEDXO4Ya-?UmM3gk|Elw1=KH%`Sek*xF4nSp}>#&M)ke+ zI1gi4x@pXZDtXQe4bNi0Zxh9N<8zhc9Q2jI`5Ba`S3_aklK*C?nzG=z<|?M*kZ)nw zH|US5*{Vi8uBIx&`Wov-&>x%j*HKLJU4 zUki|WTQjIvW1WO3=c+@0LRHw00b5IP$W#OAbbnWvSBw2IfDR~cnI6Yan&T&(zCVO0 z5ALs|`CJ@Fxgm#r7dWEh{Bu0a=YGZV?3aM%`wrzwKDNhwmE#%Kc)n_+Tc88KsygmR z>HG=MC5q*+zS8*^4K;Pkg0_ic{oIEsH?F@_ZXwQRqRYbiOSWvP$WQeJ^ss}&2*`a> zm@eoq5$&Yov~chU`e73_?&CO8)Md@cW6D3}m#AmMIti3p`g{%SSKN15KgYv*s|s?~ ziRZXWx+oPOuEY@bm-{EnbKZ%gIk#NmMTV?k@AEAR)D2aXu58;yJ$pNm`%6(9S_{85yv zx(0$CLn)SL{p903RX~ph%nvYqA0R5s3y@d9CGKASU`RsZskiZcfX~~ifKOLd0%UuM z!8l#q|5Hbq0`2j>;UHI+2pzLrPqhGk!9Hj>4(K0f?mwKrAr_uOdbQ*A{us=M|k>IC3ZP+yp`W}X0Q6BXW zryVRkXn0Lcw&5;vClw5(4V<)*W+V{PGsn&}X6ZT_$R`CYf{*1s6SMpW z;FP;(*k*b3-F_ZUq1~*VNf+B?KPSCOQb)XNJ{z81esBN5<9)~v3J<{D zF}LmCDe#-gv>*Q>h}h8$#|!wf$ezs6^W`~szAQ)4ms`)AgJ%G3lGm^z2w%|yBVJXC`%J75L zRuz9(mt75fH1LfBQ-g#c-NhfQG>EVrwp-Caq!ZI0ut*;cC6@&B13!ZW>AYHl5il#% zUf&J+>E<btgd<*xNhsR;7Ssh1o|xQkk9WjYmokvj$C-Xj&E+*gJCD~dsWHN z!Q;bC%_}ul*bnqBg-9TO2-oF+&mEHYfs5QnemAfS7qz?_;81FP*RB%WC0}3VY&)*@ z377pzq~E}UscIQXb297!zTC6R7JUQJ zJt!aQnue3qz#BOJhG7eG1AE8}wV9#jI!rYyPs5;Xipeb6(ro2!f#~P#q^ucAB8W& zXHH}3%@6W>K@GTX(pOwRagUFiZiSaE4laxWO@%-E2wyB@+|byi&5J$GwSEna zUlMKwG{sY+Gld)YsR1FqD7X~qrG2I%eU~(YJEMSO=<92mU3OoB#?{aoK{bk&1lC@l zx$s_)Qz2$6)Ud3c!ewnZ);XX@ITnEG;8Rp#Y4E|pIF`|nC(m(&zDjeRz{^6Tps=s^ zhJoxNIaN5^aL&+hUxcaK>pb^@z6!XHll<1tp9*44zBDH{eSwe8F}%xmXgh~L+6 zi#H9P+V$NExHK4|$F9ff*fs6z#Jb7#VLUH!De&3k&YbIfl(#lLg8V1Du8!VZm3&PO z#!>naqF z75R(^WPB)lpP{#SmYv+R4*xK&{MZV-nZj;lUK*otF!Cr9E_{ruFe6`LpR~B-JS~ee z3{G|BA3N*uAo;{^$a_Q>P$QTuN`<7v{|T z*bBL1om_c?zj)I4?&Fm$h3jFk)wPa-F^IjB`21L&W{3XNPyG9+M*Sz@ed7t9Z{G>} zn;mbzk?V(d`cxAHVV1q3Q`TS^ycr1|G+T=K~#blSA@kENresg{T z>Q!apbLDev*PXa#{5+0T{I>g`gR#!edgX>tCANrG5+E;v#FFrD1j}J9em|m|Uh3V8${IFx2&${f4 zx4h@@D^q=3(8sW|F!uOu$UGIaS7%=8d0*#w$&8mJNq^--<%6+YRoPwV*g>8QayPE~ z;L@8@=1-#NsmPzodm2BnvC6MB5WMBR*bC+Ii>@orKfa6Q7!LtGs^sJR2`lF%v2W-F zc{MKNPoC&2tFvDjvq$Wh#~{35_Rq$?xyKpzv!uA%@~Y0A_>DH2@G@Vy{Ip}e_@4Wm z99s8T>8X6Ccs<7oLY-gv<-%y7IQF;xM4|Y}-a{lVxW2_n+n0IgY0Qcr*$hCc}8+=^6lbOy+VUcE<zsN8)0AZg$-P2f#2z2#r8o9ZojB&Y^1o2)=g2-`&T~PI z#P@>G^-vtOMibcd7Q$clxQzWiuKdyB&hU@pr#zVCzbs_7Bt2;m)$R}3XIHUjU_4J@ zD$KK?^wYm+M_G>=vZoYkX~o*Kx3&ga1n-=OH~S1=;IN0=X^ZZiU13+wJ} z@WB2$@eu|ZN{Iq&>3{P_c*uQRh#aZWeyD$Jbf~xEwXa9!Cig>laB(^o((m9lzlNjU zcl6hMR@EB}M_Q=);I{s6AGCHDnIf@f!Tqeo4O-{r~U>KdqJToR8AeKz#XuHNCOJnP=UzdR=ax_00000NkvXXu0mjfk%!sn diff --git a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart index e390b787..17cd4c98 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart @@ -46,7 +46,7 @@ class InformationCards extends StatelessWidget { child: Container( decoration: const BoxDecoration( image: DecorationImage( - image: AssetImage('assets/asset_1.png'), + image: AssetImage('assets/images/asset_1.png'), fit: BoxFit.fitHeight, alignment: Alignment.centerRight, ), @@ -112,7 +112,7 @@ class InformationCards extends StatelessWidget { child: Container( decoration: const BoxDecoration( image: DecorationImage( - image: AssetImage('assets/asset_1.png'), + image: AssetImage('assets/images/asset_1.png'), fit: BoxFit.fitHeight, alignment: Alignment.centerRight, ), diff --git a/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart index 1e36df0b..4d3a440a 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart @@ -39,7 +39,7 @@ class PortfolioCards extends StatelessWidget { ], assets: [ Image.asset( - 'assets/mockup_1.png', + 'assets/images/mockup_1.png', alignment: Alignment.topCenter, fit: BoxFit.cover, ) @@ -72,7 +72,7 @@ class PortfolioCards extends StatelessWidget { ], assets: [ Image.asset( - 'assets/mockup_1.png', + 'assets/images/mockup_1.png', alignment: Alignment.topCenter, fit: BoxFit.cover, ) @@ -105,12 +105,12 @@ class PortfolioCards extends StatelessWidget { ], assets: [ Image.asset( - 'assets/mockup_1.png', + 'assets/images/mockup_1.png', alignment: Alignment.topCenter, fit: BoxFit.cover, ), Image.asset( - 'assets/mockup_1.png', + 'assets/images/mockup_1.png', alignment: Alignment.topCenter, fit: BoxFit.cover, ) @@ -148,17 +148,17 @@ class PortfolioCards extends StatelessWidget { ], assets: [ Image.asset( - 'assets/mockup_1.png', + 'assets/images/mockup_1.png', alignment: Alignment.topCenter, fit: BoxFit.cover, ), Image.asset( - 'assets/mockup_2.png', + 'assets/images/mockup_2.png', alignment: Alignment.topCenter, fit: BoxFit.cover, ), Image.asset( - 'assets/mockup_1.png', + 'assets/images/mockup_1.png', alignment: Alignment.topCenter, fit: BoxFit.cover, ) diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index c3ced3ca..d9953115 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -36,4 +36,5 @@ flutter: uses-material-design: true assets: - - ./assets/ + - ./assets/images/ + - ./assets/fonts/montserrat/ -- 2.47.2 From 5c34528b3d778ce0ed49eab6e688986a1d53f436 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 14 Feb 2023 14:49:39 +0100 Subject: [PATCH 113/320] fix(ui_kit): add cacheExtend as a trade-off in listview example --- packages/wyatt_ui_kit/example/lib/buttons/buttons.dart | 1 + packages/wyatt_ui_kit/example/lib/cards/cards.dart | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 010d26f3..6b224ded 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -37,6 +37,7 @@ class Buttons extends StatelessWidget { @override Widget build(BuildContext context) => ListView( + cacheExtent: 2000, children: [ const Gap(20), Align( diff --git a/packages/wyatt_ui_kit/example/lib/cards/cards.dart b/packages/wyatt_ui_kit/example/lib/cards/cards.dart index 4c99cdea..fbbf058b 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/cards.dart @@ -10,6 +10,7 @@ class Cards extends StatelessWidget { @override Widget build(BuildContext context) => ListView( + cacheExtent: 1000, children: [ const Gap(20), Align( -- 2.47.2 From 788029372366d1e01d400e79ca2c3d1e3763a1db Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 15:55:27 +0100 Subject: [PATCH 114/320] feat(ui_component): add lerp on multicolor --- .../lib/src/core/utils/multi_color.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart index 47ff4488..c4f36156 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart @@ -42,4 +42,14 @@ class MultiColor { bool get isGradient => (_colors?.isNotEmpty ?? false) && (_colors?.length ?? 0) > 1; + + static MultiColor? lerp(MultiColor? a, MultiColor? b, double t) { + if (a == null && b == null) { + return null; + } + if (b == null) { + return a; + } + return b; + } } -- 2.47.2 From ed29f39673c2f574a754da3ad71875e1b80a3afc Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 15:55:46 +0100 Subject: [PATCH 115/320] refactor(ui_component): move extensions --- .../lib/src/core/extensions/build_context_extensions.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart b/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart index be5e6045..c1184fae 100644 --- a/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart +++ b/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart @@ -19,4 +19,7 @@ import 'package:wyatt_ui_components/src/features/features.dart'; extension ThemeComponentBuildContext on BuildContext { ComponentThemeData get components => ComponentTheme.of(this); + TextTheme get textTheme => Theme.of(this).textTheme; + ColorScheme get colorScheme => Theme.of(this).colorScheme; + ButtonThemeData get buttonTheme => Theme.of(this).buttonTheme; } -- 2.47.2 From 2806ac59235248397db72ca6a01f080e9584c4d5 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 15:56:35 +0100 Subject: [PATCH 116/320] feat(ui_component): add copyWith gen and make button style lerping --- .../entities/buttons/button_component.dart | 14 +- .../domain/entities/buttons/button_style.dart | 38 +++-- .../file_selection_button_component.g.dart | 30 ++-- .../buttons/file_selection_button_style.dart | 95 ++++++++--- .../file_selection_button_style.g.dart | 152 ++++++++++++++++++ .../buttons/flat_button_component.dart | 2 +- .../buttons/flat_button_component.g.dart | 20 +-- .../entities/buttons/flat_button_style.dart | 88 ++++++---- .../entities/buttons/flat_button_style.g.dart | 137 ++++++++++++++++ .../buttons/simple_icon_button_component.dart | 5 - .../simple_icon_button_component.g.dart | 22 ++- .../buttons/simple_icon_button_style.dart | 92 +++++++---- .../buttons/simple_icon_button_style.g.dart | 141 ++++++++++++++++ .../buttons/symbol_button_component.g.dart | 24 +-- .../entities/buttons/symbol_button_style.dart | 100 ++++++++---- .../buttons/symbol_button_style.g.dart | 150 +++++++++++++++++ .../cards/skill_card_component.g.dart | 6 +- packages/wyatt_ui_components/pubspec.yaml | 18 +-- 18 files changed, 929 insertions(+), 205 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index ffaa015a..32b93910 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -30,25 +30,25 @@ abstract class ButtonComponent extends Component { }); /// Style of this button in disabled state - final ButtonStyle? disabledStyle; + final ButtonStyle? disabledStyle; /// Style of this button in normal state - final ButtonStyle? normalStyle; + final ButtonStyle? normalStyle; /// Style of this button in hovered state - final ButtonStyle? hoveredStyle; + final ButtonStyle? hoveredStyle; /// Style of this button in focused state - final ButtonStyle? focusedStyle; + final ButtonStyle? focusedStyle; /// Style of this button in tapped state - final ButtonStyle? tappedStyle; + final ButtonStyle? tappedStyle; /// Style of this button in selected state - final ButtonStyle? selectedStyle; + final ButtonStyle? selectedStyle; /// Style of this button in invalid state - final ButtonStyle? invalidStyle; + final ButtonStyle? invalidStyle; /// Callback on button press final void Function(ControlState state)? onPressed; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart index 22620337..6e0d8ee7 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart @@ -17,41 +17,49 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; -abstract class ButtonStyle { +abstract class ButtonStyle { const ButtonStyle({ - this.radius = 15, - this.padding = 10, + this.radius, + this.padding, this.foregroundColors, this.backgroundColors, this.borderColors, - this.stroke = 2, - this.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + this.stroke, + this.shadow, }); /// Button radius - final double? radius; + /// + /// Default to `BorderRadius.all(Radius.circular(4.0))` + final BorderRadiusGeometry? radius; - /// Padding and gaps of this card - final double? padding; + /// Padding and gaps of this button + /// + /// Default to `ButtonTheme.padding` + final EdgeInsetsGeometry? padding; /// Button foreground gradient colors (from left to right) + /// + /// Default to `Theme.colorScheme.onPrimary` final MultiColor? foregroundColors; - + /// Button background gradient colors (from left to right) + /// + /// Default to `Theme.colorScheme.primary` final MultiColor? backgroundColors; /// Border colors (from left to right). + /// + /// Default to `null` final MultiColor? borderColors; /// Stroke of the border + /// + /// Default to `null` final double? stroke; /// Drop shadow + /// + /// Default to `null` final BoxShadow? shadow; - - ButtonStyle copyWith(); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart index d8708923..1c9f5b2d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart @@ -11,13 +11,15 @@ abstract class $FileSelectionButtonComponentCWProxy { FileSelectionButtonComponent leading(Widget? leading); FileSelectionButtonComponent title(TextWrapper? title); FileSelectionButtonComponent subTitle(TextWrapper? subTitle); - FileSelectionButtonComponent disabledStyle(ButtonStyle? disabledStyle); - FileSelectionButtonComponent normalStyle(ButtonStyle? normalStyle); - FileSelectionButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); - FileSelectionButtonComponent focusedStyle(ButtonStyle? focusedStyle); - FileSelectionButtonComponent tappedStyle(ButtonStyle? tappedStyle); - FileSelectionButtonComponent selectedStyle(ButtonStyle? selectedStyle); - FileSelectionButtonComponent invalidStyle(ButtonStyle? invalidStyle); + FileSelectionButtonComponent disabledStyle( + ButtonStyle? disabledStyle); + FileSelectionButtonComponent normalStyle(ButtonStyle? normalStyle); + FileSelectionButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + FileSelectionButtonComponent focusedStyle(ButtonStyle? focusedStyle); + FileSelectionButtonComponent tappedStyle(ButtonStyle? tappedStyle); + FileSelectionButtonComponent selectedStyle( + ButtonStyle? selectedStyle); + FileSelectionButtonComponent invalidStyle(ButtonStyle? invalidStyle); FileSelectionButtonComponent onPressed( void Function(ControlState)? onPressed); FileSelectionButtonComponent key(Key? key); @@ -26,13 +28,13 @@ abstract class $FileSelectionButtonComponentCWProxy { Widget? leading, TextWrapper? title, TextWrapper? subTitle, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, - ButtonStyle? selectedStyle, - ButtonStyle? invalidStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + ButtonStyle? invalidStyle, void Function(ControlState)? onPressed, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart index 5e0bd378..5290e5c4 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -14,42 +14,85 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:ui'; + +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -class FileSelectionButtonStyle extends ButtonStyle { +part 'file_selection_button_style.g.dart'; + +@CopyWith() +class FileSelectionButtonStyle extends ButtonStyle { const FileSelectionButtonStyle({ - super.radius = 12, - super.padding = 13, + this.title, + this.subTitle, + super.radius, + super.padding, super.foregroundColors, super.backgroundColors, super.borderColors, - super.stroke = 2, - super.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + super.stroke, + super.shadow, }); - @override - FileSelectionButtonStyle copyWith({ - double? radius, - double? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => + /// Used in negociation to build a style from Flutter default values. + factory FileSelectionButtonStyle.fromFlutter(BuildContext context) => FileSelectionButtonStyle( - radius: radius ?? this.radius, - padding: padding ?? this.padding, - foregroundColors: foregroundColors ?? this.foregroundColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - borderColors: borderColors ?? this.borderColors, - stroke: stroke ?? this.stroke, - shadow: shadow ?? this.shadow, + title: context.textTheme.labelLarge, + subTitle: context.textTheme.labelSmall, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: MultiColor.single(context.colorScheme.onPrimary), + backgroundColors: MultiColor.single(context.colorScheme.primary), ); + + /// Used for interpolation. + static FileSelectionButtonStyle? lerp( + FileSelectionButtonStyle? a, + FileSelectionButtonStyle? b, + double t, + ) { + if (a == null || b == null) { + return null; + } + // b.copyWith to return b attributes even if they are not lerped + return b.copyWith( + title: TextStyle.lerp(a.title, b.title, t), + subTitle: TextStyle.lerp(a.title, b.title, t), + foregroundColors: MultiColor.lerp( + a.foregroundColors, + b.foregroundColors, + t, + ), + backgroundColors: MultiColor.lerp( + a.backgroundColors, + b.backgroundColors, + t, + ), + borderColors: MultiColor.lerp( + a.borderColors, + b.borderColors, + t, + ), + radius: BorderRadiusGeometry.lerp(a.radius, b.radius, t), + padding: EdgeInsetsGeometry.lerp(a.padding, b.padding, t), + stroke: lerpDouble(a.stroke, b.stroke, t), + shadow: BoxShadow.lerp(a.shadow, b.shadow, t), + ); + } + + /// Title text style + /// + /// Default to `TextTheme.labelLarge` + final TextStyle? title; + + /// Sub title text style + /// + /// Default to `TextTheme.labelSmall` + final TextStyle? subTitle; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart new file mode 100644 index 00000000..6576a261 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart @@ -0,0 +1,152 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'file_selection_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$FileSelectionButtonStyleCWProxy { + FileSelectionButtonStyle title(TextStyle? title); + + FileSelectionButtonStyle subTitle(TextStyle? subTitle); + + FileSelectionButtonStyle radius(BorderRadiusGeometry? radius); + + FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding); + + FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors); + + FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors); + + FileSelectionButtonStyle borderColors(MultiColor? borderColors); + + FileSelectionButtonStyle stroke(double? stroke); + + FileSelectionButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FileSelectionButtonStyle call({ + TextStyle? title, + TextStyle? subTitle, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)` +class _$FileSelectionButtonStyleCWProxyImpl + implements _$FileSelectionButtonStyleCWProxy { + const _$FileSelectionButtonStyleCWProxyImpl(this._value); + + final FileSelectionButtonStyle _value; + + @override + FileSelectionButtonStyle title(TextStyle? title) => this(title: title); + + @override + FileSelectionButtonStyle subTitle(TextStyle? subTitle) => + this(subTitle: subTitle); + + @override + FileSelectionButtonStyle radius(BorderRadiusGeometry? radius) => + this(radius: radius); + + @override + FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + FileSelectionButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + FileSelectionButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + FileSelectionButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FileSelectionButtonStyle call({ + Object? title = const $CopyWithPlaceholder(), + Object? subTitle = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return FileSelectionButtonStyle( + title: title == const $CopyWithPlaceholder() + ? _value.title + // ignore: cast_nullable_to_non_nullable + : title as TextStyle?, + subTitle: subTitle == const $CopyWithPlaceholder() + ? _value.subTitle + // ignore: cast_nullable_to_non_nullable + : subTitle as TextStyle?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $FileSelectionButtonStyleCopyWith on FileSelectionButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)` or like so:`instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$FileSelectionButtonStyleCWProxy get copyWith => + _$FileSelectionButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index 6f5ecb88..97ef3ff4 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -24,7 +24,7 @@ part 'flat_button_component.g.dart'; abstract class FlatButtonComponent extends ButtonComponent with CopyWithMixin<$FlatButtonComponentCWProxy> { const FlatButtonComponent({ - this.mainAxisSize = MainAxisSize.min, + this.mainAxisSize, this.prefix, this.suffix, this.label, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart index 442de52f..e234fa3d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart @@ -11,11 +11,11 @@ abstract class $FlatButtonComponentCWProxy { FlatButtonComponent prefix(Widget? prefix); FlatButtonComponent suffix(Widget? suffix); FlatButtonComponent label(TextWrapper? label); - FlatButtonComponent disabledStyle(ButtonStyle? disabledStyle); - FlatButtonComponent normalStyle(ButtonStyle? normalStyle); - FlatButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); - FlatButtonComponent focusedStyle(ButtonStyle? focusedStyle); - FlatButtonComponent tappedStyle(ButtonStyle? tappedStyle); + FlatButtonComponent disabledStyle(ButtonStyle? disabledStyle); + FlatButtonComponent normalStyle(ButtonStyle? normalStyle); + FlatButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + FlatButtonComponent focusedStyle(ButtonStyle? focusedStyle); + FlatButtonComponent tappedStyle(ButtonStyle? tappedStyle); FlatButtonComponent onPressed(void Function(ControlState)? onPressed); FlatButtonComponent key(Key? key); FlatButtonComponent call({ @@ -23,11 +23,11 @@ abstract class $FlatButtonComponentCWProxy { Widget? prefix, Widget? suffix, TextWrapper? label, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index 355965ab..7842365e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -14,42 +14,76 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:ui'; + +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -class FlatButtonStyle extends ButtonStyle { +part 'flat_button_style.g.dart'; + +@CopyWith() +class FlatButtonStyle extends ButtonStyle { const FlatButtonStyle({ - super.radius = 15, - super.padding = 10, + this.label, + super.radius, + super.padding, super.foregroundColors, super.backgroundColors, super.borderColors, - super.stroke = 2, - super.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + super.stroke, + super.shadow, }); - @override - FlatButtonStyle copyWith({ - double? radius, - double? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => - FlatButtonStyle( - radius: radius ?? this.radius, - padding: padding ?? this.padding, - foregroundColors: foregroundColors ?? this.foregroundColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - borderColors: borderColors ?? this.borderColors, - stroke: stroke ?? this.stroke, - shadow: shadow ?? this.shadow, + /// Used in negociation to build a style from Flutter default values. + factory FlatButtonStyle.fromFlutter(BuildContext context) => FlatButtonStyle( + label: context.textTheme.labelLarge, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: MultiColor.single(context.colorScheme.onPrimary), + backgroundColors: MultiColor.single(context.colorScheme.primary), ); + + /// Used for interpolation. + static FlatButtonStyle? lerp( + FlatButtonStyle? a, + FlatButtonStyle? b, + double t, + ) { + if (a == null || b == null) { + return null; + } + // b.copyWith to return b attributes even if they are not lerped + return b.copyWith( + label: TextStyle.lerp(a.label, b.label, t), + foregroundColors: MultiColor.lerp( + a.foregroundColors, + b.foregroundColors, + t, + ), + backgroundColors: MultiColor.lerp( + a.backgroundColors, + b.backgroundColors, + t, + ), + borderColors: MultiColor.lerp( + a.borderColors, + b.borderColors, + t, + ), + radius: BorderRadiusGeometry.lerp(a.radius, b.radius, t), + padding: EdgeInsetsGeometry.lerp(a.padding, b.padding, t), + stroke: lerpDouble(a.stroke, b.stroke, t), + shadow: BoxShadow.lerp(a.shadow, b.shadow, t), + ); + } + + /// Label text style + /// + /// Default to `TextTheme.labelLarge` + final TextStyle? label; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart new file mode 100644 index 00000000..939a48e1 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart @@ -0,0 +1,137 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'flat_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$FlatButtonStyleCWProxy { + FlatButtonStyle label(TextStyle? label); + + FlatButtonStyle radius(BorderRadiusGeometry? radius); + + FlatButtonStyle padding(EdgeInsetsGeometry? padding); + + FlatButtonStyle foregroundColors(MultiColor? foregroundColors); + + FlatButtonStyle backgroundColors(MultiColor? backgroundColors); + + FlatButtonStyle borderColors(MultiColor? borderColors); + + FlatButtonStyle stroke(double? stroke); + + FlatButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FlatButtonStyle call({ + TextStyle? label, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFlatButtonStyle.copyWith.fieldName(...)` +class _$FlatButtonStyleCWProxyImpl implements _$FlatButtonStyleCWProxy { + const _$FlatButtonStyleCWProxyImpl(this._value); + + final FlatButtonStyle _value; + + @override + FlatButtonStyle label(TextStyle? label) => this(label: label); + + @override + FlatButtonStyle radius(BorderRadiusGeometry? radius) => this(radius: radius); + + @override + FlatButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + FlatButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + FlatButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + FlatButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + FlatButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + FlatButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FlatButtonStyle call({ + Object? label = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return FlatButtonStyle( + label: label == const $CopyWithPlaceholder() + ? _value.label + // ignore: cast_nullable_to_non_nullable + : label as TextStyle?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $FlatButtonStyleCopyWith on FlatButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)` or like so:`instanceOfFlatButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$FlatButtonStyleCWProxy get copyWith => _$FlatButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart index 8080ce5a..89b42dbe 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart @@ -16,7 +16,6 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/domain/entities/buttons/simple_icon_button_style.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'simple_icon_button_component.g.dart'; @@ -31,7 +30,6 @@ abstract class SimpleIconButtonComponent extends ButtonComponent super.hoveredStyle, super.focusedStyle, super.tappedStyle, - super.selectedStyle, super.onPressed, super.key, }); @@ -51,8 +49,5 @@ abstract class SimpleIconButtonComponent extends ButtonComponent @override SimpleIconButtonStyle? get tappedStyle; - @override - SimpleIconButtonStyle? get selectedStyle; - final Icon? icon; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart index 017a62ff..b6c02777 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart @@ -8,22 +8,20 @@ part of 'simple_icon_button_component.dart'; abstract class $SimpleIconButtonComponentCWProxy { SimpleIconButtonComponent icon(Icon? icon); - SimpleIconButtonComponent disabledStyle(ButtonStyle? disabledStyle); - SimpleIconButtonComponent normalStyle(ButtonStyle? normalStyle); - SimpleIconButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); - SimpleIconButtonComponent focusedStyle(ButtonStyle? focusedStyle); - SimpleIconButtonComponent tappedStyle(ButtonStyle? tappedStyle); - SimpleIconButtonComponent selectedStyle(ButtonStyle? selectedStyle); + SimpleIconButtonComponent disabledStyle(ButtonStyle? disabledStyle); + SimpleIconButtonComponent normalStyle(ButtonStyle? normalStyle); + SimpleIconButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + SimpleIconButtonComponent focusedStyle(ButtonStyle? focusedStyle); + SimpleIconButtonComponent tappedStyle(ButtonStyle? tappedStyle); SimpleIconButtonComponent onPressed(void Function(ControlState)? onPressed); SimpleIconButtonComponent key(Key? key); SimpleIconButtonComponent call({ Icon? icon, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, - ButtonStyle? selectedStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart index fc311faf..f559b956 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -14,47 +14,77 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:ui'; + +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -class SimpleIconButtonStyle extends ButtonStyle { +part 'simple_icon_button_style.g.dart'; + +@CopyWith() +class SimpleIconButtonStyle extends ButtonStyle { const SimpleIconButtonStyle({ - this.dimension = 30, - super.radius = 5, - super.padding = 5, + this.dimension, + super.radius, + super.padding, super.foregroundColors, super.backgroundColors, super.borderColors, - super.stroke = 2, - super.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + super.stroke, + super.shadow, }); - final double? dimension; - - @override - SimpleIconButtonStyle copyWith({ - double? dimension, - double? radius, - double? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => + /// Used in negociation to build a style from Flutter default values. + factory SimpleIconButtonStyle.fromFlutter(BuildContext context) => SimpleIconButtonStyle( - dimension: dimension ?? this.dimension, - radius: radius ?? radius, - padding: padding ?? padding, - foregroundColors: foregroundColors ?? foregroundColors, - backgroundColors: backgroundColors ?? backgroundColors, - borderColors: borderColors ?? borderColors, - stroke: stroke ?? stroke, - shadow: shadow ?? shadow, + dimension: context.buttonTheme.height, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: MultiColor.single(context.colorScheme.onPrimary), + backgroundColors: MultiColor.single(context.colorScheme.primary), ); + + /// Used for interpolation. + static SimpleIconButtonStyle? lerp( + SimpleIconButtonStyle? a, + SimpleIconButtonStyle? b, + double t, + ) { + if (a == null || b == null) { + return null; + } + // b.copyWith to return b attributes even if they are not lerped + return b.copyWith( + dimension: lerpDouble(a.dimension, b.dimension, t), + foregroundColors: MultiColor.lerp( + a.foregroundColors, + b.foregroundColors, + t, + ), + backgroundColors: MultiColor.lerp( + a.backgroundColors, + b.backgroundColors, + t, + ), + borderColors: MultiColor.lerp( + a.borderColors, + b.borderColors, + t, + ), + radius: BorderRadiusGeometry.lerp(a.radius, b.radius, t), + padding: EdgeInsetsGeometry.lerp(a.padding, b.padding, t), + stroke: lerpDouble(a.stroke, b.stroke, t), + shadow: BoxShadow.lerp(a.shadow, b.shadow, t), + ); + } + + /// Dimension of this button (as a square) + /// + /// Default to `context.buttonTheme.height` + final double? dimension; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart new file mode 100644 index 00000000..f0ee5153 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart @@ -0,0 +1,141 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'simple_icon_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$SimpleIconButtonStyleCWProxy { + SimpleIconButtonStyle dimension(double? dimension); + + SimpleIconButtonStyle radius(BorderRadiusGeometry? radius); + + SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding); + + SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors); + + SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors); + + SimpleIconButtonStyle borderColors(MultiColor? borderColors); + + SimpleIconButtonStyle stroke(double? stroke); + + SimpleIconButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SimpleIconButtonStyle call({ + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)` +class _$SimpleIconButtonStyleCWProxyImpl + implements _$SimpleIconButtonStyleCWProxy { + const _$SimpleIconButtonStyleCWProxyImpl(this._value); + + final SimpleIconButtonStyle _value; + + @override + SimpleIconButtonStyle dimension(double? dimension) => + this(dimension: dimension); + + @override + SimpleIconButtonStyle radius(BorderRadiusGeometry? radius) => + this(radius: radius); + + @override + SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + SimpleIconButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + SimpleIconButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + SimpleIconButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SimpleIconButtonStyle call({ + Object? dimension = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return SimpleIconButtonStyle( + dimension: dimension == const $CopyWithPlaceholder() + ? _value.dimension + // ignore: cast_nullable_to_non_nullable + : dimension as double?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $SimpleIconButtonStyleCopyWith on SimpleIconButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)` or like so:`instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$SimpleIconButtonStyleCWProxy get copyWith => + _$SimpleIconButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart index 6b2fda5c..08422d60 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart @@ -10,24 +10,24 @@ abstract class $SymbolButtonComponentCWProxy { SymbolButtonComponent mainAxisSize(MainAxisSize? mainAxisSize); SymbolButtonComponent label(TextWrapper? label); SymbolButtonComponent icon(Widget? icon); - SymbolButtonComponent disabledStyle(ButtonStyle? disabledStyle); - SymbolButtonComponent normalStyle(ButtonStyle? normalStyle); - SymbolButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); - SymbolButtonComponent focusedStyle(ButtonStyle? focusedStyle); - SymbolButtonComponent tappedStyle(ButtonStyle? tappedStyle); - SymbolButtonComponent selectedStyle(ButtonStyle? selectedStyle); + SymbolButtonComponent disabledStyle(ButtonStyle? disabledStyle); + SymbolButtonComponent normalStyle(ButtonStyle? normalStyle); + SymbolButtonComponent hoveredStyle(ButtonStyle? hoveredStyle); + SymbolButtonComponent focusedStyle(ButtonStyle? focusedStyle); + SymbolButtonComponent tappedStyle(ButtonStyle? tappedStyle); + SymbolButtonComponent selectedStyle(ButtonStyle? selectedStyle); SymbolButtonComponent onPressed(void Function(ControlState)? onPressed); SymbolButtonComponent key(Key? key); SymbolButtonComponent call({ MainAxisSize? mainAxisSize, TextWrapper? label, Widget? icon, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, - ButtonStyle? selectedStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, void Function(ControlState)? onPressed, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index 2e94d3b3..581f5ebc 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -14,47 +14,85 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:ui'; + +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -class SymbolButtonStyle extends ButtonStyle { +part 'symbol_button_style.g.dart'; + +@CopyWith() +class SymbolButtonStyle extends ButtonStyle { const SymbolButtonStyle({ - this.dimension = 60, - super.radius = 15, - super.padding = 10, + this.label, + this.dimension, + super.radius, + super.padding, super.foregroundColors, super.backgroundColors, super.borderColors, - super.stroke = 2, - super.shadow = const BoxShadow( - blurRadius: 30, - offset: Offset(0, 5), - color: Color.fromRGBO(0, 0, 0, 0.05), - ), + super.stroke, + super.shadow, }); - final double? dimension; - - @override - SymbolButtonStyle copyWith({ - double? dimension, - double? radius, - double? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => + /// Used in negociation to build a style from Flutter default values. + factory SymbolButtonStyle.fromFlutter(BuildContext context) => SymbolButtonStyle( - dimension: dimension ?? this.dimension, - radius: radius ?? this.radius, - padding: padding ?? this.padding, - foregroundColors: foregroundColors ?? this.foregroundColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - borderColors: borderColors ?? this.borderColors, - stroke: stroke ?? this.stroke, - shadow: shadow ?? this.shadow, + label: context.textTheme.labelLarge, + dimension: context.buttonTheme.height, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: MultiColor.single(context.colorScheme.onPrimary), + backgroundColors: MultiColor.single(context.colorScheme.primary), ); + + /// Used for interpolation. + static SymbolButtonStyle? lerp( + SymbolButtonStyle? a, + SymbolButtonStyle? b, + double t, + ) { + if (a == null || b == null) { + return null; + } + // b.copyWith to return b attributes even if they are not lerped + return b.copyWith( + label: TextStyle.lerp(a.label, b.label, t), + dimension: lerpDouble(a.dimension, b.dimension, t), + foregroundColors: MultiColor.lerp( + a.foregroundColors, + b.foregroundColors, + t, + ), + backgroundColors: MultiColor.lerp( + a.backgroundColors, + b.backgroundColors, + t, + ), + borderColors: MultiColor.lerp( + a.borderColors, + b.borderColors, + t, + ), + radius: BorderRadiusGeometry.lerp(a.radius, b.radius, t), + padding: EdgeInsetsGeometry.lerp(a.padding, b.padding, t), + stroke: lerpDouble(a.stroke, b.stroke, t), + shadow: BoxShadow.lerp(a.shadow, b.shadow, t), + ); + } + + /// Label text style + /// + /// Default to `TextTheme.labelLarge` + final TextStyle? label; + + /// Dimension of this button (as a square) + /// + /// Default to `context.buttonTheme.height` + final double? dimension; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart new file mode 100644 index 00000000..a3233cec --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart @@ -0,0 +1,150 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'symbol_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$SymbolButtonStyleCWProxy { + SymbolButtonStyle label(TextStyle? label); + + SymbolButtonStyle dimension(double? dimension); + + SymbolButtonStyle radius(BorderRadiusGeometry? radius); + + SymbolButtonStyle padding(EdgeInsetsGeometry? padding); + + SymbolButtonStyle foregroundColors(MultiColor? foregroundColors); + + SymbolButtonStyle backgroundColors(MultiColor? backgroundColors); + + SymbolButtonStyle borderColors(MultiColor? borderColors); + + SymbolButtonStyle stroke(double? stroke); + + SymbolButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SymbolButtonStyle call({ + TextStyle? label, + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSymbolButtonStyle.copyWith.fieldName(...)` +class _$SymbolButtonStyleCWProxyImpl implements _$SymbolButtonStyleCWProxy { + const _$SymbolButtonStyleCWProxyImpl(this._value); + + final SymbolButtonStyle _value; + + @override + SymbolButtonStyle label(TextStyle? label) => this(label: label); + + @override + SymbolButtonStyle dimension(double? dimension) => this(dimension: dimension); + + @override + SymbolButtonStyle radius(BorderRadiusGeometry? radius) => + this(radius: radius); + + @override + SymbolButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + SymbolButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + SymbolButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + SymbolButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + SymbolButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + SymbolButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SymbolButtonStyle call({ + Object? label = const $CopyWithPlaceholder(), + Object? dimension = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return SymbolButtonStyle( + label: label == const $CopyWithPlaceholder() + ? _value.label + // ignore: cast_nullable_to_non_nullable + : label as TextStyle?, + dimension: dimension == const $CopyWithPlaceholder() + ? _value.dimension + // ignore: cast_nullable_to_non_nullable + : dimension as double?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $SymbolButtonStyleCopyWith on SymbolButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)` or like so:`instanceOfSymbolButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$SymbolButtonStyleCWProxy get copyWith => + _$SymbolButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart index b6ac4c3a..a69c819d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart @@ -13,6 +13,8 @@ abstract class $SkillCardComponentCWProxy { SkillCardComponent description(TextWrapper? description); SkillCardComponent skills(List? skills); SkillCardComponent leadingIcon(IconData? leadingIcon); + SkillCardComponent secondaryBackgroundColors( + Color? secondaryBackgroundColors); SkillCardComponent radius(double? radius); SkillCardComponent padding(double? padding); SkillCardComponent borderColors(List? borderColors); @@ -21,8 +23,6 @@ abstract class $SkillCardComponentCWProxy { SkillCardComponent maxSize(Size? maxSize); SkillCardComponent shadow(BoxShadow? shadow); SkillCardComponent background(Widget? background); - SkillCardComponent secondaryBackgroundColors( - Color? secondaryBackgroundColors); SkillCardComponent key(Key? key); SkillCardComponent call({ IconData? icon, @@ -31,6 +31,7 @@ abstract class $SkillCardComponentCWProxy { TextWrapper? description, List? skills, IconData? leadingIcon, + Color? secondaryBackgroundColors, double? radius, double? padding, List? borderColors, @@ -39,7 +40,6 @@ abstract class $SkillCardComponentCWProxy { Size? maxSize, BoxShadow? shadow, Widget? background, - Color? secondaryBackgroundColors, Key? key, }); } diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 42033ddd..8be94829 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -9,25 +9,21 @@ environment: sdk: ">=2.17.0 <3.0.0" dependencies: - flutter: - sdk: flutter + copy_with_extension: ^5.0.0 + flutter: { sdk: flutter } wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git path: packages/wyatt_component_copy_with_extension dev_dependencies: - flutter_test: - sdk: flutter - build_runner: ^2.3.3 + copy_with_extension_gen: ^5.0.0 + flutter_test: { sdk: flutter } + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.0 wyatt_component_copy_with_gen: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git path: packages/wyatt_component_copy_with_gen - - wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 - path: packages/wyatt_analysis -- 2.47.2 From 77ce4e33abf5745ceb28fbb01db3768367e7d538 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 15:57:04 +0100 Subject: [PATCH 117/320] feat(ui_kit): add theme extension shortcut --- .../lib/src/core/extensions/theme_extensions.dart | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart index 22efeb80..021dca70 100644 --- a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart +++ b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart @@ -16,8 +16,6 @@ import 'package:flutter/material.dart'; -extension ThemeExtension on BuildContext { - TextTheme get textTheme => Theme.of(this).textTheme; - ColorScheme get colorScheme => Theme.of(this).colorScheme; - ButtonThemeData get buttonTheme => Theme.of(this).buttonTheme; +extension BuildContextThemeExtension on BuildContext { + T? themeExtension() => Theme.of(this).extension(); } -- 2.47.2 From c331bc6056427fe71e0d342a1e0b77f417d2f997 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 15:57:36 +0100 Subject: [PATCH 118/320] feat(ui_kit): add theme extension support in buttons + theme negociation --- .../file_selection_button.g.dart | 28 +- .../file_selection_button_screen.dart | 279 ++++++++++++------ .../buttons/flat_button/flat_button.g.dart | 20 +- .../flat_button/flat_button_screen.dart | 170 +++++------ .../simple_icon_button.dart | 5 - .../simple_icon_button.g.dart | 25 +- .../simple_icon_screen.dart | 108 ++++--- .../symbol_button/symbol_button.g.dart | 24 +- .../symbol_button/symbol_button_screen.dart | 213 ++++++------- .../components/gradients/gradient_icon.dart | 2 +- .../button_theme_extension.dart | 20 ++ ...file_selection_button_theme_extension.dart | 52 ++++ .../flat_button_theme_extension.dart | 44 +++ .../simple_icon_button_theme_extension.dart | 44 +++ .../symbol_button_theme_extension.dart | 48 +++ .../wyatt_ui_kit/lib/src/domain/domain.dart | 18 ++ packages/wyatt_ui_kit/lib/src/src.dart | 18 +- packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart | 2 + 18 files changed, 724 insertions(+), 396 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/button_theme_extension.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/file_selection_button_theme_extension.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/flat_button_theme_extension.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/simple_icon_button_theme_extension.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/symbol_button_theme_extension.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/domain.dart diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart index d70db729..79759e3b 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart @@ -21,25 +21,25 @@ class $FileSelectionButtonCWProxyImpl FileSelectionButton subTitle(TextWrapper? subTitle) => this(subTitle: subTitle); @override - FileSelectionButton disabledStyle(ButtonStyle? disabledStyle) => + FileSelectionButton disabledStyle(ButtonStyle? disabledStyle) => this(disabledStyle: disabledStyle); @override - FileSelectionButton normalStyle(ButtonStyle? normalStyle) => + FileSelectionButton normalStyle(ButtonStyle? normalStyle) => this(normalStyle: normalStyle); @override - FileSelectionButton hoveredStyle(ButtonStyle? hoveredStyle) => + FileSelectionButton hoveredStyle(ButtonStyle? hoveredStyle) => this(hoveredStyle: hoveredStyle); @override - FileSelectionButton focusedStyle(ButtonStyle? focusedStyle) => + FileSelectionButton focusedStyle(ButtonStyle? focusedStyle) => this(focusedStyle: focusedStyle); @override - FileSelectionButton tappedStyle(ButtonStyle? tappedStyle) => + FileSelectionButton tappedStyle(ButtonStyle? tappedStyle) => this(tappedStyle: tappedStyle); @override - FileSelectionButton selectedStyle(ButtonStyle? selectedStyle) => + FileSelectionButton selectedStyle(ButtonStyle? selectedStyle) => this(selectedStyle: selectedStyle); @override - FileSelectionButton invalidStyle(ButtonStyle? invalidStyle) => + FileSelectionButton invalidStyle(ButtonStyle? invalidStyle) => this(invalidStyle: invalidStyle); @override FileSelectionButton onPressed(void Function(ControlState)? onPressed) => @@ -52,13 +52,13 @@ class $FileSelectionButtonCWProxyImpl Widget? leading, TextWrapper? title, TextWrapper? subTitle, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, - ButtonStyle? selectedStyle, - ButtonStyle? invalidStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, + ButtonStyle? invalidStyle, void Function(ControlState)? onPressed, Key? key, }) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index fd92b971..72196edf 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -25,6 +25,7 @@ import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.d import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; +import 'package:wyatt_ui_kit/src/domain/button_theme_extension/file_selection_button_theme_extension.dart'; class FileSelectionButtonScreen extends CubitScreen { @@ -47,6 +48,7 @@ class FileSelectionButtonScreen final Widget? leading; final TextWrapper? title; final TextWrapper? subTitle; + final MainAxisSize? mainAxisSize; final FileSelectionButtonStyle? disabledStyle; final FileSelectionButtonStyle? normalStyle; @@ -58,44 +60,164 @@ class FileSelectionButtonScreen final void Function(ControlState state)? onPressed; - final MainAxisSize? mainAxisSize; - @override InvalidButtonCubit create(BuildContext context) => InvalidButtonCubit(); - @override - Widget onBuild(BuildContext context, ButtonState state) { - // Set a default style - FileSelectionButtonStyle? style = - normalStyle ?? const FileSelectionButtonStyle(); + /// Negotiate the theme to get a complete style. + FileSelectionButtonStyle negotiate(BuildContext context, ButtonState state) { + // Define default style from Flutter values. + FileSelectionButtonStyle style = + FileSelectionButtonStyle.fromFlutter(context); + + // Try to retrieve custom theme extension + final fileSelectionButtonThemeExtension = + context.themeExtension(); switch (state.state) { case ControlState.disabled: - style = disabledStyle ?? style; + style = disabledStyle ?? + fileSelectionButtonThemeExtension?.disabledStyle ?? + style.copyWith( + foregroundColors: + MultiColor.single(context.colorScheme.onSurface), + backgroundColors: MultiColor.single(context.colorScheme.surface), + ); break; case ControlState.hovered: - style = hoveredStyle ?? style; + style = hoveredStyle ?? + fileSelectionButtonThemeExtension?.hoveredStyle ?? + style; break; case ControlState.tapped: - style = tappedStyle ?? style; + style = tappedStyle ?? + fileSelectionButtonThemeExtension?.tappedStyle ?? + style; break; case ControlState.focused: - style = focusedStyle ?? style; + style = focusedStyle ?? + fileSelectionButtonThemeExtension?.focusedStyle ?? + style; break; case ControlState.normal: - // already done + style = normalStyle ?? + fileSelectionButtonThemeExtension?.normalStyle ?? + style; break; } + // Apply extra theme if (state.isSelected) { - style = selectedStyle ?? style; + // TODO(hpcl): enhance copyWith to copy only non-null attributes of an object + style = style.copyWith( + title: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .title, + subTitle: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .subTitle, + radius: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .radius, + padding: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .padding, + foregroundColors: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .foregroundColors, + backgroundColors: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .backgroundColors, + borderColors: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .borderColors, + stroke: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .stroke, + shadow: (selectedStyle ?? + fileSelectionButtonThemeExtension?.selectedStyle ?? + style) + .shadow, + ); } if (state.isInvalid) { - style = invalidStyle ?? style; + // TODO(hpcl): enhance copyWith to copy only non-null attributes of an object + style = style.copyWith( + title: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .title, + subTitle: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .subTitle, + radius: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .radius, + padding: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .padding, + foregroundColors: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .foregroundColors, + backgroundColors: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .backgroundColors, + borderColors: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .borderColors, + stroke: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .stroke, + shadow: (invalidStyle ?? + fileSelectionButtonThemeExtension?.invalidStyle ?? + style) + .shadow, + ); } - print(state); + return style; + } + + Widget _border( + BuildContext context, + FileSelectionButtonStyle style, + Widget child, + ) { + if (style.borderColors != null && style.stroke != null) { + return DottedBorder( + padding: EdgeInsets.zero, + dashPattern: const [5, 5], + strokeWidth: style.stroke!, + color: style.borderColors!.color, + borderType: BorderType.RRect, + radius: + style.radius?.resolve(TextDirection.ltr).bottomLeft ?? Radius.zero, + strokeCap: StrokeCap.square, + child: child, + ); + } else { + return child; + } + } + + @override + Widget onBuild(BuildContext context, ButtonState state) { + final style = negotiate(context, state); return Focus( onFocusChange: (hasFocus) => @@ -128,18 +250,12 @@ class FileSelectionButtonScreen onPressed?.call(state.state); bloc(context).onClickUpOut(); }, - child: DottedBorder( - padding: EdgeInsets.zero, - dashPattern: const [5, 5], - strokeWidth: style.stroke ?? 3, - color: style.borderColors?.color ?? context.colorScheme.primary, - borderType: BorderType.RRect, - radius: Radius.circular(style.radius ?? 0), - strokeCap: StrokeCap.square, - child: DecoratedBox( + child: _border( + context, + style, + DecoratedBox( decoration: BoxDecoration( - color: style.backgroundColors?.color ?? - context.colorScheme.primary, + color: style.backgroundColors?.color, // if no gradient colors => no default value gradient: (style.backgroundColors?.isGradient ?? false) ? LinearGradient( @@ -149,9 +265,7 @@ class FileSelectionButtonScreen boxShadow: [ if (style.shadow != null) ...[style.shadow!] ], - borderRadius: BorderRadius.all( - Radius.circular(style.radius ?? 0), - ), + borderRadius: style.radius, ), child: ConstrainedBox( constraints: const BoxConstraints( @@ -159,81 +273,70 @@ class FileSelectionButtonScreen minHeight: 50, ), // min sizes for Material buttons child: Padding( - padding: EdgeInsets.all(style.padding ?? 0), + padding: style.padding ?? EdgeInsets.zero, child: Row( mainAxisSize: mainAxisSize ?? MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ if (leading != null) ...[ leading ?? const SizedBox.shrink(), - Gap(style.padding ?? 10), + Gap(style.padding?.horizontal ?? 10), ], - - // Choose color - // label.style.color ?? - // buttonStyle.foregroundColor.color ?? - // context.textTheme.titleLarge.color - // - // Choose gradient - // label.gradient ?? - // buttonStyle.foregroundColor.colors ?? - // null Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ + /// Choose color + /// title.style.color ?? + /// buttonStyle.title.style.color ?? + /// context.textTheme.titleLarge.color + /// + /// Choose gradient + /// title.gradient ?? + /// buttonStyle.foregroundColor.colors ?? + /// null + /// + /// More infos in `negociate()` method if (title != null) ...[ - Builder( - builder: (context) { - final color = title?.style?.color ?? - style?.foregroundColors?.color ?? - context.textTheme.titleLarge?.color; - final buttonStyleGradient = - (style?.foregroundColors?.isGradient ?? + Gap(style.padding?.horizontal ?? 10), + Text( + title!.text, + style: title!.style ?? style.title, + ).toGradient( + LinearGradientHelper.fromNullableColors( + title?.gradient ?? + ((style.foregroundColors?.isGradient ?? false) - ? style?.foregroundColors?.colors - : null; - final gradient = - title?.gradient ?? buttonStyleGradient; - - return Text( - title!.text, - style: (title!.style ?? - context.textTheme.titleLarge) - ?.copyWith(color: color), - ).toGradient( - LinearGradientHelper.fromNullableColors( - gradient, - ), - ); - }, + ? style.foregroundColors?.colors + : null), + ), ), ], - if (subTitle != null) ...[ - Builder( - builder: (context) { - final color = subTitle?.style?.color ?? - style?.foregroundColors?.color ?? - context.textTheme.bodyMedium?.color; - final buttonStyleGradient = - (style?.foregroundColors?.isGradient ?? - false) - ? style?.foregroundColors?.colors - : null; - final gradient = - subTitle?.gradient ?? buttonStyleGradient; - return Text( - subTitle!.text, - style: (subTitle!.style ?? - context.textTheme.bodyMedium) - ?.copyWith(color: color), - ).toGradient( - LinearGradientHelper.fromNullableColors( - gradient, - ), - ); - }, + /// Choose color + /// subTitle.style.color ?? + /// buttonStyle.subTitle.style.color ?? + /// context.textTheme.subTitleLarge.color + /// + /// Choose gradient + /// subTitle.gradient ?? + /// buttonStyle.foregroundColor.colors ?? + /// null + /// + /// More infos in `negociate()` method + if (subTitle != null) ...[ + Gap(style.padding?.horizontal ?? 10), + Text( + subTitle!.text, + style: subTitle!.style ?? style.subTitle, + ).toGradient( + LinearGradientHelper.fromNullableColors( + subTitle?.gradient ?? + ((style.foregroundColors?.isGradient ?? + false) + ? style.foregroundColors?.colors + : null), + ), ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index 379f13ba..87ed36e1 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -19,19 +19,19 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { @override FlatButton label(TextWrapper? label) => this(label: label); @override - FlatButton disabledStyle(ButtonStyle? disabledStyle) => + FlatButton disabledStyle(ButtonStyle? disabledStyle) => this(disabledStyle: disabledStyle); @override - FlatButton normalStyle(ButtonStyle? normalStyle) => + FlatButton normalStyle(ButtonStyle? normalStyle) => this(normalStyle: normalStyle); @override - FlatButton hoveredStyle(ButtonStyle? hoveredStyle) => + FlatButton hoveredStyle(ButtonStyle? hoveredStyle) => this(hoveredStyle: hoveredStyle); @override - FlatButton focusedStyle(ButtonStyle? focusedStyle) => + FlatButton focusedStyle(ButtonStyle? focusedStyle) => this(focusedStyle: focusedStyle); @override - FlatButton tappedStyle(ButtonStyle? tappedStyle) => + FlatButton tappedStyle(ButtonStyle? tappedStyle) => this(tappedStyle: tappedStyle); @override FlatButton onPressed(void Function(ControlState)? onPressed) => @@ -44,11 +44,11 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { Widget? prefix, Widget? suffix, TextWrapper? label, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, Key? key, }) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 050ab61e..2ef0d172 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -24,6 +24,7 @@ import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; +import 'package:wyatt_ui_kit/src/domain/button_theme_extension/flat_button_theme_extension.dart'; class FlatButtonScreen extends CubitScreen { const FlatButtonScreen({ @@ -43,6 +44,7 @@ class FlatButtonScreen extends CubitScreen { final Widget? prefix; final Widget? suffix; final TextWrapper? label; + final MainAxisSize? mainAxisSize; final FlatButtonStyle? disabledStyle; final FlatButtonStyle? normalStyle; @@ -52,34 +54,49 @@ class FlatButtonScreen extends CubitScreen { final void Function(ControlState state)? onPressed; - final MainAxisSize? mainAxisSize; - @override ButtonCubit create(BuildContext context) => ButtonCubit(); - @override - Widget onBuild(BuildContext context, ButtonState state) { - // Set a default style - FlatButtonStyle? style = normalStyle ?? const FlatButtonStyle(); + /// Negotiate the theme to get a complete style. + FlatButtonStyle negotiate(BuildContext context, ControlState state) { + // Define default style from Flutter values. + FlatButtonStyle style = FlatButtonStyle.fromFlutter(context); - switch (state.state) { + // Try to retrieve custom theme extension + final flatButtonThemeExtension = + context.themeExtension(); + + switch (state) { case ControlState.disabled: - style = disabledStyle ?? style; + style = disabledStyle ?? + flatButtonThemeExtension?.disabledStyle ?? + style.copyWith( + foregroundColors: + MultiColor.single(context.colorScheme.onSurface), + backgroundColors: MultiColor.single(context.colorScheme.surface), + ); break; case ControlState.hovered: - style = hoveredStyle ?? style; + style = hoveredStyle ?? flatButtonThemeExtension?.hoveredStyle ?? style; break; case ControlState.tapped: - style = tappedStyle ?? style; + style = tappedStyle ?? flatButtonThemeExtension?.tappedStyle ?? style; break; case ControlState.focused: - style = focusedStyle ?? style; + style = focusedStyle ?? flatButtonThemeExtension?.focusedStyle ?? style; break; case ControlState.normal: - // already done + style = normalStyle ?? flatButtonThemeExtension?.normalStyle ?? style; break; } + return style; + } + + @override + Widget onBuild(BuildContext context, ButtonState state) { + final style = negotiate(context, state.state); + return Focus( onFocusChange: (hasFocus) => hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), @@ -113,20 +130,19 @@ class FlatButtonScreen extends CubitScreen { }, child: DecoratedBox( decoration: BoxDecoration( - color: style.backgroundColors?.color ?? - context.colorScheme.primary, + color: style.backgroundColors?.color, // If no border color => no default value - border: (style.borderColors != null) + border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) ? GradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), - width: style.stroke ?? 2, + width: style.stroke!, ) : Border.all( color: style.borderColors!.color, - width: style.stroke ?? 2, + width: style.stroke!, ) : null, // if no gradient colors => no default value @@ -138,9 +154,7 @@ class FlatButtonScreen extends CubitScreen { boxShadow: [ if (style.shadow != null) ...[style.shadow!] ], - borderRadius: BorderRadius.all( - Radius.circular(style.radius ?? 0), - ), + borderRadius: style.radius, ), child: ConstrainedBox( constraints: const BoxConstraints( @@ -148,76 +162,62 @@ class FlatButtonScreen extends CubitScreen { minHeight: 36, ), // min sizes for Material buttons child: Padding( - padding: EdgeInsets.all(style.padding ?? 0), + padding: style.padding ?? EdgeInsets.zero, child: Row( mainAxisSize: mainAxisSize ?? MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Builder( - builder: (context) { - final color = style?.foregroundColors?.color; - if (color != null) { - return ColorFiltered( - colorFilter: - ColorFilter.mode(color, BlendMode.srcIn), - child: prefix ?? const SizedBox.shrink(), - ); - } else { - return prefix ?? const SizedBox.shrink(); - } - }, - ), - Gap(style.padding ?? 10), - // Choose color - // label.style.color ?? - // buttonStyle.foregroundColor.color ?? - // context.textTheme.titleLarge.color - // - // Choose gradient - // label.gradient ?? - // buttonStyle.foregroundColor.colors ?? - // null - if (label != null) ...[ - Builder( - builder: (context) { - final color = label?.style?.color ?? - style?.foregroundColors?.color ?? - context.textTheme.titleLarge?.color; - final buttonStyleGradient = - (style?.foregroundColors?.isGradient ?? false) - ? style?.foregroundColors?.colors - : null; - final gradient = - label?.gradient ?? buttonStyleGradient; - - return Text( - label!.text, - style: - (label!.style ?? context.textTheme.titleLarge) - ?.copyWith(color: color), - ).toGradient( - LinearGradientHelper.fromNullableColors( - gradient, - ), - ); - }, - ), + if (style.foregroundColors?.color != null && + prefix != null) ...[ + ColorFiltered( + colorFilter: ColorFilter.mode( + style.foregroundColors!.color, + BlendMode.srcIn, + ), + child: prefix, + ) + ] else ...[ + prefix ?? const SizedBox.shrink() + ], + Gap(style.padding?.vertical ?? 10), + + /// Choose color + /// label.style.color ?? + /// buttonStyle.label.style.color ?? + /// context.textTheme.labelLarge.color + /// + /// Choose gradient + /// label.gradient ?? + /// buttonStyle.foregroundColor.colors ?? + /// null + /// + /// More infos in `negociate()` method + if (label != null) ...[ + Text( + label!.text, + style: label!.style ?? style.label, + ).toGradient( + LinearGradientHelper.fromNullableColors( + label?.gradient ?? + ((style.foregroundColors?.isGradient ?? false) + ? style.foregroundColors?.colors + : null), + ), + ) + ], + Gap(style.padding?.vertical ?? 10), + if (style.foregroundColors?.color != null && + suffix != null) ...[ + ColorFiltered( + colorFilter: ColorFilter.mode( + style.foregroundColors!.color, + BlendMode.srcIn, + ), + child: suffix, + ) + ] else ...[ + suffix ?? const SizedBox.shrink() ], - Gap(style.padding ?? 10), - Builder( - builder: (context) { - final color = style?.foregroundColors?.color; - if (color != null) { - return ColorFiltered( - colorFilter: - ColorFilter.mode(color, BlendMode.srcIn), - child: suffix ?? const SizedBox.shrink(), - ); - } else { - return suffix ?? const SizedBox.shrink(); - } - }, - ), ], ), ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart index db4a188e..76a6b4bb 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -33,7 +33,6 @@ class SimpleIconButton extends SimpleIconButtonComponent super.hoveredStyle, super.focusedStyle, super.tappedStyle, - super.selectedStyle, super.onPressed, super.key, }); @@ -63,9 +62,6 @@ class SimpleIconButton extends SimpleIconButtonComponent SimpleIconButtonStyle? get tappedStyle => super.tappedStyle as SimpleIconButtonStyle?; - @override - SimpleIconButtonStyle? get selectedStyle => - super.selectedStyle as SimpleIconButtonStyle?; @override Widget build(BuildContext context) => exportBloc( @@ -76,7 +72,6 @@ class SimpleIconButton extends SimpleIconButtonComponent hoveredStyle: hoveredStyle, focusedStyle: focusedStyle, tappedStyle: tappedStyle, - selectedStyle: selectedStyle, onPressed: onPressed, key: key, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart index 87f97ab8..b846f4f6 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart @@ -13,24 +13,21 @@ class $SimpleIconButtonCWProxyImpl @override SimpleIconButton icon(Icon? icon) => this(icon: icon); @override - SimpleIconButton disabledStyle(ButtonStyle? disabledStyle) => + SimpleIconButton disabledStyle(ButtonStyle? disabledStyle) => this(disabledStyle: disabledStyle); @override - SimpleIconButton normalStyle(ButtonStyle? normalStyle) => + SimpleIconButton normalStyle(ButtonStyle? normalStyle) => this(normalStyle: normalStyle); @override - SimpleIconButton hoveredStyle(ButtonStyle? hoveredStyle) => + SimpleIconButton hoveredStyle(ButtonStyle? hoveredStyle) => this(hoveredStyle: hoveredStyle); @override - SimpleIconButton focusedStyle(ButtonStyle? focusedStyle) => + SimpleIconButton focusedStyle(ButtonStyle? focusedStyle) => this(focusedStyle: focusedStyle); @override - SimpleIconButton tappedStyle(ButtonStyle? tappedStyle) => + SimpleIconButton tappedStyle(ButtonStyle? tappedStyle) => this(tappedStyle: tappedStyle); @override - SimpleIconButton selectedStyle(ButtonStyle? selectedStyle) => - this(selectedStyle: selectedStyle); - @override SimpleIconButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override @@ -38,12 +35,11 @@ class $SimpleIconButtonCWProxyImpl @override SimpleIconButton call({ Icon? icon, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, - ButtonStyle? selectedStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, Key? key, }) => @@ -54,7 +50,6 @@ class $SimpleIconButtonCWProxyImpl hoveredStyle: hoveredStyle ?? _value.hoveredStyle, focusedStyle: focusedStyle ?? _value.focusedStyle, tappedStyle: tappedStyle ?? _value.tappedStyle, - selectedStyle: selectedStyle ?? _value.selectedStyle, onPressed: onPressed ?? _value.onPressed, key: key ?? _value.key, ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart index 64e5bc49..bceab017 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart @@ -20,7 +20,10 @@ import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; +import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart'; import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; +import 'package:wyatt_ui_kit/src/domain/button_theme_extension/simple_icon_button_theme_extension.dart'; class SimpleIconButtonScreen extends CubitScreen { const SimpleIconButtonScreen({ @@ -30,7 +33,6 @@ class SimpleIconButtonScreen extends CubitScreen { this.hoveredStyle, this.focusedStyle, this.tappedStyle, - this.selectedStyle, this.onPressed, super.key, }); @@ -42,35 +44,58 @@ class SimpleIconButtonScreen extends CubitScreen { final SimpleIconButtonStyle? hoveredStyle; final SimpleIconButtonStyle? focusedStyle; final SimpleIconButtonStyle? tappedStyle; - final SimpleIconButtonStyle? selectedStyle; final void Function(ControlState state)? onPressed; @override ButtonCubit create(BuildContext context) => ButtonCubit(); - @override - Widget onBuild(BuildContext context, ButtonState state) { - // Set a default style - SimpleIconButtonStyle? style = normalStyle ?? const SimpleIconButtonStyle(); + /// Negotiate the theme to get a complete style. + SimpleIconButtonStyle negotiate(BuildContext context, ControlState state) { + // Define default style from Flutter values. + SimpleIconButtonStyle style = SimpleIconButtonStyle.fromFlutter(context); - switch (state.state) { + // Try to retrieve custom theme extension + final simpleIconButtonThemeExtension = + context.themeExtension(); + + switch (state) { case ControlState.disabled: - style = disabledStyle ?? style; + style = disabledStyle ?? + simpleIconButtonThemeExtension?.disabledStyle ?? + style.copyWith( + foregroundColors: + MultiColor.single(context.colorScheme.onSurface), + backgroundColors: MultiColor.single(context.colorScheme.surface), + ); break; case ControlState.hovered: - style = hoveredStyle ?? style; + style = hoveredStyle ?? + simpleIconButtonThemeExtension?.hoveredStyle ?? + style; break; case ControlState.tapped: - style = tappedStyle ?? style; + style = + tappedStyle ?? simpleIconButtonThemeExtension?.tappedStyle ?? style; break; case ControlState.focused: - style = focusedStyle ?? style; + style = focusedStyle ?? + simpleIconButtonThemeExtension?.focusedStyle ?? + style; break; case ControlState.normal: + style = + normalStyle ?? simpleIconButtonThemeExtension?.normalStyle ?? style; break; } + return style; + } + + @override + Widget onBuild(BuildContext context, ButtonState state) { + final style = negotiate(context, state.state); + return Focus( onFocusChange: (hasFocus) => hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), @@ -104,25 +129,24 @@ class SimpleIconButtonScreen extends CubitScreen { bloc(context).onClickUpOut(); }, child: SizedBox.square( - dimension: style.dimension ?? 30, + dimension: style.dimension, child: AspectRatio( aspectRatio: 1, child: DecoratedBox( decoration: BoxDecoration( - color: style.backgroundColors?.color ?? - context.colorScheme.tertiary, + color: style.backgroundColors?.color, // If no border color => no default value - border: (style.borderColors != null) + border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) ? GradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), - width: style.stroke ?? 2, + width: style.stroke!, ) : Border.all( color: style.borderColors!.color, - width: style.stroke ?? 2, + width: style.stroke!, ) : null, // if no gradient colors => no default value @@ -134,52 +158,40 @@ class SimpleIconButtonScreen extends CubitScreen { boxShadow: [ if (style.shadow != null) ...[style.shadow!] ], - borderRadius: BorderRadius.all( - Radius.circular(style.radius ?? 0), - ), + borderRadius: style.radius, ), child: ConstrainedBox( constraints: BoxConstraints( minWidth: style.dimension ?? 30, - ), // min sizes for Material buttons + ), child: Padding( - padding: EdgeInsets.all(style.padding ?? 0), + padding: style.padding ?? EdgeInsets.zero, child: Center( - // Choose color - // button.foreground.colors (gradient) ?? - // buttonStyle.foregroundColor.color ?? - // context.colorScheme.onTertiary + /// Choose color + /// icon.color ?? + /// button.foregroundColors.colors ?? + /// buttonStyle.foregroundColors.colors ?? + /// context.buttonTheme.onPrimary child: Builder( builder: (context) { if (icon?.color != null) { return icon!; } - final gradient = - (style?.foregroundColors?.isGradient ?? false) - ? LinearGradient( - colors: style!.foregroundColors!.colors, - ) - : null; - final color = style?.foregroundColors?.color ?? - context.colorScheme.onTertiary; - if (gradient != null) { - return ShaderMask( - blendMode: BlendMode.srcIn, - shaderCallback: (bounds) => gradient.createShader( - Rect.fromLTWH( - 0, - 0, - bounds.width, - bounds.height, - ), + + if (!(style.foregroundColors?.isGradient ?? false)) { + return ColorFiltered( + colorFilter: ColorFilter.mode( + style.foregroundColors!.color, + BlendMode.srcIn, ), child: icon, ); } - return ColorFiltered( - colorFilter: - ColorFilter.mode(color, BlendMode.srcIn), - child: icon, + + return icon!.toGradient( + LinearGradientHelper.fromMultiColor( + style.foregroundColors!, + ), ); }, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart index 7aa6b439..f6f8d9ca 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart @@ -17,22 +17,22 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { @override SymbolButton icon(Widget? icon) => this(icon: icon); @override - SymbolButton disabledStyle(ButtonStyle? disabledStyle) => + SymbolButton disabledStyle(ButtonStyle? disabledStyle) => this(disabledStyle: disabledStyle); @override - SymbolButton normalStyle(ButtonStyle? normalStyle) => + SymbolButton normalStyle(ButtonStyle? normalStyle) => this(normalStyle: normalStyle); @override - SymbolButton hoveredStyle(ButtonStyle? hoveredStyle) => + SymbolButton hoveredStyle(ButtonStyle? hoveredStyle) => this(hoveredStyle: hoveredStyle); @override - SymbolButton focusedStyle(ButtonStyle? focusedStyle) => + SymbolButton focusedStyle(ButtonStyle? focusedStyle) => this(focusedStyle: focusedStyle); @override - SymbolButton tappedStyle(ButtonStyle? tappedStyle) => + SymbolButton tappedStyle(ButtonStyle? tappedStyle) => this(tappedStyle: tappedStyle); @override - SymbolButton selectedStyle(ButtonStyle? selectedStyle) => + SymbolButton selectedStyle(ButtonStyle? selectedStyle) => this(selectedStyle: selectedStyle); @override SymbolButton onPressed(void Function(ControlState)? onPressed) => @@ -44,12 +44,12 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { MainAxisSize? mainAxisSize, TextWrapper? label, Widget? icon, - ButtonStyle? disabledStyle, - ButtonStyle? normalStyle, - ButtonStyle? hoveredStyle, - ButtonStyle? focusedStyle, - ButtonStyle? tappedStyle, - ButtonStyle? selectedStyle, + ButtonStyle? disabledStyle, + ButtonStyle? normalStyle, + ButtonStyle? hoveredStyle, + ButtonStyle? focusedStyle, + ButtonStyle? tappedStyle, + ButtonStyle? selectedStyle, void Function(ControlState)? onPressed, Key? key, }) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index 0b993bc2..e199ebe0 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -25,6 +25,7 @@ import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; +import 'package:wyatt_ui_kit/src/domain/button_theme_extension/symbol_button_theme_extension.dart'; class SymbolButtonScreen extends CubitScreen { @@ -44,6 +45,7 @@ class SymbolButtonScreen final Widget? icon; final TextWrapper? label; + final MainAxisSize? mainAxisSize; final SymbolButtonStyle? disabledStyle; final SymbolButtonStyle? normalStyle; @@ -54,37 +56,94 @@ class SymbolButtonScreen final void Function(ControlState state)? onPressed; - final MainAxisSize? mainAxisSize; - @override SelectableButtonCubit create(BuildContext context) => SelectableButtonCubit(); - @override - Widget onBuild(BuildContext context, ButtonState state) { - // Set a default style - SymbolButtonStyle? style = normalStyle ?? const SymbolButtonStyle(); + /// Negotiate the theme to get a complete style. + SymbolButtonStyle negotiate(BuildContext context, ButtonState state) { + // Define default style from Flutter values. + SymbolButtonStyle style = SymbolButtonStyle.fromFlutter(context); + + // Try to retrieve custom theme extension + final symbolButtonThemeExtension = + context.themeExtension(); switch (state.state) { case ControlState.disabled: - style = disabledStyle ?? style; + style = disabledStyle ?? + symbolButtonThemeExtension?.disabledStyle ?? + style.copyWith( + foregroundColors: + MultiColor.single(context.colorScheme.onSurface), + backgroundColors: MultiColor.single(context.colorScheme.surface), + ); break; case ControlState.hovered: - style = hoveredStyle ?? style; + style = + hoveredStyle ?? symbolButtonThemeExtension?.hoveredStyle ?? style; break; case ControlState.tapped: - style = tappedStyle ?? style; + style = tappedStyle ?? symbolButtonThemeExtension?.tappedStyle ?? style; break; case ControlState.focused: - style = focusedStyle ?? style; + style = + focusedStyle ?? symbolButtonThemeExtension?.focusedStyle ?? style; break; case ControlState.normal: + style = normalStyle ?? symbolButtonThemeExtension?.normalStyle ?? style; break; } + // Apply extra theme if (state.isSelected) { - style = selectedStyle ?? style; + // TODO(hpcl): enhance copyWith to copy only non-null attributes of an object + style = style.copyWith( + label: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .label, + dimension: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .dimension, + radius: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .radius, + padding: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .padding, + foregroundColors: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .foregroundColors, + backgroundColors: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .backgroundColors, + borderColors: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .borderColors, + stroke: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .stroke, + shadow: (selectedStyle ?? + symbolButtonThemeExtension?.selectedStyle ?? + style) + .shadow, + ); } + return style; + } + + @override + Widget onBuild(BuildContext context, ButtonState state) { + final style = negotiate(context, state); + return Focus( onFocusChange: (hasFocus) => hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(), @@ -122,27 +181,27 @@ class SymbolButtonScreen mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox.square( - dimension: style.dimension ?? 60, + dimension: style.dimension, child: AspectRatio( aspectRatio: 1, child: DecoratedBox( decoration: BoxDecoration( - color: style.backgroundColors?.color ?? - context.colorScheme.primary, + color: style.backgroundColors?.color, // If no border color => no default value - border: (style.borderColors != null) - ? (style.borderColors?.isGradient ?? false) - ? GradientBoxBorder( - gradient: LinearGradient( - colors: style.borderColors!.colors, - ), - width: style.stroke ?? 2, - ) - : Border.all( - color: style.borderColors!.color, - width: style.stroke ?? 2, - ) - : null, + border: + (style.borderColors != null && style.stroke != null) + ? (style.borderColors?.isGradient ?? false) + ? GradientBoxBorder( + gradient: LinearGradient( + colors: style.borderColors!.colors, + ), + width: style.stroke!, + ) + : Border.all( + color: style.borderColors!.color, + width: style.stroke!, + ) + : null, // if no gradient colors => no default value gradient: (style.backgroundColors?.isGradient ?? false) ? LinearGradient( @@ -152,92 +211,44 @@ class SymbolButtonScreen boxShadow: [ if (style.shadow != null) ...[style.shadow!] ], - borderRadius: BorderRadius.all( - Radius.circular(style.radius ?? 0), - ), + borderRadius: style.radius, ), child: ConstrainedBox( constraints: BoxConstraints( minWidth: style.dimension ?? 60, ), // min sizes for Material buttons child: Padding( - padding: EdgeInsets.all(style.padding ?? 0), - child: Center( - // Choose color - // button.foreground.colors (gradient) ?? - // buttonStyle.foregroundColor.color ?? - // context.colorScheme.secondary - child: Builder( - builder: (context) { - final gradient = - (style?.foregroundColors?.isGradient ?? false) - ? LinearGradient( - colors: - style!.foregroundColors!.colors, - ) - : null; - final color = style?.foregroundColors?.color ?? - context.colorScheme.secondary; - if (gradient != null) { - return ShaderMask( - blendMode: BlendMode.srcIn, - shaderCallback: (bounds) => - gradient.createShader( - Rect.fromLTWH( - 0, - 0, - bounds.width, - bounds.height, - ), - ), - child: icon, - ); - } - return ColorFiltered( - colorFilter: - ColorFilter.mode(color, BlendMode.srcIn), - child: icon, - ); - }, - ), - ), + padding: style.padding ?? EdgeInsets.zero, + child: Center(child: icon), ), ), ), ), ), - // Choose color - // label.style.color ?? - // buttonStyle.foregroundColor.color ?? - // context.textTheme.titleLarge.color - // - // Choose gradient - // label.gradient ?? - // buttonStyle.foregroundColor.colors ?? - // null - if (label != null) ...[ - const Gap(10), - Builder( - builder: (context) { - final color = label?.style?.color ?? - style?.foregroundColors?.color ?? - context.textTheme.titleLarge?.color; - final buttonStyleGradient = - (style?.foregroundColors?.isGradient ?? false) - ? style?.foregroundColors?.colors - : null; - final gradient = label?.gradient ?? buttonStyleGradient; - return Text( - label!.text, - style: (label!.style ?? context.textTheme.titleMedium) - ?.copyWith(color: color), - ).toGradient( - LinearGradientHelper.fromNullableColors( - gradient, - ), - ); - }, + /// Choose color + /// label.style.color ?? + /// buttonStyle.label.style.color ?? + /// context.textTheme.labelLarge.color + /// + /// Choose gradient + /// label.gradient ?? + /// buttonStyle.foregroundColor.colors ?? + /// null + /// + /// More infos in `negociate()` method + if (label != null) ...[ + Gap(style.padding?.horizontal ?? 10), + Text( + label!.text, + style: label!.style ?? style.label, + ).toGradient( + LinearGradientHelper.fromNullableColors( + label?.gradient ?? + ((style.foregroundColors?.isGradient ?? false) + ? style.foregroundColors?.colors + : null), + ), ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart index 6f7864e3..a6e2a38f 100644 --- a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_icon.dart @@ -16,7 +16,7 @@ import 'package:flutter/widgets.dart'; -extension GradientTextExtension on Icon { +extension GradientIconExtension on Icon { GradientIcon toGradient(Gradient? gradient) => GradientIcon.from(this, gradient); } diff --git a/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/button_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/button_theme_extension.dart new file mode 100644 index 00000000..d2467ee2 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/button_theme_extension.dart @@ -0,0 +1,20 @@ +// 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 . + +export 'file_selection_button_theme_extension.dart'; +export 'flat_button_theme_extension.dart'; +export 'simple_icon_button_theme_extension.dart'; +export 'symbol_button_theme_extension.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/file_selection_button_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/file_selection_button_theme_extension.dart new file mode 100644 index 00000000..b5e882fa --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/file_selection_button_theme_extension.dart @@ -0,0 +1,52 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class FileSelectionButtonThemeExtension + extends ThemeExtension { + const FileSelectionButtonThemeExtension({ + this.disabledStyle, + this.focusedStyle, + this.hoveredStyle, + this.normalStyle, + this.tappedStyle, + this.selectedStyle, + this.invalidStyle, + }); + + /// Style of this button in disabled state + final FileSelectionButtonStyle? disabledStyle; + + /// Style of this button in focused state + final FileSelectionButtonStyle? focusedStyle; + + /// Style of this button in hovered state + final FileSelectionButtonStyle? hoveredStyle; + + /// Style of this button in normal state + final FileSelectionButtonStyle? normalStyle; + + /// Style of this button in tapped state + final FileSelectionButtonStyle? tappedStyle; + + /// Style of this button in selected state + final FileSelectionButtonStyle? selectedStyle; + + /// Style of this button in invalid state + final FileSelectionButtonStyle? invalidStyle; +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/flat_button_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/flat_button_theme_extension.dart new file mode 100644 index 00000000..c851e8a7 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/flat_button_theme_extension.dart @@ -0,0 +1,44 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class FlatButtonThemeExtension + extends ThemeExtension { + const FlatButtonThemeExtension({ + this.disabledStyle, + this.focusedStyle, + this.hoveredStyle, + this.normalStyle, + this.tappedStyle, + }); + + /// Style of this button in disabled state + final FlatButtonStyle? disabledStyle; + + /// Style of this button in focused state + final FlatButtonStyle? focusedStyle; + + /// Style of this button in hovered state + final FlatButtonStyle? hoveredStyle; + + /// Style of this button in normal state + final FlatButtonStyle? normalStyle; + + /// Style of this button in tapped state + final FlatButtonStyle? tappedStyle; +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/simple_icon_button_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/simple_icon_button_theme_extension.dart new file mode 100644 index 00000000..8912fc38 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/simple_icon_button_theme_extension.dart @@ -0,0 +1,44 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class SimpleIconButtonThemeExtension + extends ThemeExtension { + const SimpleIconButtonThemeExtension({ + this.disabledStyle, + this.focusedStyle, + this.hoveredStyle, + this.normalStyle, + this.tappedStyle, + }); + + /// Style of this button in disabled state + final SimpleIconButtonStyle? disabledStyle; + + /// Style of this button in focused state + final SimpleIconButtonStyle? focusedStyle; + + /// Style of this button in hovered state + final SimpleIconButtonStyle? hoveredStyle; + + /// Style of this button in normal state + final SimpleIconButtonStyle? normalStyle; + + /// Style of this button in tapped state + final SimpleIconButtonStyle? tappedStyle; +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/symbol_button_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/symbol_button_theme_extension.dart new file mode 100644 index 00000000..e6be4650 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/button_theme_extension/symbol_button_theme_extension.dart @@ -0,0 +1,48 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class SymbolButtonThemeExtension + extends ThemeExtension { + const SymbolButtonThemeExtension({ + this.disabledStyle, + this.focusedStyle, + this.hoveredStyle, + this.normalStyle, + this.tappedStyle, + this.selectedStyle, + }); + + /// Style of this button in disabled state + final SymbolButtonStyle? disabledStyle; + + /// Style of this button in focused state + final SymbolButtonStyle? focusedStyle; + + /// Style of this button in hovered state + final SymbolButtonStyle? hoveredStyle; + + /// Style of this button in normal state + final SymbolButtonStyle? normalStyle; + + /// Style of this button in tapped state + final SymbolButtonStyle? tappedStyle; + + /// Style of this button in selected state + final SymbolButtonStyle? selectedStyle; +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/domain.dart b/packages/wyatt_ui_kit/lib/src/domain/domain.dart new file mode 100644 index 00000000..901c7de9 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/domain.dart @@ -0,0 +1,18 @@ +// 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 . + +export 'button_theme_extension/button_theme_extension.dart'; +export 'card_theme_extension.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/src.dart b/packages/wyatt_ui_kit/lib/src/src.dart index 554793d9..406639aa 100644 --- a/packages/wyatt_ui_kit/lib/src/src.dart +++ b/packages/wyatt_ui_kit/lib/src/src.dart @@ -14,22 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// 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 . - export './components/components.dart'; export './core/core.dart'; -export './domain/card_theme_extension.dart'; +export './domain/domain.dart'; diff --git a/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart index 815ae892..61041f92 100644 --- a/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart +++ b/packages/wyatt_ui_kit/lib/wyatt_ui_kit.dart @@ -17,4 +17,6 @@ /// UIKit and Design System used in Wyatt Studio. library wyatt_ui_kit; +export 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; + export './src/src.dart'; -- 2.47.2 From 96781880f490d7c2251a8209f1f79712fd3b1d8f Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 20:14:32 +0100 Subject: [PATCH 119/320] feat(ui): move style implementation from component to ui_kit with theme resolver --- .../extensions/build_context_extensions.dart | 3 - .../lib/src/core/utils/multi_color.dart | 4 +- .../domain/entities/buttons/button_style.dart | 6 + .../buttons/file_selection_button_style.dart | 14 -- .../entities/buttons/flat_button_style.dart | 16 +- .../buttons/simple_icon_button_style.dart | 13 -- .../entities/buttons/symbol_button_style.dart | 14 -- packages/wyatt_ui_kit/README.md | 8 +- .../file_selection_button.dart | 5 + .../file_selection_button.g.dart | 1 + .../file_selection_button_screen.dart | 198 +++++++----------- .../file_selection_button_theme_resolver.dart | 59 ++++++ .../buttons/flat_button/flat_button.dart | 5 + .../buttons/flat_button/flat_button.g.dart | 1 + .../flat_button/flat_button_screen.dart | 83 ++++---- .../flat_button_theme_resolver.dart | 84 ++++++++ .../simple_icon_button.dart | 4 + .../simple_icon_button.g.dart | 1 + .../simple_icon_button_theme_resolver.dart | 57 +++++ .../simple_icon_screen.dart | 86 ++++---- .../buttons/symbol_button/symbol_button.dart | 5 + .../symbol_button/symbol_button.g.dart | 1 + .../symbol_button/symbol_button_screen.dart | 143 ++++++------- .../symbol_button_theme_resolver.dart | 59 ++++++ .../src/core/extensions/theme_extensions.dart | 3 + .../lib/src/core/helpers/theme_resolver.dart | 84 ++++++++ 26 files changed, 611 insertions(+), 346 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart diff --git a/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart b/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart index c1184fae..be5e6045 100644 --- a/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart +++ b/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart @@ -19,7 +19,4 @@ import 'package:wyatt_ui_components/src/features/features.dart'; extension ThemeComponentBuildContext on BuildContext { ComponentThemeData get components => ComponentTheme.of(this); - TextTheme get textTheme => Theme.of(this).textTheme; - ColorScheme get colorScheme => Theme.of(this).colorScheme; - ButtonThemeData get buttonTheme => Theme.of(this).buttonTheme; } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart index c4f36156..8f36e970 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // @@ -52,4 +51,7 @@ class MultiColor { } return b; } + + @override + String toString() => 'MultiColor(_colors: $_colors, _color: $_color)'; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart index 6e0d8ee7..de126460 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart @@ -62,4 +62,10 @@ abstract class ButtonStyle { /// /// Default to `null` final BoxShadow? shadow; + + @override + String toString() => + 'ButtonStyle(radius: $radius, padding: $padding, foregroundColors: ' + '$foregroundColors, backgroundColors: $backgroundColors, borderColors: ' + '$borderColors, stroke: $stroke, shadow: $shadow)'; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart index 5290e5c4..e543229b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -18,7 +18,6 @@ import 'dart:ui'; import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; @@ -38,19 +37,6 @@ class FileSelectionButtonStyle extends ButtonStyle { super.shadow, }); - /// Used in negociation to build a style from Flutter default values. - factory FileSelectionButtonStyle.fromFlutter(BuildContext context) => - FileSelectionButtonStyle( - title: context.textTheme.labelLarge, - subTitle: context.textTheme.labelSmall, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); - /// Used for interpolation. static FileSelectionButtonStyle? lerp( FileSelectionButtonStyle? a, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index 7842365e..cc57472b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -18,7 +18,6 @@ import 'dart:ui'; import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; @@ -37,17 +36,6 @@ class FlatButtonStyle extends ButtonStyle { super.shadow, }); - /// Used in negociation to build a style from Flutter default values. - factory FlatButtonStyle.fromFlutter(BuildContext context) => FlatButtonStyle( - label: context.textTheme.labelLarge, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); - /// Used for interpolation. static FlatButtonStyle? lerp( FlatButtonStyle? a, @@ -86,4 +74,8 @@ class FlatButtonStyle extends ButtonStyle { /// /// Default to `TextTheme.labelLarge` final TextStyle? label; + + @override + String toString() => + 'FlatButtonStyle(label: $label), inherited: ${super.toString()}'; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart index f559b956..3d468e63 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -18,7 +18,6 @@ import 'dart:ui'; import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; @@ -37,18 +36,6 @@ class SimpleIconButtonStyle extends ButtonStyle { super.shadow, }); - /// Used in negociation to build a style from Flutter default values. - factory SimpleIconButtonStyle.fromFlutter(BuildContext context) => - SimpleIconButtonStyle( - dimension: context.buttonTheme.height, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); - /// Used for interpolation. static SimpleIconButtonStyle? lerp( SimpleIconButtonStyle? a, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index 581f5ebc..ab5c44b8 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -18,7 +18,6 @@ import 'dart:ui'; import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/core/extensions/build_context_extensions.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; @@ -38,19 +37,6 @@ class SymbolButtonStyle extends ButtonStyle { super.shadow, }); - /// Used in negociation to build a style from Flutter default values. - factory SymbolButtonStyle.fromFlutter(BuildContext context) => - SymbolButtonStyle( - label: context.textTheme.labelLarge, - dimension: context.buttonTheme.height, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); - /// Used for interpolation. static SymbolButtonStyle? lerp( SymbolButtonStyle? a, diff --git a/packages/wyatt_ui_kit/README.md b/packages/wyatt_ui_kit/README.md index 5f2c54c7..8ee9ac74 100644 --- a/packages/wyatt_ui_kit/README.md +++ b/packages/wyatt_ui_kit/README.md @@ -25,7 +25,7 @@ UIKit and Design System used in Wyatt Studio. -## Theme negociation +## Theme negotiation When building a component, most of its attributes can be 'null'. The `build()` method then starts to negotiate the theme in the tree to obtain the most consistent style possible. @@ -36,7 +36,11 @@ When you build a component `Button({double? radius})`. You have several possibilities: 1) Pass the "radius" into the constructor, `Button(radius: 12)`. 2) Set up a theme extension `ButtonThemeExtension(radius: 15)`. -3) Let `wyatt_ui_kit` "negotiate" and try to find a suitable style in the flutter theme. If this negotiation phase fails, then the style is simply not applied. +3) Let `wyatt_ui_kit` "negotiate" and try to find a suitable style in the flutter theme. + +If this negotiation phase fails, then: +- If the value is mandatory: a hardcoded value in "wyatt_ui_kit" is chosen. +- If not, the style is simply not applied. If, for example, you don't use option 1, then the radius will be 15. If you use neither option 1 nor option 2 then the radius will be 4 as this is the [official Material Design value](https://m2.material.io/design/shape/about-shape.html#shape-customization-tool). diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart index 44759cc7..d7520b4e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart @@ -19,6 +19,7 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_screen.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'file_selection_button.g.dart'; @@ -39,6 +40,7 @@ class FileSelectionButton extends FileSelectionButtonComponent super.invalidStyle, super.onPressed, super.mainAxisSize, + this.themeResolver, super.key, }); @@ -74,6 +76,8 @@ class FileSelectionButton extends FileSelectionButtonComponent @override FileSelectionButtonStyle? get invalidStyle => super.invalidStyle as FileSelectionButtonStyle?; + + final FileSelectionButtonThemeResolver? themeResolver; @override Widget build(BuildContext context) => exportBloc( @@ -90,6 +94,7 @@ class FileSelectionButton extends FileSelectionButtonComponent invalidStyle: invalidStyle, onPressed: onPressed, mainAxisSize: mainAxisSize, + themeResolver: themeResolver, key: key, ), ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart index 79759e3b..d4fdf1d7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart @@ -75,6 +75,7 @@ class $FileSelectionButtonCWProxyImpl invalidStyle: invalidStyle ?? _value.invalidStyle, onPressed: onPressed ?? _value.onPressed, mainAxisSize: mainAxisSize ?? _value.mainAxisSize, + themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index 72196edf..a8a121bc 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -22,10 +22,9 @@ import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; -import 'package:wyatt_ui_kit/src/domain/button_theme_extension/file_selection_button_theme_extension.dart'; class FileSelectionButtonScreen extends CubitScreen { @@ -42,6 +41,7 @@ class FileSelectionButtonScreen this.invalidStyle, this.onPressed, this.mainAxisSize, + this.themeResolver, super.key, }); @@ -59,138 +59,80 @@ class FileSelectionButtonScreen final FileSelectionButtonStyle? invalidStyle; final void Function(ControlState state)? onPressed; + final FileSelectionButtonThemeResolver? themeResolver; @override InvalidButtonCubit create(BuildContext context) => InvalidButtonCubit(); /// Negotiate the theme to get a complete style. - FileSelectionButtonStyle negotiate(BuildContext context, ButtonState state) { - // Define default style from Flutter values. - FileSelectionButtonStyle style = - FileSelectionButtonStyle.fromFlutter(context); + FileSelectionButtonStyle resolve(BuildContext context, ButtonState state) { + final FileSelectionButtonThemeResolver resolver = themeResolver ?? + FileSelectionButtonThemeResolver( + computeExtensionValueFn: ( + context, + defaultValue, + themeExtension, { + extra, + }) { + FileSelectionButtonStyle? style = defaultValue; + switch (extra?.state) { + case ControlState.disabled: + style = themeExtension.disabledStyle; + break; + case ControlState.focused: + style = themeExtension.focusedStyle; + break; + case ControlState.hovered: + style = themeExtension.hoveredStyle; + break; + case ControlState.tapped: + style = themeExtension.tappedStyle; + break; + case ControlState.normal: + case null: + style = themeExtension.normalStyle; + break; + } + if (extra?.isSelected ?? false) { + style = themeExtension.selectedStyle; + } + if (extra?.isInvalid ?? false) { + style = themeExtension.invalidStyle; + } - // Try to retrieve custom theme extension - final fileSelectionButtonThemeExtension = - context.themeExtension(); + return style; + }, + customStyleFn: (context, {extra}) { + FileSelectionButtonStyle? style; + switch (extra?.state) { + case ControlState.disabled: + style = disabledStyle; + break; + case ControlState.focused: + style = focusedStyle; + break; + case ControlState.hovered: + style = hoveredStyle; + break; + case ControlState.tapped: + style = tappedStyle; + break; + case ControlState.normal: + case null: + style = normalStyle; + break; + } + if (extra?.isSelected ?? false) { + style = selectedStyle; + } + if (extra?.isInvalid ?? false) { + style = invalidStyle; + } - switch (state.state) { - case ControlState.disabled: - style = disabledStyle ?? - fileSelectionButtonThemeExtension?.disabledStyle ?? - style.copyWith( - foregroundColors: - MultiColor.single(context.colorScheme.onSurface), - backgroundColors: MultiColor.single(context.colorScheme.surface), - ); - break; - case ControlState.hovered: - style = hoveredStyle ?? - fileSelectionButtonThemeExtension?.hoveredStyle ?? - style; - break; - case ControlState.tapped: - style = tappedStyle ?? - fileSelectionButtonThemeExtension?.tappedStyle ?? - style; - break; - case ControlState.focused: - style = focusedStyle ?? - fileSelectionButtonThemeExtension?.focusedStyle ?? - style; - break; - case ControlState.normal: - style = normalStyle ?? - fileSelectionButtonThemeExtension?.normalStyle ?? - style; - break; - } - - // Apply extra theme - if (state.isSelected) { - // TODO(hpcl): enhance copyWith to copy only non-null attributes of an object - style = style.copyWith( - title: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .title, - subTitle: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .subTitle, - radius: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .radius, - padding: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .padding, - foregroundColors: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .foregroundColors, - backgroundColors: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .backgroundColors, - borderColors: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .borderColors, - stroke: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .stroke, - shadow: (selectedStyle ?? - fileSelectionButtonThemeExtension?.selectedStyle ?? - style) - .shadow, - ); - } - - if (state.isInvalid) { - // TODO(hpcl): enhance copyWith to copy only non-null attributes of an object - style = style.copyWith( - title: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .title, - subTitle: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .subTitle, - radius: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .radius, - padding: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .padding, - foregroundColors: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .foregroundColors, - backgroundColors: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .backgroundColors, - borderColors: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .borderColors, - stroke: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .stroke, - shadow: (invalidStyle ?? - fileSelectionButtonThemeExtension?.invalidStyle ?? - style) - .shadow, - ); - } - - return style; + return style; + }, + ); + return resolver.negotiate(context, extra: state); } Widget _border( @@ -217,7 +159,7 @@ class FileSelectionButtonScreen @override Widget onBuild(BuildContext context, ButtonState state) { - final style = negotiate(context, state); + final style = resolve(context, state); return Focus( onFocusChange: (hasFocus) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart new file mode 100644 index 00000000..8d326abf --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -0,0 +1,59 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class FileSelectionButtonThemeResolver extends ThemeResolver< + FileSelectionButtonStyle, FileSelectionButtonThemeExtension, ButtonState> { + const FileSelectionButtonThemeResolver({ + required this.computeExtensionValueFn, + required this.customStyleFn, + }); + + @override + FileSelectionButtonStyle computeDefaultValue( + BuildContext context, { + ButtonState? extra, + }) => + FileSelectionButtonStyle( + title: context.textTheme.labelLarge, + subTitle: context.textTheme.labelSmall, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: MultiColor.single(context.colorScheme.onPrimary), + backgroundColors: MultiColor.single(context.colorScheme.primary), + ); + + @override + final FileSelectionButtonStyle? Function( + BuildContext context, + FileSelectionButtonStyle defaultValue, + FileSelectionButtonThemeExtension themeExtension, { + ButtonState? extra, + }) computeExtensionValueFn; + + @override + final FileSelectionButtonStyle? Function( + BuildContext context, { + ButtonState? extra, + }) customStyleFn; +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index 4821a2c3..e5cf5093 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -19,6 +19,7 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_screen.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'flat_button.g.dart'; @@ -37,6 +38,7 @@ class FlatButton extends FlatButtonComponent super.tappedStyle, super.onPressed, super.mainAxisSize, + this.themeResolver, super.key, }); @@ -60,6 +62,8 @@ class FlatButton extends FlatButtonComponent @override FlatButtonStyle? get tappedStyle => super.tappedStyle as FlatButtonStyle?; + final FlatButtonThemeResolver? themeResolver; + @override Widget build(BuildContext context) => exportBloc( child: FlatButtonScreen( @@ -73,6 +77,7 @@ class FlatButton extends FlatButtonComponent tappedStyle: tappedStyle, onPressed: onPressed, mainAxisSize: mainAxisSize, + themeResolver: themeResolver, key: key, ), ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index 87ed36e1..cf5fdf0f 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -63,6 +63,7 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { tappedStyle: tappedStyle ?? _value.tappedStyle, onPressed: onPressed ?? _value.onPressed, mainAxisSize: mainAxisSize ?? _value.mainAxisSize, + themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 2ef0d172..b0803388 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -20,11 +20,10 @@ import 'package:gap/gap.dart'; import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; -import 'package:wyatt_ui_kit/src/domain/button_theme_extension/flat_button_theme_extension.dart'; class FlatButtonScreen extends CubitScreen { const FlatButtonScreen({ @@ -38,6 +37,7 @@ class FlatButtonScreen extends CubitScreen { this.tappedStyle, this.onPressed, this.mainAxisSize, + this.themeResolver, super.key, }); @@ -53,49 +53,57 @@ class FlatButtonScreen extends CubitScreen { final FlatButtonStyle? tappedStyle; final void Function(ControlState state)? onPressed; + final FlatButtonThemeResolver? themeResolver; @override ButtonCubit create(BuildContext context) => ButtonCubit(); /// Negotiate the theme to get a complete style. - FlatButtonStyle negotiate(BuildContext context, ControlState state) { - // Define default style from Flutter values. - FlatButtonStyle style = FlatButtonStyle.fromFlutter(context); - - // Try to retrieve custom theme extension - final flatButtonThemeExtension = - context.themeExtension(); - - switch (state) { - case ControlState.disabled: - style = disabledStyle ?? - flatButtonThemeExtension?.disabledStyle ?? - style.copyWith( - foregroundColors: - MultiColor.single(context.colorScheme.onSurface), - backgroundColors: MultiColor.single(context.colorScheme.surface), - ); - break; - case ControlState.hovered: - style = hoveredStyle ?? flatButtonThemeExtension?.hoveredStyle ?? style; - break; - case ControlState.tapped: - style = tappedStyle ?? flatButtonThemeExtension?.tappedStyle ?? style; - break; - case ControlState.focused: - style = focusedStyle ?? flatButtonThemeExtension?.focusedStyle ?? style; - break; - case ControlState.normal: - style = normalStyle ?? flatButtonThemeExtension?.normalStyle ?? style; - break; - } - - return style; + FlatButtonStyle resolve(BuildContext context, ControlState state) { + final FlatButtonThemeResolver resolver = themeResolver ?? + FlatButtonThemeResolver( + computeExtensionValueFn: ( + context, + defaultValue, + themeExtension, { + extra, + }) { + switch (extra) { + case ControlState.disabled: + return themeExtension.disabledStyle; + case ControlState.focused: + return themeExtension.focusedStyle; + case ControlState.hovered: + return themeExtension.hoveredStyle; + case ControlState.tapped: + return themeExtension.tappedStyle; + case ControlState.normal: + case null: + return themeExtension.normalStyle; + } + }, + customStyleFn: (context, {extra}) { + switch (extra) { + case ControlState.disabled: + return disabledStyle; + case ControlState.focused: + return focusedStyle; + case ControlState.hovered: + return hoveredStyle; + case ControlState.tapped: + return tappedStyle; + case ControlState.normal: + case null: + return normalStyle; + } + }, + ); + return resolver.negotiate(context, extra: state); } @override Widget onBuild(BuildContext context, ButtonState state) { - final style = negotiate(context, state.state); + final style = resolve(context, state.state); return Focus( onFocusChange: (hasFocus) => @@ -182,7 +190,6 @@ class FlatButtonScreen extends CubitScreen { Gap(style.padding?.vertical ?? 10), /// Choose color - /// label.style.color ?? /// buttonStyle.label.style.color ?? /// context.textTheme.labelLarge.color /// @@ -191,7 +198,7 @@ class FlatButtonScreen extends CubitScreen { /// buttonStyle.foregroundColor.colors ?? /// null /// - /// More infos in `negociate()` method + /// More infos in ThemeResolver class if (label != null) ...[ Text( label!.text, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart new file mode 100644 index 00000000..3e125b21 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart @@ -0,0 +1,84 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class FlatButtonThemeResolver extends ThemeResolver { + const FlatButtonThemeResolver({ + required this.computeExtensionValueFn, + required this.customStyleFn, + }); + + @override + + /// Values taken from + FlatButtonStyle computeDefaultValue( + BuildContext context, { + ControlState? extra, + }) { + MultiColor backgroundColor = MultiColor.single(context.colorScheme.primary); + MultiColor foregroundColor = + MultiColor.single(context.colorScheme.onPrimary); + + switch (extra) { + case ControlState.disabled: + backgroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.12)); + foregroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.38)); + break; + case ControlState.hovered: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case ControlState.tapped: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case null: + case ControlState.normal: + case ControlState.focused: + break; + } + + return FlatButtonStyle( + label: + context.textTheme.labelLarge?.copyWith(color: foregroundColor.color), + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: foregroundColor, + backgroundColors: backgroundColor, + ); + } + + @override + final FlatButtonStyle? Function( + BuildContext context, + FlatButtonStyle defaultValue, + FlatButtonThemeExtension themeExtension, { + ControlState? extra, + }) computeExtensionValueFn; + + @override + final FlatButtonStyle? Function(BuildContext context, {ControlState? extra}) + customStyleFn; +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart index 76a6b4bb..6913ab37 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -18,6 +18,7 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_screen.dart'; import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; @@ -34,6 +35,7 @@ class SimpleIconButton extends SimpleIconButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + this.themeResolver, super.key, }); @@ -62,6 +64,7 @@ class SimpleIconButton extends SimpleIconButtonComponent SimpleIconButtonStyle? get tappedStyle => super.tappedStyle as SimpleIconButtonStyle?; + final SimpleIconButtonThemeResolver? themeResolver; @override Widget build(BuildContext context) => exportBloc( @@ -73,6 +76,7 @@ class SimpleIconButton extends SimpleIconButtonComponent focusedStyle: focusedStyle, tappedStyle: tappedStyle, onPressed: onPressed, + themeResolver: themeResolver, key: key, ), ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart index b846f4f6..31464a10 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart @@ -51,6 +51,7 @@ class $SimpleIconButtonCWProxyImpl focusedStyle: focusedStyle ?? _value.focusedStyle, tappedStyle: tappedStyle ?? _value.tappedStyle, onPressed: onPressed ?? _value.onPressed, + themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart new file mode 100644 index 00000000..a6dc37ba --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart @@ -0,0 +1,57 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class SimpleIconButtonThemeResolver extends ThemeResolver { + const SimpleIconButtonThemeResolver({ + required this.computeExtensionValueFn, + required this.customStyleFn, + }); + + @override + SimpleIconButtonStyle computeDefaultValue( + BuildContext context, { + ControlState? extra, + }) => + SimpleIconButtonStyle( + dimension: context.buttonTheme.height, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: MultiColor.single(context.colorScheme.onPrimary), + backgroundColors: MultiColor.single(context.colorScheme.primary), + ); + + @override + final SimpleIconButtonStyle? Function( + BuildContext context, + SimpleIconButtonStyle defaultValue, + SimpleIconButtonThemeExtension themeExtension, { + ControlState? extra, + }) computeExtensionValueFn; + + @override + final SimpleIconButtonStyle? Function( + BuildContext context, { + ControlState? extra, + }) customStyleFn; +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart index bceab017..13ea6b8b 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart @@ -19,11 +19,10 @@ import 'package:flutter/services.dart'; import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; -import 'package:wyatt_ui_kit/src/domain/button_theme_extension/simple_icon_button_theme_extension.dart'; class SimpleIconButtonScreen extends CubitScreen { const SimpleIconButtonScreen({ @@ -34,6 +33,7 @@ class SimpleIconButtonScreen extends CubitScreen { this.focusedStyle, this.tappedStyle, this.onPressed, + this.themeResolver, super.key, }); @@ -46,55 +46,57 @@ class SimpleIconButtonScreen extends CubitScreen { final SimpleIconButtonStyle? tappedStyle; final void Function(ControlState state)? onPressed; + final SimpleIconButtonThemeResolver? themeResolver; @override ButtonCubit create(BuildContext context) => ButtonCubit(); /// Negotiate the theme to get a complete style. - SimpleIconButtonStyle negotiate(BuildContext context, ControlState state) { - // Define default style from Flutter values. - SimpleIconButtonStyle style = SimpleIconButtonStyle.fromFlutter(context); - - // Try to retrieve custom theme extension - final simpleIconButtonThemeExtension = - context.themeExtension(); - - switch (state) { - case ControlState.disabled: - style = disabledStyle ?? - simpleIconButtonThemeExtension?.disabledStyle ?? - style.copyWith( - foregroundColors: - MultiColor.single(context.colorScheme.onSurface), - backgroundColors: MultiColor.single(context.colorScheme.surface), - ); - break; - case ControlState.hovered: - style = hoveredStyle ?? - simpleIconButtonThemeExtension?.hoveredStyle ?? - style; - break; - case ControlState.tapped: - style = - tappedStyle ?? simpleIconButtonThemeExtension?.tappedStyle ?? style; - break; - case ControlState.focused: - style = focusedStyle ?? - simpleIconButtonThemeExtension?.focusedStyle ?? - style; - break; - case ControlState.normal: - style = - normalStyle ?? simpleIconButtonThemeExtension?.normalStyle ?? style; - break; - } - - return style; + SimpleIconButtonStyle resolve(BuildContext context, ControlState state) { + final SimpleIconButtonThemeResolver resolver = themeResolver ?? + SimpleIconButtonThemeResolver( + computeExtensionValueFn: ( + context, + defaultValue, + themeExtension, { + extra, + }) { + switch (extra) { + case ControlState.disabled: + return themeExtension.disabledStyle; + case ControlState.focused: + return themeExtension.focusedStyle; + case ControlState.hovered: + return themeExtension.hoveredStyle; + case ControlState.tapped: + return themeExtension.tappedStyle; + case ControlState.normal: + case null: + return themeExtension.normalStyle; + } + }, + customStyleFn: (context, {extra}) { + switch (extra) { + case ControlState.disabled: + return disabledStyle; + case ControlState.focused: + return focusedStyle; + case ControlState.hovered: + return hoveredStyle; + case ControlState.tapped: + return tappedStyle; + case ControlState.normal: + case null: + return normalStyle; + } + }, + ); + return resolver.negotiate(context, extra: state); } @override Widget onBuild(BuildContext context, ButtonState state) { - final style = negotiate(context, state.state); + final style = resolve(context, state.state); return Focus( onFocusChange: (hasFocus) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart index 04a44790..9a4f9c4e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart @@ -19,6 +19,7 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_screen.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'symbol_button.g.dart'; @@ -36,6 +37,7 @@ class SymbolButton extends SymbolButtonComponent super.tappedStyle, super.selectedStyle, super.mainAxisSize, + this.themeResolver, super.onPressed, super.key, }); @@ -67,6 +69,8 @@ class SymbolButton extends SymbolButtonComponent SymbolButtonStyle? get selectedStyle => super.selectedStyle as SymbolButtonStyle?; + final SymbolButtonThemeResolver? themeResolver; + @override Widget build(BuildContext context) => exportBloc( child: SymbolButtonScreen( @@ -80,6 +84,7 @@ class SymbolButton extends SymbolButtonComponent selectedStyle: selectedStyle, onPressed: onPressed, mainAxisSize: mainAxisSize, + themeResolver: themeResolver, key: key, ), ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart index f6f8d9ca..2f0fd363 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart @@ -63,6 +63,7 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { tappedStyle: tappedStyle ?? _value.tappedStyle, selectedStyle: selectedStyle ?? _value.selectedStyle, mainAxisSize: mainAxisSize ?? _value.mainAxisSize, + themeResolver: themeResolver ?? _value.themeResolver, onPressed: onPressed ?? _value.onPressed, key: key ?? _value.key, ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index e199ebe0..2491b496 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -21,11 +21,10 @@ import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; -import 'package:wyatt_ui_kit/src/domain/button_theme_extension/symbol_button_theme_extension.dart'; class SymbolButtonScreen extends CubitScreen { @@ -40,6 +39,7 @@ class SymbolButtonScreen this.selectedStyle, this.onPressed, this.mainAxisSize, + this.themeResolver, super.key, }); @@ -55,94 +55,79 @@ class SymbolButtonScreen final SymbolButtonStyle? selectedStyle; final void Function(ControlState state)? onPressed; + final SymbolButtonThemeResolver? themeResolver; @override SelectableButtonCubit create(BuildContext context) => SelectableButtonCubit(); /// Negotiate the theme to get a complete style. - SymbolButtonStyle negotiate(BuildContext context, ButtonState state) { - // Define default style from Flutter values. - SymbolButtonStyle style = SymbolButtonStyle.fromFlutter(context); + SymbolButtonStyle resolve(BuildContext context, ButtonState state) { + final SymbolButtonThemeResolver resolver = themeResolver ?? + SymbolButtonThemeResolver( + computeExtensionValueFn: ( + context, + defaultValue, + themeExtension, { + extra, + }) { + SymbolButtonStyle? style = defaultValue; + switch (extra?.state) { + case ControlState.disabled: + style = themeExtension.disabledStyle; + break; + case ControlState.focused: + style = themeExtension.focusedStyle; + break; + case ControlState.hovered: + style = themeExtension.hoveredStyle; + break; + case ControlState.tapped: + style = themeExtension.tappedStyle; + break; + case ControlState.normal: + case null: + style = themeExtension.normalStyle; + break; + } + if (extra?.isSelected ?? false) { + style = themeExtension.selectedStyle; + } - // Try to retrieve custom theme extension - final symbolButtonThemeExtension = - context.themeExtension(); + return style; + }, + customStyleFn: (context, {extra}) { + SymbolButtonStyle? style; + switch (extra?.state) { + case ControlState.disabled: + style = disabledStyle; + break; + case ControlState.focused: + style = focusedStyle; + break; + case ControlState.hovered: + style = hoveredStyle; + break; + case ControlState.tapped: + style = tappedStyle; + break; + case ControlState.normal: + case null: + style = normalStyle; + break; + } + if (extra?.isSelected ?? false) { + style = selectedStyle; + } - switch (state.state) { - case ControlState.disabled: - style = disabledStyle ?? - symbolButtonThemeExtension?.disabledStyle ?? - style.copyWith( - foregroundColors: - MultiColor.single(context.colorScheme.onSurface), - backgroundColors: MultiColor.single(context.colorScheme.surface), - ); - break; - case ControlState.hovered: - style = - hoveredStyle ?? symbolButtonThemeExtension?.hoveredStyle ?? style; - break; - case ControlState.tapped: - style = tappedStyle ?? symbolButtonThemeExtension?.tappedStyle ?? style; - break; - case ControlState.focused: - style = - focusedStyle ?? symbolButtonThemeExtension?.focusedStyle ?? style; - break; - case ControlState.normal: - style = normalStyle ?? symbolButtonThemeExtension?.normalStyle ?? style; - break; - } - - // Apply extra theme - if (state.isSelected) { - // TODO(hpcl): enhance copyWith to copy only non-null attributes of an object - style = style.copyWith( - label: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .label, - dimension: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .dimension, - radius: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .radius, - padding: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .padding, - foregroundColors: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .foregroundColors, - backgroundColors: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .backgroundColors, - borderColors: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .borderColors, - stroke: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .stroke, - shadow: (selectedStyle ?? - symbolButtonThemeExtension?.selectedStyle ?? - style) - .shadow, - ); - } - - return style; + return style; + }, + ); + return resolver.negotiate(context, extra: state); } @override Widget onBuild(BuildContext context, ButtonState state) { - final style = negotiate(context, state); + final style = resolve(context, state); return Focus( onFocusChange: (hasFocus) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart new file mode 100644 index 00000000..ed446330 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart @@ -0,0 +1,59 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class SymbolButtonThemeResolver extends ThemeResolver { + const SymbolButtonThemeResolver({ + required this.computeExtensionValueFn, + required this.customStyleFn, + }); + + @override + SymbolButtonStyle computeDefaultValue( + BuildContext context, { + ButtonState? extra, + }) => + SymbolButtonStyle( + label: context.textTheme.labelLarge, + dimension: context.buttonTheme.height, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: MultiColor.single(context.colorScheme.onPrimary), + backgroundColors: MultiColor.single(context.colorScheme.primary), + ); + + @override + final SymbolButtonStyle? Function( + BuildContext context, + SymbolButtonStyle defaultValue, + SymbolButtonThemeExtension themeExtension, { + ButtonState? extra, + }) computeExtensionValueFn; + + @override + final SymbolButtonStyle? Function( + BuildContext context, { + ButtonState? extra, + }) customStyleFn; +} diff --git a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart index 021dca70..5e39a69c 100644 --- a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart +++ b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart @@ -18,4 +18,7 @@ import 'package:flutter/material.dart'; extension BuildContextThemeExtension on BuildContext { T? themeExtension() => Theme.of(this).extension(); + TextTheme get textTheme => Theme.of(this).textTheme; + ColorScheme get colorScheme => Theme.of(this).colorScheme; + ButtonThemeData get buttonTheme => Theme.of(this).buttonTheme; } diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart new file mode 100644 index 00000000..f54aeaa3 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart @@ -0,0 +1,84 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; + +/// {@template theme_resolver} +/// In charge of theme negotiation and merge. +/// +/// When you build a component `Component({double? radius})`. +/// You have several possibilities: +/// 1) Pass the "radius" into the constructor, `Component(radius: 12)`. +/// 2) Set up a theme extension `ComponentThemeExtension(radius: 15)`. +/// 3) Let `wyatt_ui_kit` "negotiate" and try to find a suitable style in the +/// flutter theme. +/// +/// If this negotiation phase fails, then: +/// - If the value is mandatory: a hardcoded value in "wyatt_ui_kit" is chosen. +/// - If not, the style is simply not applied. +/// {@endtemplate} +abstract class ThemeResolver { + /// {@macro theme_resolver} + const ThemeResolver(); + + S? Function( + BuildContext context, + S defaultValue, + T themeExtension, { + E? extra, + }) get computeExtensionValueFn; + S? Function(BuildContext context, {E? extra}) get customStyleFn; + + /// Compute default value from Flutter Theme or with hardcoded values. + S computeDefaultValue(BuildContext context, {E? extra}); + + /// Compute values from the extension if found + S? computeExtensionValue( + BuildContext context, + S defaultValue, { + E? extra, + }) { + final themeExtension = findExtension(context); + if (themeExtension != null) { + return computeExtensionValueFn(context, defaultValue, themeExtension); + } + return defaultValue; + } + + /// Compute custom value + S? computeCustomValue( + BuildContext context, + S previousPhaseValue, { + E? extra, + }) { + final customStyle = customStyleFn(context, extra: extra); + if (customStyle != null) { + return customStyle; + } + return previousPhaseValue; + } + + T? findExtension(BuildContext context) => context.themeExtension(); + + /// Choose most suitable style for a given context. + S negotiate(BuildContext context, {E? extra}) { + S style = computeDefaultValue(context, extra: extra); + style = computeExtensionValue(context, style, extra: extra) ?? style; + style = computeCustomValue(context, style, extra: extra) ?? style; + return style; + } +} -- 2.47.2 From ed06e18043eaa9783a7199a78c5ea1f1daef5aa8 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 20:35:25 +0100 Subject: [PATCH 120/320] fix(ui): move theme_resolver in compnoent to fix code generation --- .../lib/src/core/core.dart | 3 +- .../lib/src/core/utils}/theme_resolver.dart | 3 +- .../lib/src/core/utils/utils.dart | 19 +++++++ .../entities/buttons/button_component.dart | 4 ++ .../file_selection_button_component.dart | 1 + .../buttons/flat_button_component.dart | 1 + .../buttons/simple_icon_button_component.dart | 1 + .../buttons/symbol_button_component.dart | 1 + .../file_selection_button.dart | 8 +-- .../file_selection_button.g.dart | 5 ++ .../file_selection_button_theme_resolver.dart | 1 - .../buttons/flat_button/flat_button.dart | 6 ++- .../buttons/flat_button/flat_button.g.dart | 5 ++ .../flat_button_theme_resolver.dart | 4 +- .../simple_icon_button.dart | 6 ++- .../simple_icon_button.g.dart | 5 ++ .../simple_icon_button_theme_resolver.dart | 1 - .../buttons/symbol_button/symbol_button.dart | 6 ++- .../symbol_button/symbol_button.g.dart | 5 ++ .../symbol_button_theme_resolver.dart | 49 ++++++++++++++----- 20 files changed, 104 insertions(+), 30 deletions(-) rename packages/{wyatt_ui_kit/lib/src/core/helpers => wyatt_ui_components/lib/src/core/utils}/theme_resolver.dart (94%) create mode 100644 packages/wyatt_ui_components/lib/src/core/utils/utils.dart diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index d850e320..a18f1e81 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -18,5 +18,4 @@ export 'enums/control_state.dart'; export 'extensions/build_context_extensions.dart'; export 'extensions/string_extension.dart'; export 'mixins/copy_with_mixin.dart'; -export 'utils/multi_color.dart'; -export 'utils/text_wrapper.dart'; +export 'utils/utils.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart similarity index 94% rename from packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart rename to packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index f54aeaa3..08c04a3b 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; /// {@template theme_resolver} /// In charge of theme negotiation and merge. @@ -72,7 +71,7 @@ abstract class ThemeResolver { return previousPhaseValue; } - T? findExtension(BuildContext context) => context.themeExtension(); + T? findExtension(BuildContext context) => Theme.of(context).extension(); /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { diff --git a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart new file mode 100644 index 00000000..17821996 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart @@ -0,0 +1,19 @@ +// 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 . + +export 'multi_color.dart'; +export 'text_wrapper.dart'; +export 'theme_resolver.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index 32b93910..a5c285d5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -26,6 +26,7 @@ abstract class ButtonComponent extends Component { this.selectedStyle, this.invalidStyle, this.onPressed, + this.themeResolver, super.key, }); @@ -52,4 +53,7 @@ abstract class ButtonComponent extends Component { /// Callback on button press final void Function(ControlState state)? onPressed; + + /// Theme Resolver for this component + final ThemeResolver? themeResolver; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart index 4d08b13e..b0e5866b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart @@ -36,6 +36,7 @@ abstract class FileSelectionButtonComponent extends ButtonComponent super.selectedStyle, super.invalidStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index 97ef3ff4..83420a59 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -34,6 +34,7 @@ abstract class FlatButtonComponent extends ButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart index 89b42dbe..b9a3c746 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart @@ -31,6 +31,7 @@ abstract class SimpleIconButtonComponent extends ButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart index a811af66..a09255d0 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart @@ -34,6 +34,7 @@ abstract class SymbolButtonComponent extends ButtonComponent super.tappedStyle, super.selectedStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart index d7520b4e..aeebaa43 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart @@ -40,7 +40,7 @@ class FileSelectionButton extends FileSelectionButtonComponent super.invalidStyle, super.onPressed, super.mainAxisSize, - this.themeResolver, + super.themeResolver, super.key, }); @@ -76,8 +76,10 @@ class FileSelectionButton extends FileSelectionButtonComponent @override FileSelectionButtonStyle? get invalidStyle => super.invalidStyle as FileSelectionButtonStyle?; - - final FileSelectionButtonThemeResolver? themeResolver; + + @override + FileSelectionButtonThemeResolver? get themeResolver => + super.themeResolver as FileSelectionButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart index d4fdf1d7..45b7eca4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart @@ -45,6 +45,10 @@ class $FileSelectionButtonCWProxyImpl FileSelectionButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + FileSelectionButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override FileSelectionButton key(Key? key) => this(key: key); @override FileSelectionButton call({ @@ -60,6 +64,7 @@ class $FileSelectionButtonCWProxyImpl ButtonStyle? selectedStyle, ButtonStyle? invalidStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => FileSelectionButton( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index 8d326abf..85cccdcf 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class FileSelectionButtonThemeResolver extends ThemeResolver< diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index e5cf5093..123b91c2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -38,7 +38,7 @@ class FlatButton extends FlatButtonComponent super.tappedStyle, super.onPressed, super.mainAxisSize, - this.themeResolver, + super.themeResolver, super.key, }); @@ -62,7 +62,9 @@ class FlatButton extends FlatButtonComponent @override FlatButtonStyle? get tappedStyle => super.tappedStyle as FlatButtonStyle?; - final FlatButtonThemeResolver? themeResolver; + @override + FlatButtonThemeResolver? get themeResolver => + super.themeResolver as FlatButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index cf5fdf0f..2fb990d5 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -37,6 +37,10 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { FlatButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + FlatButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override FlatButton key(Key? key) => this(key: key); @override FlatButton call({ @@ -50,6 +54,7 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => FlatButton( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart index 3e125b21..c48c6b8e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class FlatButtonThemeResolver extends ThemeResolver + @override FlatButtonStyle computeDefaultValue( BuildContext context, { ControlState? extra, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart index 6913ab37..0322265a 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -35,7 +35,7 @@ class SimpleIconButton extends SimpleIconButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, - this.themeResolver, + super.themeResolver, super.key, }); @@ -64,7 +64,9 @@ class SimpleIconButton extends SimpleIconButtonComponent SimpleIconButtonStyle? get tappedStyle => super.tappedStyle as SimpleIconButtonStyle?; - final SimpleIconButtonThemeResolver? themeResolver; + @override + SimpleIconButtonThemeResolver? get themeResolver => + super.themeResolver as SimpleIconButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart index 31464a10..79bfba6a 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart @@ -31,6 +31,10 @@ class $SimpleIconButtonCWProxyImpl SimpleIconButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + SimpleIconButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override SimpleIconButton key(Key? key) => this(key: key); @override SimpleIconButton call({ @@ -41,6 +45,7 @@ class $SimpleIconButtonCWProxyImpl ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => SimpleIconButton( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart index a6dc37ba..5062d231 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class SimpleIconButtonThemeResolver extends ThemeResolver super.selectedStyle as SymbolButtonStyle?; - final SymbolButtonThemeResolver? themeResolver; + @override + SymbolButtonThemeResolver? get themeResolver => + super.themeResolver as SymbolButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart index 2f0fd363..c7e06ab2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart @@ -38,6 +38,10 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { SymbolButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + SymbolButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override SymbolButton key(Key? key) => this(key: key); @override SymbolButton call({ @@ -51,6 +55,7 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { ButtonStyle? tappedStyle, ButtonStyle? selectedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => SymbolButton( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart index ed446330..c0f21f63 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class SymbolButtonThemeResolver extends ThemeResolver - SymbolButtonStyle( - label: context.textTheme.labelLarge, - dimension: context.buttonTheme.height, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); + }) { + MultiColor backgroundColor = MultiColor.single(context.colorScheme.primary); + MultiColor foregroundColor = + MultiColor.single(context.colorScheme.onPrimary); + + switch (extra?.state) { + case ControlState.disabled: + backgroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.12)); + foregroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.38)); + break; + case ControlState.hovered: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case ControlState.tapped: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case null: + case ControlState.normal: + case ControlState.focused: + break; + } + + return SymbolButtonStyle( + label: context.textTheme.labelLarge, + dimension: context.buttonTheme.height, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: foregroundColor, + backgroundColors: backgroundColor, + ); + } @override final SymbolButtonStyle? Function( -- 2.47.2 From cc71bf7abdcbbc66a7abe1d6043ab731eb3febaa Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 21:07:53 +0100 Subject: [PATCH 121/320] feat(ui_kit): finalize material ready buttons --- .../example/lib/buttons/buttons.dart | 361 +----------------- .../file_selection_buttons.dart | 121 ++++++ .../lib/buttons/flat_button/flat_buttons.dart | 81 ++++ .../simple_icon_buttons.dart | 112 ++++++ .../buttons/symbol_button/symbol_buttons.dart | 126 ++++++ packages/wyatt_ui_kit/example/lib/main.dart | 12 +- .../example/lib/theme/constants.dart | 46 +++ .../example/lib/theme/flat_button_theme.dart | 151 ++++++++ .../lib/theme/symbol_button_theme.dart | 155 ++++++++ .../buttons/cubit/invalid_button_cubit.dart | 5 - .../file_selection_button_screen.dart | 5 +- .../file_selection_button_theme_resolver.dart | 53 ++- .../simple_icon_button_theme_resolver.dart | 46 ++- .../symbol_button_theme_resolver.dart | 2 +- 14 files changed, 898 insertions(+), 378 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart create mode 100644 packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart create mode 100644 packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart create mode 100644 packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme/constants.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 6b224ded..959cfbfd 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -16,28 +16,17 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; - -const _color1 = Color(0xFF3C97FB); -const _color2 = Color(0xFF446DF4); -const _color3 = Color.fromARGB(255, 26, 132, 247); -const _color4 = Color.fromARGB(255, 19, 68, 228); -const _colors = [_color1, _color2]; -const _colorsDarken = [_color3, _color4]; -const _disabled = Color(0xFF6B7280); -const _background = Color(0xFF16191D); -const _disabledBackground = Color(0xFF16191D + 0x66FFFFFF); -const _disabledColors = [Color(0xFF60656A), Color(0xFF383C40)]; -const _selectedColors = [Color(0xFF50CE99), Color(0xFF339572)]; -const _invalidColor = Color(0xFFFB5E3C); +import 'package:wyatt_ui_kit_example/buttons/file_selection_button/file_selection_buttons.dart'; +import 'package:wyatt_ui_kit_example/buttons/flat_button/flat_buttons.dart'; +import 'package:wyatt_ui_kit_example/buttons/simple_icon_button/simple_icon_buttons.dart'; +import 'package:wyatt_ui_kit_example/buttons/symbol_button/symbol_buttons.dart'; class Buttons extends StatelessWidget { const Buttons({super.key}); @override Widget build(BuildContext context) => ListView( - cacheExtent: 2000, + cacheExtent: 1000, children: [ const Gap(20), Align( @@ -47,337 +36,19 @@ class Buttons extends StatelessWidget { ), ), const Gap(20), - Center( - child: FlatButton( - label: const TextWrapper('Voir notre savoir faire'), - normalStyle: const FlatButtonStyle( - foregroundColors: MultiColor(_colors), - backgroundColors: MultiColor.single(Colors.transparent), - borderColors: MultiColor(_colors), - stroke: 3, - ), - hoveredStyle: const FlatButtonStyle( - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor(_colors), - borderColors: MultiColor(_colors), - stroke: 3, - ), - tappedStyle: const FlatButtonStyle( - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor(_colorsDarken), - borderColors: MultiColor(_colorsDarken), - stroke: 3, - ), - prefix: const Icon( - Icons.arrow_forward_rounded, - ), - suffix: const Icon( - Icons.arrow_forward_rounded, - ), - ), - ), - const Gap(20), - FlatButton( - label: TextWrapper( - 'Voir notre savoir faire', - style: - context.textTheme.titleLarge?.copyWith(color: Colors.white), - ), - normalStyle: const FlatButtonStyle( - backgroundColors: MultiColor(_colors), - ), - prefix: const Icon( - Icons.arrow_forward_rounded, - color: Colors.white, - ), - suffix: const Icon( - Icons.arrow_forward_rounded, - color: Colors.white, - ), - ), - const Gap(20), - ColoredBox( - color: _background, - child: Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Column( - children: [ - const Gap(20), - FlatButton( - label: TextWrapper( - 'Démarrer mon projet', - style: context.textTheme.titleLarge - ?.copyWith(color: _disabled), - ), - normalStyle: const FlatButtonStyle( - borderColors: MultiColor(_disabledColors), - backgroundColors: - MultiColor.single(_disabledBackground), - stroke: 1, - ), - ), - const Gap(20), - FlatButton( - label: TextWrapper( - 'Démarrer mon projet', - style: context.textTheme.titleLarge - ?.copyWith(color: Colors.white), - ), - normalStyle: const FlatButtonStyle( - backgroundColors: MultiColor(_colors), - ), - ), - const Gap(20), - ], - ), - const Gap(20), - Column( - children: [ - const Gap(20), - FlatButton( - label: TextWrapper( - 'Aller voir nos réalisations', - style: context.textTheme.titleLarge - ?.copyWith(color: Colors.white), - ), - normalStyle: const FlatButtonStyle( - borderColors: MultiColor(_colors), - backgroundColors: - MultiColor.single(_disabledBackground), - stroke: 3, - ), - suffix: const Icon( - Icons.arrow_forward_rounded, - color: Colors.white, - ), - ), - const Gap(20), - FlatButton( - label: TextWrapper( - 'Aller voir nos réalisations', - style: context.textTheme.titleLarge - ?.copyWith(color: Colors.white), - ), - normalStyle: const FlatButtonStyle( - backgroundColors: MultiColor(_colors), - ), - suffix: const Icon( - Icons.arrow_forward_rounded, - color: Colors.white, - ), - ), - const Gap(20), - ], - ), - ], - ), - ), - ), - const Gap(20), - FlatButton( - label: TextWrapper( - 'Démarrer mon projet', - style: - context.textTheme.titleLarge?.copyWith(color: Colors.white), - ), - disabledStyle: const FlatButtonStyle( - backgroundColors: MultiColor.single(Colors.blue), - ), - normalStyle: const FlatButtonStyle( - backgroundColors: MultiColor(_colors), - ), - hoveredStyle: const FlatButtonStyle( - backgroundColors: MultiColor.single(Colors.green), - ), - focusedStyle: const FlatButtonStyle( - backgroundColors: MultiColor.single(Colors.yellow), - ), - tappedStyle: const FlatButtonStyle( - backgroundColors: MultiColor.single(Colors.red), - ), - ), - const Gap(20), - ColoredBox( - color: _background, - child: Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Column( - children: [ - const Gap(20), - SymbolButton( - icon: const Icon( - Icons.android, - size: 25, - ), - label: const TextWrapper('Texte'), - normalStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: - MultiColor.single(_disabledBackground), - stroke: 1, - ), - hoveredStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_background), - stroke: 1, - ), - selectedStyle: const SymbolButtonStyle( - borderColors: MultiColor(_selectedColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: - MultiColor.single(_disabledBackground), - stroke: 1, - ), - ) - ..bloc.onClickUpIn() - ..bloc.freeze(), - const Gap(20), - SymbolButton( - icon: const Icon( - Icons.android, - size: 25, - ), - label: const TextWrapper('Texte'), - normalStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: - MultiColor.single(_disabledBackground), - stroke: 1, - ), - hoveredStyle: const SymbolButtonStyle( - borderColors: MultiColor(_disabledColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: MultiColor.single(_background), - stroke: 1, - ), - selectedStyle: const SymbolButtonStyle( - borderColors: MultiColor(_selectedColors), - foregroundColors: MultiColor.single(Colors.white), - backgroundColors: - MultiColor.single(_disabledBackground), - stroke: 1, - ), - )..bloc.freeze(), - const Gap(20), - ], - ), - const Gap(20), - Row( - children: [ - SimpleIconButton( - icon: const Icon( - Icons.storm_outlined, - size: 17, - ), - normalStyle: const SimpleIconButtonStyle( - backgroundColors: MultiColor.single(_disabled), - ), - hoveredStyle: SimpleIconButtonStyle( - backgroundColors: - MultiColor.single(_disabledColors.last), - ), - ), - const Gap(10), - SimpleIconButton( - icon: const Icon( - Icons.sunny, - size: 17, - ), - normalStyle: const SimpleIconButtonStyle( - backgroundColors: MultiColor.single(_disabled), - ), - hoveredStyle: SimpleIconButtonStyle( - backgroundColors: - MultiColor.single(_disabledColors.last), - ), - ), - const Gap(10), - SimpleIconButton( - icon: const Icon( - Icons.wechat, - size: 17, - ), - normalStyle: const SimpleIconButtonStyle( - backgroundColors: MultiColor.single(_disabled), - ), - hoveredStyle: SimpleIconButtonStyle( - backgroundColors: - MultiColor.single(_disabledColors.last), - ), - ) - ], - ), - const Gap(20), - Row( - children: [ - SymbolButton( - icon: const FlutterLogo( - size: 50, - ), - normalStyle: const SymbolButtonStyle( - dimension: 73, - backgroundColors: MultiColor.single(Colors.white), - ), - hoveredStyle: SymbolButtonStyle( - dimension: 73, - backgroundColors: MultiColor.single(Colors.grey[300]), - ), - ), - ], - ), - const Gap(20), - FileSelectionButton( - leading: const DecoratedBox( - decoration: BoxDecoration( - color: _disabled, - borderRadius: BorderRadius.all( - Radius.circular(5), - ), - ), - child: Padding( - padding: EdgeInsets.all(8), - child: Icon( - Icons.file_upload_outlined, - color: Colors.white, - ), - ), - ), - title: TextWrapper( - 'Ajouter un fichier', - style: Theme.of(context) - .textTheme - .titleLarge - ?.copyWith(color: _disabled), - ), - subTitle: TextWrapper.text('Taille max: 20 Mo'), - normalStyle: const FileSelectionButtonStyle( - backgroundColors: MultiColor.single(_disabledBackground), - foregroundColors: MultiColor.single(_disabled), - borderColors: MultiColor.single(_disabled), - ), - hoveredStyle: const FileSelectionButtonStyle( - backgroundColors: MultiColor.single(_disabledBackground), - foregroundColors: MultiColor.single(_disabled), - borderColors: MultiColor.single(Colors.white), - ), - invalidStyle: const FileSelectionButtonStyle( - backgroundColors: MultiColor.single(_disabledBackground), - foregroundColors: MultiColor.single(_invalidColor), - borderColors: MultiColor.single(_invalidColor), - ), - ) - ], - ), - ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + FlatButtons(), + Gap(20), + SymbolButtons(), + Gap(20), + SimpleIconButtons(), + ], ), const Gap(20), + const Align(child: FileSelectionButtons()), ], ); } diff --git a/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart new file mode 100644 index 00000000..0a2591d7 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart @@ -0,0 +1,121 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class FileSelectionButtons extends StatelessWidget { + const FileSelectionButtons({super.key}); + + Widget _leading() => const DecoratedBox( + decoration: BoxDecoration( + color: Constants.grey3, + borderRadius: BorderRadius.all( + Radius.circular(5), + ), + ), + child: Padding( + padding: EdgeInsets.all(8), + child: Icon( + Icons.file_upload_outlined, + color: Colors.white, + ), + ), + ); + + @override + Widget build(BuildContext context) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'FileSelection Buttons', + style: Theme.of(context).textTheme.titleMedium, + ), + const Gap(20), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Ajouter un fichier', + ), + subTitle: const TextWrapper('Taille max: 20 Mo'), + ), + const Gap(20), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Enabled', + ), + subTitle: const TextWrapper('Subtitle'), + ) + ..bloc.enable() + ..bloc.freeze(), + const Gap(20), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Disabled', + ), + subTitle: const TextWrapper('Subtitle'), + ) + ..bloc.disable() + ..bloc.freeze(), + const Gap(20), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Hovered', + ), + subTitle: const TextWrapper('Subtitle'), + ) + ..bloc.onMouseEnter() + ..bloc.freeze(), + const Gap(20), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Focused', + ), + subTitle: const TextWrapper('Subtitle'), + ) + ..bloc.onFocus() + ..bloc.freeze(), + const Gap(20), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Tapped', + ), + subTitle: const TextWrapper('Subtitle'), + ) + ..bloc.onClickDown() + ..bloc.freeze(), + const Gap(20), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Invalid', + ), + subTitle: const TextWrapper('Subtitle'), + ) + ..bloc.invalidate() + ..bloc.freeze(), + const Gap(20), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart new file mode 100644 index 00000000..2a4d684f --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart @@ -0,0 +1,81 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class FlatButtons extends StatelessWidget { + const FlatButtons({super.key}); + + @override + Widget build(BuildContext context) => Column( + children: [ + Text( + 'Flat Buttons', + style: Theme.of(context).textTheme.titleMedium, + ), + const Gap(20), + Center( + child: FlatButton( + label: const TextWrapper('Voir notre savoir faire'), + ), + ), + const Gap(20), + Center( + child: FlatButton( + label: const TextWrapper('Enabled'), + ) + ..bloc.enable() + ..bloc.freeze(), + ), + const Gap(20), + Center( + child: FlatButton( + label: const TextWrapper('Disabled'), + ) + ..bloc.disable() + ..bloc.freeze(), + ), + const Gap(20), + Center( + child: FlatButton( + label: const TextWrapper('Hovered'), + ) + ..bloc.onMouseEnter() + ..bloc.freeze(), + ), + const Gap(20), + Center( + child: FlatButton( + label: const TextWrapper('Focused'), + ) + ..bloc.onFocus() + ..bloc.freeze(), + ), + const Gap(20), + Center( + child: FlatButton( + label: const TextWrapper('Tapped'), + ) + ..bloc.onClickDown() + ..bloc.freeze(), + ), + const Gap(20), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart new file mode 100644 index 00000000..1de93f70 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart @@ -0,0 +1,112 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class SimpleIconButtons extends StatelessWidget { + const SimpleIconButtons({super.key}); + + @override + Widget build(BuildContext context) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'SimpleIcon Buttons', + style: Theme.of(context).textTheme.titleMedium, + ), + const Gap(20), + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + ), + const Gap(20), + Text( + 'Enabled', + style: Theme.of(context).textTheme.labelMedium, + ), + const Gap(10), + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + ) + ..bloc.enable() + ..bloc.freeze(), + const Gap(20), + Text( + 'Disabled', + style: Theme.of(context).textTheme.labelMedium, + ), + const Gap(10), + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + ) + ..bloc.disable() + ..bloc.freeze(), + const Gap(20), + Text( + 'Hovered', + style: Theme.of(context).textTheme.labelMedium, + ), + const Gap(10), + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + ) + ..bloc.onMouseEnter() + ..bloc.freeze(), + const Gap(20), + Text( + 'Focused', + style: Theme.of(context).textTheme.labelMedium, + ), + const Gap(10), + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + ) + ..bloc.onFocus() + ..bloc.freeze(), + const Gap(20), + Text( + 'Tapped', + style: Theme.of(context).textTheme.labelMedium, + ), + const Gap(10), + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + ) + ..bloc.onClickDown() + ..bloc.freeze(), + const Gap(20), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart new file mode 100644 index 00000000..ab426769 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart @@ -0,0 +1,126 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class SymbolButtons extends StatelessWidget { + const SymbolButtons({super.key}); + + @override + Widget build(BuildContext context) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Symbol Buttons', + style: Theme.of(context).textTheme.titleMedium, + ), + const Gap(20), + SymbolButton( + label: const TextWrapper('Text'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ), + const Gap(20), + SymbolButton( + label: const TextWrapper('Enabled'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ) + ..bloc.enable() + ..bloc.freeze(), + const Gap(20), + SymbolButton( + label: const TextWrapper('Disabled'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ) + ..bloc.disable() + ..bloc.freeze(), + const Gap(20), + SymbolButton( + label: const TextWrapper('Hovered'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ) + ..bloc.onMouseEnter() + ..bloc.freeze(), + const Gap(20), + SymbolButton( + label: const TextWrapper('Focused'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ) + ..bloc.onFocus() + ..bloc.freeze(), + const Gap(20), + SymbolButton( + label: const TextWrapper('Tapped'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ) + ..bloc.onClickDown() + ..bloc.freeze(), + const Gap(20), + SymbolButton( + label: const TextWrapper('Selected'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ) + ..bloc.select() + ..bloc.freeze(), + const Gap(20), + DecoratedBox( + decoration: BoxDecoration( + border: Border.all(color: Constants.red1), + ), + child: SymbolButton( + label: const TextWrapper('Trigger zone'), + icon: const Icon( + Icons.android, + size: 25, + color: Constants.white, + ), + ), + ), + const Gap(20), + ], + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/main.dart b/packages/wyatt_ui_kit/example/lib/main.dart index 48398c02..1776ee88 100644 --- a/packages/wyatt_ui_kit/example/lib/main.dart +++ b/packages/wyatt_ui_kit/example/lib/main.dart @@ -23,9 +23,11 @@ import 'package:wyatt_ui_kit_example/theme_extension.dart'; void main(List args) { const forcePage = int.fromEnvironment('PAGE'); - runApp(const App( - defaultPage: forcePage, - ),); + runApp( + const App( + defaultPage: forcePage, + ), + ); } class App extends StatelessWidget { @@ -74,6 +76,8 @@ class App extends StatelessWidget { color: const Color.fromRGBO(36, 38, 42, 1), ), ), + // FlatButtonTheme.light(), + // SymbolButtonTheme.light(), ], ), dark: ThemeData.dark().copyWith( @@ -114,6 +118,8 @@ class App extends StatelessWidget { color: Colors.white, ), ), + // FlatButtonTheme.dark(), + // SymbolButtonTheme.dark(), ], ), builder: (light, dark) => MaterialApp( diff --git a/packages/wyatt_ui_kit/example/lib/theme/constants.dart b/packages/wyatt_ui_kit/example/lib/theme/constants.dart new file mode 100644 index 00000000..33152394 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/constants.dart @@ -0,0 +1,46 @@ +// 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 . + +import 'package:flutter/widgets.dart'; + +abstract class Constants { + static const white = Color(0xFFFFFFFF); + static const dark = Color(0xFF383C40); + + static const blue1 = Color(0xFF3C97FB); + static const blue2 = Color(0xFF446DF4); + static const blue3 = Color(0xFF1A84F7); + static const blue4 = Color(0xFF1344E4); + + static const grey1 = Color(0xFF60656A); + static const grey2 = Color(0xFF383C40); + + static const grey3 = Color(0xFF16191D); + static const grey4 = Color(0xFF33373E); + + static const green1 = Color(0xFF50CE99); + static const green2 = Color(0xFF339572); + + static const red1 = Color(0xFFFB5E3C); + static const red2 = Color(0xFFF44464); + + static const blueGradient = [blue1, blue2]; + static const blueDarkGradient = [blue3, blue4]; + static const greyGradient = [grey1, grey2]; + static const greyDarkGradient = [grey3, grey4]; + static const greenGradient = [green1, green2]; + static const redGradient = [red1, red2]; +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart new file mode 100644 index 00000000..71c5e792 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart @@ -0,0 +1,151 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class FlatButtonTheme extends FlatButtonThemeExtension { + const FlatButtonTheme({ + super.disabledStyle, + super.focusedStyle, + super.hoveredStyle, + super.normalStyle, + super.tappedStyle, + }); + + factory FlatButtonTheme.light() { + final style = FlatButtonStyle( + label: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + radius: BorderRadius.circular(15), + padding: const EdgeInsets.all(10), + foregroundColors: const MultiColor(Constants.blueGradient), + backgroundColors: const MultiColor.single(Constants.white), + borderColors: const MultiColor(Constants.blueGradient), + stroke: 3, + ); + return FlatButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w600, + color: Constants.blue1.withOpacity(0.4), + ), + foregroundColors: MultiColor.single(Constants.blue1.withOpacity(0.4)), + backgroundColors: const MultiColor.single(Constants.white), + borderColors: MultiColor.single(Constants.blue1.withOpacity(0.4)), + stroke: 1, + ), + hoveredStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w600, + color: Constants.white, + ), + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: const MultiColor(Constants.blueGradient), + ), + tappedStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w600, + color: Constants.white, + ), + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: const MultiColor(Constants.blueDarkGradient), + borderColors: const MultiColor(Constants.blueDarkGradient), + ), + ); + } + + factory FlatButtonTheme.dark() { + final style = FlatButtonStyle( + label: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + radius: BorderRadius.circular(15), + padding: const EdgeInsets.all(10), + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: const MultiColor.single(Constants.dark), + borderColors: const MultiColor(Constants.blueGradient), + stroke: 3, + ); + return FlatButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w600, + color: Constants.grey1, + ), + foregroundColors: const MultiColor.single(Constants.grey1), + backgroundColors: const MultiColor.single(Constants.grey4), + borderColors: const MultiColor(Constants.greyGradient), + stroke: 1, + ), + hoveredStyle: style.copyWith( + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: const MultiColor(Constants.blueGradient), + ), + tappedStyle: style.copyWith( + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: const MultiColor(Constants.blueDarkGradient), + borderColors: const MultiColor(Constants.blueDarkGradient), + ), + ); + } + + @override + ThemeExtension copyWith({ + FlatButtonStyle? disabledStyle, + FlatButtonStyle? focusedStyle, + FlatButtonStyle? hoveredStyle, + FlatButtonStyle? normalStyle, + FlatButtonStyle? tappedStyle, + }) => + FlatButtonTheme( + disabledStyle: disabledStyle ?? this.disabledStyle, + focusedStyle: focusedStyle ?? this.focusedStyle, + hoveredStyle: hoveredStyle ?? this.hoveredStyle, + normalStyle: normalStyle ?? this.normalStyle, + tappedStyle: tappedStyle ?? this.tappedStyle, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! FlatButtonTheme) { + return this; + } + return FlatButtonTheme( + disabledStyle: + FlatButtonStyle.lerp(disabledStyle, other.disabledStyle, t), + focusedStyle: FlatButtonStyle.lerp(focusedStyle, other.focusedStyle, t), + hoveredStyle: FlatButtonStyle.lerp(hoveredStyle, other.hoveredStyle, t), + normalStyle: FlatButtonStyle.lerp(normalStyle, other.normalStyle, t), + tappedStyle: FlatButtonStyle.lerp(tappedStyle, other.tappedStyle, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart new file mode 100644 index 00000000..6d181638 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart @@ -0,0 +1,155 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class SymbolButtonTheme extends SymbolButtonThemeExtension { + const SymbolButtonTheme({ + super.disabledStyle, + super.focusedStyle, + super.hoveredStyle, + super.normalStyle, + super.tappedStyle, + super.selectedStyle, + }); + + factory SymbolButtonTheme.light() { + final style = SymbolButtonStyle( + label: GoogleFonts.montserrat( + fontSize: 14, + fontWeight: FontWeight.w400, + ), + dimension: 60, + radius: BorderRadius.circular(12), + padding: const EdgeInsets.all(10), + foregroundColors: const MultiColor.single(Constants.grey2), + backgroundColors: MultiColor.single(Constants.white.withOpacity(0.04)), + borderColors: const MultiColor(Constants.greyGradient), + stroke: 2, + ); + return SymbolButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 14, + fontWeight: FontWeight.w400, + color: Constants.grey1, + ), + foregroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + backgroundColors: const MultiColor.single(Constants.white), + borderColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + ), + hoveredStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + ), + tappedStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + ), + selectedStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 14, + fontWeight: FontWeight.w600, + ), + foregroundColors: const MultiColor.single(Constants.grey2), + borderColors: const MultiColor(Constants.greenGradient), + ), + ); + } + + factory SymbolButtonTheme.dark() { + final style = SymbolButtonStyle( + label: GoogleFonts.montserrat( + fontSize: 14, + fontWeight: FontWeight.w400, + ), + dimension: 60, + radius: BorderRadius.circular(12), + padding: const EdgeInsets.all(10), + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: MultiColor.single(Constants.white.withOpacity(0.04)), + borderColors: const MultiColor(Constants.greyGradient), + stroke: 2, + ); + return SymbolButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 14, + fontWeight: FontWeight.w400, + color: Constants.grey1, + ), + foregroundColors: const MultiColor.single(Constants.grey1), + backgroundColors: const MultiColor.single(Constants.grey4), + ), + hoveredStyle: style.copyWith( + backgroundColors: const MultiColor(Constants.greyDarkGradient), + ), + tappedStyle: style.copyWith( + backgroundColors: const MultiColor(Constants.greyDarkGradient), + ), + selectedStyle: style.copyWith( + label: GoogleFonts.montserrat( + fontSize: 14, + fontWeight: FontWeight.w600, + ), + foregroundColors: const MultiColor.single(Constants.white), + borderColors: const MultiColor(Constants.greenGradient), + ), + ); + } + + @override + ThemeExtension copyWith({ + SymbolButtonStyle? disabledStyle, + SymbolButtonStyle? focusedStyle, + SymbolButtonStyle? hoveredStyle, + SymbolButtonStyle? normalStyle, + SymbolButtonStyle? tappedStyle, + SymbolButtonStyle? selectedStyle, + }) => + SymbolButtonTheme( + disabledStyle: disabledStyle ?? this.disabledStyle, + focusedStyle: focusedStyle ?? this.focusedStyle, + hoveredStyle: hoveredStyle ?? this.hoveredStyle, + normalStyle: normalStyle ?? this.normalStyle, + tappedStyle: tappedStyle ?? this.tappedStyle, + selectedStyle: selectedStyle ?? this.selectedStyle, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! SymbolButtonTheme) { + return this; + } + return SymbolButtonTheme( + disabledStyle: + SymbolButtonStyle.lerp(disabledStyle, other.disabledStyle, t), + focusedStyle: SymbolButtonStyle.lerp(focusedStyle, other.focusedStyle, t), + hoveredStyle: SymbolButtonStyle.lerp(hoveredStyle, other.hoveredStyle, t), + normalStyle: SymbolButtonStyle.lerp(normalStyle, other.normalStyle, t), + tappedStyle: SymbolButtonStyle.lerp(tappedStyle, other.tappedStyle, t), + selectedStyle: + SymbolButtonStyle.lerp(selectedStyle, other.selectedStyle, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart index e90832d8..30626192 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'dart:async'; -import 'dart:math'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; @@ -30,8 +29,6 @@ class InvalidButtonCubit extends ButtonCubit { emit( state.copyWith( state: ControlState.hovered, - // TODO(hpcl): change this - invalid: Random().nextBool(), ), ); } @@ -45,8 +42,6 @@ class InvalidButtonCubit extends ButtonCubit { emit( state.copyWith( state: ControlState.normal, - // TODO(hpcl): change this - invalid: Random().nextBool(), ), ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index a8a121bc..999232a7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -218,7 +218,6 @@ class FileSelectionButtonScreen padding: style.padding ?? EdgeInsets.zero, child: Row( mainAxisSize: mainAxisSize ?? MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ if (leading != null) ...[ leading ?? const SizedBox.shrink(), @@ -240,7 +239,7 @@ class FileSelectionButtonScreen /// /// More infos in `negociate()` method if (title != null) ...[ - Gap(style.padding?.horizontal ?? 10), + Gap(style.padding?.vertical ?? 10), Text( title!.text, style: title!.style ?? style.title, @@ -267,7 +266,7 @@ class FileSelectionButtonScreen /// /// More infos in `negociate()` method if (subTitle != null) ...[ - Gap(style.padding?.horizontal ?? 10), + Gap(style.padding?.vertical ?? 10), Text( subTitle!.text, style: subTitle!.style ?? style.subTitle, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index 85cccdcf..7c1f9634 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -30,17 +30,48 @@ class FileSelectionButtonThemeResolver extends ThemeResolver< FileSelectionButtonStyle computeDefaultValue( BuildContext context, { ButtonState? extra, - }) => - FileSelectionButtonStyle( - title: context.textTheme.labelLarge, - subTitle: context.textTheme.labelSmall, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); + }) { + MultiColor backgroundColor = MultiColor.single(context.colorScheme.primary); + MultiColor foregroundColor = + MultiColor.single(context.colorScheme.onPrimary); + + switch (extra?.state) { + case ControlState.disabled: + backgroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.12)); + foregroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.38)); + break; + case ControlState.hovered: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case ControlState.tapped: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case null: + case ControlState.normal: + case ControlState.focused: + break; + } + + if (extra?.isInvalid ?? false) { + backgroundColor = + MultiColor.single(context.colorScheme.error); + } + + return FileSelectionButtonStyle( + title: context.textTheme.labelLarge, + subTitle: context.textTheme.labelSmall, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: const EdgeInsets.symmetric(horizontal: 10), + foregroundColors: foregroundColor, + backgroundColors: backgroundColor, + ); + } @override final FileSelectionButtonStyle? Function( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart index 5062d231..7de436bd 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart @@ -29,16 +29,42 @@ class SimpleIconButtonThemeResolver extends ThemeResolver - SimpleIconButtonStyle( - dimension: context.buttonTheme.height, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); + }) { + MultiColor backgroundColor = MultiColor.single(context.colorScheme.primary); + MultiColor foregroundColor = + MultiColor.single(context.colorScheme.onPrimary); + + switch (extra) { + case ControlState.disabled: + backgroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.12)); + foregroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.38)); + break; + case ControlState.hovered: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case ControlState.tapped: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case null: + case ControlState.normal: + case ControlState.focused: + break; + } + + return SimpleIconButtonStyle( + dimension: context.buttonTheme.height, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: EdgeInsets.zero, + foregroundColors: foregroundColor, + backgroundColors: backgroundColor, + ); + } @override final SimpleIconButtonStyle? Function( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart index c0f21f63..8d679e22 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart @@ -58,7 +58,7 @@ class SymbolButtonThemeResolver extends ThemeResolver Date: Wed, 15 Feb 2023 21:45:46 +0100 Subject: [PATCH 122/320] feat(ui_kit): add theme control in example --- packages/wyatt_ui_kit/example/README.md | 4 +- packages/wyatt_ui_kit/example/lib/home.dart | 38 ++++- packages/wyatt_ui_kit/example/lib/main.dart | 95 +---------- .../example/lib/theme/themes.dart | 152 ++++++++++++++++++ 4 files changed, 193 insertions(+), 96 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/theme/themes.dart diff --git a/packages/wyatt_ui_kit/example/README.md b/packages/wyatt_ui_kit/example/README.md index 510ce200..2a7d7923 100644 --- a/packages/wyatt_ui_kit/example/README.md +++ b/packages/wyatt_ui_kit/example/README.md @@ -3,7 +3,7 @@ You can force the launch page. (For debug purposes). ```shell -flutter run -d macos --dart-define PAGE=1 +flutter run -d macos --dart-define PAGE=1 --dart-define THEME=1 ``` -> This will forces button page. \ No newline at end of file +> This will forces `Buttons` page with `Studio` theme \ No newline at end of file diff --git a/packages/wyatt_ui_kit/example/lib/home.dart b/packages/wyatt_ui_kit/example/lib/home.dart index 69ab4cec..9e156207 100644 --- a/packages/wyatt_ui_kit/example/lib/home.dart +++ b/packages/wyatt_ui_kit/example/lib/home.dart @@ -1,7 +1,9 @@ import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; import 'package:wyatt_ui_kit_example/buttons/buttons.dart'; import 'package:wyatt_ui_kit_example/cards/cards.dart'; +import 'package:wyatt_ui_kit_example/theme/themes.dart'; const String title = 'Wyatt UIKit Example'; @@ -59,13 +61,35 @@ class _HomeState extends State { appBar: AppBar( title: const Text(title), actions: [ - Switch.adaptive( - value: AdaptiveTheme.of(context).isDefault, - onChanged: (_) { - AdaptiveTheme.of(context).isDefault - ? AdaptiveTheme.of(context).setDark() - : AdaptiveTheme.of(context).setLight(); - }, + Row( + children: [ + const Text('Mode'), + Switch.adaptive( + value: + AdaptiveTheme.of(context).brightness == Brightness.dark, + onChanged: (_) { + AdaptiveTheme.of(context).brightness == Brightness.light + ? AdaptiveTheme.of(context).setDark() + : AdaptiveTheme.of(context).setLight(); + }, + ), + ], + ), + const Gap(30), + Row( + children: [ + const Text('Studio'), + Switch.adaptive( + value: Themes.currentThemeIndex == 1, + onChanged: (_) { + setState(() { + Themes.currentThemeIndex = + (Themes.currentThemeIndex == 1) ? 0 : 1; + }); + Themes.auto(context); + }, + ), + ], ) ], ), diff --git a/packages/wyatt_ui_kit/example/lib/main.dart b/packages/wyatt_ui_kit/example/lib/main.dart index 1776ee88..12d39646 100644 --- a/packages/wyatt_ui_kit/example/lib/main.dart +++ b/packages/wyatt_ui_kit/example/lib/main.dart @@ -17,111 +17,32 @@ import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:wyatt_ui_kit_example/home.dart'; -import 'package:wyatt_ui_kit_example/theme_extension.dart'; +import 'package:wyatt_ui_kit_example/theme/themes.dart'; void main(List args) { const forcePage = int.fromEnvironment('PAGE'); + const forceTheme = int.fromEnvironment('THEME'); + Themes.currentThemeIndex = forceTheme; runApp( const App( defaultPage: forcePage, + defaultTheme: forceTheme, ), ); } class App extends StatelessWidget { - const App({required this.defaultPage, super.key}); + const App({required this.defaultPage, required this.defaultTheme, super.key}); final int defaultPage; + final int defaultTheme; @override Widget build(BuildContext context) => AdaptiveTheme( initial: AdaptiveThemeMode.light, - light: ThemeData.light().copyWith( - appBarTheme: AppBarTheme( - foregroundColor: const Color.fromRGBO(36, 38, 42, 1), - backgroundColor: Colors.white, - titleTextStyle: GoogleFonts.montserrat( - fontSize: 18, - fontWeight: FontWeight.w500, - color: const Color.fromRGBO(36, 38, 42, 1), - ), - ), - scaffoldBackgroundColor: Colors.white, - extensions: >[ - CustomCardColorExtension( - backgroundColors: const [ - Color.fromRGBO(246, 246, 246, 1), - ], - secondaryBackgroundColors: Colors.white, - borderColor: const [ - Color.fromRGBO(221, 224, 227, 1), - Color.fromRGBO(202, 204, 212, 1), - ], - title: GoogleFonts.montserrat( - fontSize: 24, - fontWeight: FontWeight.w500, - color: const Color.fromRGBO(36, 38, 42, 1), - ), - subtitle: GoogleFonts.montserrat( - fontSize: 15, - fontWeight: FontWeight.w300, - color: const Color.fromRGBO(36, 38, 42, 1), - ), - body: GoogleFonts.montserrat( - fontSize: 12, - fontWeight: FontWeight.w300, - height: 1.7, - color: const Color.fromRGBO(36, 38, 42, 1), - ), - ), - // FlatButtonTheme.light(), - // SymbolButtonTheme.light(), - ], - ), - dark: ThemeData.dark().copyWith( - appBarTheme: AppBarTheme( - foregroundColor: Colors.white, - backgroundColor: const Color.fromRGBO(56, 60, 64, 1), - titleTextStyle: GoogleFonts.montserrat( - fontSize: 18, - fontWeight: FontWeight.w500, - color: Colors.white, - ), - ), - scaffoldBackgroundColor: const Color.fromRGBO(56, 60, 64, 1), - extensions: >[ - CustomCardColorExtension( - secondaryBackgroundColors: Colors.white.withOpacity(0.04), - backgroundColors: [ - Colors.white.withOpacity(0.04), - ], - borderColor: const [ - Color.fromRGBO(96, 101, 106, 1), - Color.fromRGBO(56, 60, 64, 1), - ], - title: GoogleFonts.montserrat( - fontSize: 24, - fontWeight: FontWeight.w500, - color: Colors.white, - ), - subtitle: GoogleFonts.montserrat( - fontSize: 15, - fontWeight: FontWeight.w300, - color: Colors.white, - ), - body: GoogleFonts.montserrat( - fontSize: 12, - fontWeight: FontWeight.w300, - height: 1.7, - color: Colors.white, - ), - ), - // FlatButtonTheme.dark(), - // SymbolButtonTheme.dark(), - ], - ), + light: Themes.lightFromTheme(defaultTheme), + dark: Themes.darkFromTheme(defaultTheme), builder: (light, dark) => MaterialApp( localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart new file mode 100644 index 00000000..62128247 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -0,0 +1,152 @@ +// 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 . + +import 'package:adaptive_theme/adaptive_theme.dart'; +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_kit_example/theme/flat_button_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; +import 'package:wyatt_ui_kit_example/theme_extension.dart'; + +/// Easely switch between Material and Studio themes. +abstract class Themes { + static int currentThemeIndex = 0; + + static List> themes = [ + {materialLight, materialDark}, + {studioLight, studioDark}, + ]; + + static ThemeData lightFromTheme(int themeId) { + currentThemeIndex = themeId; + return themes[themeId].first; + } + static ThemeData darkFromTheme(int themeId) { + currentThemeIndex = themeId; + return themes[themeId].last; + } + + static void auto(BuildContext context) { + if (currentThemeIndex == 1) { + return studio(context); + } + return material(context); + } + + static void material(BuildContext context) { + AdaptiveTheme.of(context).setTheme( + light: materialLight, + dark: materialDark, + ); + } + + static void studio(BuildContext context) { + AdaptiveTheme.of(context).setTheme( + light: studioLight, + dark: studioDark, + ); + } + + static ThemeData get materialLight => ThemeData.light(); + + static ThemeData get studioLight => materialLight.copyWith( + appBarTheme: AppBarTheme( + foregroundColor: const Color.fromRGBO(36, 38, 42, 1), + backgroundColor: Colors.white, + titleTextStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: const Color.fromRGBO(36, 38, 42, 1), + ), + ), + scaffoldBackgroundColor: Colors.white, + extensions: >[ + CustomCardColorExtension( + backgroundColors: const [ + Color.fromRGBO(246, 246, 246, 1), + ], + secondaryBackgroundColors: Colors.white, + borderColor: const [ + Color.fromRGBO(221, 224, 227, 1), + Color.fromRGBO(202, 204, 212, 1), + ], + title: GoogleFonts.montserrat( + fontSize: 24, + fontWeight: FontWeight.w500, + color: const Color.fromRGBO(36, 38, 42, 1), + ), + subtitle: GoogleFonts.montserrat( + fontSize: 15, + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(36, 38, 42, 1), + ), + body: GoogleFonts.montserrat( + fontSize: 12, + fontWeight: FontWeight.w300, + height: 1.7, + color: const Color.fromRGBO(36, 38, 42, 1), + ), + ), + FlatButtonTheme.light(), + SymbolButtonTheme.light(), + ], + ); + + static ThemeData get materialDark => ThemeData.dark(); + + static ThemeData get studioDark => materialDark.copyWith( + appBarTheme: AppBarTheme( + foregroundColor: Colors.white, + backgroundColor: const Color.fromRGBO(56, 60, 64, 1), + titleTextStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + ), + scaffoldBackgroundColor: const Color.fromRGBO(56, 60, 64, 1), + extensions: >[ + CustomCardColorExtension( + secondaryBackgroundColors: Colors.white.withOpacity(0.04), + backgroundColors: [ + Colors.white.withOpacity(0.04), + ], + borderColor: const [ + Color.fromRGBO(96, 101, 106, 1), + Color.fromRGBO(56, 60, 64, 1), + ], + title: GoogleFonts.montserrat( + fontSize: 24, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + subtitle: GoogleFonts.montserrat( + fontSize: 15, + fontWeight: FontWeight.w300, + color: Colors.white, + ), + body: GoogleFonts.montserrat( + fontSize: 12, + fontWeight: FontWeight.w300, + height: 1.7, + color: Colors.white, + ), + ), + FlatButtonTheme.dark(), + SymbolButtonTheme.dark(), + ], + ); +} -- 2.47.2 From a59518310765075aadb9c85445b78cbd600a8b5d Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 22:35:31 +0100 Subject: [PATCH 123/320] fix(ui_component): fix extra value in compute extension function --- .../lib/src/core/utils/theme_resolver.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index 08c04a3b..cc14f747 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -53,7 +53,12 @@ abstract class ThemeResolver { }) { final themeExtension = findExtension(context); if (themeExtension != null) { - return computeExtensionValueFn(context, defaultValue, themeExtension); + return computeExtensionValueFn( + context, + defaultValue, + themeExtension, + extra: extra, + ); } return defaultValue; } -- 2.47.2 From dd198b0e516bea9fd2d6be03bc4c4f67c06c5ae8 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 22:36:26 +0100 Subject: [PATCH 124/320] feat(ui_kit): update example with full studio button theme --- .../file_selection_buttons.dart | 2 +- .../buttons/symbol_button/symbol_buttons.dart | 56 ++---- .../theme/file_selection_button_theme.dart | 172 ++++++++++++++++++ .../example/lib/theme/flat_button_theme.dart | 2 + .../lib/theme/simple_icon_button_theme.dart | 114 ++++++++++++ .../lib/theme/symbol_button_theme.dart | 2 + .../example/lib/theme/themes.dart | 9 +- .../file_selection_button_screen.dart | 5 +- 8 files changed, 317 insertions(+), 45 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme/simple_icon_button_theme.dart diff --git a/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart index 0a2591d7..0f398c13 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart @@ -25,7 +25,7 @@ class FileSelectionButtons extends StatelessWidget { Widget _leading() => const DecoratedBox( decoration: BoxDecoration( - color: Constants.grey3, + color: Constants.grey2, borderRadius: BorderRadius.all( Radius.circular(5), ), diff --git a/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart index ab426769..54aa9cb5 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart @@ -23,6 +23,14 @@ import 'package:wyatt_ui_kit_example/theme/constants.dart'; class SymbolButtons extends StatelessWidget { const SymbolButtons({super.key}); + Icon _icon(BuildContext context) => Icon( + Icons.android, + size: 25, + color: (Theme.of(context).colorScheme.brightness == Brightness.light) + ? Constants.dark + : Constants.white, + ); + @override Widget build(BuildContext context) => Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -34,75 +42,47 @@ class SymbolButtons extends StatelessWidget { const Gap(20), SymbolButton( label: const TextWrapper('Text'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ), const Gap(20), SymbolButton( label: const TextWrapper('Enabled'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ) ..bloc.enable() ..bloc.freeze(), const Gap(20), SymbolButton( label: const TextWrapper('Disabled'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ) ..bloc.disable() ..bloc.freeze(), const Gap(20), SymbolButton( label: const TextWrapper('Hovered'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ) ..bloc.onMouseEnter() ..bloc.freeze(), const Gap(20), SymbolButton( label: const TextWrapper('Focused'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ) ..bloc.onFocus() ..bloc.freeze(), const Gap(20), SymbolButton( label: const TextWrapper('Tapped'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ) ..bloc.onClickDown() ..bloc.freeze(), const Gap(20), SymbolButton( label: const TextWrapper('Selected'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ) ..bloc.select() ..bloc.freeze(), @@ -113,11 +93,7 @@ class SymbolButtons extends StatelessWidget { ), child: SymbolButton( label: const TextWrapper('Trigger zone'), - icon: const Icon( - Icons.android, - size: 25, - color: Constants.white, - ), + icon: _icon(context), ), ), const Gap(20), diff --git a/packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart new file mode 100644 index 00000000..cad4f2ea --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart @@ -0,0 +1,172 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class FileSelectionButtonTheme extends FileSelectionButtonThemeExtension { + const FileSelectionButtonTheme({ + super.disabledStyle, + super.focusedStyle, + super.hoveredStyle, + super.normalStyle, + super.tappedStyle, + super.selectedStyle, + super.invalidStyle, + }); + + factory FileSelectionButtonTheme.light() { + final style = FileSelectionButtonStyle( + title: GoogleFonts.montserrat( + fontSize: 16, + fontWeight: FontWeight.w400, + ), + subTitle: GoogleFonts.montserrat( + fontSize: 11, + fontWeight: FontWeight.w400, + ), + radius: BorderRadius.circular(12), + padding: const EdgeInsets.all(10), + foregroundColors: const MultiColor.single(Constants.grey2), + backgroundColors: MultiColor.single(Constants.white.withOpacity(0.04)), + borderColors: const MultiColor(Constants.greyGradient), + stroke: 2, + ); + return FileSelectionButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + foregroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + backgroundColors: const MultiColor.single(Constants.white), + borderColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + ), + hoveredStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + ), + focusedStyle: style.copyWith(stroke: 4), + tappedStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + ), + invalidStyle: style.copyWith( + subTitle: GoogleFonts.montserrat( + fontSize: 11, + fontWeight: FontWeight.w400, + color: Constants.red1, + ), + borderColors: const MultiColor(Constants.redGradient), + ), + // Unused + selectedStyle: style.copyWith( + foregroundColors: const MultiColor.single(Constants.grey2), + borderColors: const MultiColor(Constants.greenGradient), + ), + ); + } + + factory FileSelectionButtonTheme.dark() { + final style = FileSelectionButtonStyle( + title: GoogleFonts.montserrat( + fontSize: 16, + fontWeight: FontWeight.w400, + ), + subTitle: GoogleFonts.montserrat( + fontSize: 11, + fontWeight: FontWeight.w400, + ), + radius: BorderRadius.circular(12), + padding: const EdgeInsets.all(13), + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: MultiColor.single(Constants.white.withOpacity(0.04)), + borderColors: const MultiColor(Constants.greyGradient), + stroke: 1, + ); + return FileSelectionButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + foregroundColors: const MultiColor.single(Constants.grey1), + backgroundColors: const MultiColor.single(Constants.grey4), + ), + hoveredStyle: style.copyWith( + borderColors: const MultiColor.single(Constants.white), + ), + focusedStyle: style.copyWith(stroke: 3), + tappedStyle: style.copyWith( + backgroundColors: const MultiColor(Constants.greyDarkGradient), + ), + invalidStyle: style.copyWith( + subTitle: GoogleFonts.montserrat( + fontSize: 11, + fontWeight: FontWeight.w400, + color: Constants.red1, + ), + borderColors: const MultiColor(Constants.redGradient), + ), + // Unused + selectedStyle: style.copyWith( + foregroundColors: const MultiColor.single(Constants.white), + borderColors: const MultiColor(Constants.greenGradient), + ), + ); + } + + @override + ThemeExtension copyWith({ + FileSelectionButtonStyle? disabledStyle, + FileSelectionButtonStyle? focusedStyle, + FileSelectionButtonStyle? hoveredStyle, + FileSelectionButtonStyle? normalStyle, + FileSelectionButtonStyle? tappedStyle, + FileSelectionButtonStyle? selectedStyle, + FileSelectionButtonStyle? invalidStyle, + }) => + FileSelectionButtonTheme( + disabledStyle: disabledStyle ?? this.disabledStyle, + focusedStyle: focusedStyle ?? this.focusedStyle, + hoveredStyle: hoveredStyle ?? this.hoveredStyle, + normalStyle: normalStyle ?? this.normalStyle, + tappedStyle: tappedStyle ?? this.tappedStyle, + selectedStyle: selectedStyle ?? this.selectedStyle, + invalidStyle: invalidStyle ?? this.invalidStyle, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! FileSelectionButtonTheme) { + return this; + } + return FileSelectionButtonTheme( + disabledStyle: + FileSelectionButtonStyle.lerp(disabledStyle, other.disabledStyle, t), + focusedStyle: + FileSelectionButtonStyle.lerp(focusedStyle, other.focusedStyle, t), + hoveredStyle: + FileSelectionButtonStyle.lerp(hoveredStyle, other.hoveredStyle, t), + normalStyle: + FileSelectionButtonStyle.lerp(normalStyle, other.normalStyle, t), + tappedStyle: + FileSelectionButtonStyle.lerp(tappedStyle, other.tappedStyle, t), + selectedStyle: + FileSelectionButtonStyle.lerp(selectedStyle, other.selectedStyle, t), + invalidStyle: + FileSelectionButtonStyle.lerp(invalidStyle, other.invalidStyle, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart index 71c5e792..8b8768e0 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/flat_button_theme.dart @@ -64,6 +64,7 @@ class FlatButtonTheme extends FlatButtonThemeExtension { foregroundColors: const MultiColor.single(Constants.white), backgroundColors: const MultiColor(Constants.blueGradient), ), + focusedStyle: style.copyWith(stroke: 5), tappedStyle: style.copyWith( label: GoogleFonts.montserrat( fontSize: 18, @@ -107,6 +108,7 @@ class FlatButtonTheme extends FlatButtonThemeExtension { foregroundColors: const MultiColor.single(Constants.white), backgroundColors: const MultiColor(Constants.blueGradient), ), + focusedStyle: style.copyWith(stroke: 5), tappedStyle: style.copyWith( foregroundColors: const MultiColor.single(Constants.white), backgroundColors: const MultiColor(Constants.blueDarkGradient), diff --git a/packages/wyatt_ui_kit/example/lib/theme/simple_icon_button_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/simple_icon_button_theme.dart new file mode 100644 index 00000000..3e5c7e0e --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/simple_icon_button_theme.dart @@ -0,0 +1,114 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class SimpleIconButtonTheme extends SimpleIconButtonThemeExtension { + const SimpleIconButtonTheme({ + super.disabledStyle, + super.focusedStyle, + super.hoveredStyle, + super.normalStyle, + super.tappedStyle, + }); + + factory SimpleIconButtonTheme.light() { + final style = SimpleIconButtonStyle( + dimension: 30, + radius: BorderRadius.circular(5), + padding: const EdgeInsets.all(5), + foregroundColors: const MultiColor.single(Constants.dark), + backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.2)), + ); + return SimpleIconButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + foregroundColors: MultiColor.single(Constants.dark.withOpacity(0.4)), + ), + hoveredStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), + ), + focusedStyle: style, + tappedStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.5)), + ), + ); + } + + factory SimpleIconButtonTheme.dark() { + final style = SimpleIconButtonStyle( + dimension: 30, + radius: BorderRadius.circular(5), + padding: const EdgeInsets.all(5), + foregroundColors: const MultiColor.single(Constants.white), + backgroundColors: MultiColor.single(Constants.grey3.withOpacity(0.2)), + ); + return SimpleIconButtonTheme( + normalStyle: style, + disabledStyle: style.copyWith( + foregroundColors: MultiColor.single(Constants.white.withOpacity(0.4)), + ), + hoveredStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey3.withOpacity(0.4)), + ), + focusedStyle: style, + tappedStyle: style.copyWith( + backgroundColors: MultiColor.single(Constants.grey3.withOpacity(0.5)), + ), + ); + } + + @override + ThemeExtension copyWith({ + SimpleIconButtonStyle? disabledStyle, + SimpleIconButtonStyle? focusedStyle, + SimpleIconButtonStyle? hoveredStyle, + SimpleIconButtonStyle? normalStyle, + SimpleIconButtonStyle? tappedStyle, + }) => + SimpleIconButtonTheme( + disabledStyle: disabledStyle ?? this.disabledStyle, + focusedStyle: focusedStyle ?? this.focusedStyle, + hoveredStyle: hoveredStyle ?? this.hoveredStyle, + normalStyle: normalStyle ?? this.normalStyle, + tappedStyle: tappedStyle ?? this.tappedStyle, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! SimpleIconButtonTheme) { + return this; + } + return SimpleIconButtonTheme( + disabledStyle: + SimpleIconButtonStyle.lerp(disabledStyle, other.disabledStyle, t), + focusedStyle: + SimpleIconButtonStyle.lerp(focusedStyle, other.focusedStyle, t), + hoveredStyle: + SimpleIconButtonStyle.lerp(hoveredStyle, other.hoveredStyle, t), + normalStyle: + SimpleIconButtonStyle.lerp(normalStyle, other.normalStyle, t), + tappedStyle: + SimpleIconButtonStyle.lerp(tappedStyle, other.tappedStyle, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart index 6d181638..74a9a19d 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/symbol_button_theme.dart @@ -59,6 +59,7 @@ class SymbolButtonTheme extends SymbolButtonThemeExtension { hoveredStyle: style.copyWith( backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), ), + focusedStyle: style.copyWith(stroke: 4), tappedStyle: style.copyWith( backgroundColors: MultiColor.single(Constants.grey1.withOpacity(0.4)), ), @@ -101,6 +102,7 @@ class SymbolButtonTheme extends SymbolButtonThemeExtension { hoveredStyle: style.copyWith( backgroundColors: const MultiColor(Constants.greyDarkGradient), ), + focusedStyle: style.copyWith(stroke: 4), tappedStyle: style.copyWith( backgroundColors: const MultiColor(Constants.greyDarkGradient), ), diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index 62128247..ab8720fb 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -17,14 +17,16 @@ import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_kit_example/theme/file_selection_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/flat_button_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme_extension.dart'; /// Easely switch between Material and Studio themes. abstract class Themes { static int currentThemeIndex = 0; - + static List> themes = [ {materialLight, materialDark}, {studioLight, studioDark}, @@ -34,6 +36,7 @@ abstract class Themes { currentThemeIndex = themeId; return themes[themeId].first; } + static ThemeData darkFromTheme(int themeId) { currentThemeIndex = themeId; return themes[themeId].last; @@ -102,6 +105,8 @@ abstract class Themes { ), FlatButtonTheme.light(), SymbolButtonTheme.light(), + SimpleIconButtonTheme.light(), + FileSelectionButtonTheme.light(), ], ); @@ -147,6 +152,8 @@ abstract class Themes { ), FlatButtonTheme.dark(), SymbolButtonTheme.dark(), + SimpleIconButtonTheme.dark(), + FileSelectionButtonTheme.dark(), ], ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index 999232a7..b763751c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -221,7 +221,7 @@ class FileSelectionButtonScreen children: [ if (leading != null) ...[ leading ?? const SizedBox.shrink(), - Gap(style.padding?.horizontal ?? 10), + Gap((style.padding?.horizontal ?? 10)/2), ], Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -239,7 +239,6 @@ class FileSelectionButtonScreen /// /// More infos in `negociate()` method if (title != null) ...[ - Gap(style.padding?.vertical ?? 10), Text( title!.text, style: title!.style ?? style.title, @@ -266,7 +265,7 @@ class FileSelectionButtonScreen /// /// More infos in `negociate()` method if (subTitle != null) ...[ - Gap(style.padding?.vertical ?? 10), + const Gap(5), Text( subTitle!.text, style: subTitle!.style ?? style.subTitle, -- 2.47.2 From 3a7b0abc58745ca1f0001f9347fbbaddd9c97a1e Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 15 Feb 2023 22:40:19 +0100 Subject: [PATCH 125/320] style(ui_kit): fix padding file selection --- .../example/lib/theme/file_selection_button_theme.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart index cad4f2ea..276960d1 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/file_selection_button_theme.dart @@ -42,7 +42,7 @@ class FileSelectionButtonTheme extends FileSelectionButtonThemeExtension { fontWeight: FontWeight.w400, ), radius: BorderRadius.circular(12), - padding: const EdgeInsets.all(10), + padding: const EdgeInsets.all(13), foregroundColors: const MultiColor.single(Constants.grey2), backgroundColors: MultiColor.single(Constants.white.withOpacity(0.04)), borderColors: const MultiColor(Constants.greyGradient), -- 2.47.2 From 1af9b0b1f1426f1815eff2b2228ab9e74a06873f Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 10:23:48 +0100 Subject: [PATCH 126/320] refactor(ui_kit): make resolve private and dotter child a widget --- .../dotter_border_child.dart | 49 +++++++++++++++++++ .../file_selection_button_screen.dart | 41 ++++------------ .../flat_button/flat_button_screen.dart | 4 +- .../simple_icon_screen.dart | 4 +- .../symbol_button/symbol_button_screen.dart | 4 +- 5 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/dotter_border_child.dart diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/dotter_border_child.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/dotter_border_child.dart new file mode 100644 index 00000000..bc7f03ae --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/dotter_border_child.dart @@ -0,0 +1,49 @@ +// 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 . + +import 'package:dotted_border/dotted_border.dart'; +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class DotterBorderChild extends StatelessWidget { + const DotterBorderChild({ + required this.style, + required this.child, + super.key, + }); + + final FileSelectionButtonStyle style; + final Widget child; + + @override + Widget build(BuildContext context) { + if (style.borderColors != null && style.stroke != null) { + return DottedBorder( + padding: EdgeInsets.zero, + dashPattern: const [5, 5], + strokeWidth: style.stroke!, + color: style.borderColors!.color, + borderType: BorderType.RRect, + radius: + style.radius?.resolve(TextDirection.ltr).bottomLeft ?? Radius.zero, + strokeCap: StrokeCap.square, + child: child, + ); + } else { + return child; + } + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index b763751c..8f884b51 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:dotted_border/dotted_border.dart'; import 'package:flutter/material.dart' hide ButtonStyle; import 'package:flutter/services.dart'; import 'package:gap/gap.dart'; @@ -22,6 +21,7 @@ import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/dotter_border_child.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; @@ -65,7 +65,7 @@ class FileSelectionButtonScreen InvalidButtonCubit create(BuildContext context) => InvalidButtonCubit(); /// Negotiate the theme to get a complete style. - FileSelectionButtonStyle resolve(BuildContext context, ButtonState state) { + FileSelectionButtonStyle _resolve(BuildContext context, ButtonState state) { final FileSelectionButtonThemeResolver resolver = themeResolver ?? FileSelectionButtonThemeResolver( computeExtensionValueFn: ( @@ -135,31 +135,9 @@ class FileSelectionButtonScreen return resolver.negotiate(context, extra: state); } - Widget _border( - BuildContext context, - FileSelectionButtonStyle style, - Widget child, - ) { - if (style.borderColors != null && style.stroke != null) { - return DottedBorder( - padding: EdgeInsets.zero, - dashPattern: const [5, 5], - strokeWidth: style.stroke!, - color: style.borderColors!.color, - borderType: BorderType.RRect, - radius: - style.radius?.resolve(TextDirection.ltr).bottomLeft ?? Radius.zero, - strokeCap: StrokeCap.square, - child: child, - ); - } else { - return child; - } - } - @override Widget onBuild(BuildContext context, ButtonState state) { - final style = resolve(context, state); + final style = _resolve(context, state); return Focus( onFocusChange: (hasFocus) => @@ -192,10 +170,9 @@ class FileSelectionButtonScreen onPressed?.call(state.state); bloc(context).onClickUpOut(); }, - child: _border( - context, - style, - DecoratedBox( + child: DotterBorderChild( + style: style, + child: DecoratedBox( decoration: BoxDecoration( color: style.backgroundColors?.color, // if no gradient colors => no default value @@ -221,7 +198,7 @@ class FileSelectionButtonScreen children: [ if (leading != null) ...[ leading ?? const SizedBox.shrink(), - Gap((style.padding?.horizontal ?? 10)/2), + Gap((style.padding?.horizontal ?? 10) / 2), ], Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -237,7 +214,7 @@ class FileSelectionButtonScreen /// buttonStyle.foregroundColor.colors ?? /// null /// - /// More infos in `negociate()` method + /// More infos in `ThemeResolver` class if (title != null) ...[ Text( title!.text, @@ -263,7 +240,7 @@ class FileSelectionButtonScreen /// buttonStyle.foregroundColor.colors ?? /// null /// - /// More infos in `negociate()` method + /// More infos in `ThemeResolver` class if (subTitle != null) ...[ const Gap(5), Text( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index b0803388..178cdb01 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -59,7 +59,7 @@ class FlatButtonScreen extends CubitScreen { ButtonCubit create(BuildContext context) => ButtonCubit(); /// Negotiate the theme to get a complete style. - FlatButtonStyle resolve(BuildContext context, ControlState state) { + FlatButtonStyle _resolve(BuildContext context, ControlState state) { final FlatButtonThemeResolver resolver = themeResolver ?? FlatButtonThemeResolver( computeExtensionValueFn: ( @@ -103,7 +103,7 @@ class FlatButtonScreen extends CubitScreen { @override Widget onBuild(BuildContext context, ButtonState state) { - final style = resolve(context, state.state); + final style = _resolve(context, state.state); return Focus( onFocusChange: (hasFocus) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart index 13ea6b8b..7a38de18 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart @@ -52,7 +52,7 @@ class SimpleIconButtonScreen extends CubitScreen { ButtonCubit create(BuildContext context) => ButtonCubit(); /// Negotiate the theme to get a complete style. - SimpleIconButtonStyle resolve(BuildContext context, ControlState state) { + SimpleIconButtonStyle _resolve(BuildContext context, ControlState state) { final SimpleIconButtonThemeResolver resolver = themeResolver ?? SimpleIconButtonThemeResolver( computeExtensionValueFn: ( @@ -96,7 +96,7 @@ class SimpleIconButtonScreen extends CubitScreen { @override Widget onBuild(BuildContext context, ButtonState state) { - final style = resolve(context, state.state); + final style = _resolve(context, state.state); return Focus( onFocusChange: (hasFocus) => diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index 2491b496..547ebf64 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -61,7 +61,7 @@ class SymbolButtonScreen SelectableButtonCubit create(BuildContext context) => SelectableButtonCubit(); /// Negotiate the theme to get a complete style. - SymbolButtonStyle resolve(BuildContext context, ButtonState state) { + SymbolButtonStyle _resolve(BuildContext context, ButtonState state) { final SymbolButtonThemeResolver resolver = themeResolver ?? SymbolButtonThemeResolver( computeExtensionValueFn: ( @@ -127,7 +127,7 @@ class SymbolButtonScreen @override Widget onBuild(BuildContext context, ButtonState state) { - final style = resolve(context, state); + final style = _resolve(context, state); return Focus( onFocusChange: (hasFocus) => -- 2.47.2 From 8044d07413cd9526c5ac5e6dcecc40feb95328e0 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 11:54:42 +0100 Subject: [PATCH 127/320] fix(ui_component): add style merge in Theme Resolver --- .../lib/src/core/utils/theme_resolver.dart | 14 +++++--- .../entities/buttons/button_component.dart | 5 +-- .../domain/entities/buttons/button_style.dart | 3 +- .../buttons/file_selection_button_style.dart | 36 +++++++++++++++++++ .../entities/buttons/flat_button_style.dart | 32 +++++++++++++++-- .../buttons/simple_icon_button_style.dart | 32 +++++++++++++++++ .../entities/buttons/symbol_button_style.dart | 33 +++++++++++++++++ .../lib/src/domain/entities/component.dart | 6 +++- .../lib/src/domain/entities/entities.dart | 1 + .../lib/src/domain/entities/theme_style.dart | 25 +++++++++++++ 10 files changed, 175 insertions(+), 12 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index cc14f747..45834ca5 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/src/domain/entities/theme_style.dart'; /// {@template theme_resolver} /// In charge of theme negotiation and merge. @@ -30,7 +31,7 @@ import 'package:flutter/material.dart'; /// - If the value is mandatory: a hardcoded value in "wyatt_ui_kit" is chosen. /// - If not, the style is simply not applied. /// {@endtemplate} -abstract class ThemeResolver { +abstract class ThemeResolver, T, E> { /// {@macro theme_resolver} const ThemeResolver(); @@ -81,8 +82,13 @@ abstract class ThemeResolver { /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { S style = computeDefaultValue(context, extra: extra); - style = computeExtensionValue(context, style, extra: extra) ?? style; - style = computeCustomValue(context, style, extra: extra) ?? style; - return style; + final S? extensionStyle = + computeExtensionValue(context, style, extra: extra); + + style = style.mergeWith(extensionStyle); + + final S? customStyle = computeCustomValue(context, style, extra: extra); + + return style.mergeWith(customStyle); } } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index a5c285d5..57b543c2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -26,7 +26,7 @@ abstract class ButtonComponent extends Component { this.selectedStyle, this.invalidStyle, this.onPressed, - this.themeResolver, + super.themeResolver, super.key, }); @@ -53,7 +53,4 @@ abstract class ButtonComponent extends Component { /// Callback on button press final void Function(ControlState state)? onPressed; - - /// Theme Resolver for this component - final ThemeResolver? themeResolver; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart index de126460..9d3fddf9 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_style.dart @@ -16,8 +16,9 @@ import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; +import 'package:wyatt_ui_components/src/domain/entities/theme_style.dart'; -abstract class ButtonStyle { +abstract class ButtonStyle extends ThemeStyle { const ButtonStyle({ this.radius, this.padding, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart index e543229b..4bf83810 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -37,6 +37,31 @@ class FileSelectionButtonStyle extends ButtonStyle { super.shadow, }); + /// Merges non-null `b` attributes in `a` + static FileSelectionButtonStyle? merge( + FileSelectionButtonStyle? a, + FileSelectionButtonStyle? b, + ) { + if (b == null) { + return a?.copyWith(); + } + if (a == null) { + return b.copyWith(); + } + + return a.copyWith( + title: b.title, + subTitle: b.subTitle, + radius: b.radius, + padding: b.padding, + foregroundColors: b.foregroundColors, + backgroundColors: b.backgroundColors, + borderColors: b.borderColors, + stroke: b.stroke, + shadow: b.shadow, + ); + } + /// Used for interpolation. static FileSelectionButtonStyle? lerp( FileSelectionButtonStyle? a, @@ -81,4 +106,15 @@ class FileSelectionButtonStyle extends ButtonStyle { /// /// Default to `TextTheme.labelSmall` final TextStyle? subTitle; + + @override + FileSelectionButtonStyle mergeWith(FileSelectionButtonStyle? other) => + FileSelectionButtonStyle.merge(this, other)!; + + @override + FileSelectionButtonStyle? lerpWith( + FileSelectionButtonStyle? other, + double t, + ) => + FileSelectionButtonStyle.lerp(this, other, t); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index cc57472b..980b83d7 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -36,6 +36,30 @@ class FlatButtonStyle extends ButtonStyle { super.shadow, }); + /// Merges non-null `b` attributes in `a` + static FlatButtonStyle? merge( + FlatButtonStyle? a, + FlatButtonStyle? b, + ) { + if (b == null) { + return a?.copyWith(); + } + if (a == null) { + return b.copyWith(); + } + + return a.copyWith( + label: b.label, + radius: b.radius, + padding: b.padding, + foregroundColors: b.foregroundColors, + backgroundColors: b.backgroundColors, + borderColors: b.borderColors, + stroke: b.stroke, + shadow: b.shadow, + ); + } + /// Used for interpolation. static FlatButtonStyle? lerp( FlatButtonStyle? a, @@ -76,6 +100,10 @@ class FlatButtonStyle extends ButtonStyle { final TextStyle? label; @override - String toString() => - 'FlatButtonStyle(label: $label), inherited: ${super.toString()}'; + FlatButtonStyle mergeWith(FlatButtonStyle? other) => + FlatButtonStyle.merge(this, other)!; + + @override + FlatButtonStyle? lerpWith(FlatButtonStyle? other, double t) => + FlatButtonStyle.lerp(this, other, t); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart index 3d468e63..70be77bc 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -36,6 +36,30 @@ class SimpleIconButtonStyle extends ButtonStyle { super.shadow, }); + /// Merges non-null `b` attributes in `a` + static SimpleIconButtonStyle? merge( + SimpleIconButtonStyle? a, + SimpleIconButtonStyle? b, + ) { + if (b == null) { + return a?.copyWith(); + } + if (a == null) { + return b.copyWith(); + } + + return a.copyWith( + dimension: b.dimension, + radius: b.radius, + padding: b.padding, + foregroundColors: b.foregroundColors, + backgroundColors: b.backgroundColors, + borderColors: b.borderColors, + stroke: b.stroke, + shadow: b.shadow, + ); + } + /// Used for interpolation. static SimpleIconButtonStyle? lerp( SimpleIconButtonStyle? a, @@ -74,4 +98,12 @@ class SimpleIconButtonStyle extends ButtonStyle { /// /// Default to `context.buttonTheme.height` final double? dimension; + + @override + SimpleIconButtonStyle mergeWith(SimpleIconButtonStyle? other) => + SimpleIconButtonStyle.merge(this, other)!; + + @override + SimpleIconButtonStyle? lerpWith(SimpleIconButtonStyle? other, double t) => + SimpleIconButtonStyle.lerp(this, other, t); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index ab5c44b8..7f8e7b6d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -37,6 +37,31 @@ class SymbolButtonStyle extends ButtonStyle { super.shadow, }); + /// Merges non-null `b` attributes in `a` + static SymbolButtonStyle? merge( + SymbolButtonStyle? a, + SymbolButtonStyle? b, + ) { + if (b == null) { + return a?.copyWith(); + } + if (a == null) { + return b.copyWith(); + } + + return a.copyWith( + label: b.label, + dimension: b.dimension, + radius: b.radius, + padding: b.padding, + foregroundColors: b.foregroundColors, + backgroundColors: b.backgroundColors, + borderColors: b.borderColors, + stroke: b.stroke, + shadow: b.shadow, + ); + } + /// Used for interpolation. static SymbolButtonStyle? lerp( SymbolButtonStyle? a, @@ -81,4 +106,12 @@ class SymbolButtonStyle extends ButtonStyle { /// /// Default to `context.buttonTheme.height` final double? dimension; + + @override + SymbolButtonStyle mergeWith(SymbolButtonStyle? other) => + SymbolButtonStyle.merge(this, other)!; + + @override + SymbolButtonStyle? lerpWith(SymbolButtonStyle? other, double t) => + SymbolButtonStyle.lerp(this, other, t); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart index 33f05fbd..e7f984f1 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart @@ -15,7 +15,11 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/src/core/utils/theme_resolver.dart'; abstract class Component extends StatelessWidget { - const Component({super.key}); + const Component({this.themeResolver, super.key}); + + /// Theme Resolver for this component + final ThemeResolver? themeResolver; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 5a07411a..39ae2f65 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -21,3 +21,4 @@ export './cards/cards.dart'; export './component.dart'; export './error_widget_component.dart'; export './loading_widget_component.dart'; +export './theme_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart new file mode 100644 index 00000000..7c923ac0 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart @@ -0,0 +1,25 @@ +// 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 . + +abstract class ThemeStyle { + const ThemeStyle(); + + /// Merges non-null `other` attributes in `this` and returns a copy. + T mergeWith(T? other); + + /// Used for interpolation. + T? lerpWith(T? other, double t); +} -- 2.47.2 From 4c08a692d2013a0732e0bacbe70c88db78eb2d98 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 11:55:11 +0100 Subject: [PATCH 128/320] refactor(ui_kit): move exportable bloc from mixin to widget --- .../buttons/exportable_bloc.dart} | 18 ++++++++++++++---- .../file_selection_button.dart | 8 ++++---- .../buttons/flat_button/flat_button.dart | 9 ++++----- .../simple_icon_button/simple_icon_button.dart | 8 ++++---- .../buttons/symbol_button/symbol_button.dart | 8 ++++---- 5 files changed, 30 insertions(+), 21 deletions(-) rename packages/wyatt_ui_kit/lib/src/{core/mixin/export_bloc_mixin.dart => components/buttons/exportable_bloc.dart} (70%) diff --git a/packages/wyatt_ui_kit/lib/src/core/mixin/export_bloc_mixin.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/exportable_bloc.dart similarity index 70% rename from packages/wyatt_ui_kit/lib/src/core/mixin/export_bloc_mixin.dart rename to packages/wyatt_ui_kit/lib/src/components/buttons/exportable_bloc.dart index f2ae41bf..0f9fbd73 100644 --- a/packages/wyatt_ui_kit/lib/src/core/mixin/export_bloc_mixin.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/exportable_bloc.dart @@ -14,12 +14,22 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/widgets.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -mixin ExportBloc> { - T get bloc; - Widget exportBloc({required Widget child}) => BlocProvider.value( +class ExportableBloc> + extends StatelessWidget { + const ExportableBloc({ + required this.bloc, + required this.child, + super.key, + }); + + final T bloc; + final Widget child; + + @override + Widget build(BuildContext context) => BlocProvider.value( value: bloc, child: child, ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart index aeebaa43..1c038237 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart @@ -18,15 +18,15 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; -import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'file_selection_button.g.dart'; @ComponentCopyWithExtension() class FileSelectionButton extends FileSelectionButtonComponent - with $FileSelectionButtonCWMixin, ExportBloc { + with $FileSelectionButtonCWMixin { FileSelectionButton({ super.leading, super.title, @@ -46,7 +46,6 @@ class FileSelectionButton extends FileSelectionButtonComponent final InvalidButtonCubit _cubit = InvalidButtonCubit(); - @override InvalidButtonCubit get bloc => _cubit; @override @@ -82,7 +81,8 @@ class FileSelectionButton extends FileSelectionButtonComponent super.themeResolver as FileSelectionButtonThemeResolver?; @override - Widget build(BuildContext context) => exportBloc( + Widget build(BuildContext context) => ExportableBloc( + bloc: _cubit, child: FileSelectionButtonScreen( leading: leading, title: title, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index 123b91c2..df67bb11 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -18,15 +18,14 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_theme_resolver.dart'; -import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'flat_button.g.dart'; @ComponentCopyWithExtension() -class FlatButton extends FlatButtonComponent - with $FlatButtonCWMixin, ExportBloc { +class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { FlatButton({ super.prefix, super.suffix, @@ -44,7 +43,6 @@ class FlatButton extends FlatButtonComponent final ButtonCubit _cubit = ButtonCubit(); - @override ButtonCubit get bloc => _cubit; @override @@ -67,7 +65,8 @@ class FlatButton extends FlatButtonComponent super.themeResolver as FlatButtonThemeResolver?; @override - Widget build(BuildContext context) => exportBloc( + Widget build(BuildContext context) => ExportableBloc( + bloc: _cubit, child: FlatButtonScreen( prefix: prefix, suffix: suffix, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart index 0322265a..9bd074b1 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -18,15 +18,15 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_screen.dart'; -import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'simple_icon_button.g.dart'; @ComponentCopyWithExtension() class SimpleIconButton extends SimpleIconButtonComponent - with $SimpleIconButtonCWMixin, ExportBloc { + with $SimpleIconButtonCWMixin { SimpleIconButton({ super.icon, super.disabledStyle, @@ -41,7 +41,6 @@ class SimpleIconButton extends SimpleIconButtonComponent final ButtonCubit _cubit = ButtonCubit(); - @override ButtonCubit get bloc => _cubit; @override @@ -69,7 +68,8 @@ class SimpleIconButton extends SimpleIconButtonComponent super.themeResolver as SimpleIconButtonThemeResolver?; @override - Widget build(BuildContext context) => exportBloc( + Widget build(BuildContext context) => ExportableBloc( + bloc: _cubit, child: SimpleIconButtonScreen( icon: icon, disabledStyle: disabledStyle, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart index 1a328042..64436fa5 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart @@ -18,15 +18,15 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart'; -import 'package:wyatt_ui_kit/src/core/mixin/export_bloc_mixin.dart'; part 'symbol_button.g.dart'; @ComponentCopyWithExtension() class SymbolButton extends SymbolButtonComponent - with $SymbolButtonCWMixin, ExportBloc { + with $SymbolButtonCWMixin{ SymbolButton({ super.icon, super.label, @@ -44,7 +44,6 @@ class SymbolButton extends SymbolButtonComponent final SelectableButtonCubit _cubit = SelectableButtonCubit(); - @override SelectableButtonCubit get bloc => _cubit; @override @@ -74,7 +73,8 @@ class SymbolButton extends SymbolButtonComponent super.themeResolver as SymbolButtonThemeResolver?; @override - Widget build(BuildContext context) => exportBloc( + Widget build(BuildContext context) => ExportableBloc( + bloc: _cubit, child: SymbolButtonScreen( icon: icon, label: label, -- 2.47.2 From 8070623e889d59c0d2758c32aee25473bfeeba97 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 15:11:34 +0100 Subject: [PATCH 129/320] fix(ui_component): add generated component with theme resolver --- .../entities/buttons/file_selection_button_component.g.dart | 3 +++ .../src/domain/entities/buttons/flat_button_component.g.dart | 3 +++ .../entities/buttons/simple_icon_button_component.g.dart | 3 +++ .../src/domain/entities/buttons/symbol_button_component.g.dart | 3 +++ 4 files changed, 12 insertions(+) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart index 1c9f5b2d..aa5816fe 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart @@ -22,6 +22,8 @@ abstract class $FileSelectionButtonComponentCWProxy { FileSelectionButtonComponent invalidStyle(ButtonStyle? invalidStyle); FileSelectionButtonComponent onPressed( void Function(ControlState)? onPressed); + FileSelectionButtonComponent themeResolver( + ThemeResolver? themeResolver); FileSelectionButtonComponent key(Key? key); FileSelectionButtonComponent call({ MainAxisSize? mainAxisSize, @@ -36,6 +38,7 @@ abstract class $FileSelectionButtonComponentCWProxy { ButtonStyle? selectedStyle, ButtonStyle? invalidStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart index e234fa3d..fb87d810 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart @@ -17,6 +17,8 @@ abstract class $FlatButtonComponentCWProxy { FlatButtonComponent focusedStyle(ButtonStyle? focusedStyle); FlatButtonComponent tappedStyle(ButtonStyle? tappedStyle); FlatButtonComponent onPressed(void Function(ControlState)? onPressed); + FlatButtonComponent themeResolver( + ThemeResolver? themeResolver); FlatButtonComponent key(Key? key); FlatButtonComponent call({ MainAxisSize? mainAxisSize, @@ -29,6 +31,7 @@ abstract class $FlatButtonComponentCWProxy { ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart index b6c02777..9a4b83ac 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart @@ -14,6 +14,8 @@ abstract class $SimpleIconButtonComponentCWProxy { SimpleIconButtonComponent focusedStyle(ButtonStyle? focusedStyle); SimpleIconButtonComponent tappedStyle(ButtonStyle? tappedStyle); SimpleIconButtonComponent onPressed(void Function(ControlState)? onPressed); + SimpleIconButtonComponent themeResolver( + ThemeResolver? themeResolver); SimpleIconButtonComponent key(Key? key); SimpleIconButtonComponent call({ Icon? icon, @@ -23,6 +25,7 @@ abstract class $SimpleIconButtonComponentCWProxy { ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart index 08422d60..a97dced0 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart @@ -17,6 +17,8 @@ abstract class $SymbolButtonComponentCWProxy { SymbolButtonComponent tappedStyle(ButtonStyle? tappedStyle); SymbolButtonComponent selectedStyle(ButtonStyle? selectedStyle); SymbolButtonComponent onPressed(void Function(ControlState)? onPressed); + SymbolButtonComponent themeResolver( + ThemeResolver? themeResolver); SymbolButtonComponent key(Key? key); SymbolButtonComponent call({ MainAxisSize? mainAxisSize, @@ -29,6 +31,7 @@ abstract class $SymbolButtonComponentCWProxy { ButtonStyle? tappedStyle, ButtonStyle? selectedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }); } -- 2.47.2 From 63bbde8213ad18741ed22fbdd545ce0624c7a023 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 15:12:18 +0100 Subject: [PATCH 130/320] refactor(ui_component): remove CopyWith extension --- .../buttons/file_selection_button_style.dart | 28 +++- .../file_selection_button_style.g.dart | 152 ------------------ .../entities/buttons/flat_button_style.dart | 26 ++- .../entities/buttons/flat_button_style.g.dart | 137 ---------------- .../buttons/simple_icon_button_style.dart | 26 ++- .../buttons/simple_icon_button_style.g.dart | 141 ---------------- .../entities/buttons/symbol_button_style.dart | 28 +++- .../buttons/symbol_button_style.g.dart | 150 ----------------- .../lib/src/domain/entities/theme_style.dart | 3 + packages/wyatt_ui_components/pubspec.yaml | 2 - 10 files changed, 95 insertions(+), 598 deletions(-) delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart index 4bf83810..75fc9a42 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -16,14 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'file_selection_button_style.g.dart'; - -@CopyWith() class FileSelectionButtonStyle extends ButtonStyle { const FileSelectionButtonStyle({ this.title, @@ -117,4 +113,28 @@ class FileSelectionButtonStyle extends ButtonStyle { double t, ) => FileSelectionButtonStyle.lerp(this, other, t); + + @override + FileSelectionButtonStyle copyWith({ + TextStyle? title, + TextStyle? subTitle, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + FileSelectionButtonStyle( + title: title ?? this.title, + subTitle: subTitle ?? this.subTitle, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart deleted file mode 100644 index 6576a261..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart +++ /dev/null @@ -1,152 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'file_selection_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$FileSelectionButtonStyleCWProxy { - FileSelectionButtonStyle title(TextStyle? title); - - FileSelectionButtonStyle subTitle(TextStyle? subTitle); - - FileSelectionButtonStyle radius(BorderRadiusGeometry? radius); - - FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding); - - FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors); - - FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors); - - FileSelectionButtonStyle borderColors(MultiColor? borderColors); - - FileSelectionButtonStyle stroke(double? stroke); - - FileSelectionButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FileSelectionButtonStyle call({ - TextStyle? title, - TextStyle? subTitle, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)` -class _$FileSelectionButtonStyleCWProxyImpl - implements _$FileSelectionButtonStyleCWProxy { - const _$FileSelectionButtonStyleCWProxyImpl(this._value); - - final FileSelectionButtonStyle _value; - - @override - FileSelectionButtonStyle title(TextStyle? title) => this(title: title); - - @override - FileSelectionButtonStyle subTitle(TextStyle? subTitle) => - this(subTitle: subTitle); - - @override - FileSelectionButtonStyle radius(BorderRadiusGeometry? radius) => - this(radius: radius); - - @override - FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - FileSelectionButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - FileSelectionButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - FileSelectionButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FileSelectionButtonStyle call({ - Object? title = const $CopyWithPlaceholder(), - Object? subTitle = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return FileSelectionButtonStyle( - title: title == const $CopyWithPlaceholder() - ? _value.title - // ignore: cast_nullable_to_non_nullable - : title as TextStyle?, - subTitle: subTitle == const $CopyWithPlaceholder() - ? _value.subTitle - // ignore: cast_nullable_to_non_nullable - : subTitle as TextStyle?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $FileSelectionButtonStyleCopyWith on FileSelectionButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)` or like so:`instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$FileSelectionButtonStyleCWProxy get copyWith => - _$FileSelectionButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index 980b83d7..f5476e31 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -16,14 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'flat_button_style.g.dart'; - -@CopyWith() class FlatButtonStyle extends ButtonStyle { const FlatButtonStyle({ this.label, @@ -106,4 +102,26 @@ class FlatButtonStyle extends ButtonStyle { @override FlatButtonStyle? lerpWith(FlatButtonStyle? other, double t) => FlatButtonStyle.lerp(this, other, t); + + @override + FlatButtonStyle copyWith({ + TextStyle? label, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + FlatButtonStyle( + label: label ?? this.label, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart deleted file mode 100644 index 939a48e1..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart +++ /dev/null @@ -1,137 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'flat_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$FlatButtonStyleCWProxy { - FlatButtonStyle label(TextStyle? label); - - FlatButtonStyle radius(BorderRadiusGeometry? radius); - - FlatButtonStyle padding(EdgeInsetsGeometry? padding); - - FlatButtonStyle foregroundColors(MultiColor? foregroundColors); - - FlatButtonStyle backgroundColors(MultiColor? backgroundColors); - - FlatButtonStyle borderColors(MultiColor? borderColors); - - FlatButtonStyle stroke(double? stroke); - - FlatButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FlatButtonStyle call({ - TextStyle? label, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFlatButtonStyle.copyWith.fieldName(...)` -class _$FlatButtonStyleCWProxyImpl implements _$FlatButtonStyleCWProxy { - const _$FlatButtonStyleCWProxyImpl(this._value); - - final FlatButtonStyle _value; - - @override - FlatButtonStyle label(TextStyle? label) => this(label: label); - - @override - FlatButtonStyle radius(BorderRadiusGeometry? radius) => this(radius: radius); - - @override - FlatButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - FlatButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - FlatButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - FlatButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - FlatButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - FlatButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FlatButtonStyle call({ - Object? label = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return FlatButtonStyle( - label: label == const $CopyWithPlaceholder() - ? _value.label - // ignore: cast_nullable_to_non_nullable - : label as TextStyle?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $FlatButtonStyleCopyWith on FlatButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)` or like so:`instanceOfFlatButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$FlatButtonStyleCWProxy get copyWith => _$FlatButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart index 70be77bc..e31acee7 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -16,14 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'simple_icon_button_style.g.dart'; - -@CopyWith() class SimpleIconButtonStyle extends ButtonStyle { const SimpleIconButtonStyle({ this.dimension, @@ -106,4 +102,26 @@ class SimpleIconButtonStyle extends ButtonStyle { @override SimpleIconButtonStyle? lerpWith(SimpleIconButtonStyle? other, double t) => SimpleIconButtonStyle.lerp(this, other, t); + + @override + SimpleIconButtonStyle copyWith({ + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + SimpleIconButtonStyle( + dimension: dimension ?? this.dimension, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart deleted file mode 100644 index f0ee5153..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart +++ /dev/null @@ -1,141 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'simple_icon_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$SimpleIconButtonStyleCWProxy { - SimpleIconButtonStyle dimension(double? dimension); - - SimpleIconButtonStyle radius(BorderRadiusGeometry? radius); - - SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding); - - SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors); - - SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors); - - SimpleIconButtonStyle borderColors(MultiColor? borderColors); - - SimpleIconButtonStyle stroke(double? stroke); - - SimpleIconButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SimpleIconButtonStyle call({ - double? dimension, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)` -class _$SimpleIconButtonStyleCWProxyImpl - implements _$SimpleIconButtonStyleCWProxy { - const _$SimpleIconButtonStyleCWProxyImpl(this._value); - - final SimpleIconButtonStyle _value; - - @override - SimpleIconButtonStyle dimension(double? dimension) => - this(dimension: dimension); - - @override - SimpleIconButtonStyle radius(BorderRadiusGeometry? radius) => - this(radius: radius); - - @override - SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - SimpleIconButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - SimpleIconButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - SimpleIconButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SimpleIconButtonStyle call({ - Object? dimension = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return SimpleIconButtonStyle( - dimension: dimension == const $CopyWithPlaceholder() - ? _value.dimension - // ignore: cast_nullable_to_non_nullable - : dimension as double?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $SimpleIconButtonStyleCopyWith on SimpleIconButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)` or like so:`instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$SimpleIconButtonStyleCWProxy get copyWith => - _$SimpleIconButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index 7f8e7b6d..a0815b3c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -16,14 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'symbol_button_style.g.dart'; - -@CopyWith() class SymbolButtonStyle extends ButtonStyle { const SymbolButtonStyle({ this.label, @@ -114,4 +110,28 @@ class SymbolButtonStyle extends ButtonStyle { @override SymbolButtonStyle? lerpWith(SymbolButtonStyle? other, double t) => SymbolButtonStyle.lerp(this, other, t); + + @override + SymbolButtonStyle copyWith({ + TextStyle? label, + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + SymbolButtonStyle( + label: label ?? this.label, + dimension: dimension ?? this.dimension, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart deleted file mode 100644 index a3233cec..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart +++ /dev/null @@ -1,150 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'symbol_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$SymbolButtonStyleCWProxy { - SymbolButtonStyle label(TextStyle? label); - - SymbolButtonStyle dimension(double? dimension); - - SymbolButtonStyle radius(BorderRadiusGeometry? radius); - - SymbolButtonStyle padding(EdgeInsetsGeometry? padding); - - SymbolButtonStyle foregroundColors(MultiColor? foregroundColors); - - SymbolButtonStyle backgroundColors(MultiColor? backgroundColors); - - SymbolButtonStyle borderColors(MultiColor? borderColors); - - SymbolButtonStyle stroke(double? stroke); - - SymbolButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SymbolButtonStyle call({ - TextStyle? label, - double? dimension, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSymbolButtonStyle.copyWith.fieldName(...)` -class _$SymbolButtonStyleCWProxyImpl implements _$SymbolButtonStyleCWProxy { - const _$SymbolButtonStyleCWProxyImpl(this._value); - - final SymbolButtonStyle _value; - - @override - SymbolButtonStyle label(TextStyle? label) => this(label: label); - - @override - SymbolButtonStyle dimension(double? dimension) => this(dimension: dimension); - - @override - SymbolButtonStyle radius(BorderRadiusGeometry? radius) => - this(radius: radius); - - @override - SymbolButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - SymbolButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - SymbolButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - SymbolButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - SymbolButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - SymbolButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SymbolButtonStyle call({ - Object? label = const $CopyWithPlaceholder(), - Object? dimension = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return SymbolButtonStyle( - label: label == const $CopyWithPlaceholder() - ? _value.label - // ignore: cast_nullable_to_non_nullable - : label as TextStyle?, - dimension: dimension == const $CopyWithPlaceholder() - ? _value.dimension - // ignore: cast_nullable_to_non_nullable - : dimension as double?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $SymbolButtonStyleCopyWith on SymbolButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)` or like so:`instanceOfSymbolButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$SymbolButtonStyleCWProxy get copyWith => - _$SymbolButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart index 7c923ac0..0f637eed 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart @@ -22,4 +22,7 @@ abstract class ThemeStyle { /// Used for interpolation. T? lerpWith(T? other, double t); + + /// Copy with (mandatory for mergeWith, needs to be simple and ignore `null`) + T copyWith(); } diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 8be94829..80e5e707 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -9,7 +9,6 @@ environment: sdk: ">=2.17.0 <3.0.0" dependencies: - copy_with_extension: ^5.0.0 flutter: { sdk: flutter } wyatt_component_copy_with_extension: git: @@ -18,7 +17,6 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 - copy_with_extension_gen: ^5.0.0 flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub -- 2.47.2 From a47c28a4d6eaa1a09822dfff3520808dea15230f Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 15:12:40 +0100 Subject: [PATCH 131/320] feat(ui_component): add loader component and style --- .../lib/src/domain/entities/entities.dart | 2 + .../src/domain/entities/loader_component.dart | 50 +++++++++++ .../domain/entities/loader_component.g.dart | 27 ++++++ .../lib/src/domain/entities/loader_style.dart | 86 +++++++++++++++++++ 4 files changed, 165 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loader_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loader_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 39ae2f65..f04375b8 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -20,5 +20,7 @@ export './buttons/buttons.dart'; export './cards/cards.dart'; export './component.dart'; export './error_widget_component.dart'; +export './loader_component.dart'; +export './loader_style.dart'; export './loading_widget_component.dart'; export './theme_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.dart new file mode 100644 index 00000000..9d26ba10 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.dart @@ -0,0 +1,50 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'loader_component.g.dart'; + +@ComponentProxyExtension() +abstract class LoaderComponent extends Component + with CopyWithMixin<$LoaderComponentCWProxy> { + const LoaderComponent({ + this.colors, + this.radius, + this.stroke, + this.duration, + this.flip, + super.themeResolver, + super.key, + }); + + /// Gradient colors from start to end. + final MultiColor? colors; + + /// Loader radius + final double? radius; + + /// Loader stroke width + final double? stroke; + + /// Animation duration + final Duration? duration; + + /// Flip the animation + final bool? flip; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.g.dart new file mode 100644 index 00000000..61b302b2 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.g.dart @@ -0,0 +1,27 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'loader_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $LoaderComponentCWProxy { + LoaderComponent colors(MultiColor? colors); + LoaderComponent radius(double? radius); + LoaderComponent stroke(double? stroke); + LoaderComponent duration(Duration? duration); + LoaderComponent flip(bool? flip); + LoaderComponent themeResolver( + ThemeResolver? themeResolver); + LoaderComponent key(Key? key); + LoaderComponent call({ + MultiColor? colors, + double? radius, + double? stroke, + Duration? duration, + bool? flip, + ThemeResolver? themeResolver, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart new file mode 100644 index 00000000..43c3253c --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart @@ -0,0 +1,86 @@ +// 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 . + +import 'dart:ui'; + +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class LoaderStyle extends ThemeStyle { + const LoaderStyle({ + this.colors, + this.stroke, + }); + + /// Merges non-null `b` attributes in `a` + static LoaderStyle? merge( + LoaderStyle? a, + LoaderStyle? b, + ) { + if (b == null) { + return a?.copyWith(); + } + if (a == null) { + return b.copyWith(); + } + + return a.copyWith( + colors: b.colors, + stroke: b.stroke, + ); + } + + /// Used for interpolation. + static LoaderStyle? lerp( + LoaderStyle? a, + LoaderStyle? b, + double t, + ) { + if (a == null || b == null) { + return null; + } + // b.copyWith to return b attributes even if they are not lerped + return b.copyWith( + colors: MultiColor.lerp(a.colors, b.colors, t), + stroke: lerpDouble(a.stroke, b.stroke, t), + ); + } + + /// Gradient colors from start to end. + final MultiColor? colors; + + /// Loader stroke width + final double? stroke; + + @override + LoaderStyle mergeWith(LoaderStyle? other) => LoaderStyle.merge(this, other)!; + + @override + LoaderStyle? lerpWith(LoaderStyle? other, double t) => + LoaderStyle.lerp(this, other, t); + + @override + LoaderStyle copyWith({ + MultiColor? colors, + double? stroke, + }) => + LoaderStyle( + colors: colors ?? this.colors, + stroke: stroke ?? this.stroke, + ); + + @override + String toString() => 'LoaderStyle($colors, $stroke)'; +} -- 2.47.2 From 33984b17335179e0dbdc50e0372c8461cc105d5c Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 15:13:21 +0100 Subject: [PATCH 132/320] feat(ui_kit): add loader implementation --- .../lib/src/components/components.dart | 1 + .../lib/src/components/loader/loader.dart | 145 ++++++++++++++++++ .../lib/src/components/loader/loader.g.dart | 51 ++++++ .../loader/loader_theme_resolver.dart | 53 +++++++ .../wyatt_ui_kit/lib/src/domain/domain.dart | 3 +- .../src/domain/loader_theme_extension.dart | 32 ++++ 6 files changed, 284 insertions(+), 1 deletion(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/loader/loader.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/loader_theme_extension.dart diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart index b696808e..191af8e8 100644 --- a/packages/wyatt_ui_kit/lib/src/components/components.dart +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -16,3 +16,4 @@ export './buttons/buttons.dart'; export './cards/cards.dart'; +export './loader/loader.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart new file mode 100644 index 00000000..620b5d70 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart @@ -0,0 +1,145 @@ +// 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 . + +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/loader/loader_theme_resolver.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +part 'loader.g.dart'; + +@ComponentCopyWithExtension() +class Loader extends LoaderComponent with $LoaderCWMixin { + const Loader({ + super.colors, + super.radius, + super.stroke, + super.duration, + super.flip, + super.themeResolver, + super.key, + }); + + @override + LoaderThemeResolver? get themeResolver => + super.themeResolver as LoaderThemeResolver?; + + /// Negotiate the theme to get a complete style. + LoaderStyle _resolve(BuildContext context) { + final LoaderThemeResolver resolver = themeResolver ?? + LoaderThemeResolver( + computeExtensionValueFn: ( + context, + defaultValue, + themeExtension, { + extra, + }) => + LoaderStyle( + colors: themeExtension.colors, + stroke: themeExtension.stroke, + ), + customStyleFn: (context, {extra}) => LoaderStyle( + colors: colors, + stroke: stroke, + ), + ); + + return resolver.negotiate(context); + } + + @override + Widget build(BuildContext context) { + final style = _resolve(context); + final dimension = + (radius != null) ? radius! * 2 : context.buttonTheme.height; + + return SizedBox.square( + dimension: dimension, + child: RepaintBoundary( + child: CustomPaint( + painter: _LoaderPainter( + style.colors!, + dimension / 2, + style.stroke!, + flip: flip ?? false, + ), + ) + .animate( + onPlay: (controller) => controller.repeat(), + ) + .rotate( + duration: duration ?? 900.ms, + begin: (flip ?? false) ? 0 : 1, + end: (flip ?? false) ? 1 : 0, + ), + ), + ); + } +} + +class _LoaderPainter extends CustomPainter { + _LoaderPainter( + this.colors, + this.radius, + this.stroke, { + required this.flip, + }); + + final MultiColor colors; + final double radius; + final double stroke; + final bool flip; + + @override + void paint(Canvas canvas, Size size) { + final center = Offset(size.width / 2, size.height / 2); + final circleSurface = Rect.fromCircle(center: center, radius: radius); + + final dotColor = colors.color; + final dotCenter = + Offset(size.width / 2 + (flip ? -radius : radius), size.height / 2); + final gradient = + colors.isGradient ? colors.colors : [colors.color, colors.color]; + + final gradientCirclePainter = Paint() + ..shader = SweepGradient( + colors: (flip ? gradient.reversed : gradient).toList(), + transform: flip ? const GradientRotation(pi) : null, + ).createShader(circleSurface) + ..strokeWidth = stroke + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round; + + final dotPainter = Paint() + ..color = dotColor + ..style = PaintingStyle.fill + ..strokeCap = StrokeCap.round; + + canvas + ..drawCircle(center, radius, gradientCirclePainter) + ..drawCircle(dotCenter, stroke / 2, dotPainter); + } + + @override + bool shouldRepaint(_LoaderPainter oldDelegate) => false; + + @override + bool shouldRebuildSemantics(_LoaderPainter oldDelegate) => false; +} diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart new file mode 100644 index 00000000..4f1243de --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart @@ -0,0 +1,51 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'loader.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $LoaderCWProxyImpl implements $LoaderComponentCWProxy { + const $LoaderCWProxyImpl(this._value); + final Loader _value; + @override + Loader colors(MultiColor? colors) => this(colors: colors); + @override + Loader radius(double? radius) => this(radius: radius); + @override + Loader stroke(double? stroke) => this(stroke: stroke); + @override + Loader duration(Duration? duration) => this(duration: duration); + @override + Loader flip(bool? flip) => this(flip: flip); + @override + Loader themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override + Loader key(Key? key) => this(key: key); + @override + Loader call({ + MultiColor? colors, + double? radius, + double? stroke, + Duration? duration, + bool? flip, + ThemeResolver? themeResolver, + Key? key, + }) => + Loader( + colors: colors ?? _value.colors, + radius: radius ?? _value.radius, + stroke: stroke ?? _value.stroke, + duration: duration ?? _value.duration, + flip: flip ?? _value.flip, + themeResolver: themeResolver ?? _value.themeResolver, + key: key ?? _value.key, + ); +} + +mixin $LoaderCWMixin on Component { + $LoaderComponentCWProxy get copyWith => $LoaderCWProxyImpl(this as Loader); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart new file mode 100644 index 00000000..60047759 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart @@ -0,0 +1,53 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class LoaderThemeResolver + extends ThemeResolver { + const LoaderThemeResolver({ + required this.computeExtensionValueFn, + required this.customStyleFn, + }); + + /// Values taken from + @override + LoaderStyle computeDefaultValue( + BuildContext context, { + void extra, + }) => + LoaderStyle( + colors: MultiColor([ + Theme.of(context).progressIndicatorTheme.color ?? + context.colorScheme.primary, + context.colorScheme.onPrimary, + ]), + stroke: 4, + ); + + @override + final LoaderStyle? Function( + BuildContext context, + LoaderStyle defaultValue, + LoaderThemeExtension themeExtension, { + void extra, + }) computeExtensionValueFn; + + @override + final LoaderStyle? Function(BuildContext context, {void extra}) customStyleFn; +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/domain.dart b/packages/wyatt_ui_kit/lib/src/domain/domain.dart index 901c7de9..8ee38b4c 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/domain.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/domain.dart @@ -14,5 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'button_theme_extension/button_theme_extension.dart'; +export './button_theme_extension/button_theme_extension.dart'; +export './loader_theme_extension.dart'; export 'card_theme_extension.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/domain/loader_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/loader_theme_extension.dart new file mode 100644 index 00000000..dc23f0f7 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/loader_theme_extension.dart @@ -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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class LoaderThemeExtension + extends ThemeExtension { + const LoaderThemeExtension({ + this.colors, + this.stroke, + }); + + /// Gradient colors from start to end. + final MultiColor? colors; + + /// Loader stroke width + final double? stroke; +} -- 2.47.2 From c5f8b69184cdcf3a92f4580b61233595a69689bd Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 16 Feb 2023 15:13:55 +0100 Subject: [PATCH 133/320] style(ui_kit): add example demo-page auto-generation --- .../example/lib/buttons/buttons.dart | 8 ++- .../wyatt_ui_kit/example/lib/cards/cards.dart | 8 ++- .../wyatt_ui_kit/example/lib/demo_page.dart | 23 +++++++ packages/wyatt_ui_kit/example/lib/home.dart | 52 +++++++------- .../example/lib/loaders/loaders.dart | 68 +++++++++++++++++++ .../example/lib/theme/loader_theme.dart | 63 +++++++++++++++++ .../example/lib/theme/themes.dart | 48 +++++++------ 7 files changed, 221 insertions(+), 49 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/demo_page.dart create mode 100644 packages/wyatt_ui_kit/example/lib/loaders/loaders.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme/loader_theme.dart diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart index 959cfbfd..cc2e1779 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart @@ -20,10 +20,14 @@ import 'package:wyatt_ui_kit_example/buttons/file_selection_button/file_selectio import 'package:wyatt_ui_kit_example/buttons/flat_button/flat_buttons.dart'; import 'package:wyatt_ui_kit_example/buttons/simple_icon_button/simple_icon_buttons.dart'; import 'package:wyatt_ui_kit_example/buttons/symbol_button/symbol_buttons.dart'; +import 'package:wyatt_ui_kit_example/demo_page.dart'; -class Buttons extends StatelessWidget { +class Buttons extends DemoPage { const Buttons({super.key}); + @override + String get title => 'Buttons'; + @override Widget build(BuildContext context) => ListView( cacheExtent: 1000, @@ -31,7 +35,7 @@ class Buttons extends StatelessWidget { const Gap(20), Align( child: Text( - 'Buttons', + title, style: Theme.of(context).textTheme.titleLarge, ), ), diff --git a/packages/wyatt_ui_kit/example/lib/cards/cards.dart b/packages/wyatt_ui_kit/example/lib/cards/cards.dart index fbbf058b..9037385f 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/cards.dart @@ -4,10 +4,14 @@ import 'package:wyatt_ui_kit_example/cards/information_card/information_cards.da import 'package:wyatt_ui_kit_example/cards/portfolio_card/portfolio_cards.dart'; import 'package:wyatt_ui_kit_example/cards/quote_card/quote_cards.dart'; import 'package:wyatt_ui_kit_example/cards/skill_card/skill_cards.dart'; +import 'package:wyatt_ui_kit_example/demo_page.dart'; -class Cards extends StatelessWidget { +class Cards extends DemoPage { const Cards({super.key}); + @override + String get title => 'Cards'; + @override Widget build(BuildContext context) => ListView( cacheExtent: 1000, @@ -15,7 +19,7 @@ class Cards extends StatelessWidget { const Gap(20), Align( child: Text( - 'Cards', + title, style: Theme.of(context).textTheme.titleLarge, ), ), diff --git a/packages/wyatt_ui_kit/example/lib/demo_page.dart b/packages/wyatt_ui_kit/example/lib/demo_page.dart new file mode 100644 index 00000000..4d3aea9a --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/demo_page.dart @@ -0,0 +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 . + +import 'package:flutter/material.dart'; + +abstract class DemoPage extends StatelessWidget { + const DemoPage({super.key}); + + String get title; +} diff --git a/packages/wyatt_ui_kit/example/lib/home.dart b/packages/wyatt_ui_kit/example/lib/home.dart index 9e156207..72b3ce4a 100644 --- a/packages/wyatt_ui_kit/example/lib/home.dart +++ b/packages/wyatt_ui_kit/example/lib/home.dart @@ -3,6 +3,8 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_kit_example/buttons/buttons.dart'; import 'package:wyatt_ui_kit_example/cards/cards.dart'; +import 'package:wyatt_ui_kit_example/demo_page.dart'; +import 'package:wyatt_ui_kit_example/loaders/loaders.dart'; import 'package:wyatt_ui_kit_example/theme/themes.dart'; const String title = 'Wyatt UIKit Example'; @@ -17,7 +19,8 @@ class Home extends StatefulWidget { } class _HomeState extends State { - final List pages = const [Cards(), Buttons()]; + // Simply add your demo page here. + final List pages = const [Cards(), Buttons(), Loaders()]; int currentIndex = 0; @@ -27,35 +30,34 @@ class _HomeState extends State { super.initState(); } + List _drawerTiles(BuildContext context) { + final tiles = []; + for (var i = 0; i < pages.length; i++) { + final page = pages[i]; + tiles.add( + ListTile( + title: Text(page.title), + onTap: () { + if (currentIndex != i) { + setState(() { + currentIndex = i; + }); + Navigator.pop(context); + } + }, + ), + ); + } + + return tiles; + } + @override Widget build(BuildContext context) => Scaffold( drawer: Drawer( child: ListView( padding: EdgeInsets.zero, - children: [ - ListTile( - title: const Text('Cards'), - onTap: () { - if (currentIndex != 0) { - setState(() { - currentIndex = 0; - }); - Navigator.pop(context); - } - }, - ), - ListTile( - title: const Text('Buttons'), - onTap: () { - if (currentIndex != 1) { - setState(() { - currentIndex = 1; - }); - Navigator.pop(context); - } - }, - ), - ], + children: _drawerTiles(context), ), ), appBar: AppBar( diff --git a/packages/wyatt_ui_kit/example/lib/loaders/loaders.dart b/packages/wyatt_ui_kit/example/lib/loaders/loaders.dart new file mode 100644 index 00000000..bc5d8945 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/loaders/loaders.dart @@ -0,0 +1,68 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/demo_page.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class Loaders extends DemoPage { + const Loaders({super.key}); + + @override + String get title => 'Loaders'; + + @override + Widget build(BuildContext context) => ListView( + cacheExtent: 1000, + children: [ + const Gap(20), + Align( + child: Text( + title, + style: Theme.of(context).textTheme.titleLarge, + ), + ), + const Gap(20), + const Loader( + radius: 57, + ), + const Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + Loader( + stroke: 5, + ), + Gap(20), + Loader( + colors: MultiColor([Constants.green2, Constants.white]), + stroke: 5, + ), + Gap(20), + Loader( + colors: MultiColor([Constants.red2, Constants.white]), + stroke: 5, + ), + ], + ), + const Gap(20), + ], + ); + +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/loader_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/loader_theme.dart new file mode 100644 index 00000000..e5050d89 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/loader_theme.dart @@ -0,0 +1,63 @@ +// 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 . + +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class LoaderTheme extends LoaderThemeExtension { + const LoaderTheme({ + super.colors, + super.stroke, + }); + + factory LoaderTheme.light() => const LoaderTheme( + colors: MultiColor([Constants.blue1, Constants.white]), + stroke: 15, + ); + + factory LoaderTheme.dark() => const LoaderTheme( + colors: MultiColor([Constants.blue2, Constants.grey2]), + stroke: 15, + ); + + @override + ThemeExtension copyWith({ + MultiColor? colors, + double? stroke, + }) => + LoaderTheme( + colors: colors ?? this.colors, + stroke: stroke ?? this.stroke, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! LoaderTheme) { + return this; + } + return LoaderTheme( + colors: MultiColor.lerp(colors, other.colors, t), + stroke: lerpDouble(stroke, other.stroke, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index ab8720fb..c298daf8 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -19,6 +19,7 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:wyatt_ui_kit_example/theme/file_selection_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/flat_button_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/loader_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme_extension.dart'; @@ -67,46 +68,49 @@ abstract class Themes { static ThemeData get studioLight => materialLight.copyWith( appBarTheme: AppBarTheme( - foregroundColor: const Color.fromRGBO(36, 38, 42, 1), - backgroundColor: Colors.white, + foregroundColor: const Color(0xFF24262A), + backgroundColor: const Color(0xFFFFFFFF), titleTextStyle: GoogleFonts.montserrat( fontSize: 18, fontWeight: FontWeight.w500, - color: const Color.fromRGBO(36, 38, 42, 1), + color: const Color(0xFF24262A), ), ), scaffoldBackgroundColor: Colors.white, extensions: >[ CustomCardColorExtension( backgroundColors: const [ - Color.fromRGBO(246, 246, 246, 1), + Color(0xFFF6F6F6), ], secondaryBackgroundColors: Colors.white, borderColor: const [ - Color.fromRGBO(221, 224, 227, 1), - Color.fromRGBO(202, 204, 212, 1), + Color(0xFFDDE0E3), + Color(0xFFCACCD4), ], title: GoogleFonts.montserrat( fontSize: 24, fontWeight: FontWeight.w500, - color: const Color.fromRGBO(36, 38, 42, 1), + color: const Color(0xFF24262A), ), subtitle: GoogleFonts.montserrat( fontSize: 15, fontWeight: FontWeight.w300, - color: const Color.fromRGBO(36, 38, 42, 1), + color: const Color(0xFF24262A), ), body: GoogleFonts.montserrat( fontSize: 12, fontWeight: FontWeight.w300, height: 1.7, - color: const Color.fromRGBO(36, 38, 42, 1), + color: const Color(0xFF24262A), ), ), + // Buttons FlatButtonTheme.light(), SymbolButtonTheme.light(), SimpleIconButtonTheme.light(), FileSelectionButtonTheme.light(), + // Loader + LoaderTheme.light(), ], ); @@ -114,46 +118,50 @@ abstract class Themes { static ThemeData get studioDark => materialDark.copyWith( appBarTheme: AppBarTheme( - foregroundColor: Colors.white, - backgroundColor: const Color.fromRGBO(56, 60, 64, 1), + foregroundColor: const Color(0xFFFFFFFF), + backgroundColor: const Color(0xFF383C40), titleTextStyle: GoogleFonts.montserrat( fontSize: 18, fontWeight: FontWeight.w500, - color: Colors.white, + color: const Color(0xFFFFFFFF), ), ), - scaffoldBackgroundColor: const Color.fromRGBO(56, 60, 64, 1), + scaffoldBackgroundColor: const Color(0xFF383C40), extensions: >[ CustomCardColorExtension( - secondaryBackgroundColors: Colors.white.withOpacity(0.04), + secondaryBackgroundColors: + const Color(0xFFFFFFFF).withOpacity(0.04), backgroundColors: [ - Colors.white.withOpacity(0.04), + const Color(0xFFFFFFFF).withOpacity(0.04), ], borderColor: const [ - Color.fromRGBO(96, 101, 106, 1), - Color.fromRGBO(56, 60, 64, 1), + Color(0xFF60656A), + Color(0xFF383C40), ], title: GoogleFonts.montserrat( fontSize: 24, fontWeight: FontWeight.w500, - color: Colors.white, + color: const Color(0xFFFFFFFF), ), subtitle: GoogleFonts.montserrat( fontSize: 15, fontWeight: FontWeight.w300, - color: Colors.white, + color: const Color(0xFFFFFFFF), ), body: GoogleFonts.montserrat( fontSize: 12, fontWeight: FontWeight.w300, height: 1.7, - color: Colors.white, + color: const Color(0xFFFFFFFF), ), ), + // Buttons FlatButtonTheme.dark(), SymbolButtonTheme.dark(), SimpleIconButtonTheme.dark(), FileSelectionButtonTheme.dark(), + // Loader + LoaderTheme.dark(), ], ); } -- 2.47.2 From ef5201537238ce42232e783d91ef7c0815168e19 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 17 Feb 2023 14:47:56 +0100 Subject: [PATCH 134/320] refactor(ui): rework text gradient and text wrapper --- .../src/core/extensions/string_extension.dart | 9 +- .../lib/src/core/utils/text_wrapper.dart | 11 +- .../lib/buttons/flat_button/flat_buttons.dart | 8 +- .../information_card/information_cards.dart | 22 +-- .../cards/portfolio_card/portfolio_cards.dart | 4 +- .../lib/cards/quote_card/quote_cards.dart | 7 +- .../lib/cards/skill_card/skill_cards.dart | 11 +- .../example/lib/theme/card_theme.dart | 127 ++++++++++++++++++ .../example/lib/theme/themes.dart | 61 +-------- .../example/lib/theme_extension.dart | 54 -------- .../file_selection_button_screen.dart | 17 +-- .../flat_button/flat_button_screen.dart | 8 +- .../symbol_button/symbol_button_screen.dart | 8 +- .../information_card/information_card.dart | 2 +- .../widgets/information_card_titles.dart | 4 +- .../cards/portfolio_card/portfolio_card.dart | 4 +- .../widgets/portfolio_card_header.dart | 2 +- .../cards/quote_card/quote_card.dart | 25 ++-- .../cards/skill_card/skill_card.dart | 2 +- .../skill_card/widgets/skill_card_header.dart | 4 +- .../skill_card/widgets/skill_card_skills.dart | 2 +- .../components/cards/widgets/card_text.dart | 12 +- .../cards/widgets/card_wrapper.dart | 20 +-- .../components/gradients/gradient_text.dart | 53 +++++--- .../gradients/gradient_text_style.dart | 85 ++++++++++++ .../src/components/gradients/gradients.dart | 20 +++ .../lib/src/domain/card_theme_extension.dart | 11 +- 27 files changed, 367 insertions(+), 226 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/theme/card_theme.dart delete mode 100644 packages/wyatt_ui_kit/example/lib/theme_extension.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text_style.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/gradients/gradients.dart diff --git a/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart b/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart index 886f51f9..04503d56 100644 --- a/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart +++ b/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart @@ -15,10 +15,11 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/src/core/utils/text_wrapper.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; extension StringExtension on String? { - TextWrapper? wrap({TextStyle? style, List? gradient}) => this != null - ? TextWrapper(this!, style: style, gradient: gradient) - : null; + TextWrapper? wrap({TextStyle? style, MultiColor? gradientColors}) => + this != null + ? TextWrapper(this!, style: style, gradientColors: gradientColors) + : null; } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart index 176765bc..f690aa89 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart @@ -15,17 +15,22 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +/// Wraps [String] and [TextStyle] into one object that can be +/// a [Text] or a [RichText]. class TextWrapper { const TextWrapper( this.text, { this.style, - this.gradient, + this.gradientColors, }); - factory TextWrapper.text(String text) => TextWrapper(text); + const TextWrapper.text(this.text) + : style = null, + gradientColors = null; final String text; final TextStyle? style; - final List? gradient; + final MultiColor? gradientColors; } diff --git a/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart index 2a4d684f..4c1a6b1d 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart @@ -31,8 +31,14 @@ class FlatButtons extends StatelessWidget { ), const Gap(20), Center( + /// You can overwrite global textstyle of the label with [label], + /// but if you only want to override the color/gradient of the text + /// in a particular case you can override the style that will + /// be merge during the build. child: FlatButton( - label: const TextWrapper('Voir notre savoir faire'), + label: const TextWrapper( + 'Voir notre savoir faire', + ), ), ), const Gap(20), diff --git a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart index 17cd4c98..a671cab1 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/information_card/information_cards.dart @@ -18,13 +18,13 @@ class InformationCards extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ - InformationCard( - icons: const [ + const InformationCard( + icons: [ FlutterLogo(size: 60), FlutterLogo(size: 60), FlutterLogo(size: 60), ], - title: const TextWrapper('Flutter'), + title: TextWrapper('Flutter'), subtitle: TextWrapper.text('One single code base.'), body: TextWrapper.text( 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' @@ -58,9 +58,9 @@ class InformationCards extends StatelessWidget { FlutterLogo(size: 60), ], title: 'Flutter'.wrap( - gradient: [Colors.blue, Colors.green], + gradientColors: const MultiColor([Colors.blue, Colors.green]), ), - subtitle: TextWrapper.text('One single code base.'), + subtitle: const TextWrapper.text('One single code base.'), body: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' 'Qui ipsum id ea ea nulla labore aute ullamco aute ' 'quis elit ut amet velit. Incididunt fugiat proident ' @@ -86,8 +86,8 @@ class InformationCards extends StatelessWidget { FlutterLogo(size: 60), ], axis: Axis.horizontal, - title: TextWrapper.text('Flutter'), - subtitle: TextWrapper.text('One single code base.'), + title: const TextWrapper.text('Flutter'), + subtitle: const TextWrapper.text('One single code base.'), body: 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' 'Qui ipsum id ea ea nulla labore aute ullamco aute ' 'quis elit ut amet velit. Incididunt fugiat proident ' @@ -100,10 +100,10 @@ class InformationCards extends StatelessWidget { 'magna cupidatat Lorem nulla cupidatat voluptate ' 'irure ex reprehenderit.' .wrap( - gradient: [ + gradientColors: const MultiColor([ Colors.red, Colors.orange, - ], + ]), ), ), const Gap(20), @@ -123,14 +123,14 @@ class InformationCards extends StatelessWidget { FlutterLogo(size: 60), ], axis: Axis.horizontal, - title: TextWrapper.text('Flutter'), + title: const TextWrapper.text('Flutter'), subtitle: 'One single code base.'.wrap( // gradient: [Colors.blue, Colors.green], style: const TextStyle( fontWeight: FontWeight.bold, ), ), - body: TextWrapper.text( + body: const TextWrapper.text( 'Cupidatat reprehenderit aliqua eiusmod Lorem. ' 'Qui ipsum id ea ea nulla labore aute ullamco aute ' 'quis elit ut amet velit. Incididunt fugiat proident ' diff --git a/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart index 4d3a440a..509cb240 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/portfolio_card/portfolio_cards.dart @@ -128,10 +128,10 @@ class PortfolioCards extends StatelessWidget { ), projectName: const TextWrapper( 'Flutter', - gradient: [ + gradientColors: MultiColor([ Colors.blue, Colors.green, - ], + ]), ), subtitle: const TextWrapper('Mobile / Web / Macos.'), description: const TextWrapper( diff --git a/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart index 91e52dd0..d5e76720 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/quote_card/quote_cards.dart @@ -49,7 +49,12 @@ class QuoteCards extends StatelessWidget { 'quis elit ut amet velit. Incididunt fugiat proident ' 'proident deserunt tempor Lorem cillum qui do ' 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' - .wrap(gradient: [Colors.red, Colors.orange]), + .wrap( + gradientColors: const MultiColor([ + Colors.red, + Colors.orange, + ]), + ), avatar: const FlutterLogo( size: 40, ), diff --git a/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart b/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart index 54dafd90..d8b54077 100644 --- a/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart +++ b/packages/wyatt_ui_kit/example/lib/cards/skill_card/skill_cards.dart @@ -44,7 +44,7 @@ class SkillCards extends StatelessWidget { 'proident deserunt tempor Lorem cillum qui do ' 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' .wrap(), - skills: [ + skills: const [ TextWrapper.text('Firebase'), TextWrapper.text( 'Qui ipsum id ea ea nulla labore aute ullamco aute ', @@ -62,11 +62,14 @@ class SkillCards extends StatelessWidget { 'proident deserunt tempor Lorem cillum qui do ' 'ullamco Lorem magna ipsum. Ullamco cupidatat velit ' .wrap(), - skills: [ + skills: const [ TextWrapper.text('Firebase'), - const TextWrapper( + TextWrapper( 'Qui ipsum id ea ea nulla labore aute ullamco aute ', - gradient: [Colors.red, Colors.orange], + gradientColors: MultiColor([ + Colors.red, + Colors.orange, + ]), ), TextWrapper.text('Firebase'), TextWrapper.text('Firebase'), diff --git a/packages/wyatt_ui_kit/example/lib/theme/card_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/card_theme.dart new file mode 100644 index 00000000..f103c368 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/card_theme.dart @@ -0,0 +1,127 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class CardTheme extends CardThemeExtension { + const CardTheme({ + super.backgroundColors, + super.body, + super.borderColors, + super.secondaryBackgroundColor, + super.shadowColor, + super.subtitle, + super.title, + }); + + factory CardTheme.light() => CardTheme( + backgroundColors: const MultiColor.single(Color(0xFFF6F6F6)), + secondaryBackgroundColor: Colors.white, + borderColors: const MultiColor([ + Color(0xFFDDE0E3), + Color(0xFFCACCD4), + ]), + title: GoogleFonts.montserrat( + fontSize: 24, + fontWeight: FontWeight.w500, + color: const Color(0xFF24262A), + ), + subtitle: GoogleFonts.montserrat( + fontSize: 15, + fontWeight: FontWeight.w300, + color: const Color(0xFF24262A), + ), + body: GoogleFonts.montserrat( + fontSize: 12, + fontWeight: FontWeight.w300, + height: 1.7, + color: const Color(0xFF24262A), + ), + ); + + factory CardTheme.dark() => CardTheme( + backgroundColors: + MultiColor.single(const Color(0xFFFFFFFF).withOpacity(0.04)), + secondaryBackgroundColor: const Color(0xFFFFFFFF).withOpacity(0.04), + borderColors: const MultiColor([ + Color(0xFF60656A), + Color(0xFF383C40), + ]), + title: GoogleFonts.montserrat( + fontSize: 24, + fontWeight: FontWeight.w500, + color: const Color(0xFFFFFFFF), + ), + subtitle: GoogleFonts.montserrat( + fontSize: 15, + fontWeight: FontWeight.w300, + color: const Color(0xFFFFFFFF), + ), + body: GoogleFonts.montserrat( + fontSize: 12, + fontWeight: FontWeight.w300, + height: 1.7, + color: const Color(0xFFFFFFFF), + ), + ); + + @override + ThemeExtension copyWith({ + MultiColor? backgroundColors, + Color? secondaryBackgroundColor, + MultiColor? borderColors, + BoxShadow? shadowColor, + TextStyle? body, + TextStyle? title, + TextStyle? subtitle, + }) => + CardTheme( + backgroundColors: backgroundColors ?? this.backgroundColors, + secondaryBackgroundColor: + secondaryBackgroundColor ?? this.secondaryBackgroundColor, + borderColors: borderColors ?? this.borderColors, + shadowColor: shadowColor ?? this.shadowColor, + body: body ?? this.body, + title: title ?? this.title, + subtitle: subtitle ?? this.subtitle, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! CardTheme) { + return this; + } + return CardTheme( + backgroundColors: other.backgroundColors, + secondaryBackgroundColor: Color.lerp( + secondaryBackgroundColor, + other.secondaryBackgroundColor, + t, + ), + borderColors: other.borderColors, + shadowColor: BoxShadow.lerp(shadowColor, other.shadowColor, t), + body: TextStyle.lerp(body, other.body, t), + title: TextStyle.lerp(title, other.title, t), + subtitle: TextStyle.lerp(subtitle, other.subtitle, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index c298daf8..684270f8 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -15,14 +15,14 @@ // along with this program. If not, see . import 'package:adaptive_theme/adaptive_theme.dart'; -import 'package:flutter/material.dart'; +import 'package:flutter/material.dart' hide CardTheme; import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_kit_example/theme/card_theme.dart'; import 'package:wyatt_ui_kit_example/theme/file_selection_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/flat_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/loader_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; -import 'package:wyatt_ui_kit_example/theme_extension.dart'; /// Easely switch between Material and Studio themes. abstract class Themes { @@ -78,32 +78,8 @@ abstract class Themes { ), scaffoldBackgroundColor: Colors.white, extensions: >[ - CustomCardColorExtension( - backgroundColors: const [ - Color(0xFFF6F6F6), - ], - secondaryBackgroundColors: Colors.white, - borderColor: const [ - Color(0xFFDDE0E3), - Color(0xFFCACCD4), - ], - title: GoogleFonts.montserrat( - fontSize: 24, - fontWeight: FontWeight.w500, - color: const Color(0xFF24262A), - ), - subtitle: GoogleFonts.montserrat( - fontSize: 15, - fontWeight: FontWeight.w300, - color: const Color(0xFF24262A), - ), - body: GoogleFonts.montserrat( - fontSize: 12, - fontWeight: FontWeight.w300, - height: 1.7, - color: const Color(0xFF24262A), - ), - ), + // Cards + CardTheme.light(), // Buttons FlatButtonTheme.light(), SymbolButtonTheme.light(), @@ -128,33 +104,8 @@ abstract class Themes { ), scaffoldBackgroundColor: const Color(0xFF383C40), extensions: >[ - CustomCardColorExtension( - secondaryBackgroundColors: - const Color(0xFFFFFFFF).withOpacity(0.04), - backgroundColors: [ - const Color(0xFFFFFFFF).withOpacity(0.04), - ], - borderColor: const [ - Color(0xFF60656A), - Color(0xFF383C40), - ], - title: GoogleFonts.montserrat( - fontSize: 24, - fontWeight: FontWeight.w500, - color: const Color(0xFFFFFFFF), - ), - subtitle: GoogleFonts.montserrat( - fontSize: 15, - fontWeight: FontWeight.w300, - color: const Color(0xFFFFFFFF), - ), - body: GoogleFonts.montserrat( - fontSize: 12, - fontWeight: FontWeight.w300, - height: 1.7, - color: const Color(0xFFFFFFFF), - ), - ), + // Cards + CardTheme.dark(), // Buttons FlatButtonTheme.dark(), SymbolButtonTheme.dark(), diff --git a/packages/wyatt_ui_kit/example/lib/theme_extension.dart b/packages/wyatt_ui_kit/example/lib/theme_extension.dart deleted file mode 100644 index 92abc0fb..00000000 --- a/packages/wyatt_ui_kit/example/lib/theme_extension.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:wyatt_ui_kit/wyatt_ui_kit.dart' as ui_kit; - -class CustomCardColorExtension extends ui_kit.CardThemeExtension { - const CustomCardColorExtension({ - super.backgroundColors, - super.secondaryBackgroundColors, - super.borderColor, - super.shadowColor, - super.body, - super.title, - super.subtitle, - }); - - @override - CustomCardColorExtension copyWith({ - List? backgroundColors, - Color? secondaryBackgroundColors, - List? borderColor, - BoxShadow? shadowColor, - TextStyle? body, - TextStyle? title, - TextStyle? subtitle, - }) => - CustomCardColorExtension( - backgroundColors: backgroundColors ?? this.backgroundColors, - secondaryBackgroundColors: - secondaryBackgroundColors ?? this.secondaryBackgroundColors, - borderColor: borderColor ?? this.borderColor, - body: body ?? this.body, - title: title ?? this.title, - subtitle: subtitle ?? this.subtitle, - ); - - @override - ThemeExtension lerp( - covariant ThemeExtension? other, - double t, - ) { - if (other is! CustomCardColorExtension) { - return this; - } - return CustomCardColorExtension( - secondaryBackgroundColors: Color.lerp( - secondaryBackgroundColors, - other.secondaryBackgroundColors, - t, - ), - body: TextStyle.lerp(body, other.body, t), - title: TextStyle.lerp(title, other.title, t), - subtitle: TextStyle.lerp(subtitle, other.subtitle, t), - ); - } -} diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index 8f884b51..bc45bec9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -24,7 +24,6 @@ import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.d import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/dotter_border_child.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; class FileSelectionButtonScreen extends CubitScreen { @@ -220,13 +219,7 @@ class FileSelectionButtonScreen title!.text, style: title!.style ?? style.title, ).toGradient( - LinearGradientHelper.fromNullableColors( - title?.gradient ?? - ((style.foregroundColors?.isGradient ?? - false) - ? style.foregroundColors?.colors - : null), - ), + gradientColors: style.foregroundColors, ), ], @@ -247,13 +240,7 @@ class FileSelectionButtonScreen subTitle!.text, style: subTitle!.style ?? style.subTitle, ).toGradient( - LinearGradientHelper.fromNullableColors( - subTitle?.gradient ?? - ((style.foregroundColors?.isGradient ?? - false) - ? style.foregroundColors?.colors - : null), - ), + gradientColors: style.foregroundColors, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 178cdb01..803c68cc 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -23,7 +23,6 @@ import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; class FlatButtonScreen extends CubitScreen { const FlatButtonScreen({ @@ -204,12 +203,7 @@ class FlatButtonScreen extends CubitScreen { label!.text, style: label!.style ?? style.label, ).toGradient( - LinearGradientHelper.fromNullableColors( - label?.gradient ?? - ((style.foregroundColors?.isGradient ?? false) - ? style.foregroundColors?.colors - : null), - ), + gradientColors: style.foregroundColors, ) ], Gap(style.padding?.vertical ?? 10), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index 547ebf64..b8c84633 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -24,7 +24,6 @@ import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubi import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart'; class SymbolButtonScreen extends CubitScreen { @@ -228,12 +227,7 @@ class SymbolButtonScreen label!.text, style: label!.style ?? style.label, ).toGradient( - LinearGradientHelper.fromNullableColors( - label?.gradient ?? - ((style.foregroundColors?.isGradient ?? false) - ? style.foregroundColors?.colors - : null), - ), + gradientColors: style.foregroundColors, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart index 87cbba04..bcde0f56 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart @@ -80,7 +80,7 @@ class InformationCard extends InformationCardComponent body!.text, textType: TextType.body, style: body!.style, - gradient: body!.gradient, + gradientColors: body!.gradientColors, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart index 2b48a39d..969e1505 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart @@ -44,7 +44,7 @@ class InformationCardTitles extends StatelessWidget { title!.text, textType: TextType.title, style: title!.style, - gradient: title!.gradient, + gradientColors: title!.gradientColors, ), ], if (subtitle != null) ...[ @@ -53,7 +53,7 @@ class InformationCardTitles extends StatelessWidget { subtitle!.text, textType: TextType.subtitle, style: subtitle!.style, - gradient: subtitle!.gradient, + gradientColors: subtitle!.gradientColors, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart index 88529fb9..1226b2e6 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart @@ -73,7 +73,7 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { description!.text, textType: TextType.body, style: description!.style, - gradient: description!.gradient, + gradientColors: description!.gradientColors, ), const Gap(20), PortfolioCardHeader( @@ -108,7 +108,7 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { description!.text, textType: TextType.body, style: description!.style, - gradient: description!.gradient, + gradientColors: description!.gradientColors, ), ], if (ctas != null) ...[const Gap(20), ...ctas!], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart index 39998629..2a9620fe 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart @@ -71,7 +71,7 @@ class PortfolioCardHeader extends StatelessWidget { color: secondaryBackgroundColors ?? Theme.of(context) .extension() - ?.secondaryBackgroundColors, + ?.secondaryBackgroundColor, borderRadius: BorderRadius.circular(8), ), child: Text( diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart index 358a3897..2363a5df 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart @@ -20,8 +20,7 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; part 'quote_card.g.dart'; @@ -63,9 +62,11 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { alignment: Alignment.topLeft, child: GradientText( '“', - gradient: gradient, - style: context.textTheme.titleLarge - ?.copyWith(fontWeight: FontWeight.bold), + style: GradientTextStyle.from( + context.textTheme.titleLarge + ?.copyWith(fontWeight: FontWeight.bold), + MultiColor(gradient?.colors), + ), ), ), if (quote != null) ...[ @@ -73,7 +74,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { quote!.text, textType: TextType.body, style: quote!.style, - gradient: quote!.gradient, + gradientColors: quote!.gradientColors, ), ], const Gap(15), @@ -82,9 +83,11 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { alignment: Alignment.bottomRight, child: GradientText( '”', - gradient: gradient, - style: context.textTheme.titleLarge - ?.copyWith(fontWeight: FontWeight.bold), + style: GradientTextStyle.from( + context.textTheme.titleLarge + ?.copyWith(fontWeight: FontWeight.bold), + MultiColor(gradient?.colors), + ), ), ), Row( @@ -102,7 +105,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { name!.text, textType: TextType.body, style: name!.style, - gradient: name!.gradient, + gradientColors: name!.gradientColors, ), ], if (subtitle != null) ...[ @@ -110,7 +113,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { subtitle!.text, textType: TextType.subtitle, style: subtitle!.style, - gradient: subtitle!.gradient, + gradientColors: subtitle!.gradientColors, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart index 357f8fcc..6285f0fa 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart @@ -70,7 +70,7 @@ class SkillCard extends SkillCardComponent with $SkillCardCWMixin { description!.text, textType: TextType.body, style: description!.style, - gradient: description!.gradient, + gradientColors: description!.gradientColors, ), const Gap(25), ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart index cd4bbfee..bfd8af2d 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart @@ -46,7 +46,7 @@ class SkillCardHeader extends StatelessWidget { color: secondaryBackgroundColors ?? Theme.of(context) .extension() - ?.secondaryBackgroundColors, + ?.secondaryBackgroundColor, ), child: gradient != null ? GradientIcon( @@ -67,7 +67,7 @@ class SkillCardHeader extends StatelessWidget { title!.text, textType: TextType.title, style: title!.style, - gradient: title!.gradient, + gradientColors: title!.gradientColors, ), ], ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart index 01e9c778..76059fa9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart @@ -50,7 +50,7 @@ class SkillCardSkills extends StatelessWidget { e.text, textType: TextType.body, style: e.style, - gradient: e.gradient, + gradientColors: e.gradientColors, ), ), ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart index 7f841274..87ae1880 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; enum TextType { @@ -28,13 +28,13 @@ class CardText extends StatelessWidget { const CardText( this.data, { required this.textType, - this.gradient, this.style, + this.gradientColors, super.key, }); final TextType textType; final TextStyle? style; - final List? gradient; + final MultiColor? gradientColors; final String data; TextStyle? _getStyle(BuildContext context) { @@ -58,9 +58,5 @@ class CardText extends StatelessWidget { Widget build(BuildContext context) => Text( data, style: _getStyle(context), - ).toGradient( - LinearGradientHelper.fromNullableColors( - gradient, - ), - ); + ).toGradient(gradientColors: gradientColors); } diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index fe2f1cb8..4c608380 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -110,8 +110,9 @@ class _CardWrapperState extends State { if (extensionCardColor != null && extensionCardColor.backgroundColors != null && - extensionCardColor.backgroundColors!.length >= 2) { - return LinearGradient(colors: extensionCardColor.backgroundColors!); + extensionCardColor.backgroundColors!.isGradient) { + return LinearGradient( + colors: extensionCardColor.backgroundColors!.colors,); } } return null; @@ -126,9 +127,8 @@ class _CardWrapperState extends State { Theme.of(context).extension(); if (extensionCardColor != null && - extensionCardColor.backgroundColors != null && - extensionCardColor.backgroundColors!.length == 1) { - return extensionCardColor.backgroundColors!.first; + extensionCardColor.backgroundColors != null) { + return extensionCardColor.backgroundColors!.color; } } return Theme.of(context).cardColor; @@ -151,16 +151,16 @@ class _CardWrapperState extends State { final extensionCardColor = Theme.of(context).extension(); if (extensionCardColor != null && - extensionCardColor.borderColor != null) { - if (extensionCardColor.borderColor!.length >= 2) { + extensionCardColor.borderColors != null) { + if (extensionCardColor.borderColors!.isGradient) { return GradientBoxBorder( gradient: LinearGradient( - colors: extensionCardColor.borderColor!, + colors: extensionCardColor.borderColors!.colors, ), ); - } else if (extensionCardColor.backgroundColors!.isNotEmpty) { + } else if (extensionCardColor.backgroundColors!.colors.isNotEmpty) { return Border.all( - color: extensionCardColor.backgroundColors!.first, + color: extensionCardColor.backgroundColors!.color, ); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart index 0bed20a9..cd6ae7fe 100644 --- a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text.dart @@ -17,16 +17,29 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; extension GradientTextExtension on Text { - GradientText toGradient(Gradient? gradient) => - GradientText.from(this, gradient); + /// If this text contains a [GradientTextStyle] it simply transforms it in + /// [GradientText], if not it needs a [MultiColor]. + GradientText toGradient({MultiColor? gradientColors}) { + if (style is GradientTextStyle?) { + // Gradient + final gradientStyle = (style as GradientTextStyle?)?.gradientColors; + return GradientText.from(this, gradientStyle ?? gradientColors); + } + + return GradientText.from(this, gradientColors); + } + + GradientText toFlutterGradient(Gradient? gradient) => + GradientText.from(this, MultiColor(gradient?.colors)); } class GradientText extends Text { const GradientText( super.data, { - this.gradient, super.style, super.strutStyle, super.textAlign, @@ -43,10 +56,10 @@ class GradientText extends Text { super.key, }); - factory GradientText.from(Text text, Gradient? gradient) => GradientText( + factory GradientText.from(Text text, MultiColor? gradientColors) => + GradientText( text.data ?? '', - style: text.style, - gradient: gradient, + style: GradientTextStyle.from(text.style, gradientColors), strutStyle: text.strutStyle, textAlign: text.textAlign, textDirection: text.textDirection, @@ -62,20 +75,24 @@ class GradientText extends Text { key: text.key, ); - final Gradient? gradient; - @override Widget build(BuildContext context) { - if (gradient != null) { - return ShaderMask( - blendMode: BlendMode.srcIn, - shaderCallback: (bounds) => gradient!.createShader( - Rect.fromLTWH(0, 0, bounds.width, bounds.height), - ), - child: super.build(context), - ); - } else { - return super.build(context); + if (style is GradientTextStyle?) { + // Gradient + final gradientStyle = (style as GradientTextStyle?)?.gradientColors; + final gradient = (gradientStyle?.isGradient ?? false) + ? LinearGradientHelper.fromMultiColor(gradientStyle!) + : null; + if (gradient != null) { + return ShaderMask( + blendMode: BlendMode.srcIn, + shaderCallback: (bounds) => gradient.createShader( + Rect.fromLTWH(0, 0, bounds.width, bounds.height), + ), + child: super.build(context), + ); + } } + return super.build(context); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text_style.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text_style.dart new file mode 100644 index 00000000..e737e9e4 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_text_style.dart @@ -0,0 +1,85 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class GradientTextStyle extends TextStyle { + const GradientTextStyle({ + this.gradientColors, + super.inherit, + super.color, + super.backgroundColor, + super.fontSize, + super.fontWeight, + super.fontStyle, + super.letterSpacing, + super.wordSpacing, + super.textBaseline, + super.height, + super.leadingDistribution, + super.locale, + super.foreground, + super.background, + super.shadows, + super.fontFeatures, + super.fontVariations, + super.decoration, + super.decorationColor, + super.decorationStyle, + super.decorationThickness, + super.debugLabel, + super.fontFamily, + super.fontFamilyFallback, + super.package, + super.overflow, + }); + + factory GradientTextStyle.from( + TextStyle? textStyle, + MultiColor? gradientColors, + ) => + GradientTextStyle( + gradientColors: gradientColors, + inherit: textStyle?.inherit ?? true, + color: textStyle?.color, + backgroundColor: textStyle?.backgroundColor, + fontSize: textStyle?.fontSize, + fontWeight: textStyle?.fontWeight, + fontStyle: textStyle?.fontStyle, + letterSpacing: textStyle?.letterSpacing, + wordSpacing: textStyle?.wordSpacing, + textBaseline: textStyle?.textBaseline, + height: textStyle?.height, + leadingDistribution: textStyle?.leadingDistribution, + locale: textStyle?.locale, + foreground: textStyle?.foreground, + background: textStyle?.background, + shadows: textStyle?.shadows, + fontFeatures: textStyle?.fontFeatures, + fontVariations: textStyle?.fontVariations, + decoration: textStyle?.decoration, + decorationColor: textStyle?.decorationColor, + decorationStyle: textStyle?.decorationStyle, + decorationThickness: textStyle?.decorationThickness, + debugLabel: textStyle?.debugLabel, + fontFamily: textStyle?.fontFamily, + fontFamilyFallback: textStyle?.fontFamilyFallback, + overflow: textStyle?.overflow, + ); + + final MultiColor? gradientColors; +} diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradients.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradients.dart new file mode 100644 index 00000000..e19e9d36 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradients.dart @@ -0,0 +1,20 @@ +// 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 . + +export 'gradient_box_border.dart'; +export 'gradient_icon.dart'; +export 'gradient_text.dart'; +export 'gradient_text_style.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart index 63a0f8a6..1ac3c983 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/card_theme_extension.dart @@ -15,12 +15,13 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; abstract class CardThemeExtension extends ThemeExtension { const CardThemeExtension({ this.backgroundColors, - this.secondaryBackgroundColors, - this.borderColor, + this.secondaryBackgroundColor, + this.borderColors, this.shadowColor, this.body, this.title, @@ -28,9 +29,9 @@ abstract class CardThemeExtension extends ThemeExtension { }); // Colors - final List? backgroundColors; - final Color? secondaryBackgroundColors; - final List? borderColor; + final MultiColor? backgroundColors; + final Color? secondaryBackgroundColor; + final MultiColor? borderColors; final BoxShadow? shadowColor; // TextStyles -- 2.47.2 From efeb3acff36fd0a8004dceb9afd5797b5f8fe865 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 17 Feb 2023 14:48:23 +0100 Subject: [PATCH 135/320] build(ui): optimize build runner --- packages/wyatt_ui_components/build.yaml | 9 +++++++++ packages/wyatt_ui_kit/build.yaml | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 packages/wyatt_ui_components/build.yaml create mode 100644 packages/wyatt_ui_kit/build.yaml diff --git a/packages/wyatt_ui_components/build.yaml b/packages/wyatt_ui_components/build.yaml new file mode 100644 index 00000000..2c112259 --- /dev/null +++ b/packages/wyatt_ui_components/build.yaml @@ -0,0 +1,9 @@ +targets: + $default: + builders: + # Typically the builder key is just the package name, run `pub run build_runner doctor` to check your config. + wyatt_component_copy_with_gen:component_copy_with_gen: + generate_for: + # Example glob for only the Dart files under `lib/models` + - lib/**/*.dart + - example/lib/**/*.dart \ No newline at end of file diff --git a/packages/wyatt_ui_kit/build.yaml b/packages/wyatt_ui_kit/build.yaml new file mode 100644 index 00000000..70c89a03 --- /dev/null +++ b/packages/wyatt_ui_kit/build.yaml @@ -0,0 +1,8 @@ +targets: + $default: + builders: + # Typically the builder key is just the package name, run `pub run build_runner doctor` to check your config. + wyatt_component_copy_with_gen:component_copy_with_gen: + generate_for: + # Example glob for only the Dart files under `lib/models` + - lib/**/*.dart \ No newline at end of file -- 2.47.2 From 25018dc78a66cf89f1cff1b641e673894821a083 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 17 Feb 2023 14:48:49 +0100 Subject: [PATCH 136/320] feat(ui_component): add rich text builder / parser --- .../lib/src/domain/entities/entities.dart | 1 + .../entities/rich_text_builder/parser.dart | 120 ++++++++++++++++++ .../rich_text_builder/rich_text_builder.dart | 19 +++ .../rich_text_builder_component.dart | 56 ++++++++ .../rich_text_builder_component.g.dart | 25 ++++ .../rich_text_builder_style.dart | 83 ++++++++++++ 6 files changed, 304 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index f04375b8..85ce40c3 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -23,4 +23,5 @@ export './error_widget_component.dart'; export './loader_component.dart'; export './loader_style.dart'; export './loading_widget_component.dart'; +export './rich_text_builder/rich_text_builder.dart'; export './theme_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart new file mode 100644 index 00000000..bd92d252 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart @@ -0,0 +1,120 @@ +// 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 . + +import 'package:flutter/widgets.dart'; + +class RichTextStyleParameter { + const RichTextStyleParameter( + this.defaultStyle, + this.definedStyle, + this.styleName, + ); + + final TextStyle defaultStyle; + final Map definedStyle; + final String? styleName; + + TextStyle get style { + if (definedStyle.containsKey(styleName)) { + return definedStyle[styleName]!; + } + return defaultStyle; + } + + RichTextStyleParameter copyWith({ + TextStyle? defaultStyle, + Map? definedStyle, + String? styleName, + }) => + RichTextStyleParameter( + defaultStyle ?? this.defaultStyle, + definedStyle ?? this.definedStyle, + styleName ?? this.styleName, + ); +} + +class RichTextNode { + RichTextNode(this.nodes); + + final List nodes; + + static RichTextNode from( + String content, + RegExp regex, + RichTextStyleParameter styleParameter, + ) { + final matches = regex.allMatches(content); + if (matches.isNotEmpty) { + // match found -> construct node with leaf/nodes + final List nodes = []; + for (var i = 0; i < matches.length; i++) { + final previousMatch = i > 0 ? matches.elementAt(i - 1) : null; + final currentMatch = matches.elementAt(i); + // non match before + final nonMatchBefore = (previousMatch != null) + ? content.substring(previousMatch.end, currentMatch.start) + : content.substring(0, currentMatch.start); + nodes + ..add(RichTextNode.from(nonMatchBefore, regex, styleParameter)) + // match + ..add( + RichTextNode.from( + currentMatch.group(2)!, + regex, + styleParameter.copyWith(styleName: currentMatch.group(1)), + ), + ); + } + // non match after + final nonMatchAfter = content.substring(matches.last.end); + nodes.add(RichTextNode.from(nonMatchAfter, regex, styleParameter)); + return RichTextNode(nodes); + } else { + // match not found -> construct leaf + return RichTextLeaf(styleParameter.style, content); + } + } + + InlineSpan toInlineSpan(RichTextParser parser) { + final children = []; + for (final node in nodes) { + children.add(node.toInlineSpan(parser)); + } + return TextSpan(children: children); + } +} + +class RichTextLeaf extends RichTextNode { + RichTextLeaf(this.style, this.content) : super([]); + + final TextStyle style; + final String content; + + @override + InlineSpan toInlineSpan(RichTextParser parser) => + parser.nodeBuilder.call(content, style); +} + +class RichTextParser { + const RichTextParser({required this.nodeBuilder}); + factory RichTextParser.defaultBuilder() => RichTextParser( + nodeBuilder: (content, style) => TextSpan( + text: content, + style: style, + ), + ); + final InlineSpan Function(String content, TextStyle style) nodeBuilder; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart new file mode 100644 index 00000000..1eae2365 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart @@ -0,0 +1,19 @@ +// 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 . + +export 'parser.dart'; +export 'rich_text_builder_component.dart'; +export 'rich_text_builder_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart new file mode 100644 index 00000000..603aaa32 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart @@ -0,0 +1,56 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'rich_text_builder_component.g.dart'; + +@ComponentProxyExtension() +abstract class RichTextBuilderComponent extends Component + with CopyWithMixin<$RichTextBuilderComponentCWProxy> { + const RichTextBuilderComponent({ + this.text, + this.parser, + this.defaultStyle, + this.styles, + super.themeResolver, + super.key, + }); + + /// Full text + final String? text; + + /// How to build InlineSpans + final RichTextParser? parser; + + /// Default TextStyle used in this rich text component. + final TextStyle? defaultStyle; + + /// Used styles in this rich text component. + /// + /// e.g. + /// ```dart + /// styles = {'red': TextStyle(color: Colors.red)}; + /// ``` + /// will transform: + /// ```text + /// This text is red? styles; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart new file mode 100644 index 00000000..9c5194e6 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart @@ -0,0 +1,25 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'rich_text_builder_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $RichTextBuilderComponentCWProxy { + RichTextBuilderComponent text(String? text); + RichTextBuilderComponent parser(RichTextParser? parser); + RichTextBuilderComponent defaultStyle(TextStyle? defaultStyle); + RichTextBuilderComponent styles(Map? styles); + RichTextBuilderComponent themeResolver( + ThemeResolver? themeResolver); + RichTextBuilderComponent key(Key? key); + RichTextBuilderComponent call({ + String? text, + RichTextParser? parser, + TextStyle? defaultStyle, + Map? styles, + ThemeResolver? themeResolver, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart new file mode 100644 index 00000000..43a03ff5 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart @@ -0,0 +1,83 @@ +// 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 . + +import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class RichTextBuilderStyle extends ThemeStyle { + const RichTextBuilderStyle({ + this.defaultStyle, + this.styles, + }); + + /// Merges non-null `b` attributes in `a` + static RichTextBuilderStyle? merge( + RichTextBuilderStyle? a, + RichTextBuilderStyle? b, + ) { + if (b == null) { + return a?.copyWith(); + } + if (a == null) { + return b.copyWith(); + } + + return a.copyWith( + defaultStyle: b.defaultStyle, + styles: b.styles, + ); + } + + /// Used for interpolation. + static RichTextBuilderStyle? lerp( + RichTextBuilderStyle? a, + RichTextBuilderStyle? b, + double t, + ) { + if (a == null || b == null) { + return null; + } + // b.copyWith to return b attributes even if they are not lerped + return b.copyWith( + defaultStyle: TextStyle.lerp(a.defaultStyle, b.defaultStyle, t), + styles: b.styles, // TODO(wyatt): compute lerp value of each styles + ); + } + + /// Default TextStyle used in this rich text component. + final TextStyle? defaultStyle; + + /// Used styles in this rich text component. + final Map? styles; + + @override + RichTextBuilderStyle mergeWith(RichTextBuilderStyle? other) => + RichTextBuilderStyle.merge(this, other)!; + + @override + RichTextBuilderStyle? lerpWith(RichTextBuilderStyle? other, double t) => + RichTextBuilderStyle.lerp(this, other, t); + + @override + RichTextBuilderStyle copyWith({ + TextStyle? defaultStyle, + Map? styles, + }) => + RichTextBuilderStyle( + defaultStyle: defaultStyle ?? this.defaultStyle, + styles: styles ?? this.styles, + ); +} -- 2.47.2 From 66719732f73fbfe20b5edae76684078d79e407cb Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 17 Feb 2023 14:49:41 +0100 Subject: [PATCH 137/320] feat(ui_kit): implement rich text builder (closes #141) --- packages/wyatt_ui_kit/example/lib/home.dart | 8 +- .../rich_text_builders.dart | 70 ++++++++++++ .../lib/src/components/components.dart | 2 + .../rich_text_builder/rich_text_builder.dart | 101 ++++++++++++++++++ .../rich_text_builder.g.dart | 50 +++++++++ .../rich_text_builder_theme_resolver.dart | 50 +++++++++ .../rich_text_builder_theme_extension.dart | 31 ++++++ 7 files changed, 311 insertions(+), 1 deletion(-) create mode 100644 packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/rich_text_builder_theme_extension.dart diff --git a/packages/wyatt_ui_kit/example/lib/home.dart b/packages/wyatt_ui_kit/example/lib/home.dart index 72b3ce4a..cac6c236 100644 --- a/packages/wyatt_ui_kit/example/lib/home.dart +++ b/packages/wyatt_ui_kit/example/lib/home.dart @@ -5,6 +5,7 @@ import 'package:wyatt_ui_kit_example/buttons/buttons.dart'; import 'package:wyatt_ui_kit_example/cards/cards.dart'; import 'package:wyatt_ui_kit_example/demo_page.dart'; import 'package:wyatt_ui_kit_example/loaders/loaders.dart'; +import 'package:wyatt_ui_kit_example/rich_text_builders/rich_text_builders.dart'; import 'package:wyatt_ui_kit_example/theme/themes.dart'; const String title = 'Wyatt UIKit Example'; @@ -20,7 +21,12 @@ class Home extends StatefulWidget { class _HomeState extends State { // Simply add your demo page here. - final List pages = const [Cards(), Buttons(), Loaders()]; + final List pages = const [ + Cards(), + Buttons(), + Loaders(), + RichTextBuilders(), + ]; int currentIndex = 0; diff --git a/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart b/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart new file mode 100644 index 00000000..662a2b91 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart @@ -0,0 +1,70 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/demo_page.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +class RichTextBuilders extends DemoPage { + const RichTextBuilders({super.key}); + + @override + String get title => 'RichTextBuilders'; + + @override + Widget build(BuildContext context) => ListView( + cacheExtent: 1000, + children: [ + const Gap(20), + Align( + child: Text( + title, + style: Theme.of(context).textTheme.titleLarge, + ), + ), + const Gap(20), + RichTextBuilder( + defaultStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + height: 1.8, + ), + styles: { + 'gradient-blue': GradientTextStyle.from( + GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.blue1, + height: 1.8, + ), + const MultiColor(Constants.blueGradient), + ) + }, + text: ''' +Innovation, Expertise et Accompagnement... +Notre agence de développement Wyatt Studio met tout en oeuvre pour vous aider à concrétiser vos idées de solutions informatiques et mobiles. + +Vous aussi, comme beaucoup d’autres agences ou startups, faites nous confiance pour la réalisation de votre projet dès maintenant ! +''', + ), + const Gap(20), + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart index 191af8e8..e78cb40d 100644 --- a/packages/wyatt_ui_kit/lib/src/components/components.dart +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -16,4 +16,6 @@ export './buttons/buttons.dart'; export './cards/cards.dart'; +export './gradients/gradients.dart'; export './loader/loader.dart'; +export './rich_text_builder/rich_text_builder.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart new file mode 100644 index 00000000..8bf2017b --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart @@ -0,0 +1,101 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +part 'rich_text_builder.g.dart'; + +@ComponentCopyWithExtension() +class RichTextBuilder extends RichTextBuilderComponent + with $RichTextBuilderCWMixin { + const RichTextBuilder({ + super.text, + super.parser, + super.defaultStyle, + super.styles, + super.themeResolver, + super.key, + }); + + @override + RichTextBuilderThemeResolver? get themeResolver => + super.themeResolver as RichTextBuilderThemeResolver?; + + /// Negotiate the theme to get a complete style. + RichTextBuilderStyle _resolve(BuildContext context) { + final RichTextBuilderThemeResolver resolver = themeResolver ?? + RichTextBuilderThemeResolver( + computeExtensionValueFn: ( + context, + defaultValue, + themeExtension, { + extra, + }) => + RichTextBuilderStyle( + defaultStyle: themeExtension.defaultStyle, + ), + customStyleFn: (context, {extra}) => RichTextBuilderStyle( + defaultStyle: defaultStyle, + styles: styles, + ), + ); + + return resolver.negotiate(context); + } + + @override + Widget build(BuildContext context) { + final style = _resolve(context); + final RegExp regex = RegExp(r'<(.*?)>(.*?)<\/\1>'); + final root = RichTextNode.from( + text ?? '', + regex, + RichTextStyleParameter( + style.defaultStyle!, + style.styles ?? {}, + null, + ), + ); + + final customParser = parser ?? + RichTextParser( + nodeBuilder: (content, style) { + if (style is GradientTextStyle?) { + return WidgetSpan( + child: GradientText( + content, + style: style, + softWrap: true, + ), + style: style, + ); + } + return TextSpan( + text: content, + style: style, + ); + }, + ); + + return RichText( + text: root.toInlineSpan(customParser), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart new file mode 100644 index 00000000..235c5f0f --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart @@ -0,0 +1,50 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'rich_text_builder.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $RichTextBuilderCWProxyImpl implements $RichTextBuilderComponentCWProxy { + const $RichTextBuilderCWProxyImpl(this._value); + final RichTextBuilder _value; + @override + RichTextBuilder text(String? text) => this(text: text); + @override + RichTextBuilder parser(RichTextParser? parser) => this(parser: parser); + @override + RichTextBuilder defaultStyle(TextStyle? defaultStyle) => + this(defaultStyle: defaultStyle); + @override + RichTextBuilder styles(Map? styles) => + this(styles: styles); + @override + RichTextBuilder themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override + RichTextBuilder key(Key? key) => this(key: key); + @override + RichTextBuilder call({ + String? text, + RichTextParser? parser, + TextStyle? defaultStyle, + Map? styles, + ThemeResolver? themeResolver, + Key? key, + }) => + RichTextBuilder( + text: text ?? _value.text, + parser: parser ?? _value.parser, + defaultStyle: defaultStyle ?? _value.defaultStyle, + styles: styles ?? _value.styles, + themeResolver: themeResolver ?? _value.themeResolver, + key: key ?? _value.key, + ); +} + +mixin $RichTextBuilderCWMixin on Component { + $RichTextBuilderComponentCWProxy get copyWith => + $RichTextBuilderCWProxyImpl(this as RichTextBuilder); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart new file mode 100644 index 00000000..3ccf0112 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart @@ -0,0 +1,50 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/domain/rich_text_builder_theme_extension.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class RichTextBuilderThemeResolver extends ThemeResolver { + const RichTextBuilderThemeResolver({ + required this.computeExtensionValueFn, + required this.customStyleFn, + }); + + /// Values taken from + @override + RichTextBuilderStyle computeDefaultValue( + BuildContext context, { + void extra, + }) => + RichTextBuilderStyle( + defaultStyle: context.textTheme.bodyMedium, + ); + + @override + final RichTextBuilderStyle? Function( + BuildContext context, + RichTextBuilderStyle defaultValue, + RichTextBuilderThemeExtension themeExtension, { + void extra, + }) computeExtensionValueFn; + + @override + final RichTextBuilderStyle? Function(BuildContext context, {void extra}) + customStyleFn; +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/rich_text_builder_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/rich_text_builder_theme_extension.dart new file mode 100644 index 00000000..e3ccd47e --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/rich_text_builder_theme_extension.dart @@ -0,0 +1,31 @@ +// 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 . + +import 'package:flutter/material.dart'; + +abstract class RichTextBuilderThemeExtension + extends ThemeExtension { + const RichTextBuilderThemeExtension({ + this.defaultStyle, + this.styles, + }); + + /// Default TextStyle used in this rich text component. + final TextStyle? defaultStyle; + + /// Used styles in this rich text component. + final Map? styles; +} -- 2.47.2 From 2769d45e201c649533efc935a68904293fc4c2d0 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 17 Feb 2023 15:57:54 +0100 Subject: [PATCH 138/320] fix(ui_kit): fix text align, add selection and update example for rich text builder --- .../rich_text_builders.dart | 37 +++--- .../lib/theme/rich_text_builder_theme.dart | 120 ++++++++++++++++++ .../example/lib/theme/themes.dart | 8 ++ .../rich_text_builder/rich_text_builder.dart | 13 +- .../rich_text_builder_theme_resolver.dart | 1 - .../wyatt_ui_kit/lib/src/domain/domain.dart | 3 +- 6 files changed, 155 insertions(+), 27 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/lib/theme/rich_text_builder_theme.dart diff --git a/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart b/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart index 662a2b91..8d5316e4 100644 --- a/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart +++ b/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart @@ -16,11 +16,8 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; import 'package:wyatt_ui_kit_example/demo_page.dart'; -import 'package:wyatt_ui_kit_example/theme/constants.dart'; class RichTextBuilders extends DemoPage { const RichTextBuilders({super.key}); @@ -40,29 +37,25 @@ class RichTextBuilders extends DemoPage { ), ), const Gap(20), - RichTextBuilder( - defaultStyle: GoogleFonts.montserrat( - fontSize: 18, - fontWeight: FontWeight.w500, - height: 1.8, - ), - styles: { - 'gradient-blue': GradientTextStyle.from( - GoogleFonts.montserrat( - fontSize: 20, - fontWeight: FontWeight.w600, - color: Constants.blue1, - height: 1.8, - ), - const MultiColor(Constants.blueGradient), - ) - }, - text: ''' + const Padding( + padding: EdgeInsets.all(8), + child: RichTextBuilder( + text: ''' Innovation, Expertise et Accompagnement... Notre agence de développement Wyatt Studio met tout en oeuvre pour vous aider à concrétiser vos idées de solutions informatiques et mobiles. Vous aussi, comme beaucoup d’autres agences ou startups, faites nous confiance pour la réalisation de votre projet dès maintenant ! -''', + ''', + ), + ), + const Gap(20), + const Padding( + padding: EdgeInsets.all(8), + child: RichTextBuilder( + text: ''' +Je peux être bleu, ou même rouge en dégradé. À vrai dire je peux être un peu n'importe quelle couleur. + ''', + ), ), const Gap(20), ], diff --git a/packages/wyatt_ui_kit/example/lib/theme/rich_text_builder_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/rich_text_builder_theme.dart new file mode 100644 index 00000000..2088f0fe --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/rich_text_builder_theme.dart @@ -0,0 +1,120 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +final Map _styles = { + 'gradient-blue': GradientTextStyle.from( + GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.blue1, + height: 1.8, + ), + const MultiColor(Constants.blueGradient), + ), + 'gradient-red': GradientTextStyle.from( + GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.red1, + height: 1.8, + ), + const MultiColor(Constants.redGradient), + ), + 'gradient-green': GradientTextStyle.from( + GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.green1, + height: 1.8, + ), + const MultiColor(Constants.greenGradient), + ), + 'blue': GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.blue1, + height: 1.8, + ), + 'red': GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.red1, + height: 1.8, + ), + 'green': GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.green1, + height: 1.8, + ), +}; + +class RichTextBuilderTheme extends RichTextBuilderThemeExtension { + const RichTextBuilderTheme({ + super.defaultStyle, + super.styles, + }); + + factory RichTextBuilderTheme.light() => RichTextBuilderTheme( + defaultStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: Constants.grey3, + height: 1.8, + ), + styles: _styles, + ); + + factory RichTextBuilderTheme.dark() => RichTextBuilderTheme( + defaultStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: Constants.white, + height: 1.8, + ), + styles: _styles, + ); + + @override + ThemeExtension copyWith({ + TextStyle? defaultStyle, + Map? styles, + }) => + RichTextBuilderTheme( + defaultStyle: defaultStyle ?? this.defaultStyle, + styles: styles ?? this.styles, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! RichTextBuilderTheme) { + return this; + } + return RichTextBuilderTheme( + defaultStyle: TextStyle.lerp(defaultStyle, other.defaultStyle, t), + styles: styles, + ); + } +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index 684270f8..63ecea53 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -21,6 +21,7 @@ import 'package:wyatt_ui_kit_example/theme/card_theme.dart'; import 'package:wyatt_ui_kit_example/theme/file_selection_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/flat_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/loader_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/rich_text_builder_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; @@ -87,6 +88,8 @@ abstract class Themes { FileSelectionButtonTheme.light(), // Loader LoaderTheme.light(), + // Rich Text + RichTextBuilderTheme.light(), ], ); @@ -102,6 +105,9 @@ abstract class Themes { color: const Color(0xFFFFFFFF), ), ), + drawerTheme: const DrawerThemeData( + backgroundColor: Color(0xFF383C40), + ), scaffoldBackgroundColor: const Color(0xFF383C40), extensions: >[ // Cards @@ -113,6 +119,8 @@ abstract class Themes { FileSelectionButtonTheme.dark(), // Loader LoaderTheme.dark(), + // Rich Text + RichTextBuilderTheme.dark(), ], ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart index 8bf2017b..745d3462 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart @@ -50,6 +50,7 @@ class RichTextBuilder extends RichTextBuilderComponent }) => RichTextBuilderStyle( defaultStyle: themeExtension.defaultStyle, + styles: themeExtension.styles, ), customStyleFn: (context, {extra}) => RichTextBuilderStyle( defaultStyle: defaultStyle, @@ -73,7 +74,6 @@ class RichTextBuilder extends RichTextBuilderComponent null, ), ); - final customParser = parser ?? RichTextParser( nodeBuilder: (content, style) { @@ -83,6 +83,9 @@ class RichTextBuilder extends RichTextBuilderComponent content, style: style, softWrap: true, + textHeightBehavior: const TextHeightBehavior( + applyHeightToLastDescent: false, + ), ), style: style, ); @@ -94,8 +97,12 @@ class RichTextBuilder extends RichTextBuilderComponent }, ); - return RichText( - text: root.toInlineSpan(customParser), + return SelectionArea( + child: Text.rich( + TextSpan(children: [root.toInlineSpan(customParser)]), + textHeightBehavior: + const TextHeightBehavior(applyHeightToLastDescent: false), + ), ); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart index 3ccf0112..f619d0a0 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/domain/rich_text_builder_theme_extension.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class RichTextBuilderThemeResolver extends ThemeResolver. export './button_theme_extension/button_theme_extension.dart'; +export './card_theme_extension.dart'; export './loader_theme_extension.dart'; -export 'card_theme_extension.dart'; +export './rich_text_builder_theme_extension.dart'; -- 2.47.2 From f67e4aa112e75ba97deaccc39a9f5ec44117df6e Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 17 Feb 2023 16:28:22 +0100 Subject: [PATCH 139/320] ci: use latest dart version in ci container --- .drone.yml | 4 ++-- packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart diff --git a/.drone.yml b/.drone.yml index 90dd9c7e..21d90d38 100644 --- a/.drone.yml +++ b/.drone.yml @@ -20,12 +20,12 @@ name: default steps: - name: quality-check - image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0 + image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0-1 commands: - melos run quality-check - melos run publish:validate - name: publish - image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0 + image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0-1 commands: - melos run publish:validate diff --git a/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart b/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart deleted file mode 100644 index 3a06c0e1..00000000 --- a/packages/wyatt_ui_kit/test/wyatt_ui_kit_test.dart +++ /dev/null @@ -1 +0,0 @@ -// TODO(wyatt): add some tests -- 2.47.2 From 5387dd6eed60933eb27d21e716898fea27edcd08 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 17 Feb 2023 17:26:23 +0100 Subject: [PATCH 140/320] build(ui_kit): use hosted version of bloc_helper --- packages/wyatt_ui_kit/pubspec.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index 319289e2..912ae443 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -17,9 +17,10 @@ dependencies: gap: ^2.0.1 meta: ^1.8.0 wyatt_bloc_helper: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_bloc_helper + hosted: + url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + name: wyatt_bloc_helper + version: 2.0.0 wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git -- 2.47.2 From 419c99c10345657c46fd9cafa3e35e5c0d62c725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 16 Feb 2023 10:16:57 +0100 Subject: [PATCH 141/320] feat(ui_components): add text input abstract class (#138) --- .../domain/entities/text_input_component.dart | 151 ++++++++++++++++++ .../entities/text_input_component.g.dart | 139 ++++++++++++++++ 2 files changed, 290 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart new file mode 100644 index 00000000..fc7a78dc --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart @@ -0,0 +1,151 @@ +// 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 . + +import 'dart:ui'; + +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'text_input_component.g.dart'; + +@ComponentProxyExtension() +abstract class TextInputComponent extends Component + with CopyWithMixin<$TextInputComponentCWProxy> { + const TextInputComponent({ + this.backgroundColors, + this.borderColors, + this.radius, + this.controller, + this.focusNode, + this.decoration, + this.keyboardType, + this.smartDashesType, + this.smartQuotesType, + this.enableInteractiveSelection, + this.textInputAction, + this.textCapitalization, + this.style, + this.strutStyle, + this.textAlign, + this.textAlignVertical, + this.textDirection, + this.readOnly, + this.showCursor, + this.autofocus, + this.obscuringCharacter, + this.obscureText, + this.autocorrect, + this.enableSuggestions, + this.maxLines, + this.minLines, + this.expands, + this.maxLength, + this.maxLengthEnforcement, + this.onChanged, + this.onEditingComplete, + this.onSubmitted, + this.onAppPrivateCommand, + this.inputFormatters, + this.enabled, + this.cursorWidth, + this.cursorHeight, + this.cursorRadius, + this.cursorColor, + this.selectionHeightStyle, + this.selectionWidthStyle, + this.keyboardAppearance, + this.scrollPadding, + this.dragStartBehavior, + this.selectionControls, + this.onTap, + this.onTapOutside, + this.mouseCursor, + this.scrollController, + this.scrollPhysics, + this.autofillHints, + this.clipBehavior, + this.restorationId, + this.scribbleEnabled, + this.enableIMEPersonalizedLearning, + this.contextMenuBuilder, + this.spellCheckConfiguration, + this.magnifierConfiguration, + super.key, + }); + + final TextMagnifierConfiguration? magnifierConfiguration; + final TextEditingController? controller; + final FocusNode? focusNode; + final InputDecoration? decoration; + final TextInputType? keyboardType; + final TextInputAction? textInputAction; + final TextCapitalization? textCapitalization; + final TextStyle? style; + final StrutStyle? strutStyle; + final TextAlign? textAlign; + final TextAlignVertical? textAlignVertical; + final TextDirection? textDirection; + final bool? autofocus; + final String? obscuringCharacter; + final bool? obscureText; + final bool? autocorrect; + final SmartDashesType? smartDashesType; + final SmartQuotesType? smartQuotesType; + final bool? enableSuggestions; + final int? maxLines; + final int? minLines; + final bool? expands; + final bool? readOnly; + final bool? showCursor; + final int? maxLength; + final MaxLengthEnforcement? maxLengthEnforcement; + final ValueChanged? onChanged; + final VoidCallback? onEditingComplete; + final ValueChanged? onSubmitted; + final AppPrivateCommandCallback? onAppPrivateCommand; + final List? inputFormatters; + final bool? enabled; + final double? cursorWidth; + final double? cursorHeight; + final Radius? cursorRadius; + final Color? cursorColor; + final BoxHeightStyle? selectionHeightStyle; + final BoxWidthStyle? selectionWidthStyle; + final Brightness? keyboardAppearance; + final EdgeInsets? scrollPadding; + final bool? enableInteractiveSelection; + final TextSelectionControls? selectionControls; + final DragStartBehavior? dragStartBehavior; + final GestureTapCallback? onTap; + final TapRegionCallback? onTapOutside; + final MouseCursor? mouseCursor; + final ScrollPhysics? scrollPhysics; + final ScrollController? scrollController; + final Iterable? autofillHints; + final Clip? clipBehavior; + final String? restorationId; + final bool? scribbleEnabled; + final bool? enableIMEPersonalizedLearning; + final EditableTextContextMenuBuilder? contextMenuBuilder; + final SpellCheckConfiguration? spellCheckConfiguration; + + final List? backgroundColors; + final List? borderColors; + final double? radius; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart new file mode 100644 index 00000000..da0342ae --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart @@ -0,0 +1,139 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'text_input_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $TextInputComponentCWProxy { + TextInputComponent backgroundColors(List? backgroundColors); + TextInputComponent borderColors(List? borderColors); + TextInputComponent radius(double? radius); + TextInputComponent controller(TextEditingController? controller); + TextInputComponent focusNode(FocusNode? focusNode); + TextInputComponent decoration(InputDecoration? decoration); + TextInputComponent keyboardType(TextInputType? keyboardType); + TextInputComponent smartDashesType(SmartDashesType? smartDashesType); + TextInputComponent smartQuotesType(SmartQuotesType? smartQuotesType); + TextInputComponent enableInteractiveSelection( + bool? enableInteractiveSelection); + TextInputComponent textInputAction(TextInputAction? textInputAction); + TextInputComponent textCapitalization(TextCapitalization? textCapitalization); + TextInputComponent style(TextStyle? style); + TextInputComponent strutStyle(StrutStyle? strutStyle); + TextInputComponent textAlign(TextAlign? textAlign); + TextInputComponent textAlignVertical(TextAlignVertical? textAlignVertical); + TextInputComponent textDirection(TextDirection? textDirection); + TextInputComponent readOnly(bool? readOnly); + TextInputComponent showCursor(bool? showCursor); + TextInputComponent autofocus(bool? autofocus); + TextInputComponent obscuringCharacter(String? obscuringCharacter); + TextInputComponent obscureText(bool? obscureText); + TextInputComponent autocorrect(bool? autocorrect); + TextInputComponent enableSuggestions(bool? enableSuggestions); + TextInputComponent maxLines(int? maxLines); + TextInputComponent minLines(int? minLines); + TextInputComponent expands(bool? expands); + TextInputComponent maxLength(int? maxLength); + TextInputComponent maxLengthEnforcement( + MaxLengthEnforcement? maxLengthEnforcement); + TextInputComponent onChanged(void Function(String)? onChanged); + TextInputComponent onEditingComplete(void Function()? onEditingComplete); + TextInputComponent onSubmitted(void Function(String)? onSubmitted); + TextInputComponent onAppPrivateCommand( + void Function(String, Map)? onAppPrivateCommand); + TextInputComponent inputFormatters(List? inputFormatters); + TextInputComponent enabled(bool? enabled); + TextInputComponent cursorWidth(double? cursorWidth); + TextInputComponent cursorHeight(double? cursorHeight); + TextInputComponent cursorRadius(Radius? cursorRadius); + TextInputComponent cursorColor(Color? cursorColor); + TextInputComponent selectionHeightStyle(BoxHeightStyle? selectionHeightStyle); + TextInputComponent selectionWidthStyle(BoxWidthStyle? selectionWidthStyle); + TextInputComponent keyboardAppearance(Brightness? keyboardAppearance); + TextInputComponent scrollPadding(EdgeInsets? scrollPadding); + TextInputComponent dragStartBehavior(DragStartBehavior? dragStartBehavior); + TextInputComponent selectionControls( + TextSelectionControls? selectionControls); + TextInputComponent onTap(void Function()? onTap); + TextInputComponent onTapOutside( + void Function(PointerDownEvent)? onTapOutside); + TextInputComponent mouseCursor(MouseCursor? mouseCursor); + TextInputComponent scrollController(ScrollController? scrollController); + TextInputComponent scrollPhysics(ScrollPhysics? scrollPhysics); + TextInputComponent autofillHints(Iterable? autofillHints); + TextInputComponent clipBehavior(Clip? clipBehavior); + TextInputComponent restorationId(String? restorationId); + TextInputComponent scribbleEnabled(bool? scribbleEnabled); + TextInputComponent enableIMEPersonalizedLearning( + bool? enableIMEPersonalizedLearning); + TextInputComponent contextMenuBuilder( + Widget Function(BuildContext, EditableTextState)? contextMenuBuilder); + TextInputComponent spellCheckConfiguration( + SpellCheckConfiguration? spellCheckConfiguration); + TextInputComponent magnifierConfiguration( + TextMagnifierConfiguration? magnifierConfiguration); + TextInputComponent key(Key? key); + TextInputComponent call({ + List? backgroundColors, + List? borderColors, + double? radius, + TextEditingController? controller, + FocusNode? focusNode, + InputDecoration? decoration, + TextInputType? keyboardType, + SmartDashesType? smartDashesType, + SmartQuotesType? smartQuotesType, + bool? enableInteractiveSelection, + TextInputAction? textInputAction, + TextCapitalization? textCapitalization, + TextStyle? style, + StrutStyle? strutStyle, + TextAlign? textAlign, + TextAlignVertical? textAlignVertical, + TextDirection? textDirection, + bool? readOnly, + bool? showCursor, + bool? autofocus, + String? obscuringCharacter, + bool? obscureText, + bool? autocorrect, + bool? enableSuggestions, + int? maxLines, + int? minLines, + bool? expands, + int? maxLength, + MaxLengthEnforcement? maxLengthEnforcement, + void Function(String)? onChanged, + void Function()? onEditingComplete, + void Function(String)? onSubmitted, + void Function(String, Map)? onAppPrivateCommand, + List? inputFormatters, + bool? enabled, + double? cursorWidth, + double? cursorHeight, + Radius? cursorRadius, + Color? cursorColor, + BoxHeightStyle? selectionHeightStyle, + BoxWidthStyle? selectionWidthStyle, + Brightness? keyboardAppearance, + EdgeInsets? scrollPadding, + DragStartBehavior? dragStartBehavior, + TextSelectionControls? selectionControls, + void Function()? onTap, + void Function(PointerDownEvent)? onTapOutside, + MouseCursor? mouseCursor, + ScrollController? scrollController, + ScrollPhysics? scrollPhysics, + Iterable? autofillHints, + Clip? clipBehavior, + String? restorationId, + bool? scribbleEnabled, + bool? enableIMEPersonalizedLearning, + Widget Function(BuildContext, EditableTextState)? contextMenuBuilder, + SpellCheckConfiguration? spellCheckConfiguration, + TextMagnifierConfiguration? magnifierConfiguration, + Key? key, + }); +} -- 2.47.2 From 1e8d5d088e8746b1406018afc361599ca618ceea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 16 Feb 2023 10:23:37 +0100 Subject: [PATCH 142/320] chore(ui_components): export text inputs (#138) --- .../wyatt_ui_components/lib/src/domain/entities/entities.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 85ce40c3..4a9a67a0 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -24,4 +24,5 @@ export './loader_component.dart'; export './loader_style.dart'; export './loading_widget_component.dart'; export './rich_text_builder/rich_text_builder.dart'; +export './text_input_component.dart'; export './theme_style.dart'; -- 2.47.2 From c2b60f2d7961f5f95489b08c289a7e12822a800d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 16 Feb 2023 10:26:40 +0100 Subject: [PATCH 143/320] feat(ui_kit): add text input theme extension (#138) --- .../domain/input_text_theme_extension.dart | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 packages/wyatt_ui_kit/lib/src/domain/input_text_theme_extension.dart diff --git a/packages/wyatt_ui_kit/lib/src/domain/input_text_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/input_text_theme_extension.dart new file mode 100644 index 00000000..d71340fc --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/input_text_theme_extension.dart @@ -0,0 +1,36 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class InputTexThemetExtension + extends ThemeExtension { + InputTexThemetExtension({ + this.backgroundColors, + this.borderColors, + this.floatingLabelTextStyle, + this.inputStyle, + }); + + // Colors: + final MultiColor? backgroundColors; + final MultiColor? borderColors; + + // TextStyles: + final TextStyle? floatingLabelTextStyle; + final TextStyle? inputStyle; +} -- 2.47.2 From c6beae597bc0957c7782bac9a78b0ffeab293ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 16 Feb 2023 13:14:01 +0100 Subject: [PATCH 144/320] refactor(ui_components): update colors using Multicolor class (#138) --- .../lib/src/domain/entities/text_input_component.dart | 4 ++-- .../lib/src/domain/entities/text_input_component.g.dart | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart index fc7a78dc..f89985e6 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart @@ -145,7 +145,7 @@ abstract class TextInputComponent extends Component final EditableTextContextMenuBuilder? contextMenuBuilder; final SpellCheckConfiguration? spellCheckConfiguration; - final List? backgroundColors; - final List? borderColors; + final MultiColor? backgroundColors; + final MultiColor? borderColors; final double? radius; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart index da0342ae..0bb149e2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart @@ -7,8 +7,8 @@ part of 'text_input_component.dart'; // ************************************************************************** abstract class $TextInputComponentCWProxy { - TextInputComponent backgroundColors(List? backgroundColors); - TextInputComponent borderColors(List? borderColors); + TextInputComponent backgroundColors(MultiColor? backgroundColors); + TextInputComponent borderColors(MultiColor? borderColors); TextInputComponent radius(double? radius); TextInputComponent controller(TextEditingController? controller); TextInputComponent focusNode(FocusNode? focusNode); @@ -76,8 +76,8 @@ abstract class $TextInputComponentCWProxy { TextMagnifierConfiguration? magnifierConfiguration); TextInputComponent key(Key? key); TextInputComponent call({ - List? backgroundColors, - List? borderColors, + MultiColor? backgroundColors, + MultiColor? borderColors, double? radius, TextEditingController? controller, FocusNode? focusNode, -- 2.47.2 From f6c16c5dc40375aabe7bfb7f3f1e11a8016e1e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 16 Feb 2023 13:25:25 +0100 Subject: [PATCH 145/320] feat(ui_components): add isColor getter in multicolor helper --- .../lib/src/core/utils/multi_color.dart | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart index 8f36e970..aa37be5b 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart @@ -23,24 +23,20 @@ class MultiColor { final List? _colors; final Color? _color; - Color get color { - if (_color != null) { - return _color!; - } - if (_colors?.isNotEmpty ?? false) { - return _colors!.first; - } - throw IndexError.withLength( - 0, - _colors?.length ?? 0, - message: '_color is not defined or _colors is empty.', - ); - } + Color get color => _color != null + ? _color! + : _colors?.isNotEmpty ?? false + ? _colors!.first + : throw IndexError.withLength( + 0, + _colors?.length ?? 0, + message: '_color is not defined or _colors is empty.', + ); List get colors => _colors ?? []; - bool get isGradient => - (_colors?.isNotEmpty ?? false) && (_colors?.length ?? 0) > 1; + bool get isGradient => (_colors?.length ?? 0) > 1; + bool get isColor => _color != null || isGradient; static MultiColor? lerp(MultiColor? a, MultiColor? b, double t) { if (a == null && b == null) { -- 2.47.2 From edf72cf4c2a235d9383470bfa04b222fe5603c04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 08:20:37 +0100 Subject: [PATCH 146/320] feat(ui_components):add text input components, theme extension and worked on utils (#138) --- .../lib/src/core/core.dart | 2 +- .../lib/src/core/enums/enums.dart | 18 ++ .../lib/src/core/enums/status_state.dart | 22 +++ .../lib/src/core/utils/multi_color.dart | 30 ++- .../lib/src/core/utils/theme_resolver.dart | 41 ++-- .../lib/src/domain/entities/entities.dart | 2 +- .../text_input_component.dart | 40 +++- .../text_input_component.g.dart | 38 +++- .../text_inputs/text_input_style.dart | 102 ++++++++++ .../text_inputs/text_input_style.g.dart | 185 ++++++++++++++++++ .../entities/text_inputs/text_inputs.dart | 18 ++ 11 files changed, 454 insertions(+), 44 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/core/enums/enums.dart create mode 100644 packages/wyatt_ui_components/lib/src/core/enums/status_state.dart rename packages/wyatt_ui_components/lib/src/domain/entities/{ => text_inputs}/text_input_component.dart (86%) rename packages/wyatt_ui_components/lib/src/domain/entities/{ => text_inputs}/text_input_component.g.dart (82%) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_inputs.dart diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index a18f1e81..50874264 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'enums/control_state.dart'; +export 'enums/enums.dart'; export 'extensions/build_context_extensions.dart'; export 'extensions/string_extension.dart'; export 'mixins/copy_with_mixin.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/enums/enums.dart b/packages/wyatt_ui_components/lib/src/core/enums/enums.dart new file mode 100644 index 00000000..9b4b1438 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/enums/enums.dart @@ -0,0 +1,18 @@ +// 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 . + +export './control_state.dart'; +export './status_state.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/enums/status_state.dart b/packages/wyatt_ui_components/lib/src/core/enums/status_state.dart new file mode 100644 index 00000000..878899f6 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/enums/status_state.dart @@ -0,0 +1,22 @@ +// 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 . + +enum StatusState { + initial, + success, + loading, + error; +} diff --git a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart index aa37be5b..9e9b7222 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart @@ -41,10 +41,36 @@ class MultiColor { static MultiColor? lerp(MultiColor? a, MultiColor? b, double t) { if (a == null && b == null) { return null; - } - if (b == null) { + } else if (a == null) { + return b; + } else if (b == null) { return a; } + if (a.isColor && b.isColor) { + return MultiColor.single(Color.lerp(a.color, b.color, t)); + } else if (a.isColor && b.isGradient) { + return MultiColor( + b.colors + .map((e) => Color.lerp(a.color, e, t)) + .whereType() + .toList(), + ); + } else if (a.isGradient && b.isColor) { + return MultiColor( + a.colors + .map((e) => Color.lerp(b.color, e, t)) + .whereType() + .toList(), + ); + } else if (a.isGradient && b.isGradient) { + final colors = List.empty(growable: true); + for (int i = 0; i < a.colors.length; i++) { + final lerpColor = Color.lerp(a.colors[i], b.colors[i], t); + if (lerpColor != null) { + colors.add(lerpColor); + } + } + } return b; } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index 45834ca5..c77e588b 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -35,24 +35,26 @@ abstract class ThemeResolver, T, E> { /// {@macro theme_resolver} const ThemeResolver(); - S? Function( - BuildContext context, - S defaultValue, - T themeExtension, { - E? extra, - }) get computeExtensionValueFn; - S? Function(BuildContext context, {E? extra}) get customStyleFn; + S? Function(BuildContext context, S extensionValue, {E? extra}) + get customStyleFn; /// Compute default value from Flutter Theme or with hardcoded values. S computeDefaultValue(BuildContext context, {E? extra}); + S? computeExtensionValueFn( + BuildContext context, + S defaultValue, + T themeExtension, { + E? extra, + }); + /// Compute values from the extension if found - S? computeExtensionValue( + S? _computeExtensionValue( BuildContext context, S defaultValue, { E? extra, }) { - final themeExtension = findExtension(context); + final themeExtension = Theme.of(context).extension(); if (themeExtension != null) { return computeExtensionValueFn( context, @@ -65,30 +67,27 @@ abstract class ThemeResolver, T, E> { } /// Compute custom value - S? computeCustomValue( + S? _computeCustomValue( BuildContext context, S previousPhaseValue, { E? extra, }) { - final customStyle = customStyleFn(context, extra: extra); + final customStyle = customStyleFn( + context, + previousPhaseValue, + extra: extra, + ); if (customStyle != null) { return customStyle; } return previousPhaseValue; } - T? findExtension(BuildContext context) => Theme.of(context).extension(); - /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { S style = computeDefaultValue(context, extra: extra); - final S? extensionStyle = - computeExtensionValue(context, style, extra: extra); - - style = style.mergeWith(extensionStyle); - - final S? customStyle = computeCustomValue(context, style, extra: extra); - - return style.mergeWith(customStyle); + style = _computeExtensionValue(context, style, extra: extra) ?? style; + style = _computeCustomValue(context, style, extra: extra) ?? style; + return style; } } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 4a9a67a0..93e81e4a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -24,5 +24,5 @@ export './loader_component.dart'; export './loader_style.dart'; export './loading_widget_component.dart'; export './rich_text_builder/rich_text_builder.dart'; -export './text_input_component.dart'; +export './text_inputs/text_inputs.dart'; export './theme_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.dart similarity index 86% rename from packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.dart index f89985e6..2963da6a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.dart @@ -28,12 +28,21 @@ part 'text_input_component.g.dart'; abstract class TextInputComponent extends Component with CopyWithMixin<$TextInputComponentCWProxy> { const TextInputComponent({ - this.backgroundColors, - this.borderColors, - this.radius, + this.expand, + this.onError, + this.validator, + this.suffixText, + this.prefixText, + this.prefixIcon, + this.suffixIcon, + this.label, + this.hint, + this.normalStyle, + this.focusedStyle, + this.errorStyle, + this.disableStyle, this.controller, this.focusNode, - this.decoration, this.keyboardType, this.smartDashesType, this.smartQuotesType, @@ -92,7 +101,6 @@ abstract class TextInputComponent extends Component final TextMagnifierConfiguration? magnifierConfiguration; final TextEditingController? controller; final FocusNode? focusNode; - final InputDecoration? decoration; final TextInputType? keyboardType; final TextInputAction? textInputAction; final TextCapitalization? textCapitalization; @@ -120,7 +128,7 @@ abstract class TextInputComponent extends Component final ValueChanged? onSubmitted; final AppPrivateCommandCallback? onAppPrivateCommand; final List? inputFormatters; - final bool? enabled; + final ValueNotifier? enabled; final double? cursorWidth; final double? cursorHeight; final Radius? cursorRadius; @@ -145,7 +153,21 @@ abstract class TextInputComponent extends Component final EditableTextContextMenuBuilder? contextMenuBuilder; final SpellCheckConfiguration? spellCheckConfiguration; - final MultiColor? backgroundColors; - final MultiColor? borderColors; - final double? radius; + final bool Function(String)? validator; + final String? Function(String)? onError; + + final TextInputStyle? normalStyle; + final TextInputStyle? focusedStyle; + final TextInputStyle? errorStyle; + final TextInputStyle? disableStyle; + + final bool? expand; + + final TextWrapper? label; + final TextWrapper? hint; + + final TextWrapper? prefixText; + final TextWrapper? suffixText; + final Icon? prefixIcon; + final Icon? suffixIcon; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.g.dart similarity index 82% rename from packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.g.dart index 0bb149e2..59083bd6 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_input_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.g.dart @@ -7,12 +7,21 @@ part of 'text_input_component.dart'; // ************************************************************************** abstract class $TextInputComponentCWProxy { - TextInputComponent backgroundColors(MultiColor? backgroundColors); - TextInputComponent borderColors(MultiColor? borderColors); - TextInputComponent radius(double? radius); + TextInputComponent expand(bool? expand); + TextInputComponent onError(String Function(String)? onError); + TextInputComponent validator(bool Function(String)? validator); + TextInputComponent suffixText(TextWrapper? suffixText); + TextInputComponent prefixText(TextWrapper? prefixText); + TextInputComponent prefixIcon(Icon? prefixIcon); + TextInputComponent suffixIcon(Icon? suffixIcon); + TextInputComponent label(TextWrapper? label); + TextInputComponent hint(TextWrapper? hint); + TextInputComponent normalStyle(TextInputStyle? normalStyle); + TextInputComponent focusedStyle(TextInputStyle? focusedStyle); + TextInputComponent errorStyle(TextInputStyle? errorStyle); + TextInputComponent disableStyle(TextInputStyle? disableStyle); TextInputComponent controller(TextEditingController? controller); TextInputComponent focusNode(FocusNode? focusNode); - TextInputComponent decoration(InputDecoration? decoration); TextInputComponent keyboardType(TextInputType? keyboardType); TextInputComponent smartDashesType(SmartDashesType? smartDashesType); TextInputComponent smartQuotesType(SmartQuotesType? smartQuotesType); @@ -44,7 +53,7 @@ abstract class $TextInputComponentCWProxy { TextInputComponent onAppPrivateCommand( void Function(String, Map)? onAppPrivateCommand); TextInputComponent inputFormatters(List? inputFormatters); - TextInputComponent enabled(bool? enabled); + TextInputComponent enabled(ValueNotifier? enabled); TextInputComponent cursorWidth(double? cursorWidth); TextInputComponent cursorHeight(double? cursorHeight); TextInputComponent cursorRadius(Radius? cursorRadius); @@ -76,12 +85,21 @@ abstract class $TextInputComponentCWProxy { TextMagnifierConfiguration? magnifierConfiguration); TextInputComponent key(Key? key); TextInputComponent call({ - MultiColor? backgroundColors, - MultiColor? borderColors, - double? radius, + bool? expand, + String Function(String)? onError, + bool Function(String)? validator, + TextWrapper? suffixText, + TextWrapper? prefixText, + Icon? prefixIcon, + Icon? suffixIcon, + TextWrapper? label, + TextWrapper? hint, + TextInputStyle? normalStyle, + TextInputStyle? focusedStyle, + TextInputStyle? errorStyle, + TextInputStyle? disableStyle, TextEditingController? controller, FocusNode? focusNode, - InputDecoration? decoration, TextInputType? keyboardType, SmartDashesType? smartDashesType, SmartQuotesType? smartQuotesType, @@ -110,7 +128,7 @@ abstract class $TextInputComponentCWProxy { void Function(String)? onSubmitted, void Function(String, Map)? onAppPrivateCommand, List? inputFormatters, - bool? enabled, + ValueNotifier? enabled, double? cursorWidth, double? cursorHeight, Radius? cursorRadius, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart new file mode 100644 index 00000000..a456647e --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart @@ -0,0 +1,102 @@ +// 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 . + +import 'package:copy_with_extension/copy_with_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +part 'text_input_style.g.dart'; + +@CopyWith() +class TextInputStyle { + TextInputStyle({ + this.labelStyle, + this.hintStyle, + this.backgroundColors, + this.borderColors, + this.boxShadow, + this.radius, + this.inputStyle, + this.iconColor, + this.prefixStyle, + this.prefixIconColor, + this.suffixStyle, + this.suffixIconColor, + }); + + final TextStyle? labelStyle; + final TextStyle? hintStyle; + + final Color? iconColor; + final TextStyle? prefixStyle; + final Color? prefixIconColor; + final TextStyle? suffixStyle; + final Color? suffixIconColor; + + final MultiColor? backgroundColors; + final MultiColor? borderColors; + final BoxShadow? boxShadow; + final BorderRadiusGeometry? radius; + final TextStyle? inputStyle; + + static TextInputStyle? merge(TextInputStyle? a, TextInputStyle? b) { + if (b == null) { + return a?.copyWith(); + } + if (a == null) { + return b.copyWith(); + } + return a.copyWith( + labelStyle: b.labelStyle, + hintStyle: b.hintStyle, + backgroundColors: b.backgroundColors, + borderColors: b.borderColors, + boxShadow: b.boxShadow, + radius: b.radius, + inputStyle: b.inputStyle, + iconColor: b.iconColor, + prefixStyle: b.prefixStyle, + prefixIconColor: b.prefixIconColor, + suffixIconColor: b.suffixIconColor, + suffixStyle: b.suffixStyle, + ); + } + + static TextInputStyle? lerp( + TextInputStyle? a, + TextInputStyle? b, + double t, + ) { + if (a == null || b == null) { + return null; + } + + return b.copyWith( + labelStyle: TextStyle.lerp(a.labelStyle, b.labelStyle, t), + hintStyle: TextStyle.lerp(a.hintStyle, b.hintStyle, t), + backgroundColors: + MultiColor.lerp(a.backgroundColors, b.backgroundColors, t), + radius: BorderRadiusGeometry.lerp(a.radius, b.radius, t), + borderColors: MultiColor.lerp(a.borderColors, b.borderColors, t), + boxShadow: BoxShadow.lerp(a.boxShadow, b.boxShadow, t), + inputStyle: TextStyle.lerp(a.inputStyle, b.inputStyle, t), + prefixStyle: TextStyle.lerp(a.prefixStyle, b.prefixStyle, t), + suffixStyle: TextStyle.lerp(a.suffixStyle, b.suffixStyle, t), + prefixIconColor: Color.lerp(a.prefixIconColor, b.prefixIconColor, t), + suffixIconColor: Color.lerp(a.suffixIconColor, b.suffixIconColor, t), + iconColor: Color.lerp(a.iconColor, b.iconColor, t), + ); + } +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart new file mode 100644 index 00000000..972c2b88 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart @@ -0,0 +1,185 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'text_input_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$TextInputStyleCWProxy { + TextInputStyle labelStyle(TextStyle? labelStyle); + + TextInputStyle hintStyle(TextStyle? hintStyle); + + TextInputStyle backgroundColors(MultiColor? backgroundColors); + + TextInputStyle borderColors(MultiColor? borderColors); + + TextInputStyle boxShadow(BoxShadow? boxShadow); + + TextInputStyle radius(BorderRadiusGeometry? radius); + + TextInputStyle inputStyle(TextStyle? inputStyle); + + TextInputStyle iconColor(Color? iconColor); + + TextInputStyle prefixStyle(TextStyle? prefixStyle); + + TextInputStyle prefixIconColor(Color? prefixIconColor); + + TextInputStyle suffixStyle(TextStyle? suffixStyle); + + TextInputStyle suffixIconColor(Color? suffixIconColor); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TextInputStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// TextInputStyle(...).copyWith(id: 12, name: "My name") + /// ```` + TextInputStyle call({ + TextStyle? labelStyle, + TextStyle? hintStyle, + MultiColor? backgroundColors, + MultiColor? borderColors, + BoxShadow? boxShadow, + BorderRadiusGeometry? radius, + TextStyle? inputStyle, + Color? iconColor, + TextStyle? prefixStyle, + Color? prefixIconColor, + TextStyle? suffixStyle, + Color? suffixIconColor, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfTextInputStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfTextInputStyle.copyWith.fieldName(...)` +class _$TextInputStyleCWProxyImpl implements _$TextInputStyleCWProxy { + const _$TextInputStyleCWProxyImpl(this._value); + + final TextInputStyle _value; + + @override + TextInputStyle labelStyle(TextStyle? labelStyle) => + this(labelStyle: labelStyle); + + @override + TextInputStyle hintStyle(TextStyle? hintStyle) => this(hintStyle: hintStyle); + + @override + TextInputStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + TextInputStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + TextInputStyle boxShadow(BoxShadow? boxShadow) => this(boxShadow: boxShadow); + + @override + TextInputStyle radius(BorderRadiusGeometry? radius) => this(radius: radius); + + @override + TextInputStyle inputStyle(TextStyle? inputStyle) => + this(inputStyle: inputStyle); + + @override + TextInputStyle iconColor(Color? iconColor) => this(iconColor: iconColor); + + @override + TextInputStyle prefixStyle(TextStyle? prefixStyle) => + this(prefixStyle: prefixStyle); + + @override + TextInputStyle prefixIconColor(Color? prefixIconColor) => + this(prefixIconColor: prefixIconColor); + + @override + TextInputStyle suffixStyle(TextStyle? suffixStyle) => + this(suffixStyle: suffixStyle); + + @override + TextInputStyle suffixIconColor(Color? suffixIconColor) => + this(suffixIconColor: suffixIconColor); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TextInputStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// TextInputStyle(...).copyWith(id: 12, name: "My name") + /// ```` + TextInputStyle call({ + Object? labelStyle = const $CopyWithPlaceholder(), + Object? hintStyle = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? boxShadow = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? inputStyle = const $CopyWithPlaceholder(), + Object? iconColor = const $CopyWithPlaceholder(), + Object? prefixStyle = const $CopyWithPlaceholder(), + Object? prefixIconColor = const $CopyWithPlaceholder(), + Object? suffixStyle = const $CopyWithPlaceholder(), + Object? suffixIconColor = const $CopyWithPlaceholder(), + }) { + return TextInputStyle( + labelStyle: labelStyle == const $CopyWithPlaceholder() + ? _value.labelStyle + // ignore: cast_nullable_to_non_nullable + : labelStyle as TextStyle?, + hintStyle: hintStyle == const $CopyWithPlaceholder() + ? _value.hintStyle + // ignore: cast_nullable_to_non_nullable + : hintStyle as TextStyle?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + boxShadow: boxShadow == const $CopyWithPlaceholder() + ? _value.boxShadow + // ignore: cast_nullable_to_non_nullable + : boxShadow as BoxShadow?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + inputStyle: inputStyle == const $CopyWithPlaceholder() + ? _value.inputStyle + // ignore: cast_nullable_to_non_nullable + : inputStyle as TextStyle?, + iconColor: iconColor == const $CopyWithPlaceholder() + ? _value.iconColor + // ignore: cast_nullable_to_non_nullable + : iconColor as Color?, + prefixStyle: prefixStyle == const $CopyWithPlaceholder() + ? _value.prefixStyle + // ignore: cast_nullable_to_non_nullable + : prefixStyle as TextStyle?, + prefixIconColor: prefixIconColor == const $CopyWithPlaceholder() + ? _value.prefixIconColor + // ignore: cast_nullable_to_non_nullable + : prefixIconColor as Color?, + suffixStyle: suffixStyle == const $CopyWithPlaceholder() + ? _value.suffixStyle + // ignore: cast_nullable_to_non_nullable + : suffixStyle as TextStyle?, + suffixIconColor: suffixIconColor == const $CopyWithPlaceholder() + ? _value.suffixIconColor + // ignore: cast_nullable_to_non_nullable + : suffixIconColor as Color?, + ); + } +} + +extension $TextInputStyleCopyWith on TextInputStyle { + /// Returns a callable class that can be used as follows: `instanceOfTextInputStyle.copyWith(...)` or like so:`instanceOfTextInputStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$TextInputStyleCWProxy get copyWith => _$TextInputStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_inputs.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_inputs.dart new file mode 100644 index 00000000..26b4e465 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_inputs.dart @@ -0,0 +1,18 @@ +// 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 . + +export './text_input_component.dart'; +export './text_input_style.dart'; -- 2.47.2 From 1edb1f732485de0360ad2cb3ee01cbc269f30eda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 08:22:20 +0100 Subject: [PATCH 147/320] feat(ui_kit): implemement text inputs (#138) --- .../file_selection_button_screen.dart | 36 +- .../file_selection_button_theme_resolver.dart | 46 +- .../flat_button/flat_button_screen.dart | 24 +- .../flat_button_theme_resolver.dart | 28 +- .../simple_icon_button_theme_resolver.dart | 30 +- .../simple_icon_screen.dart | 24 +- .../symbol_button/symbol_button_screen.dart | 35 +- .../symbol_button_theme_resolver.dart | 41 +- .../cards/widgets/card_wrapper.dart | 8 +- .../lib/src/components/components.dart | 1 + .../gradients/gradient_box_border.dart | 8 +- .../text_inputs/cubit/text_input_cubit.dart | 57 +++ .../text_inputs/cubit/text_input_state.dart | 49 +++ .../components/text_inputs/text_input.dart | 168 ++++++++ .../components/text_inputs/text_input.g.dart | 348 +++++++++++++++ .../text_inputs/text_input_screen.dart | 396 ++++++++++++++++++ .../text_input_theme_resolver.dart | 172 ++++++++ .../text_inputs/widgets/label_widget.dart | 37 ++ .../widgets/text_input_wrapper.dart | 60 +++ .../src/core/extensions/theme_extensions.dart | 2 + .../lib/src/core/helpers/theme_helper.dart | 33 ++ .../wyatt_ui_kit/lib/src/domain/domain.dart | 4 + ...n.dart => text_input_theme_extension.dart} | 25 +- 23 files changed, 1468 insertions(+), 164 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_cubit.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_state.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/text_input_wrapper.dart create mode 100644 packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart rename packages/wyatt_ui_kit/lib/src/domain/{input_text_theme_extension.dart => text_input_theme_extension.dart} (67%) diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index bc45bec9..18a2cf0b 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -67,41 +67,7 @@ class FileSelectionButtonScreen FileSelectionButtonStyle _resolve(BuildContext context, ButtonState state) { final FileSelectionButtonThemeResolver resolver = themeResolver ?? FileSelectionButtonThemeResolver( - computeExtensionValueFn: ( - context, - defaultValue, - themeExtension, { - extra, - }) { - FileSelectionButtonStyle? style = defaultValue; - switch (extra?.state) { - case ControlState.disabled: - style = themeExtension.disabledStyle; - break; - case ControlState.focused: - style = themeExtension.focusedStyle; - break; - case ControlState.hovered: - style = themeExtension.hoveredStyle; - break; - case ControlState.tapped: - style = themeExtension.tappedStyle; - break; - case ControlState.normal: - case null: - style = themeExtension.normalStyle; - break; - } - if (extra?.isSelected ?? false) { - style = themeExtension.selectedStyle; - } - if (extra?.isInvalid ?? false) { - style = themeExtension.invalidStyle; - } - - return style; - }, - customStyleFn: (context, {extra}) { + customStyleFn: (context, extensionValue, {extra}) { FileSelectionButtonStyle? style; switch (extra?.state) { case ControlState.disabled: diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index 7c1f9634..92399773 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -22,7 +22,6 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class FileSelectionButtonThemeResolver extends ThemeResolver< FileSelectionButtonStyle, FileSelectionButtonThemeExtension, ButtonState> { const FileSelectionButtonThemeResolver({ - required this.computeExtensionValueFn, required this.customStyleFn, }); @@ -57,8 +56,7 @@ class FileSelectionButtonThemeResolver extends ThemeResolver< } if (extra?.isInvalid ?? false) { - backgroundColor = - MultiColor.single(context.colorScheme.error); + backgroundColor = MultiColor.single(context.colorScheme.error); } return FileSelectionButtonStyle( @@ -75,15 +73,43 @@ class FileSelectionButtonThemeResolver extends ThemeResolver< @override final FileSelectionButtonStyle? Function( + BuildContext context, + FileSelectionButtonStyle? extensionValue, { + ButtonState? extra, + }) customStyleFn; + + @override + FileSelectionButtonStyle? computeExtensionValueFn( BuildContext context, FileSelectionButtonStyle defaultValue, FileSelectionButtonThemeExtension themeExtension, { ButtonState? extra, - }) computeExtensionValueFn; - - @override - final FileSelectionButtonStyle? Function( - BuildContext context, { - ButtonState? extra, - }) customStyleFn; + }) { + FileSelectionButtonStyle? style = defaultValue; + switch (extra?.state) { + case ControlState.disabled: + style = themeExtension.disabledStyle; + break; + case ControlState.focused: + style = themeExtension.focusedStyle; + break; + case ControlState.hovered: + style = themeExtension.hoveredStyle; + break; + case ControlState.tapped: + style = themeExtension.tappedStyle; + break; + case ControlState.normal: + case null: + style = themeExtension.normalStyle; + break; + } + if (extra?.isSelected ?? false) { + style = themeExtension.selectedStyle; + } + if (extra?.isInvalid ?? false) { + style = themeExtension.invalidStyle; + } + return style; + } } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 803c68cc..88ff27f5 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -61,27 +61,7 @@ class FlatButtonScreen extends CubitScreen { FlatButtonStyle _resolve(BuildContext context, ControlState state) { final FlatButtonThemeResolver resolver = themeResolver ?? FlatButtonThemeResolver( - computeExtensionValueFn: ( - context, - defaultValue, - themeExtension, { - extra, - }) { - switch (extra) { - case ControlState.disabled: - return themeExtension.disabledStyle; - case ControlState.focused: - return themeExtension.focusedStyle; - case ControlState.hovered: - return themeExtension.hoveredStyle; - case ControlState.tapped: - return themeExtension.tappedStyle; - case ControlState.normal: - case null: - return themeExtension.normalStyle; - } - }, - customStyleFn: (context, {extra}) { + customStyleFn: (context, extensionValue, {extra}) { switch (extra) { case ControlState.disabled: return disabledStyle; @@ -141,7 +121,7 @@ class FlatButtonScreen extends CubitScreen { // If no border color => no default value border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) - ? GradientBoxBorder( + ? CustomGradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart index c48c6b8e..cef92e2f 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart @@ -21,7 +21,6 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class FlatButtonThemeResolver extends ThemeResolver { const FlatButtonThemeResolver({ - required this.computeExtensionValueFn, required this.customStyleFn, }); @@ -70,13 +69,30 @@ class FlatButtonThemeResolver extends ThemeResolver { const SimpleIconButtonThemeResolver({ - required this.computeExtensionValueFn, required this.customStyleFn, }); @@ -68,15 +67,30 @@ class SimpleIconButtonThemeResolver extends ThemeResolver { SimpleIconButtonStyle _resolve(BuildContext context, ControlState state) { final SimpleIconButtonThemeResolver resolver = themeResolver ?? SimpleIconButtonThemeResolver( - computeExtensionValueFn: ( - context, - defaultValue, - themeExtension, { - extra, - }) { - switch (extra) { - case ControlState.disabled: - return themeExtension.disabledStyle; - case ControlState.focused: - return themeExtension.focusedStyle; - case ControlState.hovered: - return themeExtension.hoveredStyle; - case ControlState.tapped: - return themeExtension.tappedStyle; - case ControlState.normal: - case null: - return themeExtension.normalStyle; - } - }, - customStyleFn: (context, {extra}) { + customStyleFn: (context, extensionValue, {extra}) { switch (extra) { case ControlState.disabled: return disabledStyle; @@ -140,7 +120,7 @@ class SimpleIconButtonScreen extends CubitScreen { // If no border color => no default value border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) - ? GradientBoxBorder( + ? CustomGradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index b8c84633..e2e427fd 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -63,38 +63,7 @@ class SymbolButtonScreen SymbolButtonStyle _resolve(BuildContext context, ButtonState state) { final SymbolButtonThemeResolver resolver = themeResolver ?? SymbolButtonThemeResolver( - computeExtensionValueFn: ( - context, - defaultValue, - themeExtension, { - extra, - }) { - SymbolButtonStyle? style = defaultValue; - switch (extra?.state) { - case ControlState.disabled: - style = themeExtension.disabledStyle; - break; - case ControlState.focused: - style = themeExtension.focusedStyle; - break; - case ControlState.hovered: - style = themeExtension.hoveredStyle; - break; - case ControlState.tapped: - style = themeExtension.tappedStyle; - break; - case ControlState.normal: - case null: - style = themeExtension.normalStyle; - break; - } - if (extra?.isSelected ?? false) { - style = themeExtension.selectedStyle; - } - - return style; - }, - customStyleFn: (context, {extra}) { + customStyleFn: (context, extensionValue, {extra}) { SymbolButtonStyle? style; switch (extra?.state) { case ControlState.disabled: @@ -175,7 +144,7 @@ class SymbolButtonScreen border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) - ? GradientBoxBorder( + ? CustomGradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart index 8d679e22..bed01568 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart @@ -22,7 +22,6 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class SymbolButtonThemeResolver extends ThemeResolver { const SymbolButtonThemeResolver({ - required this.computeExtensionValueFn, required this.customStyleFn, }); @@ -58,7 +57,7 @@ class SymbolButtonThemeResolver extends ThemeResolver { BoxBorder? _boxBorder(BuildContext context) { if (widget.borderColors != null) { if (widget.borderColors!.length >= 2) { - return GradientBoxBorder( + return CustomGradientBoxBorder( gradient: LinearGradient( colors: widget.borderColors!, ), @@ -151,9 +151,15 @@ class _CardWrapperState extends State { final extensionCardColor = Theme.of(context).extension(); if (extensionCardColor != null && +<<<<<<< HEAD extensionCardColor.borderColors != null) { if (extensionCardColor.borderColors!.isGradient) { return GradientBoxBorder( +======= + extensionCardColor.borderColor != null) { + if (extensionCardColor.borderColor!.length >= 2) { + return CustomGradientBoxBorder( +>>>>>>> 548df1c (feat(ui_kit): implemement text inputs (#138)) gradient: LinearGradient( colors: extensionCardColor.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart index e78cb40d..34d4753d 100644 --- a/packages/wyatt_ui_kit/lib/src/components/components.dart +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -19,3 +19,4 @@ export './cards/cards.dart'; export './gradients/gradients.dart'; export './loader/loader.dart'; export './rich_text_builder/rich_text_builder.dart'; +export './text_inputs/text_input.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart index 912a9c53..10372a96 100644 --- a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart @@ -14,10 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/material.dart'; import 'package:flutter/painting.dart'; -class GradientBoxBorder extends BoxBorder { - const GradientBoxBorder({this.gradient, this.width = 1}); +class CustomGradientBoxBorder extends Border { + const CustomGradientBoxBorder({this.gradient, this.width = 1}); final Gradient? gradient; final double width; @@ -34,9 +35,6 @@ class GradientBoxBorder extends BoxBorder { @override bool get isUniform => true; - @override - ShapeBorder scale(double t) => this; - @override void paint( Canvas canvas, diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_cubit.dart new file mode 100644 index 00000000..4c50a1b9 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_cubit.dart @@ -0,0 +1,57 @@ +// 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 . + +import 'dart:async'; + +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +part 'text_input_state.dart'; + +class TextInputCubit extends Cubit { + TextInputCubit() : super(const TextInputState.initial()); + + // ControlState logic + FutureOr onFocus() async { + if (state.controlState != ControlState.disabled) { + emit(state.copyWith(controlState: ControlState.focused)); + } + } + + FutureOr onUnfocus() async { + if (state.controlState != ControlState.disabled) { + emit(state.copyWith(controlState: ControlState.normal)); + } + } + + Future disable() async { + emit(state.copyWith(controlState: ControlState.disabled)); + } + + Future enable() async { + emit(state.copyWith(controlState: ControlState.normal)); + } + + // StatusState logic + FutureOr onInvalid(String? error) async { + emit(state.copyWith(statusState: StatusState.error, statusMessage: error)); + } + + FutureOr onSuccess() async { + emit(state.copyWith(statusState: StatusState.initial, statusMessage: '')); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_state.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_state.dart new file mode 100644 index 00000000..2b91bd2d --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/cubit/text_input_state.dart @@ -0,0 +1,49 @@ +// 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 . + +part of 'text_input_cubit.dart'; + +class TextInputState extends Equatable { + const TextInputState({ + required this.controlState, + required this.statusState, + this.statusMessage, + }); + + const TextInputState.initial() + : controlState = ControlState.normal, + statusState = StatusState.initial, + statusMessage = null; + + final ControlState controlState; + final StatusState statusState; + + final String? statusMessage; + + @override + List get props => [controlState, statusState, statusMessage]; + + TextInputState copyWith({ + ControlState? controlState, + StatusState? statusState, + String? statusMessage, + }) => + TextInputState( + controlState: controlState ?? this.controlState, + statusState: statusState ?? this.statusState, + statusMessage: statusMessage ?? this.statusMessage, + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart new file mode 100644 index 00000000..8e5139c7 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart @@ -0,0 +1,168 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +import 'dart:ui'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/text_inputs/text_input_screen.dart'; +part 'text_input.g.dart'; + +@ComponentCopyWithExtension() +class TextInput extends TextInputComponent with $TextInputCWMixin { + TextInput({ + super.expand, + super.validator, + super.key, + super.prefixIcon, + super.prefixText, + super.suffixIcon, + super.suffixText, + super.label, + super.onError, + super.hint, + super.normalStyle, + super.focusedStyle, + super.errorStyle, + super.disableStyle, + super.controller, + super.focusNode, + super.keyboardType, + super.smartDashesType, + super.smartQuotesType, + super.enableInteractiveSelection, + super.textInputAction, + super.textCapitalization, + super.style, + super.strutStyle, + super.textAlign, + super.textAlignVertical, + super.textDirection, + super.readOnly, + super.showCursor, + super.autofocus, + super.obscuringCharacter, + super.obscureText, + super.autocorrect, + super.enableSuggestions, + super.maxLines, + super.minLines, + super.expands, + super.maxLength, + super.maxLengthEnforcement, + super.onChanged, + super.onEditingComplete, + super.onSubmitted, + super.onAppPrivateCommand, + super.inputFormatters, + super.enabled, + super.cursorWidth, + super.cursorHeight, + super.cursorRadius, + super.cursorColor, + super.selectionHeightStyle, + super.selectionWidthStyle, + super.keyboardAppearance, + super.scrollPadding, + super.dragStartBehavior, + super.selectionControls, + super.onTap, + super.onTapOutside, + super.mouseCursor, + super.scrollController, + super.scrollPhysics, + super.autofillHints, + super.clipBehavior, + super.restorationId, + super.scribbleEnabled, + super.enableIMEPersonalizedLearning, + super.contextMenuBuilder, + super.spellCheckConfiguration, + super.magnifierConfiguration, + }); + + @override + Widget build(BuildContext context) => TextInputScreen( + expand: expand, + validator: validator, + label: label, + onError: onError, + hint: hint, + focusedStyle: focusedStyle, + normalStyle: normalStyle, + errorStyle: errorStyle, + disableStyle: disableStyle, + prefixIcon: prefixIcon, + prefixText: prefixText, + suffixIcon: suffixIcon, + magnifierConfiguration: magnifierConfiguration, + controller: controller, + focusNode: focusNode, + keyboardType: keyboardType, + textInputAction: textInputAction, + textCapitalization: textCapitalization, + style: style, + strutStyle: strutStyle, + textAlign: textAlign, + textAlignVertical: textAlignVertical, + textDirection: textDirection, + autofocus: autofocus, + obscuringCharacter: obscuringCharacter, + obscureText: obscureText, + autocorrect: autocorrect, + smartDashesType: smartDashesType, + smartQuotesType: smartQuotesType, + enableSuggestions: enableSuggestions, + maxLines: maxLines, + minLines: minLines, + expands: expands, + readOnly: readOnly, + showCursor: showCursor, + maxLength: maxLength, + maxLengthEnforcement: maxLengthEnforcement, + onChanged: onChanged, + onEditingComplete: onEditingComplete, + onSubmitted: onSubmitted, + onAppPrivateCommand: onAppPrivateCommand, + inputFormatters: inputFormatters, + enabled: enabled, + cursorWidth: cursorWidth, + cursorHeight: cursorHeight, + cursorRadius: cursorRadius, + cursorColor: cursorColor, + selectionHeightStyle: selectionHeightStyle, + selectionWidthStyle: selectionWidthStyle, + keyboardAppearance: keyboardAppearance, + scrollPadding: scrollPadding, + enableInteractiveSelection: enableInteractiveSelection, + selectionControls: selectionControls, + dragStartBehavior: dragStartBehavior, + onTap: onTap, + onTapOutside: onTapOutside, + mouseCursor: mouseCursor, + scrollPhysics: scrollPhysics, + scrollController: scrollController, + autofillHints: autofillHints, + clipBehavior: clipBehavior, + restorationId: restorationId, + scribbleEnabled: scribbleEnabled, + enableIMEPersonalizedLearning: enableIMEPersonalizedLearning, + contextMenuBuilder: contextMenuBuilder, + spellCheckConfiguration: spellCheckConfiguration, + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.g.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.g.dart new file mode 100644 index 00000000..2547f95c --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.g.dart @@ -0,0 +1,348 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'text_input.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $TextInputCWProxyImpl implements $TextInputComponentCWProxy { + const $TextInputCWProxyImpl(this._value); + final TextInput _value; + @override + TextInput expand(bool? expand) => this(expand: expand); + @override + TextInput onError(String Function(String)? onError) => this(onError: onError); + @override + TextInput validator(bool Function(String)? validator) => + this(validator: validator); + @override + TextInput suffixText(TextWrapper? suffixText) => this(suffixText: suffixText); + @override + TextInput prefixText(TextWrapper? prefixText) => this(prefixText: prefixText); + @override + TextInput prefixIcon(Icon? prefixIcon) => this(prefixIcon: prefixIcon); + @override + TextInput suffixIcon(Icon? suffixIcon) => this(suffixIcon: suffixIcon); + @override + TextInput label(TextWrapper? label) => this(label: label); + @override + TextInput hint(TextWrapper? hint) => this(hint: hint); + @override + TextInput normalStyle(TextInputStyle? normalStyle) => + this(normalStyle: normalStyle); + @override + TextInput focusedStyle(TextInputStyle? focusedStyle) => + this(focusedStyle: focusedStyle); + @override + TextInput errorStyle(TextInputStyle? errorStyle) => + this(errorStyle: errorStyle); + @override + TextInput disableStyle(TextInputStyle? disableStyle) => + this(disableStyle: disableStyle); + @override + TextInput controller(TextEditingController? controller) => + this(controller: controller); + @override + TextInput focusNode(FocusNode? focusNode) => this(focusNode: focusNode); + @override + TextInput keyboardType(TextInputType? keyboardType) => + this(keyboardType: keyboardType); + @override + TextInput smartDashesType(SmartDashesType? smartDashesType) => + this(smartDashesType: smartDashesType); + @override + TextInput smartQuotesType(SmartQuotesType? smartQuotesType) => + this(smartQuotesType: smartQuotesType); + @override + TextInput enableInteractiveSelection(bool? enableInteractiveSelection) => + this(enableInteractiveSelection: enableInteractiveSelection); + @override + TextInput textInputAction(TextInputAction? textInputAction) => + this(textInputAction: textInputAction); + @override + TextInput textCapitalization(TextCapitalization? textCapitalization) => + this(textCapitalization: textCapitalization); + @override + TextInput style(TextStyle? style) => this(style: style); + @override + TextInput strutStyle(StrutStyle? strutStyle) => this(strutStyle: strutStyle); + @override + TextInput textAlign(TextAlign? textAlign) => this(textAlign: textAlign); + @override + TextInput textAlignVertical(TextAlignVertical? textAlignVertical) => + this(textAlignVertical: textAlignVertical); + @override + TextInput textDirection(TextDirection? textDirection) => + this(textDirection: textDirection); + @override + TextInput readOnly(bool? readOnly) => this(readOnly: readOnly); + @override + TextInput showCursor(bool? showCursor) => this(showCursor: showCursor); + @override + TextInput autofocus(bool? autofocus) => this(autofocus: autofocus); + @override + TextInput obscuringCharacter(String? obscuringCharacter) => + this(obscuringCharacter: obscuringCharacter); + @override + TextInput obscureText(bool? obscureText) => this(obscureText: obscureText); + @override + TextInput autocorrect(bool? autocorrect) => this(autocorrect: autocorrect); + @override + TextInput enableSuggestions(bool? enableSuggestions) => + this(enableSuggestions: enableSuggestions); + @override + TextInput maxLines(int? maxLines) => this(maxLines: maxLines); + @override + TextInput minLines(int? minLines) => this(minLines: minLines); + @override + TextInput expands(bool? expands) => this(expands: expands); + @override + TextInput maxLength(int? maxLength) => this(maxLength: maxLength); + @override + TextInput maxLengthEnforcement(MaxLengthEnforcement? maxLengthEnforcement) => + this(maxLengthEnforcement: maxLengthEnforcement); + @override + TextInput onChanged(void Function(String)? onChanged) => + this(onChanged: onChanged); + @override + TextInput onEditingComplete(void Function()? onEditingComplete) => + this(onEditingComplete: onEditingComplete); + @override + TextInput onSubmitted(void Function(String)? onSubmitted) => + this(onSubmitted: onSubmitted); + @override + TextInput onAppPrivateCommand( + void Function(String, Map)? onAppPrivateCommand) => + this(onAppPrivateCommand: onAppPrivateCommand); + @override + TextInput inputFormatters(List? inputFormatters) => + this(inputFormatters: inputFormatters); + @override + TextInput enabled(ValueNotifier? enabled) => this(enabled: enabled); + @override + TextInput cursorWidth(double? cursorWidth) => this(cursorWidth: cursorWidth); + @override + TextInput cursorHeight(double? cursorHeight) => + this(cursorHeight: cursorHeight); + @override + TextInput cursorRadius(Radius? cursorRadius) => + this(cursorRadius: cursorRadius); + @override + TextInput cursorColor(Color? cursorColor) => this(cursorColor: cursorColor); + @override + TextInput selectionHeightStyle(BoxHeightStyle? selectionHeightStyle) => + this(selectionHeightStyle: selectionHeightStyle); + @override + TextInput selectionWidthStyle(BoxWidthStyle? selectionWidthStyle) => + this(selectionWidthStyle: selectionWidthStyle); + @override + TextInput keyboardAppearance(Brightness? keyboardAppearance) => + this(keyboardAppearance: keyboardAppearance); + @override + TextInput scrollPadding(EdgeInsets? scrollPadding) => + this(scrollPadding: scrollPadding); + @override + TextInput dragStartBehavior(DragStartBehavior? dragStartBehavior) => + this(dragStartBehavior: dragStartBehavior); + @override + TextInput selectionControls(TextSelectionControls? selectionControls) => + this(selectionControls: selectionControls); + @override + TextInput onTap(void Function()? onTap) => this(onTap: onTap); + @override + TextInput onTapOutside(void Function(PointerDownEvent)? onTapOutside) => + this(onTapOutside: onTapOutside); + @override + TextInput mouseCursor(MouseCursor? mouseCursor) => + this(mouseCursor: mouseCursor); + @override + TextInput scrollController(ScrollController? scrollController) => + this(scrollController: scrollController); + @override + TextInput scrollPhysics(ScrollPhysics? scrollPhysics) => + this(scrollPhysics: scrollPhysics); + @override + TextInput autofillHints(Iterable? autofillHints) => + this(autofillHints: autofillHints); + @override + TextInput clipBehavior(Clip? clipBehavior) => + this(clipBehavior: clipBehavior); + @override + TextInput restorationId(String? restorationId) => + this(restorationId: restorationId); + @override + TextInput scribbleEnabled(bool? scribbleEnabled) => + this(scribbleEnabled: scribbleEnabled); + @override + TextInput enableIMEPersonalizedLearning( + bool? enableIMEPersonalizedLearning) => + this(enableIMEPersonalizedLearning: enableIMEPersonalizedLearning); + @override + TextInput contextMenuBuilder( + Widget Function(BuildContext, EditableTextState)? + contextMenuBuilder) => + this(contextMenuBuilder: contextMenuBuilder); + @override + TextInput spellCheckConfiguration( + SpellCheckConfiguration? spellCheckConfiguration) => + this(spellCheckConfiguration: spellCheckConfiguration); + @override + TextInput magnifierConfiguration( + TextMagnifierConfiguration? magnifierConfiguration) => + this(magnifierConfiguration: magnifierConfiguration); + @override + TextInput key(Key? key) => this(key: key); + @override + TextInput call({ + bool? expand, + String Function(String)? onError, + bool Function(String)? validator, + TextWrapper? suffixText, + TextWrapper? prefixText, + Icon? prefixIcon, + Icon? suffixIcon, + TextWrapper? label, + TextWrapper? hint, + TextInputStyle? normalStyle, + TextInputStyle? focusedStyle, + TextInputStyle? errorStyle, + TextInputStyle? disableStyle, + TextEditingController? controller, + FocusNode? focusNode, + TextInputType? keyboardType, + SmartDashesType? smartDashesType, + SmartQuotesType? smartQuotesType, + bool? enableInteractiveSelection, + TextInputAction? textInputAction, + TextCapitalization? textCapitalization, + TextStyle? style, + StrutStyle? strutStyle, + TextAlign? textAlign, + TextAlignVertical? textAlignVertical, + TextDirection? textDirection, + bool? readOnly, + bool? showCursor, + bool? autofocus, + String? obscuringCharacter, + bool? obscureText, + bool? autocorrect, + bool? enableSuggestions, + int? maxLines, + int? minLines, + bool? expands, + int? maxLength, + MaxLengthEnforcement? maxLengthEnforcement, + void Function(String)? onChanged, + void Function()? onEditingComplete, + void Function(String)? onSubmitted, + void Function(String, Map)? onAppPrivateCommand, + List? inputFormatters, + ValueNotifier? enabled, + double? cursorWidth, + double? cursorHeight, + Radius? cursorRadius, + Color? cursorColor, + BoxHeightStyle? selectionHeightStyle, + BoxWidthStyle? selectionWidthStyle, + Brightness? keyboardAppearance, + EdgeInsets? scrollPadding, + DragStartBehavior? dragStartBehavior, + TextSelectionControls? selectionControls, + void Function()? onTap, + void Function(PointerDownEvent)? onTapOutside, + MouseCursor? mouseCursor, + ScrollController? scrollController, + ScrollPhysics? scrollPhysics, + Iterable? autofillHints, + Clip? clipBehavior, + String? restorationId, + bool? scribbleEnabled, + bool? enableIMEPersonalizedLearning, + Widget Function(BuildContext, EditableTextState)? contextMenuBuilder, + SpellCheckConfiguration? spellCheckConfiguration, + TextMagnifierConfiguration? magnifierConfiguration, + Key? key, + }) => + TextInput( + expand: expand ?? _value.expand, + validator: validator ?? _value.validator, + key: key ?? _value.key, + prefixIcon: prefixIcon ?? _value.prefixIcon, + prefixText: prefixText ?? _value.prefixText, + suffixIcon: suffixIcon ?? _value.suffixIcon, + suffixText: suffixText ?? _value.suffixText, + label: label ?? _value.label, + onError: onError ?? _value.onError, + hint: hint ?? _value.hint, + normalStyle: normalStyle ?? _value.normalStyle, + focusedStyle: focusedStyle ?? _value.focusedStyle, + errorStyle: errorStyle ?? _value.errorStyle, + disableStyle: disableStyle ?? _value.disableStyle, + controller: controller ?? _value.controller, + focusNode: focusNode ?? _value.focusNode, + keyboardType: keyboardType ?? _value.keyboardType, + smartDashesType: smartDashesType ?? _value.smartDashesType, + smartQuotesType: smartQuotesType ?? _value.smartQuotesType, + enableInteractiveSelection: + enableInteractiveSelection ?? _value.enableInteractiveSelection, + textInputAction: textInputAction ?? _value.textInputAction, + textCapitalization: textCapitalization ?? _value.textCapitalization, + style: style ?? _value.style, + strutStyle: strutStyle ?? _value.strutStyle, + textAlign: textAlign ?? _value.textAlign, + textAlignVertical: textAlignVertical ?? _value.textAlignVertical, + textDirection: textDirection ?? _value.textDirection, + readOnly: readOnly ?? _value.readOnly, + showCursor: showCursor ?? _value.showCursor, + autofocus: autofocus ?? _value.autofocus, + obscuringCharacter: obscuringCharacter ?? _value.obscuringCharacter, + obscureText: obscureText ?? _value.obscureText, + autocorrect: autocorrect ?? _value.autocorrect, + enableSuggestions: enableSuggestions ?? _value.enableSuggestions, + maxLines: maxLines ?? _value.maxLines, + minLines: minLines ?? _value.minLines, + expands: expands ?? _value.expands, + maxLength: maxLength ?? _value.maxLength, + maxLengthEnforcement: + maxLengthEnforcement ?? _value.maxLengthEnforcement, + onChanged: onChanged ?? _value.onChanged, + onEditingComplete: onEditingComplete ?? _value.onEditingComplete, + onSubmitted: onSubmitted ?? _value.onSubmitted, + onAppPrivateCommand: onAppPrivateCommand ?? _value.onAppPrivateCommand, + inputFormatters: inputFormatters ?? _value.inputFormatters, + enabled: enabled ?? _value.enabled, + cursorWidth: cursorWidth ?? _value.cursorWidth, + cursorHeight: cursorHeight ?? _value.cursorHeight, + cursorRadius: cursorRadius ?? _value.cursorRadius, + cursorColor: cursorColor ?? _value.cursorColor, + selectionHeightStyle: + selectionHeightStyle ?? _value.selectionHeightStyle, + selectionWidthStyle: selectionWidthStyle ?? _value.selectionWidthStyle, + keyboardAppearance: keyboardAppearance ?? _value.keyboardAppearance, + scrollPadding: scrollPadding ?? _value.scrollPadding, + dragStartBehavior: dragStartBehavior ?? _value.dragStartBehavior, + selectionControls: selectionControls ?? _value.selectionControls, + onTap: onTap ?? _value.onTap, + onTapOutside: onTapOutside ?? _value.onTapOutside, + mouseCursor: mouseCursor ?? _value.mouseCursor, + scrollController: scrollController ?? _value.scrollController, + scrollPhysics: scrollPhysics ?? _value.scrollPhysics, + autofillHints: autofillHints ?? _value.autofillHints, + clipBehavior: clipBehavior ?? _value.clipBehavior, + restorationId: restorationId ?? _value.restorationId, + scribbleEnabled: scribbleEnabled ?? _value.scribbleEnabled, + enableIMEPersonalizedLearning: enableIMEPersonalizedLearning ?? + _value.enableIMEPersonalizedLearning, + contextMenuBuilder: contextMenuBuilder ?? _value.contextMenuBuilder, + spellCheckConfiguration: + spellCheckConfiguration ?? _value.spellCheckConfiguration, + magnifierConfiguration: + magnifierConfiguration ?? _value.magnifierConfiguration, + ); +} + +mixin $TextInputCWMixin on Component { + $TextInputComponentCWProxy get copyWith => + $TextInputCWProxyImpl(this as TextInput); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart new file mode 100644 index 00000000..51a9d291 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart @@ -0,0 +1,396 @@ +// 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 . + +import 'dart:ui'; + +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/text_inputs/cubit/text_input_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/text_inputs/text_input_theme_resolver.dart'; +import 'package:wyatt_ui_kit/src/components/text_inputs/widgets/label_widget.dart'; +import 'package:wyatt_ui_kit/src/components/text_inputs/widgets/text_input_wrapper.dart'; + +class TextInputScreen extends CubitScreen { + TextInputScreen({ + this.expand, + this.onError, + this.validator, + super.key, + this.suffixText, + this.prefixText, + this.prefixIcon, + this.suffixIcon, + this.label, + this.hint, + this.normalStyle, + this.focusedStyle, + this.errorStyle, + this.disableStyle, + this.magnifierConfiguration, + this.controller, + this.focusNode, + this.keyboardType, + this.textInputAction, + this.textCapitalization, + this.style, + this.strutStyle, + this.textAlign, + this.textAlignVertical, + this.textDirection, + this.autofocus, + this.obscuringCharacter, + this.obscureText, + this.autocorrect, + this.smartDashesType, + this.smartQuotesType, + this.enableSuggestions, + this.maxLines, + this.minLines, + this.expands, + this.readOnly, + this.showCursor, + this.maxLength, + this.maxLengthEnforcement, + this.onChanged, + this.onEditingComplete, + this.onSubmitted, + this.onAppPrivateCommand, + this.inputFormatters, + this.enabled, + this.cursorWidth, + this.cursorHeight, + this.cursorRadius, + this.cursorColor, + this.selectionHeightStyle, + this.selectionWidthStyle, + this.keyboardAppearance, + this.scrollPadding, + this.enableInteractiveSelection, + this.selectionControls, + this.dragStartBehavior, + this.onTap, + this.onTapOutside, + this.mouseCursor, + this.scrollPhysics, + this.scrollController, + this.autofillHints, + this.clipBehavior, + this.restorationId, + this.scribbleEnabled, + this.enableIMEPersonalizedLearning, + this.contextMenuBuilder, + this.spellCheckConfiguration, + }); + + final TextMagnifierConfiguration? magnifierConfiguration; + final TextEditingController? controller; + final FocusNode? focusNode; + final TextInputType? keyboardType; + final TextInputAction? textInputAction; + final TextCapitalization? textCapitalization; + final TextStyle? style; + final StrutStyle? strutStyle; + final TextAlign? textAlign; + final TextAlignVertical? textAlignVertical; + final TextDirection? textDirection; + final bool? autofocus; + final String? obscuringCharacter; + final bool? obscureText; + final bool? autocorrect; + final SmartDashesType? smartDashesType; + final SmartQuotesType? smartQuotesType; + final bool? enableSuggestions; + final int? maxLines; + final int? minLines; + final bool? expands; + final bool? readOnly; + final bool? showCursor; + final int? maxLength; + final MaxLengthEnforcement? maxLengthEnforcement; + final ValueChanged? onChanged; + final VoidCallback? onEditingComplete; + final ValueChanged? onSubmitted; + final AppPrivateCommandCallback? onAppPrivateCommand; + final List? inputFormatters; + final double? cursorWidth; + final double? cursorHeight; + final Radius? cursorRadius; + final Color? cursorColor; + final BoxHeightStyle? selectionHeightStyle; + final BoxWidthStyle? selectionWidthStyle; + final Brightness? keyboardAppearance; + final EdgeInsets? scrollPadding; + final bool? enableInteractiveSelection; + final TextSelectionControls? selectionControls; + final DragStartBehavior? dragStartBehavior; + final GestureTapCallback? onTap; + final TapRegionCallback? onTapOutside; + final MouseCursor? mouseCursor; + final ScrollPhysics? scrollPhysics; + final ScrollController? scrollController; + final Iterable? autofillHints; + final Clip? clipBehavior; + final String? restorationId; + final bool? scribbleEnabled; + final bool? enableIMEPersonalizedLearning; + final EditableTextContextMenuBuilder? contextMenuBuilder; + final SpellCheckConfiguration? spellCheckConfiguration; + + final bool Function(String)? validator; + final String? Function(String)? onError; + + final TextInputStyle? normalStyle; + final TextInputStyle? focusedStyle; + final TextInputStyle? errorStyle; + final TextInputStyle? disableStyle; + + final TextWrapper? label; + final TextWrapper? hint; + final ValueNotifier? enabled; + + final bool? expand; + + final TextWrapper? prefixText; + final Icon? prefixIcon; + final Icon? suffixIcon; + final TextWrapper? suffixText; + + @override + TextInputCubit create(BuildContext context) => TextInputCubit(); + + @override + TextInputCubit init(BuildContext context, TextInputCubit bloc) { + enabled?.addListener(() { + if (enabled?.value ?? false) { + bloc.enable(); + } else { + bloc.disable(); + } + }); + return bloc; + } + + final _focusNode = FocusNode(); + final _controller = TextEditingController(); + + final _notOutilinedBorder = const OutlineInputBorder( + borderSide: BorderSide(color: Colors.transparent), + ); + + TextInputStyle _resolve(BuildContext context, TextInputState state) { + final resolver = TextInputThemeResolver( + customStyleFn: (context, extensionValue, {extra}) { + TextInputStyle? textInputStyle; + switch (extra?.controlState) { + case ControlState.focused: + textInputStyle = focusedStyle; + break; + case ControlState.disabled: + textInputStyle = disableStyle; + break; + case ControlState.normal: + textInputStyle = normalStyle; + break; + case ControlState.hovered: + break; + case ControlState.tapped: + break; + case null: + break; + } + + TextInputStyle? style; + switch (extra?.statusState) { + case StatusState.error: + style = errorStyle; + break; + case StatusState.initial: + break; + case StatusState.success: + break; + case StatusState.loading: + break; + case null: + break; + } + + return TextInputStyle.merge( + extensionValue, + TextInputStyle.merge(textInputStyle, style), + ); + }, + ); + + return resolver.negotiate(context, extra: state); + } + + bool _wrapperExpanded(TextInputState state) { + final fn = focusNode ?? _focusNode; + final tec = controller ?? _controller; + if (fn.hasFocus && label != null) { + return true; + } else if (tec.value.text.isNotEmpty && label != null) { + return true; + } else if (state.statusState == StatusState.error && + (state.statusMessage?.isNotEmpty ?? false)) { + return true; + } + return false; + } + + @override + Widget onBuild(BuildContext context, TextInputState state) { + final style = _resolve(context, state); + return Focus( + onFocusChange: (hasFocus) { + if (hasFocus) { + bloc(context).onFocus(); + } else { + bloc(context).onUnfocus(); + } + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 600), + decoration: BoxDecoration( + boxShadow: style.boxShadow != null ? [style.boxShadow!] : null, + gradient: style.backgroundColors?.isGradient ?? false + ? LinearGradient(colors: style.backgroundColors!.colors) + : null, + color: style.backgroundColors?.isColor ?? false + ? style.backgroundColors?.color + : null, + borderRadius: style.radius ?? BorderRadius.circular(4), + border: (style.borderColors?.isGradient ?? false) || + (style.borderColors?.isColor ?? false) + ? Border.all( + width: 1.5, + color: (style.borderColors?.isGradient ?? false) + ? style.borderColors!.colors.first + : (style.borderColors?.isColor ?? false) + ? style.borderColors!.color + : Colors.transparent, + ) + : null, + ), + child: TextInputWrapper( + expand: expand ?? true, + expanded: _wrapperExpanded(state), + child: TextField( + onTap: onTap, + onChanged: (value) { + onChanged?.call(value); + if (validator?.call(value) ?? false) { + bloc(context).onInvalid(onError?.call(value)); + } else { + bloc(context).onSuccess(); + } + }, + onTapOutside: onTapOutside, + controller: controller ?? _controller, + focusNode: focusNode ?? _focusNode, + textAlignVertical: textAlignVertical ?? TextAlignVertical.top, + style: style.inputStyle ?? this.style, + decoration: InputDecoration( + focusedErrorBorder: _notOutilinedBorder, + focusedBorder: _notOutilinedBorder, + errorBorder: _notOutilinedBorder, + disabledBorder: _notOutilinedBorder, + enabledBorder: _notOutilinedBorder, + border: _notOutilinedBorder, + isDense: true, + iconColor: style.iconColor, + alignLabelWithHint: true, + label: (state.statusState == StatusState.error && + (state.statusMessage?.isNotEmpty ?? false)) || + label != null + ? LabelWidget( + focusNode: focusNode ?? _focusNode, + label: (state.statusState == StatusState.error && + (state.statusMessage?.isNotEmpty ?? false)) + ? state.statusMessage?.wrap() + : label, + labelStyle: style.labelStyle, + ) + : null, + hintText: hint?.text, + hintStyle: hint?.style, + prefixIcon: prefixIcon, + prefixText: prefixText?.text, + prefixStyle: prefixText?.style, + prefixIconColor: style.prefixIconColor, + suffixIcon: suffixIcon, + suffixText: suffixText?.text, + suffixStyle: suffixText?.style, + suffixIconColor: style.suffixIconColor, + enabled: state.controlState != ControlState.disabled, + ), + keyboardType: keyboardType, + smartDashesType: smartDashesType, + smartQuotesType: smartQuotesType, + enableInteractiveSelection: enableInteractiveSelection, + textInputAction: textInputAction, + textCapitalization: textCapitalization ?? TextCapitalization.none, + strutStyle: strutStyle, + textAlign: textAlign ?? TextAlign.start, + textDirection: textDirection, + readOnly: readOnly ?? false, + showCursor: showCursor, + autofocus: autofocus ?? false, + obscuringCharacter: obscuringCharacter ?? '*', + obscureText: obscureText ?? false, + autocorrect: autocorrect ?? true, + enableSuggestions: enableSuggestions ?? true, + maxLines: maxLines ?? 1, + minLines: minLines, + expands: expands ?? false, + maxLength: maxLength, + maxLengthEnforcement: maxLengthEnforcement, + onEditingComplete: onEditingComplete, + onSubmitted: onSubmitted, + onAppPrivateCommand: onAppPrivateCommand, + inputFormatters: inputFormatters, + enabled: state.controlState != ControlState.disabled, + cursorWidth: cursorWidth ?? 2.0, + cursorHeight: cursorHeight, + cursorRadius: cursorRadius, + cursorColor: cursorColor, + selectionHeightStyle: selectionHeightStyle ?? BoxHeightStyle.tight, + selectionWidthStyle: selectionWidthStyle ?? BoxWidthStyle.tight, + keyboardAppearance: keyboardAppearance, + scrollPadding: scrollPadding ?? const EdgeInsets.all(20), + dragStartBehavior: dragStartBehavior ?? DragStartBehavior.start, + selectionControls: selectionControls, + mouseCursor: mouseCursor, + scrollController: scrollController, + scrollPhysics: scrollPhysics, + autofillHints: autofillHints, + clipBehavior: clipBehavior ?? Clip.hardEdge, + restorationId: restorationId, + scribbleEnabled: scribbleEnabled ?? true, + enableIMEPersonalizedLearning: + enableIMEPersonalizedLearning ?? true, + contextMenuBuilder: contextMenuBuilder, + spellCheckConfiguration: spellCheckConfiguration, + magnifierConfiguration: magnifierConfiguration, + ), + ), + ), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart new file mode 100644 index 00000000..b774c720 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart @@ -0,0 +1,172 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/text_inputs/cubit/text_input_cubit.dart'; +import 'package:wyatt_ui_kit/src/core/core.dart'; +import 'package:wyatt_ui_kit/src/domain/text_input_theme_extension.dart'; + +class TextInputThemeResolver extends ThemeResolver { + const TextInputThemeResolver({ + required this.customStyleFn, + }); + + @override + final TextInputStyle? Function( + BuildContext context, + TextInputStyle extensionValue, { + TextInputState? extra, + }) customStyleFn; + + @override + TextInputStyle computeDefaultValue( + BuildContext context, { + TextInputState? extra, + }) { + TextStyle? labelStyle = context.textTheme.labelLarge + ?.copyWith(color: Theme.of(context).unselectedWidgetColor); + + TextStyle? hintStyle = context.textTheme.labelLarge; + TextStyle? prefixStyle = context.textTheme.bodyMedium; + TextStyle? suffixStyle = context.textTheme.bodyMedium; + TextStyle? inputStyle = context.textTheme.bodyMedium; + + Color? iconColor = context.colorScheme.inversePrimary; + Color? prefixIconColor = Theme.of(context).unselectedWidgetColor; + Color? suffixIconColor = Theme.of(context).unselectedWidgetColor; + + MultiColor? borderColors = + MultiColor.single(Theme.of(context).unselectedWidgetColor); + + MultiColor? backgroundColors; + BoxShadow? boxShadow; + + final BorderRadiusGeometry radius = BorderRadius.circular(4); + + switch (extra?.controlState) { + case ControlState.disabled: + labelStyle = + labelStyle?.copyWith(color: Theme.of(context).disabledColor); + hintStyle = hintStyle?.copyWith(color: Theme.of(context).disabledColor); + prefixStyle = + prefixStyle?.copyWith(color: Theme.of(context).disabledColor); + suffixStyle = + suffixStyle?.copyWith(color: Theme.of(context).disabledColor); + inputStyle = + inputStyle?.copyWith(color: Theme.of(context).disabledColor); + borderColors = MultiColor.single(Theme.of(context).disabledColor); + prefixIconColor = Theme.of(context).disabledColor; + suffixIconColor = Theme.of(context).disabledColor; + + break; + + case ControlState.focused: + prefixIconColor = context.colorScheme.primary; + suffixIconColor = context.colorScheme.primary; + iconColor = context.colorScheme.primary; + borderColors = MultiColor.single(context.colorScheme.primary); + labelStyle = labelStyle?.copyWith(color: context.colorScheme.primary); + break; + case ControlState.hovered: + break; + case ControlState.tapped: + break; + case ControlState.normal: + break; + case null: + break; + } + + switch (extra?.statusState) { + case StatusState.error: + labelStyle = context.textTheme.labelLarge + ?.copyWith(color: context.colorScheme.error); + borderColors = MultiColor.single(context.colorScheme.error); + break; + case StatusState.initial: + break; + case StatusState.success: + break; + case StatusState.loading: + break; + case null: + break; + } + return TextInputStyle( + labelStyle: labelStyle, + hintStyle: hintStyle, + iconColor: iconColor, + prefixIconColor: prefixIconColor, + prefixStyle: prefixStyle, + suffixStyle: suffixStyle, + suffixIconColor: suffixIconColor, + backgroundColors: backgroundColors, + borderColors: borderColors, + boxShadow: boxShadow, + radius: radius, + inputStyle: inputStyle, + ); + } + + @override + TextInputStyle? computeExtensionValueFn( + BuildContext context, + TextInputStyle defaultValue, + TextInputThemeExtension themeExtension, { + TextInputState? extra, + }) { + TextInputStyle? textInputStyle; + switch (extra?.controlState) { + case ControlState.focused: + textInputStyle = themeExtension.focusedStyle; + break; + case ControlState.disabled: + textInputStyle = themeExtension.disableStyle; + break; + case ControlState.normal: + textInputStyle = themeExtension.normalStyle; + break; + case ControlState.hovered: + break; + case ControlState.tapped: + break; + case null: + break; + } + + TextInputStyle? style; + switch (extra?.statusState) { + case StatusState.error: + style = themeExtension.errorStyle; + break; + case StatusState.initial: + break; + case StatusState.success: + break; + case StatusState.loading: + break; + case null: + break; + } + + return TextInputStyle.merge( + defaultValue, + TextInputStyle.merge(textInputStyle, style), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart new file mode 100644 index 00000000..0312c62e --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart @@ -0,0 +1,37 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +class LabelWidget extends StatelessWidget { + const LabelWidget({ + required this.label, + required this.focusNode, + required this.labelStyle, + super.key, + }); + + final TextWrapper? label; + final FocusNode focusNode; + final TextStyle? labelStyle; + + @override + Widget build(BuildContext context) => Text( + label?.text ?? '', + style: labelStyle, + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/text_input_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/text_input_wrapper.dart new file mode 100644 index 00000000..ba868365 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/text_input_wrapper.dart @@ -0,0 +1,60 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +import 'package:flutter/material.dart'; + +const _defaultPadding = 7.5; +const _paddingAnimationDuration = Duration(milliseconds: 200); + +class TextInputWrapper extends StatelessWidget { + const TextInputWrapper({ + required this.expand, + required this.expanded, + required this.child, + super.key, + }); + final bool expand; + final bool expanded; + final Widget child; + + double _top() { + if (expanded) { + return 2 * _defaultPadding; + } else if (!expand) { + return _defaultPadding; + } + return 0; + } + + double _bottom() { + if (expanded) { + return 0; + } else if (!expand) { + return _defaultPadding; + } + return 0; + } + + @override + Widget build(BuildContext context) => AnimatedPadding( + duration: _paddingAnimationDuration, + padding: EdgeInsets.only( + top: _top(), + bottom: _bottom(), + ), + child: child, + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart index 5e39a69c..c874454a 100644 --- a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart +++ b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart @@ -21,4 +21,6 @@ extension BuildContextThemeExtension on BuildContext { TextTheme get textTheme => Theme.of(this).textTheme; ColorScheme get colorScheme => Theme.of(this).colorScheme; ButtonThemeData get buttonTheme => Theme.of(this).buttonTheme; + InputDecorationTheme get inputDecorationTheme => + Theme.of(this).inputDecorationTheme; } diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart new file mode 100644 index 00000000..f5164d65 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart @@ -0,0 +1,33 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +class ThemeHelper { + static T? getThemeElement( + List? styles, { + required T? Function(P?)? transform, + required T? defaultValue, + bool? Function(P?)? valueValidator, + }) { + if (styles?.isNotEmpty ?? false) { + for (final element in styles!) { + if (valueValidator?.call(element) ?? false) { + return transform?.call(element); + } + } + } + return defaultValue; + } +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/domain.dart b/packages/wyatt_ui_kit/lib/src/domain/domain.dart index 51fa4377..7456e08c 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/domain.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/domain.dart @@ -16,5 +16,9 @@ export './button_theme_extension/button_theme_extension.dart'; export './card_theme_extension.dart'; +<<<<<<< HEAD export './loader_theme_extension.dart'; export './rich_text_builder_theme_extension.dart'; +======= +export 'text_input_theme_extension.dart'; +>>>>>>> 548df1c (feat(ui_kit): implemement text inputs (#138)) diff --git a/packages/wyatt_ui_kit/lib/src/domain/input_text_theme_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/text_input_theme_extension.dart similarity index 67% rename from packages/wyatt_ui_kit/lib/src/domain/input_text_theme_extension.dart rename to packages/wyatt_ui_kit/lib/src/domain/text_input_theme_extension.dart index d71340fc..8fe456bb 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/input_text_theme_extension.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/text_input_theme_extension.dart @@ -17,20 +17,17 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -abstract class InputTexThemetExtension - extends ThemeExtension { - InputTexThemetExtension({ - this.backgroundColors, - this.borderColors, - this.floatingLabelTextStyle, - this.inputStyle, +abstract class TextInputThemeExtension + extends ThemeExtension { + const TextInputThemeExtension({ + this.normalStyle, + this.focusedStyle, + this.errorStyle, + this.disableStyle, }); - // Colors: - final MultiColor? backgroundColors; - final MultiColor? borderColors; - - // TextStyles: - final TextStyle? floatingLabelTextStyle; - final TextStyle? inputStyle; + final TextInputStyle? normalStyle; + final TextInputStyle? focusedStyle; + final TextInputStyle? errorStyle; + final TextInputStyle? disableStyle; } -- 2.47.2 From b57500b85437382befd5be66818e91c51e66ad12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 08:22:38 +0100 Subject: [PATCH 148/320] feat(ui_kit): update example (#138) --- packages/wyatt_ui_kit/example/lib/home.dart | 2 + .../example/lib/text_input/text_inputs.dart | 140 ++++++++++++++ .../example/lib/theme/text_input_theme.dart | 181 ++++++++++++++++++ .../example/lib/theme/themes.dart | 3 + 4 files changed, 326 insertions(+) create mode 100644 packages/wyatt_ui_kit/example/lib/text_input/text_inputs.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart diff --git a/packages/wyatt_ui_kit/example/lib/home.dart b/packages/wyatt_ui_kit/example/lib/home.dart index cac6c236..9d772a61 100644 --- a/packages/wyatt_ui_kit/example/lib/home.dart +++ b/packages/wyatt_ui_kit/example/lib/home.dart @@ -6,6 +6,7 @@ import 'package:wyatt_ui_kit_example/cards/cards.dart'; import 'package:wyatt_ui_kit_example/demo_page.dart'; import 'package:wyatt_ui_kit_example/loaders/loaders.dart'; import 'package:wyatt_ui_kit_example/rich_text_builders/rich_text_builders.dart'; +import 'package:wyatt_ui_kit_example/text_input/text_inputs.dart'; import 'package:wyatt_ui_kit_example/theme/themes.dart'; const String title = 'Wyatt UIKit Example'; @@ -26,6 +27,7 @@ class _HomeState extends State { Buttons(), Loaders(), RichTextBuilders(), + TextInputs(), ]; int currentIndex = 0; diff --git a/packages/wyatt_ui_kit/example/lib/text_input/text_inputs.dart b/packages/wyatt_ui_kit/example/lib/text_input/text_inputs.dart new file mode 100644 index 00000000..7d568abd --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/text_input/text_inputs.dart @@ -0,0 +1,140 @@ +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/demo_page.dart'; + +class TextInputs extends DemoPage { + const TextInputs({super.key}); + + @override + Widget build(BuildContext context) => const TextInputsCore(); + + @override + String get title => 'Text Inputs'; +} + +class TextInputsCore extends StatefulWidget { + const TextInputsCore({super.key}); + + @override + State createState() => _TextInputsCoreState(); +} + +class _TextInputsCoreState extends State { + final _formKey = GlobalKey(); + final _controller = TextEditingController(); + final _focusNode = FocusNode(); + + final _formKey2 = GlobalKey(); + final _controller2 = TextEditingController(); + final _focusNode2 = FocusNode(); + + final _formKey3 = GlobalKey(); + final _controller3 = TextEditingController(); + final _focusNode3 = FocusNode(); + + final _formKey4 = GlobalKey(); + final _controller4 = TextEditingController(); + final _focusNode4 = FocusNode(); + + final _formKey5 = GlobalKey(); + final _controller5 = TextEditingController(); + final _focusNode5 = FocusNode(); + + final _formKey6 = GlobalKey(); + final _controller6 = TextEditingController(); + final _focusNode6 = FocusNode(); + + final ValueNotifier _enable = ValueNotifier(true); + + @override + void initState() { + super.initState(); + Future.delayed(const Duration(milliseconds: 500), () { + setState(() { + _enable.value = false; + }); + }); + } + + @override + Widget build(BuildContext context) => Form( + child: ListView( + cacheExtent: 1000, + children: [ + const Gap(20), + Align( + child: Text( + 'Text inputs', + style: Theme.of(context).textTheme.titleLarge, + ), + ), + const Gap(20), + TextInput( + key: _formKey6, + controller: _controller6, + focusNode: _focusNode6, + label: 'Nom / Prénom'.wrap(), + onError: (value) => 'Erreur : ${value.length} > 5.', + validator: (value) => value.length > 5, + ), + const Gap(20), + TextInput( + key: _formKey, + enabled: _enable, + controller: _controller, + focusNode: _focusNode, + label: 'Nom / Prénom'.wrap(), + onError: (value) => 'Erreur : ${value.length} > 5.', + validator: (value) => value.length > 5, + ), + const Gap(20), + TextInput( + key: _formKey2, + controller: _controller2, + focusNode: _focusNode2, + maxLines: 3, + onError: (value) => 'Erreur : ${value.length} > 5.', + validator: (value) => value.length > 5, + onChanged: (value) {}, + ), + const Gap(20), + TextInput( + key: _formKey3, + controller: _controller3, + focusNode: _focusNode3, + expand: false, + label: 'Nom / Prénom'.wrap(), + onError: (value) => 'Erreur : ${value.length} > 5.', + validator: (value) => value.length > 5, + onChanged: (value) {}, + ), + const Gap(20), + TextInput( + key: _formKey4, + expand: false, + controller: _controller4, + focusNode: _focusNode4, + label: 'Nom / Prénom'.wrap(), + maxLines: 3, + onError: (value) => 'Erreur : ${value.length} > 5.', + validator: (value) => value.length > 5, + onChanged: (value) {}, + ), + const Gap(20), + TextInput( + key: _formKey5, + prefixIcon: const Icon(Icons.architecture), + suffixIcon: const Icon(Icons.architecture), + controller: _controller5, + focusNode: _focusNode5, + label: 'Nom / Prénom'.wrap(), + onError: (value) => 'Erreur : ${value.length} > 5.', + validator: (value) => value.length > 5, + ), + const Gap(20), + ], + ), + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart new file mode 100644 index 00000000..93e583f4 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart @@ -0,0 +1,181 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class TextInputTheme extends TextInputThemeExtension { + const TextInputTheme({ + super.normalStyle, + super.focusedStyle, + super.disableStyle, + super.errorStyle, + }); + + factory TextInputTheme.light() => TextInputTheme( + normalStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: const MultiColor([ + Color.fromRGBO(221, 224, 227, 1), + Color.fromRGBO(202, 204, 212, 1), + ]), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(55, 65, 81, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(55, 65, 81, 1), + ), + ), + focusedStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: const MultiColor([ + Color.fromRGBO(60, 125, 251, 1), + Color.fromRGBO(68, 109, 244, 1), + ]), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(55, 65, 81, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(55, 65, 81, 1), + ), + ), + errorStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: const MultiColor([ + Color.fromRGBO(251, 94, 60, 1), + Color.fromRGBO(244, 68, 100, 1), + ]), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(244, 68, 100, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(55, 65, 81, 1), + ), + ), + disableStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: + const MultiColor.single(Color.fromRGBO(229, 231, 235, 1)), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(156, 163, 175, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(156, 163, 175, 1), + ), + ), + ); + + factory TextInputTheme.dark() => TextInputTheme( + normalStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: const MultiColor.single( + Color.fromRGBO(96, 101, 106, 1), + ), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(204, 204, 204, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(255, 255, 255, 1), + ), + ), + focusedStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: const MultiColor([ + Color.fromRGBO(60, 125, 251, 1), + Color.fromRGBO(68, 109, 244, 1), + ]), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(204, 204, 204, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(255, 255, 255, 1), + ), + ), + errorStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: const MultiColor([ + Color.fromRGBO(251, 94, 60, 1), + Color.fromRGBO(244, 68, 100, 1), + ]), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(244, 68, 100, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(255, 255, 255, 1), + ), + ), + disableStyle: TextInputStyle( + radius: BorderRadius.circular(12), + borderColors: const MultiColor.single( + Color.fromRGBO(96, 101, 106, 1), + ), + labelStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(96, 101, 106, 1), + ), + inputStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w300, + color: const Color.fromRGBO(255, 255, 255, 1), + ), + ), + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! TextInputTheme) { + return this; + } + return TextInputTheme( + normalStyle: TextInputStyle.lerp(normalStyle, other.normalStyle, t), + focusedStyle: TextInputStyle.lerp(focusedStyle, other.focusedStyle, t), + disableStyle: TextInputStyle.lerp(disableStyle, other.disableStyle, t), + errorStyle: TextInputStyle.lerp(errorStyle, other.errorStyle, t), + ); + } + + @override + ThemeExtension copyWith({ + TextInputStyle? normalStyle, + TextInputStyle? focusedStyle, + TextInputStyle? disableStyle, + TextInputStyle? errorStyle, + }) => + TextInputTheme( + normalStyle: normalStyle ?? this.normalStyle, + focusedStyle: focusedStyle ?? this.focusedStyle, + disableStyle: disableStyle ?? this.disableStyle, + errorStyle: errorStyle ?? this.errorStyle, + ); +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index 63ecea53..6bb52867 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -24,6 +24,7 @@ import 'package:wyatt_ui_kit_example/theme/loader_theme.dart'; import 'package:wyatt_ui_kit_example/theme/rich_text_builder_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/text_input_theme.dart'; /// Easely switch between Material and Studio themes. abstract class Themes { @@ -90,6 +91,7 @@ abstract class Themes { LoaderTheme.light(), // Rich Text RichTextBuilderTheme.light(), + TextInputTheme.light(), ], ); @@ -121,6 +123,7 @@ abstract class Themes { LoaderTheme.dark(), // Rich Text RichTextBuilderTheme.dark(), + TextInputTheme.dark(), ], ); } -- 2.47.2 From 9b9339cb564db64e6d8dcae563bdb0e41df54999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 08:49:52 +0100 Subject: [PATCH 149/320] chore(ui_components): add copywith deps --- packages/wyatt_ui_components/pubspec.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 80e5e707..395554ea 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -10,6 +10,7 @@ environment: dependencies: flutter: { sdk: flutter } + copy_with_extension: ^5.0.0 wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git @@ -17,6 +18,7 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 + copy_with_extension_gen: ^5.0.0 flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub -- 2.47.2 From b6d22002ee2585ccf912b45f833422ba1c98b8ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 08:52:18 +0100 Subject: [PATCH 150/320] fix(ui_kit): fix export theme file --- packages/wyatt_ui_kit/lib/src/domain/domain.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/domain/domain.dart b/packages/wyatt_ui_kit/lib/src/domain/domain.dart index 7456e08c..6cf19139 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/domain.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/domain.dart @@ -16,9 +16,6 @@ export './button_theme_extension/button_theme_extension.dart'; export './card_theme_extension.dart'; -<<<<<<< HEAD export './loader_theme_extension.dart'; export './rich_text_builder_theme_extension.dart'; -======= -export 'text_input_theme_extension.dart'; ->>>>>>> 548df1c (feat(ui_kit): implemement text inputs (#138)) +export './text_input_theme_extension.dart'; -- 2.47.2 From 8ed8a71c7c2ddc97d44a764c48ce63697ad7f7c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 08:53:38 +0100 Subject: [PATCH 151/320] fix(ui_kit): fix conflicts in card component after rebase --- .../lib/src/components/cards/widgets/card_wrapper.dart | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index 736c0387..46a72582 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -112,7 +112,8 @@ class _CardWrapperState extends State { extensionCardColor.backgroundColors != null && extensionCardColor.backgroundColors!.isGradient) { return LinearGradient( - colors: extensionCardColor.backgroundColors!.colors,); + colors: extensionCardColor.backgroundColors!.colors, + ); } } return null; @@ -151,15 +152,9 @@ class _CardWrapperState extends State { final extensionCardColor = Theme.of(context).extension(); if (extensionCardColor != null && -<<<<<<< HEAD extensionCardColor.borderColors != null) { if (extensionCardColor.borderColors!.isGradient) { - return GradientBoxBorder( -======= - extensionCardColor.borderColor != null) { - if (extensionCardColor.borderColor!.length >= 2) { return CustomGradientBoxBorder( ->>>>>>> 548df1c (feat(ui_kit): implemement text inputs (#138)) gradient: LinearGradient( colors: extensionCardColor.borderColors!.colors, ), -- 2.47.2 From 4030511f4a4d1be6081f38717613ace06f096a3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 09:54:19 +0100 Subject: [PATCH 152/320] fix(ui_components-ui_kit): fix, clean and unify logic and code after rebase --- .../lib/src/core/utils/theme_resolver.dart | 22 ++- .../buttons/file_selection_button_style.dart | 34 +--- .../file_selection_button_style.g.dart | 152 ++++++++++++++++++ .../entities/buttons/flat_button_style.dart | 29 +--- .../entities/buttons/flat_button_style.g.dart | 137 ++++++++++++++++ .../buttons/simple_icon_button_style.dart | 29 +--- .../buttons/simple_icon_button_style.g.dart | 141 ++++++++++++++++ .../entities/buttons/symbol_button_style.dart | 31 +--- .../buttons/symbol_button_style.g.dart | 150 +++++++++++++++++ .../lib/src/domain/entities/loader_style.dart | 17 +- .../src/domain/entities/loader_style.g.dart | 67 ++++++++ .../rich_text_builder_style.dart | 17 +- .../rich_text_builder_style.g.dart | 71 ++++++++ .../text_inputs/text_input_style.dart | 6 +- .../lib/src/domain/entities/theme_style.dart | 8 +- .../file_selection_button_screen.dart | 2 +- .../file_selection_button_theme_resolver.dart | 6 +- .../flat_button/flat_button_screen.dart | 2 +- .../flat_button_theme_resolver.dart | 4 +- .../simple_icon_button_theme_resolver.dart | 4 +- .../simple_icon_screen.dart | 2 +- .../symbol_button/symbol_button_screen.dart | 2 +- .../symbol_button_theme_resolver.dart | 6 +- .../lib/src/components/loader/loader.dart | 10 -- .../loader/loader_theme_resolver.dart | 17 +- .../rich_text_builder/rich_text_builder.dart | 10 -- .../rich_text_builder_theme_resolver.dart | 18 ++- .../text_inputs/text_input_screen.dart | 7 +- .../text_input_theme_resolver.dart | 9 +- 29 files changed, 787 insertions(+), 223 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index c77e588b..4626fb50 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -35,59 +35,55 @@ abstract class ThemeResolver, T, E> { /// {@macro theme_resolver} const ThemeResolver(); - S? Function(BuildContext context, S extensionValue, {E? extra}) - get customStyleFn; + S? Function(BuildContext context, {E? extra}) get customStyleFn; /// Compute default value from Flutter Theme or with hardcoded values. S computeDefaultValue(BuildContext context, {E? extra}); S? computeExtensionValueFn( BuildContext context, - S defaultValue, T themeExtension, { E? extra, }); /// Compute values from the extension if found S? _computeExtensionValue( - BuildContext context, - S defaultValue, { + BuildContext context, { E? extra, }) { final themeExtension = Theme.of(context).extension(); if (themeExtension != null) { return computeExtensionValueFn( context, - defaultValue, themeExtension, extra: extra, ); } - return defaultValue; + return null; } /// Compute custom value S? _computeCustomValue( - BuildContext context, - S previousPhaseValue, { + BuildContext context, { E? extra, }) { final customStyle = customStyleFn( context, - previousPhaseValue, extra: extra, ); if (customStyle != null) { return customStyle; } - return previousPhaseValue; + return null; } /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { S style = computeDefaultValue(context, extra: extra); - style = _computeExtensionValue(context, style, extra: extra) ?? style; - style = _computeCustomValue(context, style, extra: extra) ?? style; + style = + style.mergeWith(_computeExtensionValue(context, extra: extra)) ?? style; + style = + style.mergeWith(_computeCustomValue(context, extra: extra)) ?? style; return style; } } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart index 75fc9a42..8585273e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -16,10 +16,13 @@ import 'dart:ui'; +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; +part 'file_selection_button_style.g.dart'; +@CopyWith() class FileSelectionButtonStyle extends ButtonStyle { const FileSelectionButtonStyle({ this.title, @@ -106,35 +109,4 @@ class FileSelectionButtonStyle extends ButtonStyle { @override FileSelectionButtonStyle mergeWith(FileSelectionButtonStyle? other) => FileSelectionButtonStyle.merge(this, other)!; - - @override - FileSelectionButtonStyle? lerpWith( - FileSelectionButtonStyle? other, - double t, - ) => - FileSelectionButtonStyle.lerp(this, other, t); - - @override - FileSelectionButtonStyle copyWith({ - TextStyle? title, - TextStyle? subTitle, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => - FileSelectionButtonStyle( - title: title ?? this.title, - subTitle: subTitle ?? this.subTitle, - radius: radius ?? this.radius, - padding: padding ?? this.padding, - foregroundColors: foregroundColors ?? this.foregroundColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - borderColors: borderColors ?? this.borderColors, - stroke: stroke ?? this.stroke, - shadow: shadow ?? this.shadow, - ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart new file mode 100644 index 00000000..6576a261 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart @@ -0,0 +1,152 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'file_selection_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$FileSelectionButtonStyleCWProxy { + FileSelectionButtonStyle title(TextStyle? title); + + FileSelectionButtonStyle subTitle(TextStyle? subTitle); + + FileSelectionButtonStyle radius(BorderRadiusGeometry? radius); + + FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding); + + FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors); + + FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors); + + FileSelectionButtonStyle borderColors(MultiColor? borderColors); + + FileSelectionButtonStyle stroke(double? stroke); + + FileSelectionButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FileSelectionButtonStyle call({ + TextStyle? title, + TextStyle? subTitle, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)` +class _$FileSelectionButtonStyleCWProxyImpl + implements _$FileSelectionButtonStyleCWProxy { + const _$FileSelectionButtonStyleCWProxyImpl(this._value); + + final FileSelectionButtonStyle _value; + + @override + FileSelectionButtonStyle title(TextStyle? title) => this(title: title); + + @override + FileSelectionButtonStyle subTitle(TextStyle? subTitle) => + this(subTitle: subTitle); + + @override + FileSelectionButtonStyle radius(BorderRadiusGeometry? radius) => + this(radius: radius); + + @override + FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + FileSelectionButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + FileSelectionButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + FileSelectionButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FileSelectionButtonStyle call({ + Object? title = const $CopyWithPlaceholder(), + Object? subTitle = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return FileSelectionButtonStyle( + title: title == const $CopyWithPlaceholder() + ? _value.title + // ignore: cast_nullable_to_non_nullable + : title as TextStyle?, + subTitle: subTitle == const $CopyWithPlaceholder() + ? _value.subTitle + // ignore: cast_nullable_to_non_nullable + : subTitle as TextStyle?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $FileSelectionButtonStyleCopyWith on FileSelectionButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)` or like so:`instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$FileSelectionButtonStyleCWProxy get copyWith => + _$FileSelectionButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index f5476e31..676d510c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -16,10 +16,13 @@ import 'dart:ui'; +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; +part 'flat_button_style.g.dart'; +@CopyWith() class FlatButtonStyle extends ButtonStyle { const FlatButtonStyle({ this.label, @@ -98,30 +101,4 @@ class FlatButtonStyle extends ButtonStyle { @override FlatButtonStyle mergeWith(FlatButtonStyle? other) => FlatButtonStyle.merge(this, other)!; - - @override - FlatButtonStyle? lerpWith(FlatButtonStyle? other, double t) => - FlatButtonStyle.lerp(this, other, t); - - @override - FlatButtonStyle copyWith({ - TextStyle? label, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => - FlatButtonStyle( - label: label ?? this.label, - radius: radius ?? this.radius, - padding: padding ?? this.padding, - foregroundColors: foregroundColors ?? this.foregroundColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - borderColors: borderColors ?? this.borderColors, - stroke: stroke ?? this.stroke, - shadow: shadow ?? this.shadow, - ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart new file mode 100644 index 00000000..939a48e1 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart @@ -0,0 +1,137 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'flat_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$FlatButtonStyleCWProxy { + FlatButtonStyle label(TextStyle? label); + + FlatButtonStyle radius(BorderRadiusGeometry? radius); + + FlatButtonStyle padding(EdgeInsetsGeometry? padding); + + FlatButtonStyle foregroundColors(MultiColor? foregroundColors); + + FlatButtonStyle backgroundColors(MultiColor? backgroundColors); + + FlatButtonStyle borderColors(MultiColor? borderColors); + + FlatButtonStyle stroke(double? stroke); + + FlatButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FlatButtonStyle call({ + TextStyle? label, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFlatButtonStyle.copyWith.fieldName(...)` +class _$FlatButtonStyleCWProxyImpl implements _$FlatButtonStyleCWProxy { + const _$FlatButtonStyleCWProxyImpl(this._value); + + final FlatButtonStyle _value; + + @override + FlatButtonStyle label(TextStyle? label) => this(label: label); + + @override + FlatButtonStyle radius(BorderRadiusGeometry? radius) => this(radius: radius); + + @override + FlatButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + FlatButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + FlatButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + FlatButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + FlatButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + FlatButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + FlatButtonStyle call({ + Object? label = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return FlatButtonStyle( + label: label == const $CopyWithPlaceholder() + ? _value.label + // ignore: cast_nullable_to_non_nullable + : label as TextStyle?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $FlatButtonStyleCopyWith on FlatButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)` or like so:`instanceOfFlatButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$FlatButtonStyleCWProxy get copyWith => _$FlatButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart index e31acee7..2168895e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -16,10 +16,13 @@ import 'dart:ui'; +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; +part 'simple_icon_button_style.g.dart'; +@CopyWith() class SimpleIconButtonStyle extends ButtonStyle { const SimpleIconButtonStyle({ this.dimension, @@ -98,30 +101,4 @@ class SimpleIconButtonStyle extends ButtonStyle { @override SimpleIconButtonStyle mergeWith(SimpleIconButtonStyle? other) => SimpleIconButtonStyle.merge(this, other)!; - - @override - SimpleIconButtonStyle? lerpWith(SimpleIconButtonStyle? other, double t) => - SimpleIconButtonStyle.lerp(this, other, t); - - @override - SimpleIconButtonStyle copyWith({ - double? dimension, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => - SimpleIconButtonStyle( - dimension: dimension ?? this.dimension, - radius: radius ?? this.radius, - padding: padding ?? this.padding, - foregroundColors: foregroundColors ?? this.foregroundColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - borderColors: borderColors ?? this.borderColors, - stroke: stroke ?? this.stroke, - shadow: shadow ?? this.shadow, - ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart new file mode 100644 index 00000000..f0ee5153 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart @@ -0,0 +1,141 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'simple_icon_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$SimpleIconButtonStyleCWProxy { + SimpleIconButtonStyle dimension(double? dimension); + + SimpleIconButtonStyle radius(BorderRadiusGeometry? radius); + + SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding); + + SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors); + + SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors); + + SimpleIconButtonStyle borderColors(MultiColor? borderColors); + + SimpleIconButtonStyle stroke(double? stroke); + + SimpleIconButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SimpleIconButtonStyle call({ + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)` +class _$SimpleIconButtonStyleCWProxyImpl + implements _$SimpleIconButtonStyleCWProxy { + const _$SimpleIconButtonStyleCWProxyImpl(this._value); + + final SimpleIconButtonStyle _value; + + @override + SimpleIconButtonStyle dimension(double? dimension) => + this(dimension: dimension); + + @override + SimpleIconButtonStyle radius(BorderRadiusGeometry? radius) => + this(radius: radius); + + @override + SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + SimpleIconButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + SimpleIconButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + SimpleIconButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SimpleIconButtonStyle call({ + Object? dimension = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return SimpleIconButtonStyle( + dimension: dimension == const $CopyWithPlaceholder() + ? _value.dimension + // ignore: cast_nullable_to_non_nullable + : dimension as double?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $SimpleIconButtonStyleCopyWith on SimpleIconButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)` or like so:`instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$SimpleIconButtonStyleCWProxy get copyWith => + _$SimpleIconButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index a0815b3c..46bbcb35 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -16,10 +16,13 @@ import 'dart:ui'; +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; +part 'symbol_button_style.g.dart'; +@CopyWith() class SymbolButtonStyle extends ButtonStyle { const SymbolButtonStyle({ this.label, @@ -106,32 +109,4 @@ class SymbolButtonStyle extends ButtonStyle { @override SymbolButtonStyle mergeWith(SymbolButtonStyle? other) => SymbolButtonStyle.merge(this, other)!; - - @override - SymbolButtonStyle? lerpWith(SymbolButtonStyle? other, double t) => - SymbolButtonStyle.lerp(this, other, t); - - @override - SymbolButtonStyle copyWith({ - TextStyle? label, - double? dimension, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }) => - SymbolButtonStyle( - label: label ?? this.label, - dimension: dimension ?? this.dimension, - radius: radius ?? this.radius, - padding: padding ?? this.padding, - foregroundColors: foregroundColors ?? this.foregroundColors, - backgroundColors: backgroundColors ?? this.backgroundColors, - borderColors: borderColors ?? this.borderColors, - stroke: stroke ?? this.stroke, - shadow: shadow ?? this.shadow, - ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart new file mode 100644 index 00000000..a3233cec --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart @@ -0,0 +1,150 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'symbol_button_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$SymbolButtonStyleCWProxy { + SymbolButtonStyle label(TextStyle? label); + + SymbolButtonStyle dimension(double? dimension); + + SymbolButtonStyle radius(BorderRadiusGeometry? radius); + + SymbolButtonStyle padding(EdgeInsetsGeometry? padding); + + SymbolButtonStyle foregroundColors(MultiColor? foregroundColors); + + SymbolButtonStyle backgroundColors(MultiColor? backgroundColors); + + SymbolButtonStyle borderColors(MultiColor? borderColors); + + SymbolButtonStyle stroke(double? stroke); + + SymbolButtonStyle shadow(BoxShadow? shadow); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SymbolButtonStyle call({ + TextStyle? label, + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSymbolButtonStyle.copyWith.fieldName(...)` +class _$SymbolButtonStyleCWProxyImpl implements _$SymbolButtonStyleCWProxy { + const _$SymbolButtonStyleCWProxyImpl(this._value); + + final SymbolButtonStyle _value; + + @override + SymbolButtonStyle label(TextStyle? label) => this(label: label); + + @override + SymbolButtonStyle dimension(double? dimension) => this(dimension: dimension); + + @override + SymbolButtonStyle radius(BorderRadiusGeometry? radius) => + this(radius: radius); + + @override + SymbolButtonStyle padding(EdgeInsetsGeometry? padding) => + this(padding: padding); + + @override + SymbolButtonStyle foregroundColors(MultiColor? foregroundColors) => + this(foregroundColors: foregroundColors); + + @override + SymbolButtonStyle backgroundColors(MultiColor? backgroundColors) => + this(backgroundColors: backgroundColors); + + @override + SymbolButtonStyle borderColors(MultiColor? borderColors) => + this(borderColors: borderColors); + + @override + SymbolButtonStyle stroke(double? stroke) => this(stroke: stroke); + + @override + SymbolButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") + /// ```` + SymbolButtonStyle call({ + Object? label = const $CopyWithPlaceholder(), + Object? dimension = const $CopyWithPlaceholder(), + Object? radius = const $CopyWithPlaceholder(), + Object? padding = const $CopyWithPlaceholder(), + Object? foregroundColors = const $CopyWithPlaceholder(), + Object? backgroundColors = const $CopyWithPlaceholder(), + Object? borderColors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + Object? shadow = const $CopyWithPlaceholder(), + }) { + return SymbolButtonStyle( + label: label == const $CopyWithPlaceholder() + ? _value.label + // ignore: cast_nullable_to_non_nullable + : label as TextStyle?, + dimension: dimension == const $CopyWithPlaceholder() + ? _value.dimension + // ignore: cast_nullable_to_non_nullable + : dimension as double?, + radius: radius == const $CopyWithPlaceholder() + ? _value.radius + // ignore: cast_nullable_to_non_nullable + : radius as BorderRadiusGeometry?, + padding: padding == const $CopyWithPlaceholder() + ? _value.padding + // ignore: cast_nullable_to_non_nullable + : padding as EdgeInsetsGeometry?, + foregroundColors: foregroundColors == const $CopyWithPlaceholder() + ? _value.foregroundColors + // ignore: cast_nullable_to_non_nullable + : foregroundColors as MultiColor?, + backgroundColors: backgroundColors == const $CopyWithPlaceholder() + ? _value.backgroundColors + // ignore: cast_nullable_to_non_nullable + : backgroundColors as MultiColor?, + borderColors: borderColors == const $CopyWithPlaceholder() + ? _value.borderColors + // ignore: cast_nullable_to_non_nullable + : borderColors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + shadow: shadow == const $CopyWithPlaceholder() + ? _value.shadow + // ignore: cast_nullable_to_non_nullable + : shadow as BoxShadow?, + ); + } +} + +extension $SymbolButtonStyleCopyWith on SymbolButtonStyle { + /// Returns a callable class that can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)` or like so:`instanceOfSymbolButtonStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$SymbolButtonStyleCWProxy get copyWith => + _$SymbolButtonStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart index 43c3253c..3a8be8e2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart @@ -16,8 +16,11 @@ import 'dart:ui'; +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +part 'loader_style.g.dart'; +@CopyWith() class LoaderStyle extends ThemeStyle { const LoaderStyle({ this.colors, @@ -67,20 +70,6 @@ class LoaderStyle extends ThemeStyle { @override LoaderStyle mergeWith(LoaderStyle? other) => LoaderStyle.merge(this, other)!; - @override - LoaderStyle? lerpWith(LoaderStyle? other, double t) => - LoaderStyle.lerp(this, other, t); - - @override - LoaderStyle copyWith({ - MultiColor? colors, - double? stroke, - }) => - LoaderStyle( - colors: colors ?? this.colors, - stroke: stroke ?? this.stroke, - ); - @override String toString() => 'LoaderStyle($colors, $stroke)'; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart new file mode 100644 index 00000000..86ec75c5 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart @@ -0,0 +1,67 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'loader_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$LoaderStyleCWProxy { + LoaderStyle colors(MultiColor? colors); + + LoaderStyle stroke(double? stroke); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `LoaderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// LoaderStyle(...).copyWith(id: 12, name: "My name") + /// ```` + LoaderStyle call({ + MultiColor? colors, + double? stroke, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfLoaderStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfLoaderStyle.copyWith.fieldName(...)` +class _$LoaderStyleCWProxyImpl implements _$LoaderStyleCWProxy { + const _$LoaderStyleCWProxyImpl(this._value); + + final LoaderStyle _value; + + @override + LoaderStyle colors(MultiColor? colors) => this(colors: colors); + + @override + LoaderStyle stroke(double? stroke) => this(stroke: stroke); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `LoaderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// LoaderStyle(...).copyWith(id: 12, name: "My name") + /// ```` + LoaderStyle call({ + Object? colors = const $CopyWithPlaceholder(), + Object? stroke = const $CopyWithPlaceholder(), + }) { + return LoaderStyle( + colors: colors == const $CopyWithPlaceholder() + ? _value.colors + // ignore: cast_nullable_to_non_nullable + : colors as MultiColor?, + stroke: stroke == const $CopyWithPlaceholder() + ? _value.stroke + // ignore: cast_nullable_to_non_nullable + : stroke as double?, + ); + } +} + +extension $LoaderStyleCopyWith on LoaderStyle { + /// Returns a callable class that can be used as follows: `instanceOfLoaderStyle.copyWith(...)` or like so:`instanceOfLoaderStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$LoaderStyleCWProxy get copyWith => _$LoaderStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart index 43a03ff5..43ea1a9b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart @@ -14,9 +14,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +part 'rich_text_builder_style.g.dart'; +@CopyWith() class RichTextBuilderStyle extends ThemeStyle { const RichTextBuilderStyle({ this.defaultStyle, @@ -66,18 +69,4 @@ class RichTextBuilderStyle extends ThemeStyle { @override RichTextBuilderStyle mergeWith(RichTextBuilderStyle? other) => RichTextBuilderStyle.merge(this, other)!; - - @override - RichTextBuilderStyle? lerpWith(RichTextBuilderStyle? other, double t) => - RichTextBuilderStyle.lerp(this, other, t); - - @override - RichTextBuilderStyle copyWith({ - TextStyle? defaultStyle, - Map? styles, - }) => - RichTextBuilderStyle( - defaultStyle: defaultStyle ?? this.defaultStyle, - styles: styles ?? this.styles, - ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart new file mode 100644 index 00000000..8f74d5da --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart @@ -0,0 +1,71 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'rich_text_builder_style.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$RichTextBuilderStyleCWProxy { + RichTextBuilderStyle defaultStyle(TextStyle? defaultStyle); + + RichTextBuilderStyle styles(Map? styles); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `RichTextBuilderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// RichTextBuilderStyle(...).copyWith(id: 12, name: "My name") + /// ```` + RichTextBuilderStyle call({ + TextStyle? defaultStyle, + Map? styles, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfRichTextBuilderStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfRichTextBuilderStyle.copyWith.fieldName(...)` +class _$RichTextBuilderStyleCWProxyImpl + implements _$RichTextBuilderStyleCWProxy { + const _$RichTextBuilderStyleCWProxyImpl(this._value); + + final RichTextBuilderStyle _value; + + @override + RichTextBuilderStyle defaultStyle(TextStyle? defaultStyle) => + this(defaultStyle: defaultStyle); + + @override + RichTextBuilderStyle styles(Map? styles) => + this(styles: styles); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `RichTextBuilderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// RichTextBuilderStyle(...).copyWith(id: 12, name: "My name") + /// ```` + RichTextBuilderStyle call({ + Object? defaultStyle = const $CopyWithPlaceholder(), + Object? styles = const $CopyWithPlaceholder(), + }) { + return RichTextBuilderStyle( + defaultStyle: defaultStyle == const $CopyWithPlaceholder() + ? _value.defaultStyle + // ignore: cast_nullable_to_non_nullable + : defaultStyle as TextStyle?, + styles: styles == const $CopyWithPlaceholder() + ? _value.styles + // ignore: cast_nullable_to_non_nullable + : styles as Map?, + ); + } +} + +extension $RichTextBuilderStyleCopyWith on RichTextBuilderStyle { + /// Returns a callable class that can be used as follows: `instanceOfRichTextBuilderStyle.copyWith(...)` or like so:`instanceOfRichTextBuilderStyle.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$RichTextBuilderStyleCWProxy get copyWith => + _$RichTextBuilderStyleCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart index a456647e..1c19d260 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart @@ -20,7 +20,7 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'text_input_style.g.dart'; @CopyWith() -class TextInputStyle { +class TextInputStyle extends ThemeStyle { TextInputStyle({ this.labelStyle, this.hintStyle, @@ -99,4 +99,8 @@ class TextInputStyle { iconColor: Color.lerp(a.iconColor, b.iconColor, t), ); } + + @override + TextInputStyle? mergeWith(TextInputStyle? other) => + TextInputStyle.merge(this, other); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart index 0f637eed..591b6fee 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart @@ -18,11 +18,5 @@ abstract class ThemeStyle { const ThemeStyle(); /// Merges non-null `other` attributes in `this` and returns a copy. - T mergeWith(T? other); - - /// Used for interpolation. - T? lerpWith(T? other, double t); - - /// Copy with (mandatory for mergeWith, needs to be simple and ignore `null`) - T copyWith(); + T? mergeWith(T? other); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index 18a2cf0b..d707014c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -67,7 +67,7 @@ class FileSelectionButtonScreen FileSelectionButtonStyle _resolve(BuildContext context, ButtonState state) { final FileSelectionButtonThemeResolver resolver = themeResolver ?? FileSelectionButtonThemeResolver( - customStyleFn: (context, extensionValue, {extra}) { + customStyleFn: (context, {extra}) { FileSelectionButtonStyle? style; switch (extra?.state) { case ControlState.disabled: diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index 92399773..505e9e37 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -73,19 +73,17 @@ class FileSelectionButtonThemeResolver extends ThemeResolver< @override final FileSelectionButtonStyle? Function( - BuildContext context, - FileSelectionButtonStyle? extensionValue, { + BuildContext context, { ButtonState? extra, }) customStyleFn; @override FileSelectionButtonStyle? computeExtensionValueFn( BuildContext context, - FileSelectionButtonStyle defaultValue, FileSelectionButtonThemeExtension themeExtension, { ButtonState? extra, }) { - FileSelectionButtonStyle? style = defaultValue; + FileSelectionButtonStyle? style; switch (extra?.state) { case ControlState.disabled: style = themeExtension.disabledStyle; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 88ff27f5..14b739fa 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -61,7 +61,7 @@ class FlatButtonScreen extends CubitScreen { FlatButtonStyle _resolve(BuildContext context, ControlState state) { final FlatButtonThemeResolver resolver = themeResolver ?? FlatButtonThemeResolver( - customStyleFn: (context, extensionValue, {extra}) { + customStyleFn: (context, {extra}) { switch (extra) { case ControlState.disabled: return disabledStyle; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart index cef92e2f..dfbe1349 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart @@ -69,15 +69,13 @@ class FlatButtonThemeResolver extends ThemeResolver { SimpleIconButtonStyle _resolve(BuildContext context, ControlState state) { final SimpleIconButtonThemeResolver resolver = themeResolver ?? SimpleIconButtonThemeResolver( - customStyleFn: (context, extensionValue, {extra}) { + customStyleFn: (context, {extra}) { switch (extra) { case ControlState.disabled: return disabledStyle; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index e2e427fd..6b586d82 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -63,7 +63,7 @@ class SymbolButtonScreen SymbolButtonStyle _resolve(BuildContext context, ButtonState state) { final SymbolButtonThemeResolver resolver = themeResolver ?? SymbolButtonThemeResolver( - customStyleFn: (context, extensionValue, {extra}) { + customStyleFn: (context, {extra}) { SymbolButtonStyle? style; switch (extra?.state) { case ControlState.disabled: diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart index bed01568..4628bd87 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart @@ -69,19 +69,17 @@ class SymbolButtonThemeResolver extends ThemeResolver - LoaderStyle( - colors: themeExtension.colors, - stroke: themeExtension.stroke, - ), customStyleFn: (context, {extra}) => LoaderStyle( colors: colors, stroke: stroke, diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart index 60047759..1b45ddaf 100644 --- a/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart @@ -21,7 +21,6 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class LoaderThemeResolver extends ThemeResolver { const LoaderThemeResolver({ - required this.computeExtensionValueFn, required this.customStyleFn, }); @@ -42,12 +41,18 @@ class LoaderThemeResolver @override final LoaderStyle? Function( - BuildContext context, - LoaderStyle defaultValue, - LoaderThemeExtension themeExtension, { + BuildContext context, { void extra, - }) computeExtensionValueFn; + }) customStyleFn; @override - final LoaderStyle? Function(BuildContext context, {void extra}) customStyleFn; + LoaderStyle? computeExtensionValueFn( + BuildContext context, + LoaderThemeExtension themeExtension, { + void extra, + }) => + LoaderStyle( + colors: themeExtension.colors, + stroke: themeExtension.stroke, + ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart index 745d3462..0ca1798a 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart @@ -42,16 +42,6 @@ class RichTextBuilder extends RichTextBuilderComponent RichTextBuilderStyle _resolve(BuildContext context) { final RichTextBuilderThemeResolver resolver = themeResolver ?? RichTextBuilderThemeResolver( - computeExtensionValueFn: ( - context, - defaultValue, - themeExtension, { - extra, - }) => - RichTextBuilderStyle( - defaultStyle: themeExtension.defaultStyle, - styles: themeExtension.styles, - ), customStyleFn: (context, {extra}) => RichTextBuilderStyle( defaultStyle: defaultStyle, styles: styles, diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart index f619d0a0..4661a264 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart @@ -21,7 +21,6 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class RichTextBuilderThemeResolver extends ThemeResolver { const RichTextBuilderThemeResolver({ - required this.computeExtensionValueFn, required this.customStyleFn, }); @@ -37,13 +36,18 @@ class RichTextBuilderThemeResolver extends ThemeResolver + RichTextBuilderStyle( + defaultStyle: themeExtension.defaultStyle, + styles: themeExtension.styles, + ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart index 51a9d291..0766f8c0 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart @@ -195,7 +195,7 @@ class TextInputScreen extends CubitScreen { TextInputStyle _resolve(BuildContext context, TextInputState state) { final resolver = TextInputThemeResolver( - customStyleFn: (context, extensionValue, {extra}) { + customStyleFn: (context, {extra}) { TextInputStyle? textInputStyle; switch (extra?.controlState) { case ControlState.focused: @@ -230,10 +230,7 @@ class TextInputScreen extends CubitScreen { break; } - return TextInputStyle.merge( - extensionValue, - TextInputStyle.merge(textInputStyle, style), - ); + return TextInputStyle.merge(textInputStyle, style); }, ); diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart index b774c720..f421b762 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart @@ -28,8 +28,7 @@ class TextInputThemeResolver extends ThemeResolver Date: Tue, 21 Feb 2023 12:10:17 +0100 Subject: [PATCH 153/320] refactor(ui_components): add CopyWith method in ThemeStyle --- .../buttons/file_selection_button_style.dart | 28 +++++++++- .../entities/buttons/flat_button_style.dart | 26 ++++++++- .../buttons/simple_icon_button_style.dart | 26 ++++++++- .../entities/buttons/symbol_button_style.dart | 28 +++++++++- .../lib/src/domain/entities/loader_style.dart | 12 +++- .../rich_text_builder_style.dart | 14 ++++- .../text_inputs/text_input_style.dart | 56 ++++++++++++++----- .../lib/src/domain/entities/theme_style.dart | 3 + packages/wyatt_ui_components/pubspec.yaml | 2 + 9 files changed, 171 insertions(+), 24 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart index 8585273e..1e61e3a5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -107,6 +107,30 @@ class FileSelectionButtonStyle extends ButtonStyle { final TextStyle? subTitle; @override - FileSelectionButtonStyle mergeWith(FileSelectionButtonStyle? other) => - FileSelectionButtonStyle.merge(this, other)!; + FileSelectionButtonStyle? mergeWith(FileSelectionButtonStyle? other) => + FileSelectionButtonStyle.merge(this, other); + + @override + FileSelectionButtonStyle? copyWith({ + TextStyle? title, + TextStyle? subTitle, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + FileSelectionButtonStyle( + title: title ?? this.title, + subTitle: subTitle ?? this.subTitle, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index 676d510c..50ac5fb2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -99,6 +99,28 @@ class FlatButtonStyle extends ButtonStyle { final TextStyle? label; @override - FlatButtonStyle mergeWith(FlatButtonStyle? other) => - FlatButtonStyle.merge(this, other)!; + FlatButtonStyle? mergeWith(FlatButtonStyle? other) => + FlatButtonStyle.merge(this, other); + + @override + FlatButtonStyle? copyWith({ + TextStyle? label, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + FlatButtonStyle( + label: label ?? this.label, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart index 2168895e..298d32d2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -99,6 +99,28 @@ class SimpleIconButtonStyle extends ButtonStyle { final double? dimension; @override - SimpleIconButtonStyle mergeWith(SimpleIconButtonStyle? other) => - SimpleIconButtonStyle.merge(this, other)!; + SimpleIconButtonStyle? mergeWith(SimpleIconButtonStyle? other) => + SimpleIconButtonStyle.merge(this, other); + + @override + SimpleIconButtonStyle copyWith({ + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + SimpleIconButtonStyle( + dimension: dimension ?? this.dimension, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index 46bbcb35..9dcc9640 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -107,6 +107,30 @@ class SymbolButtonStyle extends ButtonStyle { final double? dimension; @override - SymbolButtonStyle mergeWith(SymbolButtonStyle? other) => - SymbolButtonStyle.merge(this, other)!; + SymbolButtonStyle? mergeWith(SymbolButtonStyle? other) => + SymbolButtonStyle.merge(this, other); + + @override + SymbolButtonStyle? copyWith({ + TextStyle? label, + double? dimension, + BorderRadiusGeometry? radius, + EdgeInsetsGeometry? padding, + MultiColor? foregroundColors, + MultiColor? backgroundColors, + MultiColor? borderColors, + double? stroke, + BoxShadow? shadow, + }) => + SymbolButtonStyle( + label: label ?? this.label, + dimension: dimension ?? this.dimension, + radius: radius ?? this.radius, + padding: padding ?? this.padding, + foregroundColors: foregroundColors ?? this.foregroundColors, + backgroundColors: backgroundColors ?? this.backgroundColors, + borderColors: borderColors ?? this.borderColors, + stroke: stroke ?? this.stroke, + shadow: shadow ?? this.shadow, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart index 3a8be8e2..0f46cbba 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart @@ -68,7 +68,17 @@ class LoaderStyle extends ThemeStyle { final double? stroke; @override - LoaderStyle mergeWith(LoaderStyle? other) => LoaderStyle.merge(this, other)!; + LoaderStyle? mergeWith(LoaderStyle? other) => LoaderStyle.merge(this, other); + + @override + LoaderStyle copyWith({ + MultiColor? colors, + double? stroke, + }) => + LoaderStyle( + colors: colors ?? this.colors, + stroke: stroke ?? this.stroke, + ); @override String toString() => 'LoaderStyle($colors, $stroke)'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart index 43ea1a9b..48a21b3d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart @@ -67,6 +67,16 @@ class RichTextBuilderStyle extends ThemeStyle { final Map? styles; @override - RichTextBuilderStyle mergeWith(RichTextBuilderStyle? other) => - RichTextBuilderStyle.merge(this, other)!; + RichTextBuilderStyle? mergeWith(RichTextBuilderStyle? other) => + RichTextBuilderStyle.merge(this, other); + + @override + RichTextBuilderStyle? copyWith({ + TextStyle? defaultStyle, + Map? styles, + }) => + RichTextBuilderStyle( + defaultStyle: defaultStyle ?? this.defaultStyle, + styles: styles ?? this.styles, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart index 1c19d260..61640bcd 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart @@ -58,19 +58,19 @@ class TextInputStyle extends ThemeStyle { if (a == null) { return b.copyWith(); } - return a.copyWith( - labelStyle: b.labelStyle, - hintStyle: b.hintStyle, - backgroundColors: b.backgroundColors, - borderColors: b.borderColors, - boxShadow: b.boxShadow, - radius: b.radius, - inputStyle: b.inputStyle, - iconColor: b.iconColor, - prefixStyle: b.prefixStyle, - prefixIconColor: b.prefixIconColor, - suffixIconColor: b.suffixIconColor, - suffixStyle: b.suffixStyle, + return b.copyWith( + labelStyle: a.labelStyle, + hintStyle: a.hintStyle, + backgroundColors: a.backgroundColors, + borderColors: a.borderColors, + boxShadow: a.boxShadow, + radius: a.radius, + inputStyle: a.inputStyle, + iconColor: a.iconColor, + prefixStyle: a.prefixStyle, + prefixIconColor: a.prefixIconColor, + suffixIconColor: a.suffixIconColor, + suffixStyle: a.suffixStyle, ); } @@ -103,4 +103,34 @@ class TextInputStyle extends ThemeStyle { @override TextInputStyle? mergeWith(TextInputStyle? other) => TextInputStyle.merge(this, other); + + @override + TextInputStyle copyWith({ + TextStyle? labelStyle, + TextStyle? hintStyle, + MultiColor? backgroundColors, + MultiColor? borderColors, + BoxShadow? boxShadow, + BorderRadiusGeometry? radius, + TextStyle? inputStyle, + Color? iconColor, + TextStyle? prefixStyle, + Color? prefixIconColor, + TextStyle? suffixStyle, + Color? suffixIconColor, + }) => + TextInputStyle( + labelStyle: labelStyle ?? this.labelStyle, + hintStyle: hintStyle ?? this.hintStyle, + backgroundColors: backgroundColors ?? this.backgroundColors, + radius: radius ?? this.radius, + borderColors: borderColors ?? this.borderColors, + boxShadow: boxShadow ?? this.boxShadow, + inputStyle: inputStyle ?? this.inputStyle, + prefixStyle: prefixStyle ?? this.prefixStyle, + suffixStyle: suffixStyle ?? this.suffixStyle, + prefixIconColor: prefixIconColor ?? this.prefixIconColor, + suffixIconColor: suffixIconColor ?? this.suffixIconColor, + iconColor: iconColor ?? this.iconColor, + ); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart index 591b6fee..a0a69ffb 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart @@ -19,4 +19,7 @@ abstract class ThemeStyle { /// Merges non-null `other` attributes in `this` and returns a copy. T? mergeWith(T? other); + + /// Copy with (mandatory for mergeWith, needs to be simple and ignore `null`) + T? copyWith(); } diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 395554ea..865b67f9 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -15,11 +15,13 @@ dependencies: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git path: packages/wyatt_component_copy_with_extension + freezed_annotation: ^2.2.0 dev_dependencies: build_runner: ^2.3.3 copy_with_extension_gen: ^5.0.0 flutter_test: { sdk: flutter } + freezed: ^2.3.2 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.0 -- 2.47.2 From eda643e9b4667b5e602b2841ea243b56770daa53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 13:09:20 +0100 Subject: [PATCH 154/320] chore(ui_components): remove g files and copy with deps --- .../buttons/file_selection_button_style.dart | 3 - .../file_selection_button_style.g.dart | 152 -------------- .../entities/buttons/flat_button_style.dart | 3 - .../entities/buttons/flat_button_style.g.dart | 137 ------------- .../buttons/simple_icon_button_style.dart | 3 - .../buttons/simple_icon_button_style.g.dart | 141 ------------- .../entities/buttons/symbol_button_style.dart | 3 - .../buttons/symbol_button_style.g.dart | 150 -------------- .../lib/src/domain/entities/loader_style.dart | 3 - .../src/domain/entities/loader_style.g.dart | 67 ------- .../rich_text_builder_style.dart | 3 - .../rich_text_builder_style.g.dart | 71 ------- .../text_inputs/text_input_style.dart | 3 - .../text_inputs/text_input_style.g.dart | 185 ------------------ packages/wyatt_ui_components/pubspec.yaml | 2 - 15 files changed, 926 deletions(-) delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart index 1e61e3a5..85f20b88 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart @@ -16,13 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'file_selection_button_style.g.dart'; -@CopyWith() class FileSelectionButtonStyle extends ButtonStyle { const FileSelectionButtonStyle({ this.title, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart deleted file mode 100644 index 6576a261..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.g.dart +++ /dev/null @@ -1,152 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'file_selection_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$FileSelectionButtonStyleCWProxy { - FileSelectionButtonStyle title(TextStyle? title); - - FileSelectionButtonStyle subTitle(TextStyle? subTitle); - - FileSelectionButtonStyle radius(BorderRadiusGeometry? radius); - - FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding); - - FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors); - - FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors); - - FileSelectionButtonStyle borderColors(MultiColor? borderColors); - - FileSelectionButtonStyle stroke(double? stroke); - - FileSelectionButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FileSelectionButtonStyle call({ - TextStyle? title, - TextStyle? subTitle, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)` -class _$FileSelectionButtonStyleCWProxyImpl - implements _$FileSelectionButtonStyleCWProxy { - const _$FileSelectionButtonStyleCWProxyImpl(this._value); - - final FileSelectionButtonStyle _value; - - @override - FileSelectionButtonStyle title(TextStyle? title) => this(title: title); - - @override - FileSelectionButtonStyle subTitle(TextStyle? subTitle) => - this(subTitle: subTitle); - - @override - FileSelectionButtonStyle radius(BorderRadiusGeometry? radius) => - this(radius: radius); - - @override - FileSelectionButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - FileSelectionButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - FileSelectionButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - FileSelectionButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - FileSelectionButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - FileSelectionButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FileSelectionButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FileSelectionButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FileSelectionButtonStyle call({ - Object? title = const $CopyWithPlaceholder(), - Object? subTitle = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return FileSelectionButtonStyle( - title: title == const $CopyWithPlaceholder() - ? _value.title - // ignore: cast_nullable_to_non_nullable - : title as TextStyle?, - subTitle: subTitle == const $CopyWithPlaceholder() - ? _value.subTitle - // ignore: cast_nullable_to_non_nullable - : subTitle as TextStyle?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $FileSelectionButtonStyleCopyWith on FileSelectionButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfFileSelectionButtonStyle.copyWith(...)` or like so:`instanceOfFileSelectionButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$FileSelectionButtonStyleCWProxy get copyWith => - _$FileSelectionButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart index 50ac5fb2..4a15cc42 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.dart @@ -16,13 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'flat_button_style.g.dart'; -@CopyWith() class FlatButtonStyle extends ButtonStyle { const FlatButtonStyle({ this.label, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart deleted file mode 100644 index 939a48e1..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_style.g.dart +++ /dev/null @@ -1,137 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'flat_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$FlatButtonStyleCWProxy { - FlatButtonStyle label(TextStyle? label); - - FlatButtonStyle radius(BorderRadiusGeometry? radius); - - FlatButtonStyle padding(EdgeInsetsGeometry? padding); - - FlatButtonStyle foregroundColors(MultiColor? foregroundColors); - - FlatButtonStyle backgroundColors(MultiColor? backgroundColors); - - FlatButtonStyle borderColors(MultiColor? borderColors); - - FlatButtonStyle stroke(double? stroke); - - FlatButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FlatButtonStyle call({ - TextStyle? label, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfFlatButtonStyle.copyWith.fieldName(...)` -class _$FlatButtonStyleCWProxyImpl implements _$FlatButtonStyleCWProxy { - const _$FlatButtonStyleCWProxyImpl(this._value); - - final FlatButtonStyle _value; - - @override - FlatButtonStyle label(TextStyle? label) => this(label: label); - - @override - FlatButtonStyle radius(BorderRadiusGeometry? radius) => this(radius: radius); - - @override - FlatButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - FlatButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - FlatButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - FlatButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - FlatButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - FlatButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `FlatButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// FlatButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - FlatButtonStyle call({ - Object? label = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return FlatButtonStyle( - label: label == const $CopyWithPlaceholder() - ? _value.label - // ignore: cast_nullable_to_non_nullable - : label as TextStyle?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $FlatButtonStyleCopyWith on FlatButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfFlatButtonStyle.copyWith(...)` or like so:`instanceOfFlatButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$FlatButtonStyleCWProxy get copyWith => _$FlatButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart index 298d32d2..f2ea057b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.dart @@ -16,13 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'simple_icon_button_style.g.dart'; -@CopyWith() class SimpleIconButtonStyle extends ButtonStyle { const SimpleIconButtonStyle({ this.dimension, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart deleted file mode 100644 index f0ee5153..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_style.g.dart +++ /dev/null @@ -1,141 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'simple_icon_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$SimpleIconButtonStyleCWProxy { - SimpleIconButtonStyle dimension(double? dimension); - - SimpleIconButtonStyle radius(BorderRadiusGeometry? radius); - - SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding); - - SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors); - - SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors); - - SimpleIconButtonStyle borderColors(MultiColor? borderColors); - - SimpleIconButtonStyle stroke(double? stroke); - - SimpleIconButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SimpleIconButtonStyle call({ - double? dimension, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)` -class _$SimpleIconButtonStyleCWProxyImpl - implements _$SimpleIconButtonStyleCWProxy { - const _$SimpleIconButtonStyleCWProxyImpl(this._value); - - final SimpleIconButtonStyle _value; - - @override - SimpleIconButtonStyle dimension(double? dimension) => - this(dimension: dimension); - - @override - SimpleIconButtonStyle radius(BorderRadiusGeometry? radius) => - this(radius: radius); - - @override - SimpleIconButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - SimpleIconButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - SimpleIconButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - SimpleIconButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - SimpleIconButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - SimpleIconButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SimpleIconButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SimpleIconButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SimpleIconButtonStyle call({ - Object? dimension = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return SimpleIconButtonStyle( - dimension: dimension == const $CopyWithPlaceholder() - ? _value.dimension - // ignore: cast_nullable_to_non_nullable - : dimension as double?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $SimpleIconButtonStyleCopyWith on SimpleIconButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfSimpleIconButtonStyle.copyWith(...)` or like so:`instanceOfSimpleIconButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$SimpleIconButtonStyleCWProxy get copyWith => - _$SimpleIconButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart index 9dcc9640..1357724e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.dart @@ -16,13 +16,10 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart'; -part 'symbol_button_style.g.dart'; -@CopyWith() class SymbolButtonStyle extends ButtonStyle { const SymbolButtonStyle({ this.label, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart deleted file mode 100644 index a3233cec..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_style.g.dart +++ /dev/null @@ -1,150 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'symbol_button_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$SymbolButtonStyleCWProxy { - SymbolButtonStyle label(TextStyle? label); - - SymbolButtonStyle dimension(double? dimension); - - SymbolButtonStyle radius(BorderRadiusGeometry? radius); - - SymbolButtonStyle padding(EdgeInsetsGeometry? padding); - - SymbolButtonStyle foregroundColors(MultiColor? foregroundColors); - - SymbolButtonStyle backgroundColors(MultiColor? backgroundColors); - - SymbolButtonStyle borderColors(MultiColor? borderColors); - - SymbolButtonStyle stroke(double? stroke); - - SymbolButtonStyle shadow(BoxShadow? shadow); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SymbolButtonStyle call({ - TextStyle? label, - double? dimension, - BorderRadiusGeometry? radius, - EdgeInsetsGeometry? padding, - MultiColor? foregroundColors, - MultiColor? backgroundColors, - MultiColor? borderColors, - double? stroke, - BoxShadow? shadow, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfSymbolButtonStyle.copyWith.fieldName(...)` -class _$SymbolButtonStyleCWProxyImpl implements _$SymbolButtonStyleCWProxy { - const _$SymbolButtonStyleCWProxyImpl(this._value); - - final SymbolButtonStyle _value; - - @override - SymbolButtonStyle label(TextStyle? label) => this(label: label); - - @override - SymbolButtonStyle dimension(double? dimension) => this(dimension: dimension); - - @override - SymbolButtonStyle radius(BorderRadiusGeometry? radius) => - this(radius: radius); - - @override - SymbolButtonStyle padding(EdgeInsetsGeometry? padding) => - this(padding: padding); - - @override - SymbolButtonStyle foregroundColors(MultiColor? foregroundColors) => - this(foregroundColors: foregroundColors); - - @override - SymbolButtonStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - SymbolButtonStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - SymbolButtonStyle stroke(double? stroke) => this(stroke: stroke); - - @override - SymbolButtonStyle shadow(BoxShadow? shadow) => this(shadow: shadow); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `SymbolButtonStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// SymbolButtonStyle(...).copyWith(id: 12, name: "My name") - /// ```` - SymbolButtonStyle call({ - Object? label = const $CopyWithPlaceholder(), - Object? dimension = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? padding = const $CopyWithPlaceholder(), - Object? foregroundColors = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - Object? shadow = const $CopyWithPlaceholder(), - }) { - return SymbolButtonStyle( - label: label == const $CopyWithPlaceholder() - ? _value.label - // ignore: cast_nullable_to_non_nullable - : label as TextStyle?, - dimension: dimension == const $CopyWithPlaceholder() - ? _value.dimension - // ignore: cast_nullable_to_non_nullable - : dimension as double?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - padding: padding == const $CopyWithPlaceholder() - ? _value.padding - // ignore: cast_nullable_to_non_nullable - : padding as EdgeInsetsGeometry?, - foregroundColors: foregroundColors == const $CopyWithPlaceholder() - ? _value.foregroundColors - // ignore: cast_nullable_to_non_nullable - : foregroundColors as MultiColor?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - shadow: shadow == const $CopyWithPlaceholder() - ? _value.shadow - // ignore: cast_nullable_to_non_nullable - : shadow as BoxShadow?, - ); - } -} - -extension $SymbolButtonStyleCopyWith on SymbolButtonStyle { - /// Returns a callable class that can be used as follows: `instanceOfSymbolButtonStyle.copyWith(...)` or like so:`instanceOfSymbolButtonStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$SymbolButtonStyleCWProxy get copyWith => - _$SymbolButtonStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart index 0f46cbba..b32c3a35 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart @@ -16,11 +16,8 @@ import 'dart:ui'; -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -part 'loader_style.g.dart'; -@CopyWith() class LoaderStyle extends ThemeStyle { const LoaderStyle({ this.colors, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart deleted file mode 100644 index 86ec75c5..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.g.dart +++ /dev/null @@ -1,67 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'loader_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$LoaderStyleCWProxy { - LoaderStyle colors(MultiColor? colors); - - LoaderStyle stroke(double? stroke); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `LoaderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// LoaderStyle(...).copyWith(id: 12, name: "My name") - /// ```` - LoaderStyle call({ - MultiColor? colors, - double? stroke, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfLoaderStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfLoaderStyle.copyWith.fieldName(...)` -class _$LoaderStyleCWProxyImpl implements _$LoaderStyleCWProxy { - const _$LoaderStyleCWProxyImpl(this._value); - - final LoaderStyle _value; - - @override - LoaderStyle colors(MultiColor? colors) => this(colors: colors); - - @override - LoaderStyle stroke(double? stroke) => this(stroke: stroke); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `LoaderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// LoaderStyle(...).copyWith(id: 12, name: "My name") - /// ```` - LoaderStyle call({ - Object? colors = const $CopyWithPlaceholder(), - Object? stroke = const $CopyWithPlaceholder(), - }) { - return LoaderStyle( - colors: colors == const $CopyWithPlaceholder() - ? _value.colors - // ignore: cast_nullable_to_non_nullable - : colors as MultiColor?, - stroke: stroke == const $CopyWithPlaceholder() - ? _value.stroke - // ignore: cast_nullable_to_non_nullable - : stroke as double?, - ); - } -} - -extension $LoaderStyleCopyWith on LoaderStyle { - /// Returns a callable class that can be used as follows: `instanceOfLoaderStyle.copyWith(...)` or like so:`instanceOfLoaderStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$LoaderStyleCWProxy get copyWith => _$LoaderStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart index 48a21b3d..814bc237 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart @@ -14,12 +14,9 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/widgets.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -part 'rich_text_builder_style.g.dart'; -@CopyWith() class RichTextBuilderStyle extends ThemeStyle { const RichTextBuilderStyle({ this.defaultStyle, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart deleted file mode 100644 index 8f74d5da..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.g.dart +++ /dev/null @@ -1,71 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'rich_text_builder_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$RichTextBuilderStyleCWProxy { - RichTextBuilderStyle defaultStyle(TextStyle? defaultStyle); - - RichTextBuilderStyle styles(Map? styles); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `RichTextBuilderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// RichTextBuilderStyle(...).copyWith(id: 12, name: "My name") - /// ```` - RichTextBuilderStyle call({ - TextStyle? defaultStyle, - Map? styles, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfRichTextBuilderStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfRichTextBuilderStyle.copyWith.fieldName(...)` -class _$RichTextBuilderStyleCWProxyImpl - implements _$RichTextBuilderStyleCWProxy { - const _$RichTextBuilderStyleCWProxyImpl(this._value); - - final RichTextBuilderStyle _value; - - @override - RichTextBuilderStyle defaultStyle(TextStyle? defaultStyle) => - this(defaultStyle: defaultStyle); - - @override - RichTextBuilderStyle styles(Map? styles) => - this(styles: styles); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `RichTextBuilderStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// RichTextBuilderStyle(...).copyWith(id: 12, name: "My name") - /// ```` - RichTextBuilderStyle call({ - Object? defaultStyle = const $CopyWithPlaceholder(), - Object? styles = const $CopyWithPlaceholder(), - }) { - return RichTextBuilderStyle( - defaultStyle: defaultStyle == const $CopyWithPlaceholder() - ? _value.defaultStyle - // ignore: cast_nullable_to_non_nullable - : defaultStyle as TextStyle?, - styles: styles == const $CopyWithPlaceholder() - ? _value.styles - // ignore: cast_nullable_to_non_nullable - : styles as Map?, - ); - } -} - -extension $RichTextBuilderStyleCopyWith on RichTextBuilderStyle { - /// Returns a callable class that can be used as follows: `instanceOfRichTextBuilderStyle.copyWith(...)` or like so:`instanceOfRichTextBuilderStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$RichTextBuilderStyleCWProxy get copyWith => - _$RichTextBuilderStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart index 61640bcd..72855a4e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart @@ -14,12 +14,9 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -part 'text_input_style.g.dart'; -@CopyWith() class TextInputStyle extends ThemeStyle { TextInputStyle({ this.labelStyle, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart deleted file mode 100644 index 972c2b88..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.g.dart +++ /dev/null @@ -1,185 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'text_input_style.dart'; - -// ************************************************************************** -// CopyWithGenerator -// ************************************************************************** - -abstract class _$TextInputStyleCWProxy { - TextInputStyle labelStyle(TextStyle? labelStyle); - - TextInputStyle hintStyle(TextStyle? hintStyle); - - TextInputStyle backgroundColors(MultiColor? backgroundColors); - - TextInputStyle borderColors(MultiColor? borderColors); - - TextInputStyle boxShadow(BoxShadow? boxShadow); - - TextInputStyle radius(BorderRadiusGeometry? radius); - - TextInputStyle inputStyle(TextStyle? inputStyle); - - TextInputStyle iconColor(Color? iconColor); - - TextInputStyle prefixStyle(TextStyle? prefixStyle); - - TextInputStyle prefixIconColor(Color? prefixIconColor); - - TextInputStyle suffixStyle(TextStyle? suffixStyle); - - TextInputStyle suffixIconColor(Color? suffixIconColor); - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TextInputStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// TextInputStyle(...).copyWith(id: 12, name: "My name") - /// ```` - TextInputStyle call({ - TextStyle? labelStyle, - TextStyle? hintStyle, - MultiColor? backgroundColors, - MultiColor? borderColors, - BoxShadow? boxShadow, - BorderRadiusGeometry? radius, - TextStyle? inputStyle, - Color? iconColor, - TextStyle? prefixStyle, - Color? prefixIconColor, - TextStyle? suffixStyle, - Color? suffixIconColor, - }); -} - -/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfTextInputStyle.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfTextInputStyle.copyWith.fieldName(...)` -class _$TextInputStyleCWProxyImpl implements _$TextInputStyleCWProxy { - const _$TextInputStyleCWProxyImpl(this._value); - - final TextInputStyle _value; - - @override - TextInputStyle labelStyle(TextStyle? labelStyle) => - this(labelStyle: labelStyle); - - @override - TextInputStyle hintStyle(TextStyle? hintStyle) => this(hintStyle: hintStyle); - - @override - TextInputStyle backgroundColors(MultiColor? backgroundColors) => - this(backgroundColors: backgroundColors); - - @override - TextInputStyle borderColors(MultiColor? borderColors) => - this(borderColors: borderColors); - - @override - TextInputStyle boxShadow(BoxShadow? boxShadow) => this(boxShadow: boxShadow); - - @override - TextInputStyle radius(BorderRadiusGeometry? radius) => this(radius: radius); - - @override - TextInputStyle inputStyle(TextStyle? inputStyle) => - this(inputStyle: inputStyle); - - @override - TextInputStyle iconColor(Color? iconColor) => this(iconColor: iconColor); - - @override - TextInputStyle prefixStyle(TextStyle? prefixStyle) => - this(prefixStyle: prefixStyle); - - @override - TextInputStyle prefixIconColor(Color? prefixIconColor) => - this(prefixIconColor: prefixIconColor); - - @override - TextInputStyle suffixStyle(TextStyle? suffixStyle) => - this(suffixStyle: suffixStyle); - - @override - TextInputStyle suffixIconColor(Color? suffixIconColor) => - this(suffixIconColor: suffixIconColor); - - @override - - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TextInputStyle(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. - /// - /// Usage - /// ```dart - /// TextInputStyle(...).copyWith(id: 12, name: "My name") - /// ```` - TextInputStyle call({ - Object? labelStyle = const $CopyWithPlaceholder(), - Object? hintStyle = const $CopyWithPlaceholder(), - Object? backgroundColors = const $CopyWithPlaceholder(), - Object? borderColors = const $CopyWithPlaceholder(), - Object? boxShadow = const $CopyWithPlaceholder(), - Object? radius = const $CopyWithPlaceholder(), - Object? inputStyle = const $CopyWithPlaceholder(), - Object? iconColor = const $CopyWithPlaceholder(), - Object? prefixStyle = const $CopyWithPlaceholder(), - Object? prefixIconColor = const $CopyWithPlaceholder(), - Object? suffixStyle = const $CopyWithPlaceholder(), - Object? suffixIconColor = const $CopyWithPlaceholder(), - }) { - return TextInputStyle( - labelStyle: labelStyle == const $CopyWithPlaceholder() - ? _value.labelStyle - // ignore: cast_nullable_to_non_nullable - : labelStyle as TextStyle?, - hintStyle: hintStyle == const $CopyWithPlaceholder() - ? _value.hintStyle - // ignore: cast_nullable_to_non_nullable - : hintStyle as TextStyle?, - backgroundColors: backgroundColors == const $CopyWithPlaceholder() - ? _value.backgroundColors - // ignore: cast_nullable_to_non_nullable - : backgroundColors as MultiColor?, - borderColors: borderColors == const $CopyWithPlaceholder() - ? _value.borderColors - // ignore: cast_nullable_to_non_nullable - : borderColors as MultiColor?, - boxShadow: boxShadow == const $CopyWithPlaceholder() - ? _value.boxShadow - // ignore: cast_nullable_to_non_nullable - : boxShadow as BoxShadow?, - radius: radius == const $CopyWithPlaceholder() - ? _value.radius - // ignore: cast_nullable_to_non_nullable - : radius as BorderRadiusGeometry?, - inputStyle: inputStyle == const $CopyWithPlaceholder() - ? _value.inputStyle - // ignore: cast_nullable_to_non_nullable - : inputStyle as TextStyle?, - iconColor: iconColor == const $CopyWithPlaceholder() - ? _value.iconColor - // ignore: cast_nullable_to_non_nullable - : iconColor as Color?, - prefixStyle: prefixStyle == const $CopyWithPlaceholder() - ? _value.prefixStyle - // ignore: cast_nullable_to_non_nullable - : prefixStyle as TextStyle?, - prefixIconColor: prefixIconColor == const $CopyWithPlaceholder() - ? _value.prefixIconColor - // ignore: cast_nullable_to_non_nullable - : prefixIconColor as Color?, - suffixStyle: suffixStyle == const $CopyWithPlaceholder() - ? _value.suffixStyle - // ignore: cast_nullable_to_non_nullable - : suffixStyle as TextStyle?, - suffixIconColor: suffixIconColor == const $CopyWithPlaceholder() - ? _value.suffixIconColor - // ignore: cast_nullable_to_non_nullable - : suffixIconColor as Color?, - ); - } -} - -extension $TextInputStyleCopyWith on TextInputStyle { - /// Returns a callable class that can be used as follows: `instanceOfTextInputStyle.copyWith(...)` or like so:`instanceOfTextInputStyle.copyWith.fieldName(...)`. - // ignore: library_private_types_in_public_api - _$TextInputStyleCWProxy get copyWith => _$TextInputStyleCWProxyImpl(this); -} diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 865b67f9..fbd278f1 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -10,7 +10,6 @@ environment: dependencies: flutter: { sdk: flutter } - copy_with_extension: ^5.0.0 wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git @@ -19,7 +18,6 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 - copy_with_extension_gen: ^5.0.0 flutter_test: { sdk: flutter } freezed: ^2.3.2 wyatt_analysis: -- 2.47.2 From 51672cc95ad83257a50577e36a4f606119adf0f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 13:13:01 +0100 Subject: [PATCH 155/320] refactor(ui_components): move borderColors type --- .../src/domain/entities/text_inputs/text_input_style.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart index 72855a4e..6de90922 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart @@ -43,7 +43,7 @@ class TextInputStyle extends ThemeStyle { final Color? suffixIconColor; final MultiColor? backgroundColors; - final MultiColor? borderColors; + final Color? borderColors; final BoxShadow? boxShadow; final BorderRadiusGeometry? radius; final TextStyle? inputStyle; @@ -86,7 +86,7 @@ class TextInputStyle extends ThemeStyle { backgroundColors: MultiColor.lerp(a.backgroundColors, b.backgroundColors, t), radius: BorderRadiusGeometry.lerp(a.radius, b.radius, t), - borderColors: MultiColor.lerp(a.borderColors, b.borderColors, t), + borderColors: Color.lerp(a.borderColors, b.borderColors, t), boxShadow: BoxShadow.lerp(a.boxShadow, b.boxShadow, t), inputStyle: TextStyle.lerp(a.inputStyle, b.inputStyle, t), prefixStyle: TextStyle.lerp(a.prefixStyle, b.prefixStyle, t), @@ -106,7 +106,7 @@ class TextInputStyle extends ThemeStyle { TextStyle? labelStyle, TextStyle? hintStyle, MultiColor? backgroundColors, - MultiColor? borderColors, + Color? borderColors, BoxShadow? boxShadow, BorderRadiusGeometry? radius, TextStyle? inputStyle, -- 2.47.2 From f2b8c03dd7ea19c2696a965c56ab4fbcd80ef94d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 13:15:47 +0100 Subject: [PATCH 156/320] refactor(ui_kit): update textinput component using borderColors as Color --- .../example/lib/theme/text_input_theme.dart | 36 +++++-------------- .../text_inputs/text_input_screen.dart | 9 ++--- .../text_input_theme_resolver.dart | 9 +++-- 3 files changed, 14 insertions(+), 40 deletions(-) diff --git a/packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart index 93e583f4..63b6dc41 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/text_input_theme.dart @@ -30,10 +30,7 @@ class TextInputTheme extends TextInputThemeExtension { factory TextInputTheme.light() => TextInputTheme( normalStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: const MultiColor([ - Color.fromRGBO(221, 224, 227, 1), - Color.fromRGBO(202, 204, 212, 1), - ]), + borderColors: const Color.fromRGBO(221, 224, 227, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(55, 65, 81, 1), @@ -45,10 +42,7 @@ class TextInputTheme extends TextInputThemeExtension { ), focusedStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: const MultiColor([ - Color.fromRGBO(60, 125, 251, 1), - Color.fromRGBO(68, 109, 244, 1), - ]), + borderColors: const Color.fromRGBO(60, 125, 251, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(55, 65, 81, 1), @@ -60,10 +54,7 @@ class TextInputTheme extends TextInputThemeExtension { ), errorStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: const MultiColor([ - Color.fromRGBO(251, 94, 60, 1), - Color.fromRGBO(244, 68, 100, 1), - ]), + borderColors: const Color.fromRGBO(244, 68, 100, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(244, 68, 100, 1), @@ -75,8 +66,7 @@ class TextInputTheme extends TextInputThemeExtension { ), disableStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: - const MultiColor.single(Color.fromRGBO(229, 231, 235, 1)), + borderColors: const Color.fromRGBO(229, 231, 235, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(156, 163, 175, 1), @@ -91,9 +81,7 @@ class TextInputTheme extends TextInputThemeExtension { factory TextInputTheme.dark() => TextInputTheme( normalStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: const MultiColor.single( - Color.fromRGBO(96, 101, 106, 1), - ), + borderColors: const Color.fromRGBO(96, 101, 106, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(204, 204, 204, 1), @@ -105,10 +93,7 @@ class TextInputTheme extends TextInputThemeExtension { ), focusedStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: const MultiColor([ - Color.fromRGBO(60, 125, 251, 1), - Color.fromRGBO(68, 109, 244, 1), - ]), + borderColors: const Color.fromRGBO(60, 125, 251, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(204, 204, 204, 1), @@ -120,10 +105,7 @@ class TextInputTheme extends TextInputThemeExtension { ), errorStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: const MultiColor([ - Color.fromRGBO(251, 94, 60, 1), - Color.fromRGBO(244, 68, 100, 1), - ]), + borderColors: const Color.fromRGBO(244, 68, 100, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(244, 68, 100, 1), @@ -135,9 +117,7 @@ class TextInputTheme extends TextInputThemeExtension { ), disableStyle: TextInputStyle( radius: BorderRadius.circular(12), - borderColors: const MultiColor.single( - Color.fromRGBO(96, 101, 106, 1), - ), + borderColors: const Color.fromRGBO(96, 101, 106, 1), labelStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w300, color: const Color.fromRGBO(96, 101, 106, 1), diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart index 0766f8c0..f7b3945b 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart @@ -273,15 +273,10 @@ class TextInputScreen extends CubitScreen { ? style.backgroundColors?.color : null, borderRadius: style.radius ?? BorderRadius.circular(4), - border: (style.borderColors?.isGradient ?? false) || - (style.borderColors?.isColor ?? false) + border: (style.borderColors != null) ? Border.all( width: 1.5, - color: (style.borderColors?.isGradient ?? false) - ? style.borderColors!.colors.first - : (style.borderColors?.isColor ?? false) - ? style.borderColors!.color - : Colors.transparent, + color: style.borderColors!, ) : null, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart index f421b762..62bd59f4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart @@ -49,8 +49,7 @@ class TextInputThemeResolver extends ThemeResolver Date: Tue, 21 Feb 2023 13:19:11 +0100 Subject: [PATCH 157/320] fix(ui_kit): remove null check operator in Loader component --- .../wyatt_ui_kit/example/lib/loaders/loaders.dart | 3 +-- .../lib/src/components/loader/loader.dart | 5 ++--- .../src/components/loader/loader_theme_resolver.dart | 12 ++++++------ 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/wyatt_ui_kit/example/lib/loaders/loaders.dart b/packages/wyatt_ui_kit/example/lib/loaders/loaders.dart index bc5d8945..cc456ae7 100644 --- a/packages/wyatt_ui_kit/example/lib/loaders/loaders.dart +++ b/packages/wyatt_ui_kit/example/lib/loaders/loaders.dart @@ -23,7 +23,7 @@ import 'package:wyatt_ui_kit_example/theme/constants.dart'; class Loaders extends DemoPage { const Loaders({super.key}); - + @override String get title => 'Loaders'; @@ -64,5 +64,4 @@ class Loaders extends DemoPage { const Gap(20), ], ); - } diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart index a9379a3f..dd28e602 100644 --- a/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart @@ -59,15 +59,14 @@ class Loader extends LoaderComponent with $LoaderCWMixin { final style = _resolve(context); final dimension = (radius != null) ? radius! * 2 : context.buttonTheme.height; - return SizedBox.square( dimension: dimension, child: RepaintBoundary( child: CustomPaint( painter: _LoaderPainter( - style.colors!, + style.colors ?? const MultiColor([]), dimension / 2, - style.stroke!, + style.stroke ?? 4, flip: flip ?? false, ), ) diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart index 1b45ddaf..a5384e54 100644 --- a/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart @@ -24,6 +24,12 @@ class LoaderThemeResolver required this.customStyleFn, }); + @override + final LoaderStyle? Function( + BuildContext context, { + void extra, + }) customStyleFn; + /// Values taken from @override LoaderStyle computeDefaultValue( @@ -39,12 +45,6 @@ class LoaderThemeResolver stroke: 4, ); - @override - final LoaderStyle? Function( - BuildContext context, { - void extra, - }) customStyleFn; - @override LoaderStyle? computeExtensionValueFn( BuildContext context, -- 2.47.2 From 65379459467e9355014f37b283f73640f89fa8a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 13:23:51 +0100 Subject: [PATCH 158/320] fix(ui_kit): remove null check operator in RichTextBuilder component --- .../lib/src/domain/entities/rich_text_builder/parser.dart | 4 ++-- .../src/components/rich_text_builder/rich_text_builder.dart | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart index bd92d252..b60684e4 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/parser.dart @@ -23,7 +23,7 @@ class RichTextStyleParameter { this.styleName, ); - final TextStyle defaultStyle; + final TextStyle? defaultStyle; final Map definedStyle; final String? styleName; @@ -31,7 +31,7 @@ class RichTextStyleParameter { if (definedStyle.containsKey(styleName)) { return definedStyle[styleName]!; } - return defaultStyle; + return defaultStyle ?? const TextStyle(); } RichTextStyleParameter copyWith({ diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart index 0ca1798a..c16df96c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart @@ -59,7 +59,7 @@ class RichTextBuilder extends RichTextBuilderComponent text ?? '', regex, RichTextStyleParameter( - style.defaultStyle!, + style.defaultStyle, style.styles ?? {}, null, ), -- 2.47.2 From 25224469b5ad183cf0b3b29ee5892447fedcf79a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 13:27:19 +0100 Subject: [PATCH 159/320] fix(ui_components): fix MultiColor lerp method --- .../wyatt_ui_components/lib/src/core/utils/multi_color.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart index 9e9b7222..d64ac9a3 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart @@ -64,12 +64,15 @@ class MultiColor { ); } else if (a.isGradient && b.isGradient) { final colors = List.empty(growable: true); - for (int i = 0; i < a.colors.length; i++) { + final shortestList = + (a.colors.length > b.colors.length) ? b.colors : a.colors; + for (int i = 0; i < shortestList.length; i++) { final lerpColor = Color.lerp(a.colors[i], b.colors[i], t); if (lerpColor != null) { colors.add(lerpColor); } } + return MultiColor(colors); } return b; } -- 2.47.2 From 133e0e910b3fe1da2d95f90cd0e4c7f51b34c086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 13:34:04 +0100 Subject: [PATCH 160/320] fix(ui_kit): make card core stateless --- .../cards/widgets/card_background.dart | 51 +++++++++++ .../cards/widgets/card_wrapper.dart | 90 ++++++------------- 2 files changed, 78 insertions(+), 63 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_background.dart diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_background.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_background.dart new file mode 100644 index 00000000..76862ab2 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_background.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; + +class CardBackground extends StatefulWidget { + const CardBackground({super.key, this.background, this.cardKey}); + + final Widget? background; + final GlobalKey? cardKey; + + @override + State createState() => _CardBackgroundState(); +} + +class _CardBackgroundState extends State { + Size _cardSize = Size.zero; + + @override + void initState() { + super.initState(); + if (widget.background != null) { + WidgetsBinding.instance.addPostFrameCallback((_) { + _resizeCard(); + }); + } + } + + @override + void didUpdateWidget(covariant CardBackground oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.background != null) { + _resizeCard(); + } + } + + void _resizeCard() { + final RenderObject? renderBox = + widget.cardKey?.currentContext?.findRenderObject(); + if (renderBox != null) { + setState(() { + _cardSize = + Size(renderBox.paintBounds.width, renderBox.paintBounds.height); + }); + } + } + + @override + Widget build(BuildContext context) => SizedBox( + width: _cardSize.width, + height: _cardSize.height, + child: Center(child: widget.background), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index 46a72582..db898c29 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -15,11 +15,12 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_kit/src/components/cards/widgets/card_background.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/domain/card_theme_extension.dart'; -class CardWrapper extends StatefulWidget { - const CardWrapper({ +class CardWrapper extends StatelessWidget { + CardWrapper({ required this.child, required this.backgroundColors, required this.borderColors, @@ -40,54 +41,19 @@ class CardWrapper extends StatefulWidget { final Size? maxSize; final double? padding; - @override - State createState() => _CardWrapperState(); -} - -class _CardWrapperState extends State { - Size _cardSize = Size.zero; final GlobalKey _key = GlobalKey(); - @override - void initState() { - super.initState(); - if (widget.background != null) { - WidgetsBinding.instance.addPostFrameCallback((_) { - _resizeCard(); - }); - } - } - - @override - void didUpdateWidget(covariant CardWrapper oldWidget) { - super.didUpdateWidget(oldWidget); - if (widget.background != null) { - _resizeCard(); - } - } - - void _resizeCard() { - final RenderObject? renderBox = _key.currentContext?.findRenderObject(); - if (renderBox != null) { - setState(() { - _cardSize = - Size(renderBox.paintBounds.width, renderBox.paintBounds.height); - }); - } - } - - Widget _buildChild(Widget child) => (widget.background != null) + Widget _buildChild(Widget child) => (background != null) ? Stack( alignment: Alignment.center, children: [ - SizedBox( - width: _cardSize.width, - height: _cardSize.height, - child: Center(child: widget.background), + CardBackground( + cardKey: _key, + background: background, ), Padding( padding: EdgeInsets.all( - widget.padding ?? 25, + padding ?? 25, ), child: child, ), @@ -95,15 +61,14 @@ class _CardWrapperState extends State { ) : Padding( padding: EdgeInsets.all( - widget.padding ?? 25, + padding ?? 25, ), child: child, ); Gradient? _cardGradient(BuildContext context) { - if (widget.backgroundColors != null && - widget.backgroundColors!.length >= 2) { - return LinearGradient(colors: widget.backgroundColors!); + if (backgroundColors != null && backgroundColors!.length >= 2) { + return LinearGradient(colors: backgroundColors!); } else { final extensionCardColor = Theme.of(context).extension(); @@ -120,9 +85,8 @@ class _CardWrapperState extends State { } Color? _cardColor(BuildContext context) { - if (widget.backgroundColors != null && - widget.backgroundColors!.length == 1) { - return widget.backgroundColors!.first; + if (backgroundColors != null && backgroundColors!.length == 1) { + return backgroundColors!.first; } else { final extensionCardColor = Theme.of(context).extension(); @@ -136,16 +100,16 @@ class _CardWrapperState extends State { } BoxBorder? _boxBorder(BuildContext context) { - if (widget.borderColors != null) { - if (widget.borderColors!.length >= 2) { + if (borderColors != null) { + if (borderColors!.length >= 2) { return CustomGradientBoxBorder( gradient: LinearGradient( - colors: widget.borderColors!, + colors: borderColors!, ), ); - } else if (widget.borderColors!.isNotEmpty) { + } else if (borderColors!.isNotEmpty) { return Border.all( - color: widget.borderColors!.first, + color: borderColors!.first, ); } } else { @@ -171,8 +135,8 @@ class _CardWrapperState extends State { List _shadow(BuildContext context) { final shadows = List.empty(growable: true); - if (widget.shadow != null) { - shadows.add(widget.shadow!); + if (shadow != null) { + shadows.add(shadow!); } else { final extensionCardColor = Theme.of(context).extension(); @@ -195,17 +159,17 @@ class _CardWrapperState extends State { border: _boxBorder(context), boxShadow: _shadow(context), ), - child: (widget.minSize != null && widget.maxSize != null) + child: (minSize != null && maxSize != null) ? ConstrainedBox( constraints: BoxConstraints( - minWidth: widget.minSize!.width, - minHeight: widget.minSize!.height, - maxWidth: widget.maxSize!.width, - maxHeight: widget.maxSize!.height, + minWidth: minSize!.width, + minHeight: minSize!.height, + maxWidth: maxSize!.width, + maxHeight: maxSize!.height, ), - child: _buildChild(widget.child), + child: _buildChild(child), ) - : _buildChild(widget.child), + : _buildChild(child), ), ); } -- 2.47.2 From b077f4baf05912b6f9691f4ccb0aad7c2a723d3d Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 21 Feb 2023 15:07:56 +0100 Subject: [PATCH 161/320] refactor(ui_kit): rename GradientBoxBorder --- .../components/buttons/flat_button/flat_button_screen.dart | 2 +- .../buttons/simple_icon_button/simple_icon_screen.dart | 2 +- .../buttons/symbol_button/symbol_button_screen.dart | 2 +- .../lib/src/components/cards/widgets/card_wrapper.dart | 4 ++-- .../lib/src/components/gradients/gradient_box_border.dart | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 14b739fa..6be53168 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -121,7 +121,7 @@ class FlatButtonScreen extends CubitScreen { // If no border color => no default value border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) - ? CustomGradientBoxBorder( + ? GradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart index 624cfccc..4467cd54 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart @@ -120,7 +120,7 @@ class SimpleIconButtonScreen extends CubitScreen { // If no border color => no default value border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) - ? CustomGradientBoxBorder( + ? GradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index 6b586d82..be5009db 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -144,7 +144,7 @@ class SymbolButtonScreen border: (style.borderColors != null && style.stroke != null) ? (style.borderColors?.isGradient ?? false) - ? CustomGradientBoxBorder( + ? GradientBoxBorder( gradient: LinearGradient( colors: style.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index db898c29..75473d0b 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -102,7 +102,7 @@ class CardWrapper extends StatelessWidget { BoxBorder? _boxBorder(BuildContext context) { if (borderColors != null) { if (borderColors!.length >= 2) { - return CustomGradientBoxBorder( + return GradientBoxBorder( gradient: LinearGradient( colors: borderColors!, ), @@ -118,7 +118,7 @@ class CardWrapper extends StatelessWidget { if (extensionCardColor != null && extensionCardColor.borderColors != null) { if (extensionCardColor.borderColors!.isGradient) { - return CustomGradientBoxBorder( + return GradientBoxBorder( gradient: LinearGradient( colors: extensionCardColor.borderColors!.colors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart index 10372a96..2a77264e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart +++ b/packages/wyatt_ui_kit/lib/src/components/gradients/gradient_box_border.dart @@ -17,8 +17,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/painting.dart'; -class CustomGradientBoxBorder extends Border { - const CustomGradientBoxBorder({this.gradient, this.width = 1}); +class GradientBoxBorder extends Border { + const GradientBoxBorder({this.gradient, this.width = 1}); final Gradient? gradient; final double width; -- 2.47.2 From 5906d54aad225b2b624310e45231e0e1e341718f Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 21 Feb 2023 15:08:24 +0100 Subject: [PATCH 162/320] build(ui_component): remove freezed --- packages/wyatt_ui_components/pubspec.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index fbd278f1..80e5e707 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -14,12 +14,10 @@ dependencies: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git path: packages/wyatt_component_copy_with_extension - freezed_annotation: ^2.2.0 dev_dependencies: build_runner: ^2.3.3 flutter_test: { sdk: flutter } - freezed: ^2.3.2 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.0 -- 2.47.2 From 12d04c91eddd6e20ce5b983922f1bf7b2309de10 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 21 Feb 2023 15:17:05 +0100 Subject: [PATCH 163/320] fix(ui): use multicolor in cards --- .../domain/entities/cards/card_component.dart | 5 ++-- .../cards/information_card_component.g.dart | 8 +++--- .../cards/portfolio_card_component.g.dart | 8 +++--- .../cards/quote_card_component.g.dart | 8 +++--- .../cards/skill_card_component.g.dart | 8 +++--- .../information_card/information_card.g.dart | 8 +++--- .../portfolio_card/portfolio_card.g.dart | 8 +++--- .../cards/quote_card/quote_card.g.dart | 8 +++--- .../cards/skill_card/skill_card.g.dart | 8 +++--- .../cards/widgets/card_wrapper.dart | 26 +++++++++---------- .../lib/src/core/helpers/helpers.dart | 1 + .../lib/src/core/helpers/theme_helper.dart | 2 +- 12 files changed, 49 insertions(+), 49 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart index bafc5c9a..2085f99c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/card_component.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; +import 'package:wyatt_ui_components/src/core/utils/multi_color.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; abstract class CardComponent extends Component { @@ -41,10 +42,10 @@ abstract class CardComponent extends Component { final double? padding; /// Border gradient color (from left to right) - final List? borderColors; + final MultiColor? borderColors; /// Card background color - final List? backgroundColors; + final MultiColor? backgroundColors; /// Minimum size for this card final Size? minSize; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart index 4802eb9e..59c9369e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.g.dart @@ -14,8 +14,8 @@ abstract class $InformationCardComponentCWProxy { InformationCardComponent axis(Axis? axis); InformationCardComponent radius(double? radius); InformationCardComponent padding(double? padding); - InformationCardComponent borderColors(List? borderColors); - InformationCardComponent backgroundColors(List? backgroundColors); + InformationCardComponent borderColors(MultiColor? borderColors); + InformationCardComponent backgroundColors(MultiColor? backgroundColors); InformationCardComponent minSize(Size? minSize); InformationCardComponent maxSize(Size? maxSize); InformationCardComponent shadow(BoxShadow? shadow); @@ -29,8 +29,8 @@ abstract class $InformationCardComponentCWProxy { Axis? axis, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart index a21bd6bc..87ddefb6 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.g.dart @@ -19,8 +19,8 @@ abstract class $PortfolioCardComponentCWProxy { PortfolioCardComponent assets(List? assets); PortfolioCardComponent radius(double? radius); PortfolioCardComponent padding(double? padding); - PortfolioCardComponent borderColors(List? borderColors); - PortfolioCardComponent backgroundColors(List? backgroundColors); + PortfolioCardComponent borderColors(MultiColor? borderColors); + PortfolioCardComponent backgroundColors(MultiColor? backgroundColors); PortfolioCardComponent minSize(Size? minSize); PortfolioCardComponent maxSize(Size? maxSize); PortfolioCardComponent shadow(BoxShadow? shadow); @@ -38,8 +38,8 @@ abstract class $PortfolioCardComponentCWProxy { List? assets, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart index 0ce84883..cef1cb7d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.g.dart @@ -16,8 +16,8 @@ abstract class $QuoteCardComponentCWProxy { QuoteCardComponent rightQuote(Widget? rightQuote); QuoteCardComponent radius(double? radius); QuoteCardComponent padding(double? padding); - QuoteCardComponent borderColors(List? borderColors); - QuoteCardComponent backgroundColors(List? backgroundColors); + QuoteCardComponent borderColors(MultiColor? borderColors); + QuoteCardComponent backgroundColors(MultiColor? backgroundColors); QuoteCardComponent minSize(Size? minSize); QuoteCardComponent maxSize(Size? maxSize); QuoteCardComponent shadow(BoxShadow? shadow); @@ -33,8 +33,8 @@ abstract class $QuoteCardComponentCWProxy { Widget? rightQuote, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart index a69c819d..86094931 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.g.dart @@ -17,8 +17,8 @@ abstract class $SkillCardComponentCWProxy { Color? secondaryBackgroundColors); SkillCardComponent radius(double? radius); SkillCardComponent padding(double? padding); - SkillCardComponent borderColors(List? borderColors); - SkillCardComponent backgroundColors(List? backgroundColors); + SkillCardComponent borderColors(MultiColor? borderColors); + SkillCardComponent backgroundColors(MultiColor? backgroundColors); SkillCardComponent minSize(Size? minSize); SkillCardComponent maxSize(Size? maxSize); SkillCardComponent shadow(BoxShadow? shadow); @@ -34,8 +34,8 @@ abstract class $SkillCardComponentCWProxy { Color? secondaryBackgroundColors, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart index 1378d99c..16365148 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.g.dart @@ -24,10 +24,10 @@ class $InformationCardCWProxyImpl implements $InformationCardComponentCWProxy { @override InformationCard padding(double? padding) => this(padding: padding); @override - InformationCard borderColors(List? borderColors) => + InformationCard borderColors(MultiColor? borderColors) => this(borderColors: borderColors); @override - InformationCard backgroundColors(List? backgroundColors) => + InformationCard backgroundColors(MultiColor? backgroundColors) => this(backgroundColors: backgroundColors); @override InformationCard minSize(Size? minSize) => this(minSize: minSize); @@ -49,8 +49,8 @@ class $InformationCardCWProxyImpl implements $InformationCardComponentCWProxy { Axis? axis, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart index 0142a408..735f8f58 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.g.dart @@ -36,10 +36,10 @@ class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { @override PortfolioCard padding(double? padding) => this(padding: padding); @override - PortfolioCard borderColors(List? borderColors) => + PortfolioCard borderColors(MultiColor? borderColors) => this(borderColors: borderColors); @override - PortfolioCard backgroundColors(List? backgroundColors) => + PortfolioCard backgroundColors(MultiColor? backgroundColors) => this(backgroundColors: backgroundColors); @override PortfolioCard minSize(Size? minSize) => this(minSize: minSize); @@ -64,8 +64,8 @@ class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy { List? assets, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart index 548c0088..90c7d5f2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.g.dart @@ -28,10 +28,10 @@ class $QuoteCardCWProxyImpl implements $QuoteCardComponentCWProxy { @override QuoteCard padding(double? padding) => this(padding: padding); @override - QuoteCard borderColors(List? borderColors) => + QuoteCard borderColors(MultiColor? borderColors) => this(borderColors: borderColors); @override - QuoteCard backgroundColors(List? backgroundColors) => + QuoteCard backgroundColors(MultiColor? backgroundColors) => this(backgroundColors: backgroundColors); @override QuoteCard minSize(Size? minSize) => this(minSize: minSize); @@ -54,8 +54,8 @@ class $QuoteCardCWProxyImpl implements $QuoteCardComponentCWProxy { Widget? rightQuote, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart index 96f74491..e66fe9e2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.g.dart @@ -31,10 +31,10 @@ class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { @override SkillCard padding(double? padding) => this(padding: padding); @override - SkillCard borderColors(List? borderColors) => + SkillCard borderColors(MultiColor? borderColors) => this(borderColors: borderColors); @override - SkillCard backgroundColors(List? backgroundColors) => + SkillCard backgroundColors(MultiColor? backgroundColors) => this(backgroundColors: backgroundColors); @override SkillCard minSize(Size? minSize) => this(minSize: minSize); @@ -57,8 +57,8 @@ class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy { Color? secondaryBackgroundColors, double? radius, double? padding, - List? borderColors, - List? backgroundColors, + MultiColor? borderColors, + MultiColor? backgroundColors, Size? minSize, Size? maxSize, BoxShadow? shadow, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index 75473d0b..c2b91ca4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -15,9 +15,9 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_background.dart'; -import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; -import 'package:wyatt_ui_kit/src/domain/card_theme_extension.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class CardWrapper extends StatelessWidget { CardWrapper({ @@ -34,8 +34,8 @@ class CardWrapper extends StatelessWidget { final Widget? background; final Widget child; - final List? backgroundColors; - final List? borderColors; + final MultiColor? backgroundColors; + final MultiColor? borderColors; final BoxShadow? shadow; final Size? minSize; final Size? maxSize; @@ -67,8 +67,8 @@ class CardWrapper extends StatelessWidget { ); Gradient? _cardGradient(BuildContext context) { - if (backgroundColors != null && backgroundColors!.length >= 2) { - return LinearGradient(colors: backgroundColors!); + if (backgroundColors != null && backgroundColors!.isGradient) { + return LinearGradientHelper.fromMultiColor(backgroundColors!); } else { final extensionCardColor = Theme.of(context).extension(); @@ -85,8 +85,8 @@ class CardWrapper extends StatelessWidget { } Color? _cardColor(BuildContext context) { - if (backgroundColors != null && backgroundColors!.length == 1) { - return backgroundColors!.first; + if (backgroundColors != null && backgroundColors!.isColor) { + return backgroundColors!.color; } else { final extensionCardColor = Theme.of(context).extension(); @@ -101,15 +101,13 @@ class CardWrapper extends StatelessWidget { BoxBorder? _boxBorder(BuildContext context) { if (borderColors != null) { - if (borderColors!.length >= 2) { + if (borderColors!.isGradient) { return GradientBoxBorder( - gradient: LinearGradient( - colors: borderColors!, - ), + gradient: LinearGradientHelper.fromMultiColor(borderColors!), ); - } else if (borderColors!.isNotEmpty) { + } else if (borderColors!.isColor) { return Border.all( - color: borderColors!.first, + color: borderColors!.color, ); } } else { diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart index 35d48e7f..0e95fe99 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart @@ -15,3 +15,4 @@ // along with this program. If not, see . export './linear_gradient_helper.dart'; +export './theme_helper.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart index f5164d65..5414bfce 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with super program. If not, see . -class ThemeHelper { +abstract class ThemeHelper { static T? getThemeElement( List? styles, { required T? Function(P?)? transform, -- 2.47.2 From 93cc5058d1cee78c53528964aed4debb8baa2830 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 21 Feb 2023 15:37:42 +0100 Subject: [PATCH 164/320] refactor(ui_kit): use ThemeHelper in cards --- .../cards/widgets/card_wrapper.dart | 137 ++++++++---------- .../lib/src/core/helpers/theme_helper.dart | 8 + 2 files changed, 65 insertions(+), 80 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index c2b91ca4..aed05cae 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -66,84 +66,17 @@ class CardWrapper extends StatelessWidget { child: child, ); - Gradient? _cardGradient(BuildContext context) { - if (backgroundColors != null && backgroundColors!.isGradient) { - return LinearGradientHelper.fromMultiColor(backgroundColors!); - } else { - final extensionCardColor = - Theme.of(context).extension(); - - if (extensionCardColor != null && - extensionCardColor.backgroundColors != null && - extensionCardColor.backgroundColors!.isGradient) { - return LinearGradient( - colors: extensionCardColor.backgroundColors!.colors, - ); - } - } - return null; - } - - Color? _cardColor(BuildContext context) { - if (backgroundColors != null && backgroundColors!.isColor) { - return backgroundColors!.color; - } else { - final extensionCardColor = - Theme.of(context).extension(); - - if (extensionCardColor != null && - extensionCardColor.backgroundColors != null) { - return extensionCardColor.backgroundColors!.color; - } - } - return Theme.of(context).cardColor; - } - - BoxBorder? _boxBorder(BuildContext context) { - if (borderColors != null) { - if (borderColors!.isGradient) { - return GradientBoxBorder( - gradient: LinearGradientHelper.fromMultiColor(borderColors!), - ); - } else if (borderColors!.isColor) { - return Border.all( - color: borderColors!.color, - ); - } - } else { - final extensionCardColor = - Theme.of(context).extension(); - if (extensionCardColor != null && - extensionCardColor.borderColors != null) { - if (extensionCardColor.borderColors!.isGradient) { - return GradientBoxBorder( - gradient: LinearGradient( - colors: extensionCardColor.borderColors!.colors, - ), - ); - } else if (extensionCardColor.backgroundColors!.colors.isNotEmpty) { - return Border.all( - color: extensionCardColor.backgroundColors!.color, - ); - } - } - } - return null; - } - List _shadow(BuildContext context) { - final shadows = List.empty(growable: true); - if (shadow != null) { - shadows.add(shadow!); - } else { - final extensionCardColor = - Theme.of(context).extension(); - if (extensionCardColor != null && - extensionCardColor.shadowColor != null) { - shadows.add(extensionCardColor.shadowColor!); - } - } - return shadows; + final themeShadow = ThemeHelper.getThemeElement( + [ + shadow, + Theme.of(context).extension()?.shadowColor, + ], + valueValidator: (shadow) => shadow != null, + transform: (shadow) => shadow, + defaultValue: null, + ); + return (themeShadow != null) ? [themeShadow] : []; } @override @@ -152,9 +85,53 @@ class CardWrapper extends StatelessWidget { key: _key, decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(12)), - gradient: _cardGradient(context), - color: _cardColor(context), - border: _boxBorder(context), + gradient: ThemeHelper.getThemeElement( + [ + backgroundColors, + Theme.of(context) + .extension() + ?.backgroundColors, + ], + valueValidator: (multiColor) => + multiColor != null && multiColor.isGradient, + transform: (multiColor) => + LinearGradientHelper.fromMultiColor(multiColor!), + defaultValue: null, + ), + color: ThemeHelper.getThemeElement( + [ + backgroundColors, + Theme.of(context) + .extension() + ?.backgroundColors, + ], + valueValidator: (multiColor) => + multiColor != null && multiColor.isColor, + transform: (multiColor) => multiColor?.color, + defaultValue: Theme.of(context).cardColor, + ), + border: ThemeHelper.getThemeElement( + [ + borderColors, + Theme.of(context).extension()?.borderColors, + Theme.of(context) + .extension() + ?.backgroundColors, + ], + valueValidator: (multiColor) => + multiColor != null && multiColor.isColor, + transform: (multiColor) { + if (multiColor!.isGradient) { + return GradientBoxBorder( + gradient: LinearGradientHelper.fromMultiColor(multiColor), + ); + } + return Border.all( + color: multiColor.color, + ); + }, + defaultValue: null, + ), boxShadow: _shadow(context), ), child: (minSize != null && maxSize != null) diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart index 5414bfce..79cb54c8 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart @@ -14,7 +14,15 @@ // You should have received a copy of the GNU General Public License // along with super program. If not, see . +/// A helper class for getting theme elements. abstract class ThemeHelper { + + /// Gets a theme element from a list of styles. + /// Styles are checked in order, and the first one that passes the + /// [valueValidator] is returned. + /// If no style passes the [valueValidator], the [defaultValue] is returned. + /// If [styles] is null or empty, the [defaultValue] is returned. + /// Style elements are transformed using the [transform] function. static T? getThemeElement( List? styles, { required T? Function(P?)? transform, -- 2.47.2 From 6037e13f502f00a13a10e976ed34d307aa237f5c Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 21 Feb 2023 16:08:23 +0100 Subject: [PATCH 165/320] fix(ui_component): inverse merge in TextInputStyle --- .../text_inputs/text_input_style.dart | 26 +++++++++---------- .../text_inputs/text_input_screen.dart | 5 ---- .../text_input_theme_resolver.dart | 11 -------- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart index 6de90922..7849eb19 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_style.dart @@ -55,19 +55,19 @@ class TextInputStyle extends ThemeStyle { if (a == null) { return b.copyWith(); } - return b.copyWith( - labelStyle: a.labelStyle, - hintStyle: a.hintStyle, - backgroundColors: a.backgroundColors, - borderColors: a.borderColors, - boxShadow: a.boxShadow, - radius: a.radius, - inputStyle: a.inputStyle, - iconColor: a.iconColor, - prefixStyle: a.prefixStyle, - prefixIconColor: a.prefixIconColor, - suffixIconColor: a.suffixIconColor, - suffixStyle: a.suffixStyle, + return a.copyWith( + labelStyle: b.labelStyle, + hintStyle: b.hintStyle, + backgroundColors: b.backgroundColors, + borderColors: b.borderColors, + boxShadow: b.boxShadow, + radius: b.radius, + inputStyle: b.inputStyle, + iconColor: b.iconColor, + prefixStyle: b.prefixStyle, + prefixIconColor: b.prefixIconColor, + suffixIconColor: b.suffixIconColor, + suffixStyle: b.suffixStyle, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart index f7b3945b..bc109d98 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart @@ -208,9 +208,7 @@ class TextInputScreen extends CubitScreen { textInputStyle = normalStyle; break; case ControlState.hovered: - break; case ControlState.tapped: - break; case null: break; } @@ -221,11 +219,8 @@ class TextInputScreen extends CubitScreen { style = errorStyle; break; case StatusState.initial: - break; case StatusState.success: - break; case StatusState.loading: - break; case null: break; } diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart index 62bd59f4..5a3fbd0c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart @@ -81,11 +81,8 @@ class TextInputThemeResolver extends ThemeResolver Date: Tue, 21 Feb 2023 18:05:56 +0100 Subject: [PATCH 166/320] feat(ui): add some useful text customization in TextWrapper (closes #149) --- .../lib/components/custom_app_bar.dart | 2 +- .../lib/components/custom_error_widget.dart | 2 +- .../lib/src/core/utils/text_wrapper.dart | 79 ++++++++++++++++++- .../file_selection_button_screen.dart | 16 +++- .../flat_button/flat_button_screen.dart | 8 +- .../symbol_button/symbol_button_screen.dart | 8 +- .../information_card/information_card.dart | 2 +- .../widgets/information_card_titles.dart | 4 +- .../cards/portfolio_card/portfolio_card.dart | 4 +- .../widgets/portfolio_card_header.dart | 12 ++- .../cards/quote_card/quote_card.dart | 6 +- .../cards/skill_card/skill_card.dart | 2 +- .../skill_card/widgets/skill_card_header.dart | 2 +- .../skill_card/widgets/skill_card_skills.dart | 8 +- .../components/cards/widgets/card_text.dart | 13 ++- .../text_inputs/text_input_screen.dart | 6 +- .../text_inputs/widgets/label_widget.dart | 8 +- 17 files changed, 148 insertions(+), 34 deletions(-) diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart index 95110dd8..7a0088fe 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart @@ -11,7 +11,7 @@ class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { @override Widget build(BuildContext context) => AppBar( title: Text( - super.title?.text ?? '', + super.title?.data ?? '', ), ); } diff --git a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart index b0336e29..39a9fea0 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart @@ -12,6 +12,6 @@ class CustomErrorWidget extends ErrorWidgetComponent @override Widget build(BuildContext context) => ColoredBox( color: Colors.red, - child: Center(child: Text(error?.text ?? 'Error')), + child: Center(child: Text(error?.data ?? 'Error')), ); } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart index f690aa89..7e288b7d 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart @@ -21,16 +21,87 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; /// a [Text] or a [RichText]. class TextWrapper { const TextWrapper( - this.text, { + this.data, { this.style, this.gradientColors, + this.textAlign, + this.textDirection, + this.softWrap, + this.overflow, + this.maxLines, + this.selectionColor, }); - const TextWrapper.text(this.text) + const TextWrapper.text(this.data) : style = null, - gradientColors = null; + gradientColors = null, + textAlign = null, + textDirection = null, + softWrap = null, + overflow = null, + maxLines = null, + selectionColor = null; - final String text; + /// Text to be displayed + final String data; + + /// Style of the text final TextStyle? style; + + /// Colors of the gradient, if any final MultiColor? gradientColors; + + /// How the text should be aligned horizontally. + final TextAlign? textAlign; + + /// The directionality of the text. + /// + /// This decides how [textAlign] values like [TextAlign.start] and + /// [TextAlign.end] are interpreted. + /// + /// This is also used to disambiguate how to render bidirectional text. For + /// example, if the [data] is an English phrase followed by a Hebrew phrase, + /// in a [TextDirection.ltr] context the English phrase will be on the left + /// and the Hebrew phrase to its right, while in a [TextDirection.rtl] + /// context, the English phrase will be on the right and the Hebrew phrase on + /// its left. + /// + /// Defaults to the ambient [Directionality], if any. + final TextDirection? textDirection; + + /// Whether the text should break at soft line breaks. + /// + /// If false, the glyphs in the text will be positioned as if there was + /// unlimited horizontal space. + final bool? softWrap; + + /// How visual overflow should be handled. + /// + /// If this is null [TextStyle.overflow] will be used, otherwise the value + /// from the nearest [DefaultTextStyle] ancestor will be used. + final TextOverflow? overflow; + + /// An optional maximum number of lines for the text to span, wrapping if + /// necessary. + /// If the text exceeds the given number of lines, it will be truncated + /// according to [overflow]. + /// + /// If this is 1, text will not wrap. Otherwise, text will be wrapped at the + /// edge of the box. + /// + /// If this is null, but there is an ambient [DefaultTextStyle] that specifies + /// an explicit number for its [DefaultTextStyle.maxLines], then the + /// [DefaultTextStyle] value will take precedence. You can use a [RichText] + /// widget directly to entirely override the [DefaultTextStyle]. + final int? maxLines; + + /// The color to use when painting the selection. + /// + /// This is ignored if [SelectionContainer.maybeOf] returns null + /// in the [BuildContext] of the [Text] widget. + /// + /// If null, the ambient [DefaultSelectionStyle] is used (if any); failing + /// that, the selection color defaults to [DefaultSelectionStyle.defaultColor] + /// (semi-transparent grey). + final Color? selectionColor; } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index d707014c..36495ec9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -182,8 +182,14 @@ class FileSelectionButtonScreen /// More infos in `ThemeResolver` class if (title != null) ...[ Text( - title!.text, + title!.data, style: title!.style ?? style.title, + textAlign: title!.textAlign, + textDirection: title!.textDirection, + softWrap: title!.softWrap, + overflow: title!.overflow, + maxLines: title!.maxLines, + selectionColor: title!.selectionColor, ).toGradient( gradientColors: style.foregroundColors, ), @@ -203,8 +209,14 @@ class FileSelectionButtonScreen if (subTitle != null) ...[ const Gap(5), Text( - subTitle!.text, + subTitle!.data, style: subTitle!.style ?? style.subTitle, + textAlign: title!.textAlign, + textDirection: title!.textDirection, + softWrap: title!.softWrap, + overflow: title!.overflow, + maxLines: title!.maxLines, + selectionColor: title!.selectionColor, ).toGradient( gradientColors: style.foregroundColors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 6be53168..07df2a77 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -180,8 +180,14 @@ class FlatButtonScreen extends CubitScreen { /// More infos in ThemeResolver class if (label != null) ...[ Text( - label!.text, + label!.data, style: label!.style ?? style.label, + textAlign: label!.textAlign, + textDirection: label!.textDirection, + softWrap: label!.softWrap, + overflow: label!.overflow, + maxLines: label!.maxLines, + selectionColor: label!.selectionColor, ).toGradient( gradientColors: style.foregroundColors, ) diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index be5009db..e51505ec 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -193,8 +193,14 @@ class SymbolButtonScreen if (label != null) ...[ Gap(style.padding?.horizontal ?? 10), Text( - label!.text, + label!.data, style: label!.style ?? style.label, + textAlign: label!.textAlign, + textDirection: label!.textDirection, + softWrap: label!.softWrap, + overflow: label!.overflow, + maxLines: label!.maxLines, + selectionColor: label!.selectionColor, ).toGradient( gradientColors: style.foregroundColors, ), diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart index bcde0f56..baae74dc 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart @@ -77,7 +77,7 @@ class InformationCard extends InformationCardComponent if (body != null) ...[ const Gap(_bodyTopSpacing), CardText( - body!.text, + body!, textType: TextType.body, style: body!.style, gradientColors: body!.gradientColors, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart index 969e1505..2ccd8283 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/widgets/information_card_titles.dart @@ -41,7 +41,7 @@ class InformationCardTitles extends StatelessWidget { children: [ if (title != null) ...[ CardText( - title!.text, + title!, textType: TextType.title, style: title!.style, gradientColors: title!.gradientColors, @@ -50,7 +50,7 @@ class InformationCardTitles extends StatelessWidget { if (subtitle != null) ...[ const Gap(_titlesLineSpacing), CardText( - subtitle!.text, + subtitle!, textType: TextType.subtitle, style: subtitle!.style, gradientColors: subtitle!.gradientColors, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart index 1226b2e6..6ef86441 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart @@ -70,7 +70,7 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { const Gap(20), ], CardText( - description!.text, + description!, textType: TextType.body, style: description!.style, gradientColors: description!.gradientColors, @@ -105,7 +105,7 @@ class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin { const Gap(20), ], CardText( - description!.text, + description!, textType: TextType.body, style: description!.style, gradientColors: description!.gradientColors, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart index 2a9620fe..79c41443 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart @@ -64,7 +64,7 @@ class PortfolioCardHeader extends StatelessWidget { children: [ if (keyword != null) ...keyword!.map( - (e) => Container( + (word) => Container( margin: const EdgeInsets.all(3), padding: const EdgeInsets.all(6), decoration: BoxDecoration( @@ -75,8 +75,14 @@ class PortfolioCardHeader extends StatelessWidget { borderRadius: BorderRadius.circular(8), ), child: Text( - e.text, - style: e.style ?? context.textTheme.bodySmall, + word.data, + style: word.style ?? context.textTheme.bodySmall, + textAlign: word.textAlign, + textDirection: word.textDirection, + softWrap: word.softWrap, + overflow: word.overflow, + maxLines: word.maxLines, + selectionColor: word.selectionColor, ), ), ), diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart index 2363a5df..0e47517e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart @@ -71,7 +71,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { ), if (quote != null) ...[ CardText( - quote!.text, + quote!, textType: TextType.body, style: quote!.style, gradientColors: quote!.gradientColors, @@ -102,7 +102,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { children: [ if (name != null) ...[ CardText( - name!.text, + name!, textType: TextType.body, style: name!.style, gradientColors: name!.gradientColors, @@ -110,7 +110,7 @@ class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin { ], if (subtitle != null) ...[ CardText( - subtitle!.text, + subtitle!, textType: TextType.subtitle, style: subtitle!.style, gradientColors: subtitle!.gradientColors, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart index 6285f0fa..5fc962b0 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart @@ -67,7 +67,7 @@ class SkillCard extends SkillCardComponent with $SkillCardCWMixin { const Gap(25), if (description != null) ...[ CardText( - description!.text, + description!, textType: TextType.body, style: description!.style, gradientColors: description!.gradientColors, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart index bfd8af2d..2f492218 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_header.dart @@ -64,7 +64,7 @@ class SkillCardHeader extends StatelessWidget { children: [ if (title != null) ...[ CardText( - title!.text, + title!, textType: TextType.title, style: title!.style, gradientColors: title!.gradientColors, diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart index 76059fa9..3b1e24ff 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/widgets/skill_card_skills.dart @@ -37,7 +37,7 @@ class SkillCardSkills extends StatelessWidget { Widget build(BuildContext context) => Column( children: skills! .map( - (e) => Row( + (skill) => Row( children: [ Icon( leadingIcon ?? Icons.check, @@ -47,10 +47,10 @@ class SkillCardSkills extends StatelessWidget { const Gap(10), Expanded( child: CardText( - e.text, + skill, textType: TextType.body, - style: e.style, - gradientColors: e.gradientColors, + style: skill.style, + gradientColors: skill.gradientColors, ), ), ], diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart index 87ae1880..1665fcd7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_text.dart @@ -26,16 +26,17 @@ enum TextType { class CardText extends StatelessWidget { const CardText( - this.data, { + this.text, { required this.textType, this.style, this.gradientColors, super.key, }); + + final TextWrapper text; final TextType textType; final TextStyle? style; final MultiColor? gradientColors; - final String data; TextStyle? _getStyle(BuildContext context) { if (style != null) { @@ -56,7 +57,13 @@ class CardText extends StatelessWidget { @override Widget build(BuildContext context) => Text( - data, + text.data, style: _getStyle(context), + textAlign: text.textAlign, + textDirection: text.textDirection, + softWrap: text.softWrap, + overflow: text.overflow, + maxLines: text.maxLines, + selectionColor: text.selectionColor, ).toGradient(gradientColors: gradientColors); } diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart index bc109d98..34836c2d 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart @@ -315,14 +315,14 @@ class TextInputScreen extends CubitScreen { labelStyle: style.labelStyle, ) : null, - hintText: hint?.text, + hintText: hint?.data, hintStyle: hint?.style, prefixIcon: prefixIcon, - prefixText: prefixText?.text, + prefixText: prefixText?.data, prefixStyle: prefixText?.style, prefixIconColor: style.prefixIconColor, suffixIcon: suffixIcon, - suffixText: suffixText?.text, + suffixText: suffixText?.data, suffixStyle: suffixText?.style, suffixIconColor: style.suffixIconColor, enabled: state.controlState != ControlState.disabled, diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart index 0312c62e..f53faf25 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/widgets/label_widget.dart @@ -31,7 +31,13 @@ class LabelWidget extends StatelessWidget { @override Widget build(BuildContext context) => Text( - label?.text ?? '', + label?.data ?? '', style: labelStyle, + textAlign: label!.textAlign, + textDirection: label!.textDirection, + softWrap: label!.softWrap, + overflow: label!.overflow, + maxLines: label!.maxLines, + selectionColor: label!.selectionColor, ); } -- 2.47.2 From 49b534d14582cd28994547cd609ff2921808ae75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 18:44:11 +0100 Subject: [PATCH 167/320] fix(ui_kit): fix tab action focus on textinputs --- .../lib/src/components/text_inputs/text_input_screen.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart index 34836c2d..440fc748 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_screen.dart @@ -250,9 +250,11 @@ class TextInputScreen extends CubitScreen { Widget onBuild(BuildContext context, TextInputState state) { final style = _resolve(context, state); return Focus( + descendantsAreFocusable: true, onFocusChange: (hasFocus) { if (hasFocus) { bloc(context).onFocus(); + (focusNode ?? _focusNode).requestFocus(); } else { bloc(context).onUnfocus(); } @@ -279,6 +281,7 @@ class TextInputScreen extends CubitScreen { expand: expand ?? true, expanded: _wrapperExpanded(state), child: TextField( + focusNode: focusNode ?? _focusNode, onTap: onTap, onChanged: (value) { onChanged?.call(value); @@ -290,7 +293,6 @@ class TextInputScreen extends CubitScreen { }, onTapOutside: onTapOutside, controller: controller ?? _controller, - focusNode: focusNode ?? _focusNode, textAlignVertical: textAlignVertical ?? TextAlignVertical.top, style: style.inputStyle ?? this.style, decoration: InputDecoration( -- 2.47.2 From 349d1ae288ea575ba6f1398c511ee8ba95faca4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 18:57:30 +0100 Subject: [PATCH 168/320] feat(ui_components): add new components to theme data (close #152) --- .../src/features/component_theme_data.dart | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index 0d247bf3..e4103866 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -17,15 +17,39 @@ import 'package:wyatt_ui_components/src/domain/entities/entities.dart'; class ComponentThemeData { - const ComponentThemeData.raw({ this.appBar, this.bottomNavigationBar, this.errorWidget, this.loadingWidget, + this.richTextBuilderComponent, + this.textInputComponent, + this.fileSelectionButtonComponent, + this.flatButtonComponent, + this.simpleIconButtonComponent, + this.symbolButtonComponent, + this.informationCardComponent, + this.portfolioCardComponent, + this.quoteCardComponent, + this.skillCardComponent, }); final AppBarComponent? appBar; final BottomNavigationBarComponent? bottomNavigationBar; final ErrorWidgetComponent? errorWidget; final LoadingWidgetComponent? loadingWidget; + + final RichTextBuilderComponent? richTextBuilderComponent; + final TextInputComponent? textInputComponent; + + // Buttons + final FileSelectionButtonComponent? fileSelectionButtonComponent; + final FlatButtonComponent? flatButtonComponent; + final SimpleIconButtonComponent? simpleIconButtonComponent; + final SymbolButtonComponent? symbolButtonComponent; + + // Cards + final InformationCardComponent? informationCardComponent; + final PortfolioCardComponent? portfolioCardComponent; + final QuoteCardComponent? quoteCardComponent; + final SkillCardComponent? skillCardComponent; } -- 2.47.2 From 79dc34414cf1b90cd0abe4f4d86073570675858e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 21 Feb 2023 19:03:28 +0100 Subject: [PATCH 169/320] fix(ui_components): add loader to theme data (close #152) --- .../lib/src/features/component_theme_data.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index e4103866..c083545a 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -22,6 +22,7 @@ class ComponentThemeData { this.bottomNavigationBar, this.errorWidget, this.loadingWidget, + this.loaderComponent, this.richTextBuilderComponent, this.textInputComponent, this.fileSelectionButtonComponent, @@ -37,6 +38,7 @@ class ComponentThemeData { final BottomNavigationBarComponent? bottomNavigationBar; final ErrorWidgetComponent? errorWidget; final LoadingWidgetComponent? loadingWidget; + final LoaderComponent? loaderComponent; final RichTextBuilderComponent? richTextBuilderComponent; final TextInputComponent? textInputComponent; -- 2.47.2 From bbd3f0a02dfb66fc95753d74731dfbcf3befdaed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 11:23:08 +0100 Subject: [PATCH 170/320] feat(ui_components): add Top Navigation Bar Component --- .../top_navigation_bar_component.dart | 38 +++++++++++++++++++ .../top_navigation_bar_component.g.dart | 22 +++++++++++ 2 files changed, 60 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.dart create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.dart new file mode 100644 index 00000000..cb23bf07 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.dart @@ -0,0 +1,38 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; +import 'package:wyatt_ui_components/src/domain/entities/component.dart'; + +part 'top_navigation_bar_component.g.dart'; + +@ComponentProxyExtension() +abstract class TopNavigationBarComponent extends Component + with CopyWithMixin<$TopNavigationBarComponentCWProxy> { + const TopNavigationBarComponent({ + this.leading, + this.actions, + this.onTap, + this.currentIndex = 0, + super.key, + }); + final int currentIndex; + final void Function(BuildContext, int)? onTap; + final Widget? leading; + final List? actions; +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.g.dart new file mode 100644 index 00000000..591c9a6e --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.g.dart @@ -0,0 +1,22 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'top_navigation_bar_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $TopNavigationBarComponentCWProxy { + TopNavigationBarComponent leading(Widget? leading); + TopNavigationBarComponent actions(List? actions); + TopNavigationBarComponent onTap(void Function(BuildContext, int)? onTap); + TopNavigationBarComponent currentIndex(int? currentIndex); + TopNavigationBarComponent key(Key? key); + TopNavigationBarComponent call({ + Widget? leading, + List? actions, + void Function(BuildContext, int)? onTap, + int? currentIndex, + Key? key, + }); +} -- 2.47.2 From b2fe14a123af5044a49d5c5b619ffa711eeeac36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 11:24:30 +0100 Subject: [PATCH 171/320] feat(ui_components): add top navigation bar component to theme data --- .../lib/src/features/component_theme_data.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index c083545a..1f58e87c 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -19,6 +19,7 @@ import 'package:wyatt_ui_components/src/domain/entities/entities.dart'; class ComponentThemeData { const ComponentThemeData.raw({ this.appBar, + this.topNavigationBarComponent, this.bottomNavigationBar, this.errorWidget, this.loadingWidget, @@ -35,7 +36,10 @@ class ComponentThemeData { this.skillCardComponent, }); final AppBarComponent? appBar; + + final TopNavigationBarComponent? topNavigationBarComponent; final BottomNavigationBarComponent? bottomNavigationBar; + final ErrorWidgetComponent? errorWidget; final LoadingWidgetComponent? loadingWidget; final LoaderComponent? loaderComponent; -- 2.47.2 From dba14088b0afb2adeb818a6d5fa5b030cf1bde7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 11:25:22 +0100 Subject: [PATCH 172/320] style(ui_components): format imports --- .../src/domain/entities/bottom_navigation_bar_component.dart | 4 ++-- .../wyatt_ui_components/lib/src/domain/entities/entities.dart | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart index 0daf25fd..af313e63 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; // Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // @@ -16,6 +14,8 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 93e81e4a..c5ea3c94 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -26,3 +26,4 @@ export './loading_widget_component.dart'; export './rich_text_builder/rich_text_builder.dart'; export './text_inputs/text_inputs.dart'; export './theme_style.dart'; +export './top_navigation_bar_component.dart'; -- 2.47.2 From 4811ed899867e126006797dbf794246de89a8b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 11:37:29 +0100 Subject: [PATCH 173/320] feat(ui_components): add centerTitle property to app bar component --- .../example/lib/components/custom_app_bar.g.dart | 3 +++ .../lib/src/domain/entities/app_bar_component.dart | 2 ++ .../lib/src/domain/entities/app_bar_component.g.dart | 2 ++ 3 files changed, 7 insertions(+) diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart index 2fd0319a..af384641 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart @@ -16,12 +16,15 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { @override CustomAppBar actions(List? actions) => this(actions: actions); @override + CustomAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); + @override CustomAppBar key(Key? key) => this(key: key); @override CustomAppBar call({ TextWrapper? title, Widget? leading, List? actions, + bool? centerTitle, Key? key, }) => CustomAppBar( diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart index 4345b741..fd28328d 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart @@ -27,9 +27,11 @@ abstract class AppBarComponent extends Component this.title, this.leading, this.actions, + this.centerTitle, super.key, }); final TextWrapper? title; + final bool? centerTitle; final Widget? leading; final List? actions; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart index e16ec248..945a035c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart @@ -10,11 +10,13 @@ abstract class $AppBarComponentCWProxy { AppBarComponent title(TextWrapper? title); AppBarComponent leading(Widget? leading); AppBarComponent actions(List? actions); + AppBarComponent centerTitle(bool? centerTitle); AppBarComponent key(Key? key); AppBarComponent call({ TextWrapper? title, Widget? leading, List? actions, + bool? centerTitle, Key? key, }); } -- 2.47.2 From 41a484c0137af0d01a2e22ab47f8a238b4fe1427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 15:50:21 +0100 Subject: [PATCH 174/320] feat(ui_components): update attributs and proxy most of appbar attributs --- .../lib/components/custom_app_bar.g.dart | 60 +++++++++++++++++++ .../domain/entities/app_bar_component.dart | 33 ++++++++++ .../domain/entities/app_bar_component.g.dart | 32 ++++++++++ 3 files changed, 125 insertions(+) diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart index af384641..911b0f37 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart @@ -10,6 +10,47 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { const $CustomAppBarCWProxyImpl(this._value); final CustomAppBar _value; @override + CustomAppBar shape(ShapeBorder? shape) => this(shape: shape); + @override + CustomAppBar systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle) => + this(systemOverlayStyle: systemOverlayStyle); + @override + CustomAppBar automaticallyImplyLeading(bool? automaticallyImplyLeading) => + this(automaticallyImplyLeading: automaticallyImplyLeading); + @override + CustomAppBar flexibleSpace(Widget? flexibleSpace) => + this(flexibleSpace: flexibleSpace); + @override + CustomAppBar bottom(PreferredSizeWidget? bottom) => this(bottom: bottom); + @override + CustomAppBar elevation(double? elevation) => this(elevation: elevation); + @override + CustomAppBar scrolledUnderElevation(double? scrolledUnderElevation) => + this(scrolledUnderElevation: scrolledUnderElevation); + @override + CustomAppBar shadowColor(Color? shadowColor) => + this(shadowColor: shadowColor); + @override + CustomAppBar surfaceTintColor(Color? surfaceTintColor) => + this(surfaceTintColor: surfaceTintColor); + @override + CustomAppBar backgroundColor(MultiColor? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + CustomAppBar iconTheme(IconThemeData? iconTheme) => + this(iconTheme: iconTheme); + @override + CustomAppBar primary(bool? primary) => this(primary: primary); + @override + CustomAppBar excludeHeaderSemantics(bool? excludeHeaderSemantics) => + this(excludeHeaderSemantics: excludeHeaderSemantics); + @override + CustomAppBar toolbarHeight(double? toolbarHeight) => + this(toolbarHeight: toolbarHeight); + @override + CustomAppBar leadingWidth(double? leadingWidth) => + this(leadingWidth: leadingWidth); + @override CustomAppBar title(TextWrapper? title) => this(title: title); @override CustomAppBar leading(Widget? leading) => this(leading: leading); @@ -18,13 +59,32 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { @override CustomAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); @override + CustomAppBar expandedWidget(List? expandedWidget) => + this(expandedWidget: expandedWidget); + @override CustomAppBar key(Key? key) => this(key: key); @override CustomAppBar call({ + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, TextWrapper? title, Widget? leading, List? actions, bool? centerTitle, + List? expandedWidget, Key? key, }) => CustomAppBar( diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart index fd28328d..27326808 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; @@ -24,14 +25,46 @@ part 'app_bar_component.g.dart'; abstract class AppBarComponent extends Component with CopyWithMixin<$AppBarComponentCWProxy> { const AppBarComponent({ + this.shape, + this.systemOverlayStyle, + this.automaticallyImplyLeading, + this.flexibleSpace, + this.bottom, + this.elevation, + this.scrolledUnderElevation, + this.shadowColor, + this.surfaceTintColor, + this.backgroundColor, + this.iconTheme, + this.primary, + this.excludeHeaderSemantics, + this.toolbarHeight, + this.leadingWidth, this.title, this.leading, this.actions, this.centerTitle, + this.expandedWidget, super.key, }); final TextWrapper? title; final bool? centerTitle; final Widget? leading; final List? actions; + final bool? automaticallyImplyLeading; + final Widget? flexibleSpace; + final PreferredSizeWidget? bottom; + final double? elevation; + final double? scrolledUnderElevation; + final Color? shadowColor; + final Color? surfaceTintColor; + final MultiColor? backgroundColor; + final IconThemeData? iconTheme; + final bool? primary; + final bool? excludeHeaderSemantics; + final double? toolbarHeight; + final double? leadingWidth; + final SystemUiOverlayStyle? systemOverlayStyle; + final ShapeBorder? shape; + final List? expandedWidget; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart index 945a035c..bb6bcf5e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart @@ -7,16 +7,48 @@ part of 'app_bar_component.dart'; // ************************************************************************** abstract class $AppBarComponentCWProxy { + AppBarComponent shape(ShapeBorder? shape); + AppBarComponent systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle); + AppBarComponent automaticallyImplyLeading(bool? automaticallyImplyLeading); + AppBarComponent flexibleSpace(Widget? flexibleSpace); + AppBarComponent bottom(PreferredSizeWidget? bottom); + AppBarComponent elevation(double? elevation); + AppBarComponent scrolledUnderElevation(double? scrolledUnderElevation); + AppBarComponent shadowColor(Color? shadowColor); + AppBarComponent surfaceTintColor(Color? surfaceTintColor); + AppBarComponent backgroundColor(MultiColor? backgroundColor); + AppBarComponent iconTheme(IconThemeData? iconTheme); + AppBarComponent primary(bool? primary); + AppBarComponent excludeHeaderSemantics(bool? excludeHeaderSemantics); + AppBarComponent toolbarHeight(double? toolbarHeight); + AppBarComponent leadingWidth(double? leadingWidth); AppBarComponent title(TextWrapper? title); AppBarComponent leading(Widget? leading); AppBarComponent actions(List? actions); AppBarComponent centerTitle(bool? centerTitle); + AppBarComponent expandedWidget(List? expandedWidget); AppBarComponent key(Key? key); AppBarComponent call({ + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, TextWrapper? title, Widget? leading, List? actions, bool? centerTitle, + List? expandedWidget, Key? key, }); } -- 2.47.2 From ad0f1ec1c58b860f2df6962c7fe83ecf33bd3d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 15:50:46 +0100 Subject: [PATCH 175/320] feat(ui_kit): implement top app bar and update example --- .../example/assets/images/studio_logo.png | Bin 0 -> 27366 bytes .../wyatt_ui_kit/example/lib/bars/bars.dart | 69 +++++++++ packages/wyatt_ui_kit/example/lib/home.dart | 2 + .../example/lib/theme/themes.dart | 3 + .../example/lib/theme/top_app_bar_theme.dart | 71 +++++++++ .../lib/src/components/app_bars/app_bars.dart | 17 +++ .../src/components/app_bars/top_app_bar.dart | 139 ++++++++++++++++++ .../components/app_bars/top_app_bar.g.dart | 119 +++++++++++++++ .../lib/src/components/components.dart | 1 + .../top_navigation_bar.dart | 35 +++++ .../top_navigation_bar.g.dart | 45 ++++++ .../wyatt_ui_kit/lib/src/domain/domain.dart | 1 + .../lib/src/domain/top_app_bar_extension.dart | 34 +++++ 13 files changed, 536 insertions(+) create mode 100644 packages/wyatt_ui_kit/example/assets/images/studio_logo.png create mode 100644 packages/wyatt_ui_kit/example/lib/bars/bars.dart create mode 100644 packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart create mode 100644 packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart create mode 100644 packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart diff --git a/packages/wyatt_ui_kit/example/assets/images/studio_logo.png b/packages/wyatt_ui_kit/example/assets/images/studio_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e3fe86fd5705b60ccb95636ce82d36894e30ca7a GIT binary patch literal 27366 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 z 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/lib/bars/bars.dart b/packages/wyatt_ui_kit/example/lib/bars/bars.dart new file mode 100644 index 00000000..2290e006 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/bars/bars.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/demo_page.dart'; + +class Bars extends DemoPage { + const Bars({super.key}); + + @override + Widget build(BuildContext context) => ListView( + cacheExtent: 1000, + children: [ + const Gap(20), + TopAppBar( + leading: Padding( + padding: const EdgeInsets.all(8), + child: Image.asset('assets/images/studio_logo.png'), + ), + title: 'Wyatt Studio'.wrap( + gradientColors: const MultiColor( + [ + Color.fromRGBO(57, 167, 254, 1), + Color.fromRGBO(71, 94, 241, 1), + ], + ), + ), + actions: [ + IconButton(onPressed: () {}, icon: const Icon(Icons.menu)) + ], + ), + const Gap(20), + TopAppBar( + leading: Padding( + padding: const EdgeInsets.all(8), + child: Image.asset('assets/images/studio_logo.png'), + ), + title: 'Wyatt Studio'.wrap( + gradientColors: const MultiColor( + [ + Color.fromRGBO(57, 167, 254, 1), + Color.fromRGBO(71, 94, 241, 1), + ], + ), + ), + expandedWidget: const [ + ListTile( + title: Text('Votre programme'), + ), + ListTile( + title: Text('Votre programme'), + ), + ListTile( + title: Text('Votre programme'), + ) + ], + actions: [ + IconButton( + onPressed: () {}, + icon: const Icon(Icons.clear), + ) + ], + ), + ], + ); + + @override + String get title => 'Bars'; +} diff --git a/packages/wyatt_ui_kit/example/lib/home.dart b/packages/wyatt_ui_kit/example/lib/home.dart index 9d772a61..70a20107 100644 --- a/packages/wyatt_ui_kit/example/lib/home.dart +++ b/packages/wyatt_ui_kit/example/lib/home.dart @@ -1,6 +1,7 @@ import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; +import 'package:wyatt_ui_kit_example/bars/bars.dart'; import 'package:wyatt_ui_kit_example/buttons/buttons.dart'; import 'package:wyatt_ui_kit_example/cards/cards.dart'; import 'package:wyatt_ui_kit_example/demo_page.dart'; @@ -28,6 +29,7 @@ class _HomeState extends State { Loaders(), RichTextBuilders(), TextInputs(), + Bars(), ]; int currentIndex = 0; diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index 6bb52867..e36014d6 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -25,6 +25,7 @@ import 'package:wyatt_ui_kit_example/theme/rich_text_builder_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/text_input_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/top_app_bar_theme.dart'; /// Easely switch between Material and Studio themes. abstract class Themes { @@ -92,6 +93,7 @@ abstract class Themes { // Rich Text RichTextBuilderTheme.light(), TextInputTheme.light(), + TopAppBarTheme.light(), ], ); @@ -124,6 +126,7 @@ abstract class Themes { // Rich Text RichTextBuilderTheme.dark(), TextInputTheme.dark(), + TopAppBarTheme.dark(), ], ); } diff --git a/packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart new file mode 100644 index 00000000..8be94e42 --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class TopAppBarTheme extends TopAppBarThemeExtension { + const TopAppBarTheme({ + super.iconTheme, + super.backgroundColors, + super.expandedDividerStyle, + super.titleStyle, + }); + + factory TopAppBarTheme.light() => TopAppBarTheme( + backgroundColors: const MultiColor.single( + Color.fromRGBO(246, 246, 246, 1), + ), + expandedDividerStyle: Colors.black.withOpacity(0.1), + titleStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + iconTheme: const IconThemeData(color: Colors.black), + ); + + factory TopAppBarTheme.dark() => TopAppBarTheme( + backgroundColors: const MultiColor([ + Color.fromRGBO(44, 50, 56, 1), + Color.fromRGBO(39, 47, 61, 1), + Color.fromRGBO(44, 50, 56, 1), + ]), + expandedDividerStyle: Colors.white.withOpacity(0.1), + titleStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + iconTheme: const IconThemeData(color: Colors.white), + ); + + @override + ThemeExtension copyWith({ + IconThemeData? iconTheme, + MultiColor? backgroundColors, + Color? expandedDividerStyle, + TextStyle? titleStyle, + }) => + TopAppBarTheme( + iconTheme: iconTheme ?? this.iconTheme, + backgroundColors: backgroundColors ?? this.backgroundColors, + expandedDividerStyle: expandedDividerStyle ?? this.expandedDividerStyle, + titleStyle: titleStyle ?? this.titleStyle, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! TopAppBarTheme) { + return this; + } + return TopAppBarTheme( + iconTheme: IconThemeData.lerp(iconTheme, other.iconTheme, t), + backgroundColors: + MultiColor.lerp(backgroundColors, other.backgroundColors, t), + expandedDividerStyle: + Color.lerp(expandedDividerStyle, other.expandedDividerStyle, t), + titleStyle: TextStyle.lerp(titleStyle, other.titleStyle, t), + ); + } +} diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart b/packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart new file mode 100644 index 00000000..a7a986ee --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart @@ -0,0 +1,17 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +export 'top_app_bar.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart new file mode 100644 index 00000000..d8f433d9 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart @@ -0,0 +1,139 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +part 'top_app_bar.g.dart'; + +@ComponentCopyWithExtension() +class TopAppBar extends AppBarComponent with $TopAppBarCWMixin { + const TopAppBar({ + super.systemOverlayStyle, + super.automaticallyImplyLeading, + super.flexibleSpace, + super.bottom, + super.elevation, + super.scrolledUnderElevation, + super.shadowColor, + super.surfaceTintColor, + super.backgroundColor, + super.iconTheme, + super.primary, + super.excludeHeaderSemantics, + super.toolbarHeight, + super.leadingWidth, + super.title, + super.leading, + super.actions, + super.centerTitle, + super.shape, + super.expandedWidget, + super.key, + }); + + @override + Widget build(BuildContext context) => DecoratedBox( + decoration: BoxDecoration( + gradient: ThemeHelper.getThemeElement( + [ + backgroundColor, + context + .themeExtension() + ?.backgroundColors, + ], + valueValidator: (value) => value?.isGradient, + transform: (value) => + LinearGradientHelper.fromNullableColors(value?.colors), + defaultValue: null, + ), + color: ThemeHelper.getThemeElement( + [ + backgroundColor, + context + .themeExtension() + ?.backgroundColors, + ], + valueValidator: (value) => value?.isColor, + transform: (value) => value?.color, + defaultValue: Theme.of(context).appBarTheme.backgroundColor, + ), + ), + child: Column( + children: [ + AppBar( + titleSpacing: 0, + backgroundColor: Colors.transparent, + systemOverlayStyle: systemOverlayStyle, + automaticallyImplyLeading: automaticallyImplyLeading ?? true, + flexibleSpace: flexibleSpace, + bottom: bottom, + elevation: elevation ?? 0, + scrolledUnderElevation: scrolledUnderElevation, + shadowColor: shadowColor, + surfaceTintColor: surfaceTintColor, + iconTheme: + ThemeHelper.getThemeElement( + [ + iconTheme, + context.themeExtension()?.iconTheme, + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: Theme.of(context).iconTheme, + ), + primary: primary ?? true, + excludeHeaderSemantics: excludeHeaderSemantics ?? false, + leadingWidth: leadingWidth, + title: Text( + title?.data ?? '', + style: ThemeHelper.getThemeElement( + [ + title?.style, + context + .themeExtension() + ?.titleStyle + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: context.textTheme.titleLarge, + ), + ).toGradient(gradientColors: title?.gradientColors), + leading: leading, + actions: actions, + centerTitle: centerTitle ?? false, + ), + if (expandedWidget != null) + ...ListTile.divideTiles( + color: ThemeHelper.getThemeElement( + [ + context + .themeExtension() + ?.expandedDividerStyle, + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: Theme.of(context).dividerColor, + ), + context: context, + tiles: expandedWidget!, + ), + ], + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart new file mode 100644 index 00000000..88c9e759 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart @@ -0,0 +1,119 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'top_app_bar.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $TopAppBarCWProxyImpl implements $AppBarComponentCWProxy { + const $TopAppBarCWProxyImpl(this._value); + final TopAppBar _value; + @override + TopAppBar shape(ShapeBorder? shape) => this(shape: shape); + @override + TopAppBar systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle) => + this(systemOverlayStyle: systemOverlayStyle); + @override + TopAppBar automaticallyImplyLeading(bool? automaticallyImplyLeading) => + this(automaticallyImplyLeading: automaticallyImplyLeading); + @override + TopAppBar flexibleSpace(Widget? flexibleSpace) => + this(flexibleSpace: flexibleSpace); + @override + TopAppBar bottom(PreferredSizeWidget? bottom) => this(bottom: bottom); + @override + TopAppBar elevation(double? elevation) => this(elevation: elevation); + @override + TopAppBar scrolledUnderElevation(double? scrolledUnderElevation) => + this(scrolledUnderElevation: scrolledUnderElevation); + @override + TopAppBar shadowColor(Color? shadowColor) => this(shadowColor: shadowColor); + @override + TopAppBar surfaceTintColor(Color? surfaceTintColor) => + this(surfaceTintColor: surfaceTintColor); + @override + TopAppBar backgroundColor(MultiColor? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + TopAppBar iconTheme(IconThemeData? iconTheme) => this(iconTheme: iconTheme); + @override + TopAppBar primary(bool? primary) => this(primary: primary); + @override + TopAppBar excludeHeaderSemantics(bool? excludeHeaderSemantics) => + this(excludeHeaderSemantics: excludeHeaderSemantics); + @override + TopAppBar toolbarHeight(double? toolbarHeight) => + this(toolbarHeight: toolbarHeight); + @override + TopAppBar leadingWidth(double? leadingWidth) => + this(leadingWidth: leadingWidth); + @override + TopAppBar title(TextWrapper? title) => this(title: title); + @override + TopAppBar leading(Widget? leading) => this(leading: leading); + @override + TopAppBar actions(List? actions) => this(actions: actions); + @override + TopAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); + @override + TopAppBar expandedWidget(List? expandedWidget) => + this(expandedWidget: expandedWidget); + @override + TopAppBar key(Key? key) => this(key: key); + @override + TopAppBar call({ + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, + TextWrapper? title, + Widget? leading, + List? actions, + bool? centerTitle, + List? expandedWidget, + Key? key, + }) => + TopAppBar( + systemOverlayStyle: systemOverlayStyle ?? _value.systemOverlayStyle, + automaticallyImplyLeading: + automaticallyImplyLeading ?? _value.automaticallyImplyLeading, + flexibleSpace: flexibleSpace ?? _value.flexibleSpace, + bottom: bottom ?? _value.bottom, + elevation: elevation ?? _value.elevation, + scrolledUnderElevation: + scrolledUnderElevation ?? _value.scrolledUnderElevation, + shadowColor: shadowColor ?? _value.shadowColor, + surfaceTintColor: surfaceTintColor ?? _value.surfaceTintColor, + backgroundColor: backgroundColor ?? _value.backgroundColor, + iconTheme: iconTheme ?? _value.iconTheme, + primary: primary ?? _value.primary, + excludeHeaderSemantics: + excludeHeaderSemantics ?? _value.excludeHeaderSemantics, + toolbarHeight: toolbarHeight ?? _value.toolbarHeight, + leadingWidth: leadingWidth ?? _value.leadingWidth, + title: title ?? _value.title, + leading: leading ?? _value.leading, + actions: actions ?? _value.actions, + centerTitle: centerTitle ?? _value.centerTitle, + shape: shape ?? _value.shape, + expandedWidget: expandedWidget ?? _value.expandedWidget, + key: key ?? _value.key, + ); +} + +mixin $TopAppBarCWMixin on Component { + $AppBarComponentCWProxy get copyWith => + $TopAppBarCWProxyImpl(this as TopAppBar); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart index 34d4753d..9b4c399c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/components.dart +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export './app_bars/app_bars.dart'; export './buttons/buttons.dart'; export './cards/cards.dart'; export './gradients/gradients.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart new file mode 100644 index 00000000..d236b884 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart @@ -0,0 +1,35 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +part 'top_navigation_bar.g.dart'; + +@ComponentCopyWithExtension() +class TopNavigationBar extends TopNavigationBarComponent + with $TopNavigationBarCWMixin { + const TopNavigationBar({ + super.leading, + super.actions, + super.onTap, + super.currentIndex = 0, + super.key, + }); + + @override + Widget build(BuildContext context) => const Placeholder(); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart new file mode 100644 index 00000000..ba8e5a42 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart @@ -0,0 +1,45 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'top_navigation_bar.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $TopNavigationBarCWProxyImpl + implements $TopNavigationBarComponentCWProxy { + const $TopNavigationBarCWProxyImpl(this._value); + final TopNavigationBar _value; + @override + TopNavigationBar leading(Widget? leading) => this(leading: leading); + @override + TopNavigationBar actions(List? actions) => this(actions: actions); + @override + TopNavigationBar onTap(void Function(BuildContext, int)? onTap) => + this(onTap: onTap); + @override + TopNavigationBar currentIndex(int? currentIndex) => + this(currentIndex: currentIndex); + @override + TopNavigationBar key(Key? key) => this(key: key); + @override + TopNavigationBar call({ + Widget? leading, + List? actions, + void Function(BuildContext, int)? onTap, + int? currentIndex, + Key? key, + }) => + TopNavigationBar( + leading: leading ?? _value.leading, + actions: actions ?? _value.actions, + onTap: onTap ?? _value.onTap, + currentIndex: currentIndex ?? _value.currentIndex, + key: key ?? _value.key, + ); +} + +mixin $TopNavigationBarCWMixin on Component { + $TopNavigationBarComponentCWProxy get copyWith => + $TopNavigationBarCWProxyImpl(this as TopNavigationBar); +} diff --git a/packages/wyatt_ui_kit/lib/src/domain/domain.dart b/packages/wyatt_ui_kit/lib/src/domain/domain.dart index 6cf19139..8433530b 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/domain.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/domain.dart @@ -19,3 +19,4 @@ export './card_theme_extension.dart'; export './loader_theme_extension.dart'; export './rich_text_builder_theme_extension.dart'; export './text_input_theme_extension.dart'; +export './top_app_bar_extension.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart new file mode 100644 index 00000000..ea6718bb --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart @@ -0,0 +1,34 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class TopAppBarThemeExtension + extends ThemeExtension { + const TopAppBarThemeExtension({ + this.iconTheme, + this.backgroundColors, + this.expandedDividerStyle, + this.titleStyle, + }); + + final MultiColor? backgroundColors; + final IconThemeData? iconTheme; + final Color? expandedDividerStyle; + + final TextStyle? titleStyle; +} -- 2.47.2 From ca6af3ccc398aaa303176118e58574de3d5f8213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 16:01:51 +0100 Subject: [PATCH 176/320] style(ui_components): clean folders and gather bars --- .../{ => bars}/app_bar_component.dart | 0 .../{ => bars}/app_bar_component.g.dart | 0 .../lib/src/domain/entities/bars/bars.dart | 19 +++++++++++++++++++ .../bottom_navigation_bar_component.dart | 0 .../bottom_navigation_bar_component.g.dart | 0 .../top_navigation_bar_component.dart | 0 .../top_navigation_bar_component.g.dart | 0 .../lib/src/domain/entities/entities.dart | 4 +--- 8 files changed, 20 insertions(+), 3 deletions(-) rename packages/wyatt_ui_components/lib/src/domain/entities/{ => bars}/app_bar_component.dart (100%) rename packages/wyatt_ui_components/lib/src/domain/entities/{ => bars}/app_bar_component.g.dart (100%) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart rename packages/wyatt_ui_components/lib/src/domain/entities/{ => bars}/bottom_navigation_bar_component.dart (100%) rename packages/wyatt_ui_components/lib/src/domain/entities/{ => bars}/bottom_navigation_bar_component.g.dart (100%) rename packages/wyatt_ui_components/lib/src/domain/entities/{ => bars}/top_navigation_bar_component.dart (100%) rename packages/wyatt_ui_components/lib/src/domain/entities/{ => bars}/top_navigation_bar_component.g.dart (100%) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.g.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/app_bar_component.g.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart new file mode 100644 index 00000000..3334ba20 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart @@ -0,0 +1,19 @@ +// 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 . + +export './app_bar_component.dart'; +export './bottom_navigation_bar_component.dart'; +export './top_navigation_bar_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.g.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/bottom_navigation_bar_component.g.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/top_navigation_bar_component.g.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index c5ea3c94..1c7756e8 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -14,8 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export './app_bar_component.dart'; -export './bottom_navigation_bar_component.dart'; +export './bars/bars.dart'; export './buttons/buttons.dart'; export './cards/cards.dart'; export './component.dart'; @@ -26,4 +25,3 @@ export './loading_widget_component.dart'; export './rich_text_builder/rich_text_builder.dart'; export './text_inputs/text_inputs.dart'; export './theme_style.dart'; -export './top_navigation_bar_component.dart'; -- 2.47.2 From 8955788fa56977af2b2dc5ed0c39e43a3d2166d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 16:05:40 +0100 Subject: [PATCH 177/320] feat(ui_components): generify bars --- .../entities/bars/app_bar_component.dart | 63 +++++++------------ .../entities/bars/top_bar_component.dart | 62 ++++++++++++++++++ 2 files changed, 85 insertions(+), 40 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/bars/top_bar_component.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart index 27326808..f13710a2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart @@ -1,70 +1,53 @@ // Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // -// This program is free software: you can redistribute it and/or modify +// super 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, +// super 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 . +// along with super program. If not, see . import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/src/domain/entities/bars/top_bar_component.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'app_bar_component.g.dart'; @ComponentProxyExtension() -abstract class AppBarComponent extends Component +abstract class AppBarComponent extends TopBarComponent with CopyWithMixin<$AppBarComponentCWProxy> { const AppBarComponent({ - this.shape, - this.systemOverlayStyle, - this.automaticallyImplyLeading, - this.flexibleSpace, - this.bottom, - this.elevation, - this.scrolledUnderElevation, - this.shadowColor, - this.surfaceTintColor, - this.backgroundColor, - this.iconTheme, - this.primary, - this.excludeHeaderSemantics, - this.toolbarHeight, - this.leadingWidth, this.title, - this.leading, - this.actions, this.centerTitle, - this.expandedWidget, + super.shape, + super.systemOverlayStyle, + super.automaticallyImplyLeading, + super.flexibleSpace, + super.bottom, + super.elevation, + super.scrolledUnderElevation, + super.shadowColor, + super.surfaceTintColor, + super.backgroundColor, + super.iconTheme, + super.primary, + super.excludeHeaderSemantics, + super.toolbarHeight, + super.leadingWidth, + super.leading, + super.actions, + super.expandedWidget, super.key, }); final TextWrapper? title; final bool? centerTitle; - final Widget? leading; - final List? actions; - final bool? automaticallyImplyLeading; - final Widget? flexibleSpace; - final PreferredSizeWidget? bottom; - final double? elevation; - final double? scrolledUnderElevation; - final Color? shadowColor; - final Color? surfaceTintColor; - final MultiColor? backgroundColor; - final IconThemeData? iconTheme; - final bool? primary; - final bool? excludeHeaderSemantics; - final double? toolbarHeight; - final double? leadingWidth; - final SystemUiOverlayStyle? systemOverlayStyle; - final ShapeBorder? shape; - final List? expandedWidget; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_bar_component.dart new file mode 100644 index 00000000..f73f8423 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_bar_component.dart @@ -0,0 +1,62 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +abstract class TopBarComponent extends Component { + const TopBarComponent({ + this.leading, + this.actions, + this.automaticallyImplyLeading, + this.flexibleSpace, + this.bottom, + this.elevation, + this.scrolledUnderElevation, + this.shadowColor, + this.surfaceTintColor, + this.backgroundColor, + this.iconTheme, + this.primary, + this.excludeHeaderSemantics, + this.toolbarHeight, + this.leadingWidth, + this.systemOverlayStyle, + this.shape, + this.expandedWidget, + super.key, + }); + + final Widget? leading; + final List? actions; + final bool? automaticallyImplyLeading; + final Widget? flexibleSpace; + final PreferredSizeWidget? bottom; + final double? elevation; + final double? scrolledUnderElevation; + final Color? shadowColor; + final Color? surfaceTintColor; + final MultiColor? backgroundColor; + final IconThemeData? iconTheme; + final bool? primary; + final bool? excludeHeaderSemantics; + final double? toolbarHeight; + final double? leadingWidth; + final SystemUiOverlayStyle? systemOverlayStyle; + final ShapeBorder? shape; + final List? expandedWidget; +} -- 2.47.2 From b9dac321435dfa8f45ab9b15ec4c0ef6e9abdee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 16:10:25 +0100 Subject: [PATCH 178/320] refactor(ui_components): migrate top nav bar using generify top bar --- .../lib/components/custom_app_bar.dart | 2 +- .../lib/components/custom_app_bar.g.dart | 16 +++--- .../entities/bars/app_bar_component.g.dart | 54 ------------------ .../lib/src/domain/entities/bars/bars.dart | 2 +- ...ponent.dart => top_app_bar_component.dart} | 8 +-- .../bars/top_app_bar_component.g.dart | 55 +++++++++++++++++++ .../bars/top_navigation_bar_component.dart | 27 +++++++-- .../src/features/component_theme_data.dart | 2 +- 8 files changed, 91 insertions(+), 75 deletions(-) delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.g.dart rename packages/wyatt_ui_components/lib/src/domain/entities/bars/{app_bar_component.dart => top_app_bar_component.dart} (90%) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.g.dart diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart index 7a0088fe..fcd0cff8 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart @@ -5,7 +5,7 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'custom_app_bar.g.dart'; @ComponentCopyWithExtension() -class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { +class CustomAppBar extends TopAppBarComponent with $CustomAppBarCWMixin { const CustomAppBar({super.title, super.key}); @override diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart index 911b0f37..125680d9 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.g.dart @@ -6,10 +6,14 @@ part of 'custom_app_bar.dart'; // ComponentCopyWithGenerator // ************************************************************************** -class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { +class $CustomAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { const $CustomAppBarCWProxyImpl(this._value); final CustomAppBar _value; @override + CustomAppBar title(TextWrapper? title) => this(title: title); + @override + CustomAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); + @override CustomAppBar shape(ShapeBorder? shape) => this(shape: shape); @override CustomAppBar systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle) => @@ -51,20 +55,18 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { CustomAppBar leadingWidth(double? leadingWidth) => this(leadingWidth: leadingWidth); @override - CustomAppBar title(TextWrapper? title) => this(title: title); - @override CustomAppBar leading(Widget? leading) => this(leading: leading); @override CustomAppBar actions(List? actions) => this(actions: actions); @override - CustomAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); - @override CustomAppBar expandedWidget(List? expandedWidget) => this(expandedWidget: expandedWidget); @override CustomAppBar key(Key? key) => this(key: key); @override CustomAppBar call({ + TextWrapper? title, + bool? centerTitle, ShapeBorder? shape, SystemUiOverlayStyle? systemOverlayStyle, bool? automaticallyImplyLeading, @@ -80,10 +82,8 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { bool? excludeHeaderSemantics, double? toolbarHeight, double? leadingWidth, - TextWrapper? title, Widget? leading, List? actions, - bool? centerTitle, List? expandedWidget, Key? key, }) => @@ -94,6 +94,6 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { } mixin $CustomAppBarCWMixin on Component { - $AppBarComponentCWProxy get copyWith => + $TopAppBarComponentCWProxy get copyWith => $CustomAppBarCWProxyImpl(this as CustomAppBar); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.g.dart deleted file mode 100644 index bb6bcf5e..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.g.dart +++ /dev/null @@ -1,54 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'app_bar_component.dart'; - -// ************************************************************************** -// ComponentProxyGenerator -// ************************************************************************** - -abstract class $AppBarComponentCWProxy { - AppBarComponent shape(ShapeBorder? shape); - AppBarComponent systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle); - AppBarComponent automaticallyImplyLeading(bool? automaticallyImplyLeading); - AppBarComponent flexibleSpace(Widget? flexibleSpace); - AppBarComponent bottom(PreferredSizeWidget? bottom); - AppBarComponent elevation(double? elevation); - AppBarComponent scrolledUnderElevation(double? scrolledUnderElevation); - AppBarComponent shadowColor(Color? shadowColor); - AppBarComponent surfaceTintColor(Color? surfaceTintColor); - AppBarComponent backgroundColor(MultiColor? backgroundColor); - AppBarComponent iconTheme(IconThemeData? iconTheme); - AppBarComponent primary(bool? primary); - AppBarComponent excludeHeaderSemantics(bool? excludeHeaderSemantics); - AppBarComponent toolbarHeight(double? toolbarHeight); - AppBarComponent leadingWidth(double? leadingWidth); - AppBarComponent title(TextWrapper? title); - AppBarComponent leading(Widget? leading); - AppBarComponent actions(List? actions); - AppBarComponent centerTitle(bool? centerTitle); - AppBarComponent expandedWidget(List? expandedWidget); - AppBarComponent key(Key? key); - AppBarComponent call({ - ShapeBorder? shape, - SystemUiOverlayStyle? systemOverlayStyle, - bool? automaticallyImplyLeading, - Widget? flexibleSpace, - PreferredSizeWidget? bottom, - double? elevation, - double? scrolledUnderElevation, - Color? shadowColor, - Color? surfaceTintColor, - MultiColor? backgroundColor, - IconThemeData? iconTheme, - bool? primary, - bool? excludeHeaderSemantics, - double? toolbarHeight, - double? leadingWidth, - TextWrapper? title, - Widget? leading, - List? actions, - bool? centerTitle, - List? expandedWidget, - Key? key, - }); -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart index 3334ba20..16fbd451 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export './app_bar_component.dart'; +export 'top_app_bar_component.dart'; export './bottom_navigation_bar_component.dart'; export './top_navigation_bar_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart similarity index 90% rename from packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart index f13710a2..7be231f2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart @@ -20,12 +20,12 @@ import 'package:wyatt_component_copy_with_extension/component_copy_with_extensio import 'package:wyatt_ui_components/src/domain/entities/bars/top_bar_component.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -part 'app_bar_component.g.dart'; +part 'top_app_bar_component.g.dart'; @ComponentProxyExtension() -abstract class AppBarComponent extends TopBarComponent - with CopyWithMixin<$AppBarComponentCWProxy> { - const AppBarComponent({ +abstract class TopAppBarComponent extends TopBarComponent + with CopyWithMixin<$TopAppBarComponentCWProxy> { + const TopAppBarComponent({ this.title, this.centerTitle, super.shape, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.g.dart new file mode 100644 index 00000000..e71c01be --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.g.dart @@ -0,0 +1,55 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'top_app_bar_component.dart'; + +// ************************************************************************** +// ComponentProxyGenerator +// ************************************************************************** + +abstract class $TopAppBarComponentCWProxy { + TopAppBarComponent title(TextWrapper? title); + TopAppBarComponent centerTitle(bool? centerTitle); + TopAppBarComponent shape(ShapeBorder? shape); + TopAppBarComponent systemOverlayStyle( + SystemUiOverlayStyle? systemOverlayStyle); + TopAppBarComponent automaticallyImplyLeading(bool? automaticallyImplyLeading); + TopAppBarComponent flexibleSpace(Widget? flexibleSpace); + TopAppBarComponent bottom(PreferredSizeWidget? bottom); + TopAppBarComponent elevation(double? elevation); + TopAppBarComponent scrolledUnderElevation(double? scrolledUnderElevation); + TopAppBarComponent shadowColor(Color? shadowColor); + TopAppBarComponent surfaceTintColor(Color? surfaceTintColor); + TopAppBarComponent backgroundColor(MultiColor? backgroundColor); + TopAppBarComponent iconTheme(IconThemeData? iconTheme); + TopAppBarComponent primary(bool? primary); + TopAppBarComponent excludeHeaderSemantics(bool? excludeHeaderSemantics); + TopAppBarComponent toolbarHeight(double? toolbarHeight); + TopAppBarComponent leadingWidth(double? leadingWidth); + TopAppBarComponent leading(Widget? leading); + TopAppBarComponent actions(List? actions); + TopAppBarComponent expandedWidget(List? expandedWidget); + TopAppBarComponent key(Key? key); + TopAppBarComponent call({ + TextWrapper? title, + bool? centerTitle, + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, + Widget? leading, + List? actions, + List? expandedWidget, + Key? key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart index cb23bf07..a5cc6977 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart @@ -17,22 +17,37 @@ import 'package:flutter/material.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; -import 'package:wyatt_ui_components/src/domain/entities/component.dart'; +import 'package:wyatt_ui_components/src/domain/entities/bars/top_bar_component.dart'; part 'top_navigation_bar_component.g.dart'; @ComponentProxyExtension() -abstract class TopNavigationBarComponent extends Component +abstract class TopNavigationBarComponent extends TopBarComponent with CopyWithMixin<$TopNavigationBarComponentCWProxy> { const TopNavigationBarComponent({ - this.leading, - this.actions, this.onTap, this.currentIndex = 0, + super.shape, + super.systemOverlayStyle, + super.automaticallyImplyLeading, + super.flexibleSpace, + super.bottom, + super.elevation, + super.scrolledUnderElevation, + super.shadowColor, + super.surfaceTintColor, + super.backgroundColor, + super.iconTheme, + super.primary, + super.excludeHeaderSemantics, + super.toolbarHeight, + super.leadingWidth, + super.leading, + super.actions, + super.expandedWidget, super.key, }); + final int currentIndex; final void Function(BuildContext, int)? onTap; - final Widget? leading; - final List? actions; } diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index 1f58e87c..71f1b221 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -35,7 +35,7 @@ class ComponentThemeData { this.quoteCardComponent, this.skillCardComponent, }); - final AppBarComponent? appBar; + final TopAppBarComponent? appBar; final TopNavigationBarComponent? topNavigationBarComponent; final BottomNavigationBarComponent? bottomNavigationBar; -- 2.47.2 From 317eb56d66ce6020e32c65e6cf520db3050b14d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 16:13:07 +0100 Subject: [PATCH 179/320] refactor(ui_kit): adapt ui_kit --- .../src/components/app_bars/top_app_bar.dart | 2 +- .../components/app_bars/top_app_bar.g.dart | 16 ++-- .../top_navigation_bar.g.dart | 73 +++++++++++++++++-- 3 files changed, 76 insertions(+), 15 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart index d8f433d9..4e15d145 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart +++ b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart @@ -22,7 +22,7 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; part 'top_app_bar.g.dart'; @ComponentCopyWithExtension() -class TopAppBar extends AppBarComponent with $TopAppBarCWMixin { +class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { const TopAppBar({ super.systemOverlayStyle, super.automaticallyImplyLeading, diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart index 88c9e759..fe0baa7a 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart @@ -6,10 +6,14 @@ part of 'top_app_bar.dart'; // ComponentCopyWithGenerator // ************************************************************************** -class $TopAppBarCWProxyImpl implements $AppBarComponentCWProxy { +class $TopAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { const $TopAppBarCWProxyImpl(this._value); final TopAppBar _value; @override + TopAppBar title(TextWrapper? title) => this(title: title); + @override + TopAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); + @override TopAppBar shape(ShapeBorder? shape) => this(shape: shape); @override TopAppBar systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle) => @@ -49,20 +53,18 @@ class $TopAppBarCWProxyImpl implements $AppBarComponentCWProxy { TopAppBar leadingWidth(double? leadingWidth) => this(leadingWidth: leadingWidth); @override - TopAppBar title(TextWrapper? title) => this(title: title); - @override TopAppBar leading(Widget? leading) => this(leading: leading); @override TopAppBar actions(List? actions) => this(actions: actions); @override - TopAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); - @override TopAppBar expandedWidget(List? expandedWidget) => this(expandedWidget: expandedWidget); @override TopAppBar key(Key? key) => this(key: key); @override TopAppBar call({ + TextWrapper? title, + bool? centerTitle, ShapeBorder? shape, SystemUiOverlayStyle? systemOverlayStyle, bool? automaticallyImplyLeading, @@ -78,10 +80,8 @@ class $TopAppBarCWProxyImpl implements $AppBarComponentCWProxy { bool? excludeHeaderSemantics, double? toolbarHeight, double? leadingWidth, - TextWrapper? title, Widget? leading, List? actions, - bool? centerTitle, List? expandedWidget, Key? key, }) => @@ -114,6 +114,6 @@ class $TopAppBarCWProxyImpl implements $AppBarComponentCWProxy { } mixin $TopAppBarCWMixin on Component { - $AppBarComponentCWProxy get copyWith => + $TopAppBarComponentCWProxy get copyWith => $TopAppBarCWProxyImpl(this as TopAppBar); } diff --git a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart index ba8e5a42..f6e95da2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart @@ -11,23 +11,84 @@ class $TopNavigationBarCWProxyImpl const $TopNavigationBarCWProxyImpl(this._value); final TopNavigationBar _value; @override - TopNavigationBar leading(Widget? leading) => this(leading: leading); - @override - TopNavigationBar actions(List? actions) => this(actions: actions); - @override TopNavigationBar onTap(void Function(BuildContext, int)? onTap) => this(onTap: onTap); @override TopNavigationBar currentIndex(int? currentIndex) => this(currentIndex: currentIndex); @override + TopNavigationBar shape(ShapeBorder? shape) => this(shape: shape); + @override + TopNavigationBar systemOverlayStyle( + SystemUiOverlayStyle? systemOverlayStyle) => + this(systemOverlayStyle: systemOverlayStyle); + @override + TopNavigationBar automaticallyImplyLeading(bool? automaticallyImplyLeading) => + this(automaticallyImplyLeading: automaticallyImplyLeading); + @override + TopNavigationBar flexibleSpace(Widget? flexibleSpace) => + this(flexibleSpace: flexibleSpace); + @override + TopNavigationBar bottom(PreferredSizeWidget? bottom) => this(bottom: bottom); + @override + TopNavigationBar elevation(double? elevation) => this(elevation: elevation); + @override + TopNavigationBar scrolledUnderElevation(double? scrolledUnderElevation) => + this(scrolledUnderElevation: scrolledUnderElevation); + @override + TopNavigationBar shadowColor(Color? shadowColor) => + this(shadowColor: shadowColor); + @override + TopNavigationBar surfaceTintColor(Color? surfaceTintColor) => + this(surfaceTintColor: surfaceTintColor); + @override + TopNavigationBar backgroundColor(MultiColor? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + TopNavigationBar iconTheme(IconThemeData? iconTheme) => + this(iconTheme: iconTheme); + @override + TopNavigationBar primary(bool? primary) => this(primary: primary); + @override + TopNavigationBar excludeHeaderSemantics(bool? excludeHeaderSemantics) => + this(excludeHeaderSemantics: excludeHeaderSemantics); + @override + TopNavigationBar toolbarHeight(double? toolbarHeight) => + this(toolbarHeight: toolbarHeight); + @override + TopNavigationBar leadingWidth(double? leadingWidth) => + this(leadingWidth: leadingWidth); + @override + TopNavigationBar leading(Widget? leading) => this(leading: leading); + @override + TopNavigationBar actions(List? actions) => this(actions: actions); + @override + TopNavigationBar expandedWidget(List? expandedWidget) => + this(expandedWidget: expandedWidget); + @override TopNavigationBar key(Key? key) => this(key: key); @override TopNavigationBar call({ - Widget? leading, - List? actions, void Function(BuildContext, int)? onTap, int? currentIndex, + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, + Widget? leading, + List? actions, + List? expandedWidget, Key? key, }) => TopNavigationBar( -- 2.47.2 From 4a3fde3a1ec3e71ec4d12320ce92622dd2498451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 17:43:42 +0100 Subject: [PATCH 180/320] feat(ui_kit): implement top nav bar --- .../lib/src/domain/entities/bars/bars.dart | 2 +- .../bars/top_navigation_bar_component.dart | 5 +- .../bars/top_navigation_bar_component.g.dart | 46 +++++- .../assets/images/studio_long_logo.png | Bin 0 -> 27095 bytes .../wyatt_ui_kit/example/lib/bars/bars.dart | 22 +++ .../example/lib/theme/themes.dart | 2 +- ..._app_bar_theme.dart => top_bar_theme.dart} | 34 +++-- .../app_bars.dart => bars/bars.dart} | 3 +- .../{app_bars => bars}/top_app_bar.dart | 23 ++- .../{app_bars => bars}/top_app_bar.g.dart | 4 +- .../components/bars/top_navigation_bar.dart | 135 ++++++++++++++++++ .../top_navigation_bar.g.dart | 28 +++- .../bars/widgets/navigation_item.dart | 73 ++++++++++ .../lib/src/components/components.dart | 2 +- .../top_navigation_bar.dart | 35 ----- .../wyatt_ui_kit/lib/src/domain/domain.dart | 2 +- ...sion.dart => top_bar_theme_extension.dart} | 12 +- 17 files changed, 348 insertions(+), 80 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/assets/images/studio_long_logo.png rename packages/wyatt_ui_kit/example/lib/theme/{top_app_bar_theme.dart => top_bar_theme.dart} (64%) rename packages/wyatt_ui_kit/lib/src/components/{app_bars/app_bars.dart => bars/bars.dart} (91%) rename packages/wyatt_ui_kit/lib/src/components/{app_bars => bars}/top_app_bar.dart (88%) rename packages/wyatt_ui_kit/lib/src/components/{app_bars => bars}/top_app_bar.g.dart (100%) create mode 100644 packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart rename packages/wyatt_ui_kit/lib/src/components/{top_navigation_bars => bars}/top_navigation_bar.g.dart (74%) create mode 100644 packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart delete mode 100644 packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart rename packages/wyatt_ui_kit/lib/src/domain/{top_app_bar_extension.dart => top_bar_theme_extension.dart} (81%) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart index 16fbd451..5bd04fd5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'top_app_bar_component.dart'; export './bottom_navigation_bar_component.dart'; export './top_navigation_bar_component.dart'; +export 'top_app_bar_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart index a5cc6977..3f9304ec 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart @@ -15,9 +15,10 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/bars/top_bar_component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'top_navigation_bar_component.g.dart'; @@ -25,6 +26,7 @@ part 'top_navigation_bar_component.g.dart'; abstract class TopNavigationBarComponent extends TopBarComponent with CopyWithMixin<$TopNavigationBarComponentCWProxy> { const TopNavigationBarComponent({ + this.navigationItems, this.onTap, this.currentIndex = 0, super.shape, @@ -48,6 +50,7 @@ abstract class TopNavigationBarComponent extends TopBarComponent super.key, }); + final List? navigationItems; final int currentIndex; final void Function(BuildContext, int)? onTap; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart index 591c9a6e..7d51e749 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart @@ -7,16 +7,54 @@ part of 'top_navigation_bar_component.dart'; // ************************************************************************** abstract class $TopNavigationBarComponentCWProxy { - TopNavigationBarComponent leading(Widget? leading); - TopNavigationBarComponent actions(List? actions); + TopNavigationBarComponent navigationItems(List? navigationItems); TopNavigationBarComponent onTap(void Function(BuildContext, int)? onTap); TopNavigationBarComponent currentIndex(int? currentIndex); + TopNavigationBarComponent shape(ShapeBorder? shape); + TopNavigationBarComponent systemOverlayStyle( + SystemUiOverlayStyle? systemOverlayStyle); + TopNavigationBarComponent automaticallyImplyLeading( + bool? automaticallyImplyLeading); + TopNavigationBarComponent flexibleSpace(Widget? flexibleSpace); + TopNavigationBarComponent bottom(PreferredSizeWidget? bottom); + TopNavigationBarComponent elevation(double? elevation); + TopNavigationBarComponent scrolledUnderElevation( + double? scrolledUnderElevation); + TopNavigationBarComponent shadowColor(Color? shadowColor); + TopNavigationBarComponent surfaceTintColor(Color? surfaceTintColor); + TopNavigationBarComponent backgroundColor(MultiColor? backgroundColor); + TopNavigationBarComponent iconTheme(IconThemeData? iconTheme); + TopNavigationBarComponent primary(bool? primary); + TopNavigationBarComponent excludeHeaderSemantics( + bool? excludeHeaderSemantics); + TopNavigationBarComponent toolbarHeight(double? toolbarHeight); + TopNavigationBarComponent leadingWidth(double? leadingWidth); + TopNavigationBarComponent leading(Widget? leading); + TopNavigationBarComponent actions(List? actions); + TopNavigationBarComponent expandedWidget(List? expandedWidget); TopNavigationBarComponent key(Key? key); TopNavigationBarComponent call({ - Widget? leading, - List? actions, + List? navigationItems, void Function(BuildContext, int)? onTap, int? currentIndex, + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, + Widget? leading, + List? actions, + List? expandedWidget, Key? key, }); } diff --git a/packages/wyatt_ui_kit/example/assets/images/studio_long_logo.png b/packages/wyatt_ui_kit/example/assets/images/studio_long_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8534fdf9379bfe866b37d652724937e803a7e67e GIT binary patch literal 27095 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

    _pFM4 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 HNyz^IcN|2; literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/lib/bars/bars.dart b/packages/wyatt_ui_kit/example/lib/bars/bars.dart index 2290e006..c2254916 100644 --- a/packages/wyatt_ui_kit/example/lib/bars/bars.dart +++ b/packages/wyatt_ui_kit/example/lib/bars/bars.dart @@ -61,6 +61,28 @@ class Bars extends DemoPage { ) ], ), + const Gap(20), + TopNavigationBar( + leading: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Image.asset('assets/images/studio_long_logo.png'), + ), + actions: [ + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 20, vertical: 25), + child: FlatButton( + label: 'Estimer mon projet'.wrap(), + ), + ), + ], + navigationItems: [ + 'ACCEUIL'.wrap(), + 'VOTRE PROGRAMME'.wrap(), + 'LE STUDIO'.wrap(), + 'SAVOIR FAIRE'.wrap() + ].whereType().toList(), + ), ], ); diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index e36014d6..08c00bd2 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -25,7 +25,7 @@ import 'package:wyatt_ui_kit_example/theme/rich_text_builder_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/text_input_theme.dart'; -import 'package:wyatt_ui_kit_example/theme/top_app_bar_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/top_bar_theme.dart'; /// Easely switch between Material and Studio themes. abstract class Themes { diff --git a/packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart similarity index 64% rename from packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart rename to packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart index 8be94e42..218f223e 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart @@ -3,24 +3,31 @@ import 'package:google_fonts/google_fonts.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; -class TopAppBarTheme extends TopAppBarThemeExtension { +class TopAppBarTheme extends TopBarThemeExtension { const TopAppBarTheme({ super.iconTheme, super.backgroundColors, - super.expandedDividerStyle, + super.secondaryColor, super.titleStyle, + super.subTitleStyle, }); factory TopAppBarTheme.light() => TopAppBarTheme( backgroundColors: const MultiColor.single( Color.fromRGBO(246, 246, 246, 1), ), - expandedDividerStyle: Colors.black.withOpacity(0.1), + secondaryColor: const Color.fromRGBO(36, 38, 42, 1), titleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.bold, + color: const Color.fromRGBO(36, 38, 42, 1), fontSize: 18, ), - iconTheme: const IconThemeData(color: Colors.black), + subTitleStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w400, + color: const Color.fromRGBO(36, 38, 42, 1), + fontSize: 18, + ), + iconTheme: const IconThemeData(color: Color.fromRGBO(36, 38, 42, 1)), ); factory TopAppBarTheme.dark() => TopAppBarTheme( @@ -29,31 +36,35 @@ class TopAppBarTheme extends TopAppBarThemeExtension { Color.fromRGBO(39, 47, 61, 1), Color.fromRGBO(44, 50, 56, 1), ]), - expandedDividerStyle: Colors.white.withOpacity(0.1), + secondaryColor: Colors.white, titleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.bold, fontSize: 18, ), + subTitleStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w400, + fontSize: 18, + ), iconTheme: const IconThemeData(color: Colors.white), ); @override - ThemeExtension copyWith({ + ThemeExtension copyWith({ IconThemeData? iconTheme, MultiColor? backgroundColors, - Color? expandedDividerStyle, + Color? secondaryColor, TextStyle? titleStyle, }) => TopAppBarTheme( iconTheme: iconTheme ?? this.iconTheme, backgroundColors: backgroundColors ?? this.backgroundColors, - expandedDividerStyle: expandedDividerStyle ?? this.expandedDividerStyle, + secondaryColor: secondaryColor ?? this.secondaryColor, titleStyle: titleStyle ?? this.titleStyle, ); @override - ThemeExtension lerp( - covariant ThemeExtension? other, + ThemeExtension lerp( + covariant ThemeExtension? other, double t, ) { if (other is! TopAppBarTheme) { @@ -63,8 +74,7 @@ class TopAppBarTheme extends TopAppBarThemeExtension { iconTheme: IconThemeData.lerp(iconTheme, other.iconTheme, t), backgroundColors: MultiColor.lerp(backgroundColors, other.backgroundColors, t), - expandedDividerStyle: - Color.lerp(expandedDividerStyle, other.expandedDividerStyle, t), + secondaryColor: Color.lerp(secondaryColor, other.secondaryColor, t), titleStyle: TextStyle.lerp(titleStyle, other.titleStyle, t), ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart b/packages/wyatt_ui_kit/lib/src/components/bars/bars.dart similarity index 91% rename from packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/bars.dart index a7a986ee..f3f8f557 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/bars.dart @@ -14,4 +14,5 @@ // You should have received a copy of the GNU General Public License // along with super program. If not, see . -export 'top_app_bar.dart'; +export './top_app_bar.dart'; +export './top_navigation_bar.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart similarity index 88% rename from packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart index 4e15d145..f915cff7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart @@ -24,6 +24,8 @@ part 'top_app_bar.g.dart'; @ComponentCopyWithExtension() class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { const TopAppBar({ + super.title, + super.centerTitle, super.systemOverlayStyle, super.automaticallyImplyLeading, super.flexibleSpace, @@ -38,10 +40,8 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { super.excludeHeaderSemantics, super.toolbarHeight, super.leadingWidth, - super.title, super.leading, super.actions, - super.centerTitle, super.shape, super.expandedWidget, super.key, @@ -53,9 +53,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { gradient: ThemeHelper.getThemeElement( [ backgroundColor, - context - .themeExtension() - ?.backgroundColors, + context.themeExtension()?.backgroundColors, ], valueValidator: (value) => value?.isGradient, transform: (value) => @@ -65,9 +63,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { color: ThemeHelper.getThemeElement( [ backgroundColor, - context - .themeExtension() - ?.backgroundColors, + context.themeExtension()?.backgroundColors, ], valueValidator: (value) => value?.isColor, transform: (value) => value?.color, @@ -91,7 +87,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { ThemeHelper.getThemeElement( [ iconTheme, - context.themeExtension()?.iconTheme, + context.themeExtension()?.iconTheme, ], valueValidator: (value) => value != null, transform: (value) => value, @@ -105,9 +101,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { style: ThemeHelper.getThemeElement( [ title?.style, - context - .themeExtension() - ?.titleStyle + context.themeExtension()?.titleStyle ], valueValidator: (value) => value != null, transform: (value) => value, @@ -123,8 +117,9 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { color: ThemeHelper.getThemeElement( [ context - .themeExtension() - ?.expandedDividerStyle, + .themeExtension() + ?.secondaryColor + ?.withOpacity(0.1), ], valueValidator: (value) => value != null, transform: (value) => value, diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.g.dart similarity index 100% rename from packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.g.dart index fe0baa7a..366e5bbf 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.g.dart @@ -86,6 +86,8 @@ class $TopAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { Key? key, }) => TopAppBar( + title: title ?? _value.title, + centerTitle: centerTitle ?? _value.centerTitle, systemOverlayStyle: systemOverlayStyle ?? _value.systemOverlayStyle, automaticallyImplyLeading: automaticallyImplyLeading ?? _value.automaticallyImplyLeading, @@ -103,10 +105,8 @@ class $TopAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { excludeHeaderSemantics ?? _value.excludeHeaderSemantics, toolbarHeight: toolbarHeight ?? _value.toolbarHeight, leadingWidth: leadingWidth ?? _value.leadingWidth, - title: title ?? _value.title, leading: leading ?? _value.leading, actions: actions ?? _value.actions, - centerTitle: centerTitle ?? _value.centerTitle, shape: shape ?? _value.shape, expandedWidget: expandedWidget ?? _value.expandedWidget, key: key ?? _value.key, diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart new file mode 100644 index 00000000..87d26a6d --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart @@ -0,0 +1,135 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/src/components/bars/widgets/navigation_item.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +part 'top_navigation_bar.g.dart'; + +@ComponentCopyWithExtension() +class TopNavigationBar extends TopNavigationBarComponent + with $TopNavigationBarCWMixin { + const TopNavigationBar({ + super.navigationItems, + super.onTap, + super.currentIndex = 0, + super.systemOverlayStyle, + super.automaticallyImplyLeading, + super.flexibleSpace, + super.bottom, + super.elevation, + super.scrolledUnderElevation, + super.shadowColor, + super.surfaceTintColor, + super.backgroundColor, + super.iconTheme, + super.primary, + super.excludeHeaderSemantics, + super.toolbarHeight, + super.leadingWidth, + super.leading, + super.actions, + super.shape, + super.expandedWidget, + super.key, + }); + + @override + Widget build(BuildContext context) => DecoratedBox( + decoration: BoxDecoration( + gradient: ThemeHelper.getThemeElement( + [ + backgroundColor, + context.themeExtension()?.backgroundColors, + ], + valueValidator: (value) => value?.isGradient, + transform: (value) => + LinearGradientHelper.fromNullableColors(value?.colors), + defaultValue: null, + ), + color: ThemeHelper.getThemeElement( + [ + backgroundColor, + context.themeExtension()?.backgroundColors, + ], + valueValidator: (value) => value?.isColor, + transform: (value) => value?.color, + defaultValue: Theme.of(context).appBarTheme.backgroundColor, + ), + ), + child: AppBar( + toolbarHeight: 100, + titleSpacing: 0, + backgroundColor: Colors.transparent, + systemOverlayStyle: systemOverlayStyle, + automaticallyImplyLeading: automaticallyImplyLeading ?? true, + flexibleSpace: flexibleSpace, + bottom: bottom, + elevation: elevation ?? 0, + scrolledUnderElevation: scrolledUnderElevation, + shadowColor: shadowColor, + surfaceTintColor: surfaceTintColor, + iconTheme: ThemeHelper.getThemeElement( + [ + iconTheme, + context.themeExtension()?.iconTheme, + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: Theme.of(context).iconTheme, + ), + primary: primary ?? true, + excludeHeaderSemantics: excludeHeaderSemantics ?? false, + leadingWidth: 200, + title: Row( + mainAxisSize: MainAxisSize.min, + children: navigationItems != null + ? navigationItems! + .asMap() + .map( + (key, value) => MapEntry( + key, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + onTap: () { + onTap?.call(context, key); + }, + child: NavigationItem( + item: value, + selected: key == currentIndex, + ), + ), + ), + ), + ), + ) + .values + .toList() + : [], + ), + leading: leading, + actions: actions, + centerTitle: true, + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.g.dart similarity index 74% rename from packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.g.dart index f6e95da2..591b8704 100644 --- a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.g.dart @@ -11,6 +11,9 @@ class $TopNavigationBarCWProxyImpl const $TopNavigationBarCWProxyImpl(this._value); final TopNavigationBar _value; @override + TopNavigationBar navigationItems(List? navigationItems) => + this(navigationItems: navigationItems); + @override TopNavigationBar onTap(void Function(BuildContext, int)? onTap) => this(onTap: onTap); @override @@ -69,6 +72,7 @@ class $TopNavigationBarCWProxyImpl TopNavigationBar key(Key? key) => this(key: key); @override TopNavigationBar call({ + List? navigationItems, void Function(BuildContext, int)? onTap, int? currentIndex, ShapeBorder? shape, @@ -92,10 +96,30 @@ class $TopNavigationBarCWProxyImpl Key? key, }) => TopNavigationBar( - leading: leading ?? _value.leading, - actions: actions ?? _value.actions, + navigationItems: navigationItems ?? _value.navigationItems, onTap: onTap ?? _value.onTap, currentIndex: currentIndex ?? _value.currentIndex, + systemOverlayStyle: systemOverlayStyle ?? _value.systemOverlayStyle, + automaticallyImplyLeading: + automaticallyImplyLeading ?? _value.automaticallyImplyLeading, + flexibleSpace: flexibleSpace ?? _value.flexibleSpace, + bottom: bottom ?? _value.bottom, + elevation: elevation ?? _value.elevation, + scrolledUnderElevation: + scrolledUnderElevation ?? _value.scrolledUnderElevation, + shadowColor: shadowColor ?? _value.shadowColor, + surfaceTintColor: surfaceTintColor ?? _value.surfaceTintColor, + backgroundColor: backgroundColor ?? _value.backgroundColor, + iconTheme: iconTheme ?? _value.iconTheme, + primary: primary ?? _value.primary, + excludeHeaderSemantics: + excludeHeaderSemantics ?? _value.excludeHeaderSemantics, + toolbarHeight: toolbarHeight ?? _value.toolbarHeight, + leadingWidth: leadingWidth ?? _value.leadingWidth, + leading: leading ?? _value.leading, + actions: actions ?? _value.actions, + shape: shape ?? _value.shape, + expandedWidget: expandedWidget ?? _value.expandedWidget, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart new file mode 100644 index 00000000..8269445f --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart @@ -0,0 +1,73 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class NavigationItem extends StatelessWidget { + const NavigationItem({ + required this.item, + required this.selected, + super.key, + }); + final TextWrapper item; + final bool selected; + + @override + Widget build(BuildContext context) => Stack( + alignment: Alignment.bottomCenter, + children: [ + if (selected) + Container( + height: 5, + width: 70, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + color: ThemeHelper.getThemeElement( + [ + context + .themeExtension() + ?.secondaryColor + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: Theme.of(context).primaryColor, + ), + ), + ), + SizedBox( + height: 50, + child: Center( + child: Text( + item.data, + style: ThemeHelper.getThemeElement( + [ + item.style, + context + .themeExtension() + ?.subTitleStyle + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: context.textTheme.titleMedium, + ), + ), + ), + ), + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart index 9b4c399c..486e2f93 100644 --- a/packages/wyatt_ui_kit/lib/src/components/components.dart +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -14,10 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export './app_bars/app_bars.dart'; export './buttons/buttons.dart'; export './cards/cards.dart'; export './gradients/gradients.dart'; export './loader/loader.dart'; export './rich_text_builder/rich_text_builder.dart'; export './text_inputs/text_input.dart'; +export 'bars/bars.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart deleted file mode 100644 index d236b884..00000000 --- a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart +++ /dev/null @@ -1,35 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -part 'top_navigation_bar.g.dart'; - -@ComponentCopyWithExtension() -class TopNavigationBar extends TopNavigationBarComponent - with $TopNavigationBarCWMixin { - const TopNavigationBar({ - super.leading, - super.actions, - super.onTap, - super.currentIndex = 0, - super.key, - }); - - @override - Widget build(BuildContext context) => const Placeholder(); -} diff --git a/packages/wyatt_ui_kit/lib/src/domain/domain.dart b/packages/wyatt_ui_kit/lib/src/domain/domain.dart index 8433530b..6c7c9ab3 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/domain.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/domain.dart @@ -19,4 +19,4 @@ export './card_theme_extension.dart'; export './loader_theme_extension.dart'; export './rich_text_builder_theme_extension.dart'; export './text_input_theme_extension.dart'; -export './top_app_bar_extension.dart'; +export 'top_bar_theme_extension.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/top_bar_theme_extension.dart similarity index 81% rename from packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart rename to packages/wyatt_ui_kit/lib/src/domain/top_bar_theme_extension.dart index ea6718bb..9bfd3389 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/top_bar_theme_extension.dart @@ -17,18 +17,20 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -abstract class TopAppBarThemeExtension - extends ThemeExtension { - const TopAppBarThemeExtension({ +abstract class TopBarThemeExtension + extends ThemeExtension { + const TopBarThemeExtension({ this.iconTheme, this.backgroundColors, - this.expandedDividerStyle, + this.secondaryColor, this.titleStyle, + this.subTitleStyle, }); final MultiColor? backgroundColors; final IconThemeData? iconTheme; - final Color? expandedDividerStyle; + final Color? secondaryColor; final TextStyle? titleStyle; + final TextStyle? subTitleStyle; } -- 2.47.2 From 2dfbd5977306447651214e6ab50570eb36dd19b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 19:28:09 +0100 Subject: [PATCH 181/320] feat(ui_kit): allow to cascade styles in ThemeHelper --- .../wyatt_ui_kit/example/lib/bars/bars.dart | 2 +- .../example/lib/theme/top_bar_theme.dart | 2 ++ .../lib/src/components/bars/top_app_bar.dart | 12 +++---- .../components/bars/top_navigation_bar.dart | 5 ++- .../bars/widgets/navigation_item.dart | 11 ++++--- .../cards/widgets/card_wrapper.dart | 8 ++--- .../lib/src/core/helpers/theme_helper.dart | 32 ++++++++++++------- 7 files changed, 39 insertions(+), 33 deletions(-) diff --git a/packages/wyatt_ui_kit/example/lib/bars/bars.dart b/packages/wyatt_ui_kit/example/lib/bars/bars.dart index c2254916..4d58790c 100644 --- a/packages/wyatt_ui_kit/example/lib/bars/bars.dart +++ b/packages/wyatt_ui_kit/example/lib/bars/bars.dart @@ -77,7 +77,7 @@ class Bars extends DemoPage { ), ], navigationItems: [ - 'ACCEUIL'.wrap(), + 'ACCEUIL'.wrap(style: const TextStyle(color: Colors.red)), 'VOTRE PROGRAMME'.wrap(), 'LE STUDIO'.wrap(), 'SAVOIR FAIRE'.wrap() diff --git a/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart index 218f223e..f5291d6f 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart @@ -25,6 +25,7 @@ class TopAppBarTheme extends TopBarThemeExtension { subTitleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w400, color: const Color.fromRGBO(36, 38, 42, 1), + fontStyle: FontStyle.italic, fontSize: 18, ), iconTheme: const IconThemeData(color: Color.fromRGBO(36, 38, 42, 1)), @@ -43,6 +44,7 @@ class TopAppBarTheme extends TopBarThemeExtension { ), subTitleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w400, + fontStyle: FontStyle.italic, fontSize: 18, ), iconTheme: const IconThemeData(color: Colors.white), diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart index f915cff7..124fd3b9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart @@ -58,16 +58,15 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { valueValidator: (value) => value?.isGradient, transform: (value) => LinearGradientHelper.fromNullableColors(value?.colors), - defaultValue: null, ), color: ThemeHelper.getThemeElement( [ backgroundColor, context.themeExtension()?.backgroundColors, + MultiColor.single(Theme.of(context).appBarTheme.backgroundColor), ], valueValidator: (value) => value?.isColor, transform: (value) => value?.color, - defaultValue: Theme.of(context).appBarTheme.backgroundColor, ), ), child: Column( @@ -88,10 +87,10 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { [ iconTheme, context.themeExtension()?.iconTheme, + Theme.of(context).iconTheme, ], valueValidator: (value) => value != null, transform: (value) => value, - defaultValue: Theme.of(context).iconTheme, ), primary: primary ?? true, excludeHeaderSemantics: excludeHeaderSemantics ?? false, @@ -100,12 +99,13 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { title?.data ?? '', style: ThemeHelper.getThemeElement( [ + context.textTheme.titleLarge, + context.themeExtension()?.titleStyle, title?.style, - context.themeExtension()?.titleStyle ], valueValidator: (value) => value != null, + combine: (p0, p1) => p0?.merge(p1), transform: (value) => value, - defaultValue: context.textTheme.titleLarge, ), ).toGradient(gradientColors: title?.gradientColors), leading: leading, @@ -120,10 +120,10 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { .themeExtension() ?.secondaryColor ?.withOpacity(0.1), + Theme.of(context).dividerColor, ], valueValidator: (value) => value != null, transform: (value) => value, - defaultValue: Theme.of(context).dividerColor, ), context: context, tiles: expandedWidget!, diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart index 87d26a6d..954ff019 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart @@ -62,16 +62,15 @@ class TopNavigationBar extends TopNavigationBarComponent valueValidator: (value) => value?.isGradient, transform: (value) => LinearGradientHelper.fromNullableColors(value?.colors), - defaultValue: null, ), color: ThemeHelper.getThemeElement( [ backgroundColor, context.themeExtension()?.backgroundColors, + MultiColor.single(Theme.of(context).appBarTheme.backgroundColor), ], valueValidator: (value) => value?.isColor, transform: (value) => value?.color, - defaultValue: Theme.of(context).appBarTheme.backgroundColor, ), ), child: AppBar( @@ -90,10 +89,10 @@ class TopNavigationBar extends TopNavigationBarComponent [ iconTheme, context.themeExtension()?.iconTheme, + Theme.of(context).iconTheme, ], valueValidator: (value) => value != null, transform: (value) => value, - defaultValue: Theme.of(context).iconTheme, ), primary: primary ?? true, excludeHeaderSemantics: excludeHeaderSemantics ?? false, diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart index 8269445f..f5a4a2aa 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart @@ -41,11 +41,11 @@ class NavigationItem extends StatelessWidget { [ context .themeExtension() - ?.secondaryColor + ?.secondaryColor, + Theme.of(context).primaryColor, ], valueValidator: (value) => value != null, transform: (value) => value, - defaultValue: Theme.of(context).primaryColor, ), ), ), @@ -56,14 +56,15 @@ class NavigationItem extends StatelessWidget { item.data, style: ThemeHelper.getThemeElement( [ - item.style, + context.textTheme.titleMedium, context .themeExtension() - ?.subTitleStyle + ?.subTitleStyle, + item.style, ], + combine: (value, element) => value?.merge(element), valueValidator: (value) => value != null, transform: (value) => value, - defaultValue: context.textTheme.titleMedium, ), ), ), diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart index aed05cae..b25d26b7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/widgets/card_wrapper.dart @@ -74,7 +74,6 @@ class CardWrapper extends StatelessWidget { ], valueValidator: (shadow) => shadow != null, transform: (shadow) => shadow, - defaultValue: null, ); return (themeShadow != null) ? [themeShadow] : []; } @@ -92,11 +91,9 @@ class CardWrapper extends StatelessWidget { .extension() ?.backgroundColors, ], - valueValidator: (multiColor) => - multiColor != null && multiColor.isGradient, + valueValidator: (multiColor) => multiColor?.isGradient, transform: (multiColor) => LinearGradientHelper.fromMultiColor(multiColor!), - defaultValue: null, ), color: ThemeHelper.getThemeElement( [ @@ -104,11 +101,11 @@ class CardWrapper extends StatelessWidget { Theme.of(context) .extension() ?.backgroundColors, + MultiColor.single(Theme.of(context).cardColor), ], valueValidator: (multiColor) => multiColor != null && multiColor.isColor, transform: (multiColor) => multiColor?.color, - defaultValue: Theme.of(context).cardColor, ), border: ThemeHelper.getThemeElement( [ @@ -130,7 +127,6 @@ class CardWrapper extends StatelessWidget { color: multiColor.color, ); }, - defaultValue: null, ), boxShadow: _shadow(context), ), diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart index 79cb54c8..abefa83f 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart +++ b/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart @@ -16,26 +16,34 @@ /// A helper class for getting theme elements. abstract class ThemeHelper { - /// Gets a theme element from a list of styles. /// Styles are checked in order, and the first one that passes the /// [valueValidator] is returned. - /// If no style passes the [valueValidator], the [defaultValue] is returned. - /// If [styles] is null or empty, the [defaultValue] is returned. /// Style elements are transformed using the [transform] function. + /// + /// [styles]: A list of styles that need to be checked. + /// [transform]: A function that transforms each style element + /// to a [T] type. + /// [valueValidator]: An optional validation function that + /// determines if a style element is valid. + /// [combine]: A function that combines two [P] type objects to create + /// a new object. + static T? getThemeElement( List? styles, { required T? Function(P?)? transform, - required T? defaultValue, bool? Function(P?)? valueValidator, + P? Function(P?, P?)? combine, }) { - if (styles?.isNotEmpty ?? false) { - for (final element in styles!) { - if (valueValidator?.call(element) ?? false) { - return transform?.call(element); - } - } - } - return defaultValue; + final Iterable? validStyles = styles?.where( + (element) => valueValidator?.call(element) ?? (element != null), + ); + return (validStyles?.isNotEmpty ?? false) + ? transform?.call( + validStyles?.reduce( + (value, element) => combine?.call(value, element) ?? value, + ), + ) + : null; } } -- 2.47.2 From 3c3545abfe5f6861d7ebe0250d82f79f4dbc3014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 19:29:39 +0100 Subject: [PATCH 182/320] style(ui_kit): remove test style --- packages/wyatt_ui_kit/example/lib/bars/bars.dart | 2 +- packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/wyatt_ui_kit/example/lib/bars/bars.dart b/packages/wyatt_ui_kit/example/lib/bars/bars.dart index 4d58790c..c2254916 100644 --- a/packages/wyatt_ui_kit/example/lib/bars/bars.dart +++ b/packages/wyatt_ui_kit/example/lib/bars/bars.dart @@ -77,7 +77,7 @@ class Bars extends DemoPage { ), ], navigationItems: [ - 'ACCEUIL'.wrap(style: const TextStyle(color: Colors.red)), + 'ACCEUIL'.wrap(), 'VOTRE PROGRAMME'.wrap(), 'LE STUDIO'.wrap(), 'SAVOIR FAIRE'.wrap() diff --git a/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart index f5291d6f..218f223e 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart @@ -25,7 +25,6 @@ class TopAppBarTheme extends TopBarThemeExtension { subTitleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w400, color: const Color.fromRGBO(36, 38, 42, 1), - fontStyle: FontStyle.italic, fontSize: 18, ), iconTheme: const IconThemeData(color: Color.fromRGBO(36, 38, 42, 1)), @@ -44,7 +43,6 @@ class TopAppBarTheme extends TopBarThemeExtension { ), subTitleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.w400, - fontStyle: FontStyle.italic, fontSize: 18, ), iconTheme: const IconThemeData(color: Colors.white), -- 2.47.2 From 0337d4f97a38c11670768ea660c15c1713dc684b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 23 Feb 2023 09:29:46 +0100 Subject: [PATCH 183/320] feat(ui_components): make component theme data copyable --- .../src/features/component_theme_data.dart | 42 ++- .../src/features/component_theme_data.g.dart | 265 ++++++++++++++++++ packages/wyatt_ui_components/pubspec.yaml | 5 +- 3 files changed, 310 insertions(+), 2 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/features/component_theme_data.g.dart diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index 71f1b221..aaff531d 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -14,9 +14,49 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:wyatt_ui_components/src/domain/entities/entities.dart'; +part 'component_theme_data.g.dart'; +@CopyWith() class ComponentThemeData { + factory ComponentThemeData({ + TopAppBarComponent? appBar, + TopNavigationBarComponent? topNavigationBarComponent, + BottomNavigationBarComponent? bottomNavigationBar, + ErrorWidgetComponent? errorWidget, + LoadingWidgetComponent? loadingWidget, + LoaderComponent? loaderComponent, + RichTextBuilderComponent? richTextBuilderComponent, + TextInputComponent? textInputComponent, + FileSelectionButtonComponent? fileSelectionButtonComponent, + FlatButtonComponent? flatButtonComponent, + SimpleIconButtonComponent? simpleIconButtonComponent, + SymbolButtonComponent? symbolButtonComponent, + InformationCardComponent? informationCardComponent, + PortfolioCardComponent? portfolioCardComponent, + QuoteCardComponent? quoteCardComponent, + SkillCardComponent? skillCardComponent, + }) => + ComponentThemeData.raw( + appBar: appBar, + topNavigationBarComponent: topNavigationBarComponent, + bottomNavigationBar: bottomNavigationBar, + errorWidget: errorWidget, + loadingWidget: loadingWidget, + loaderComponent: loaderComponent, + richTextBuilderComponent: richTextBuilderComponent, + textInputComponent: textInputComponent, + fileSelectionButtonComponent: fileSelectionButtonComponent, + flatButtonComponent: flatButtonComponent, + simpleIconButtonComponent: simpleIconButtonComponent, + symbolButtonComponent: symbolButtonComponent, + informationCardComponent: informationCardComponent, + portfolioCardComponent: portfolioCardComponent, + quoteCardComponent: quoteCardComponent, + skillCardComponent: skillCardComponent, + ); + const ComponentThemeData.raw({ this.appBar, this.topNavigationBarComponent, @@ -35,11 +75,11 @@ class ComponentThemeData { this.quoteCardComponent, this.skillCardComponent, }); + final TopAppBarComponent? appBar; final TopNavigationBarComponent? topNavigationBarComponent; final BottomNavigationBarComponent? bottomNavigationBar; - final ErrorWidgetComponent? errorWidget; final LoadingWidgetComponent? loadingWidget; final LoaderComponent? loaderComponent; diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.g.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.g.dart new file mode 100644 index 00000000..b080a1dd --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.g.dart @@ -0,0 +1,265 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'component_theme_data.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$ComponentThemeDataCWProxy { + ComponentThemeData appBar(TopAppBarComponent? appBar); + + ComponentThemeData topNavigationBarComponent( + TopNavigationBarComponent? topNavigationBarComponent); + + ComponentThemeData bottomNavigationBar( + BottomNavigationBarComponent? bottomNavigationBar); + + ComponentThemeData errorWidget(ErrorWidgetComponent? errorWidget); + + ComponentThemeData loadingWidget(LoadingWidgetComponent? loadingWidget); + + ComponentThemeData loaderComponent(LoaderComponent? loaderComponent); + + ComponentThemeData richTextBuilderComponent( + RichTextBuilderComponent? richTextBuilderComponent); + + ComponentThemeData textInputComponent(TextInputComponent? textInputComponent); + + ComponentThemeData fileSelectionButtonComponent( + FileSelectionButtonComponent? fileSelectionButtonComponent); + + ComponentThemeData flatButtonComponent( + FlatButtonComponent? flatButtonComponent); + + ComponentThemeData simpleIconButtonComponent( + SimpleIconButtonComponent? simpleIconButtonComponent); + + ComponentThemeData symbolButtonComponent( + SymbolButtonComponent? symbolButtonComponent); + + ComponentThemeData informationCardComponent( + InformationCardComponent? informationCardComponent); + + ComponentThemeData portfolioCardComponent( + PortfolioCardComponent? portfolioCardComponent); + + ComponentThemeData quoteCardComponent(QuoteCardComponent? quoteCardComponent); + + ComponentThemeData skillCardComponent(SkillCardComponent? skillCardComponent); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// ComponentThemeData(...).copyWith(id: 12, name: "My name") + /// ```` + ComponentThemeData call({ + TopAppBarComponent? appBar, + TopNavigationBarComponent? topNavigationBarComponent, + BottomNavigationBarComponent? bottomNavigationBar, + ErrorWidgetComponent? errorWidget, + LoadingWidgetComponent? loadingWidget, + LoaderComponent? loaderComponent, + RichTextBuilderComponent? richTextBuilderComponent, + TextInputComponent? textInputComponent, + FileSelectionButtonComponent? fileSelectionButtonComponent, + FlatButtonComponent? flatButtonComponent, + SimpleIconButtonComponent? simpleIconButtonComponent, + SymbolButtonComponent? symbolButtonComponent, + InformationCardComponent? informationCardComponent, + PortfolioCardComponent? portfolioCardComponent, + QuoteCardComponent? quoteCardComponent, + SkillCardComponent? skillCardComponent, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfComponentThemeData.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfComponentThemeData.copyWith.fieldName(...)` +class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy { + const _$ComponentThemeDataCWProxyImpl(this._value); + + final ComponentThemeData _value; + + @override + ComponentThemeData appBar(TopAppBarComponent? appBar) => this(appBar: appBar); + + @override + ComponentThemeData topNavigationBarComponent( + TopNavigationBarComponent? topNavigationBarComponent) => + this(topNavigationBarComponent: topNavigationBarComponent); + + @override + ComponentThemeData bottomNavigationBar( + BottomNavigationBarComponent? bottomNavigationBar) => + this(bottomNavigationBar: bottomNavigationBar); + + @override + ComponentThemeData errorWidget(ErrorWidgetComponent? errorWidget) => + this(errorWidget: errorWidget); + + @override + ComponentThemeData loadingWidget(LoadingWidgetComponent? loadingWidget) => + this(loadingWidget: loadingWidget); + + @override + ComponentThemeData loaderComponent(LoaderComponent? loaderComponent) => + this(loaderComponent: loaderComponent); + + @override + ComponentThemeData richTextBuilderComponent( + RichTextBuilderComponent? richTextBuilderComponent) => + this(richTextBuilderComponent: richTextBuilderComponent); + + @override + ComponentThemeData textInputComponent( + TextInputComponent? textInputComponent) => + this(textInputComponent: textInputComponent); + + @override + ComponentThemeData fileSelectionButtonComponent( + FileSelectionButtonComponent? fileSelectionButtonComponent) => + this(fileSelectionButtonComponent: fileSelectionButtonComponent); + + @override + ComponentThemeData flatButtonComponent( + FlatButtonComponent? flatButtonComponent) => + this(flatButtonComponent: flatButtonComponent); + + @override + ComponentThemeData simpleIconButtonComponent( + SimpleIconButtonComponent? simpleIconButtonComponent) => + this(simpleIconButtonComponent: simpleIconButtonComponent); + + @override + ComponentThemeData symbolButtonComponent( + SymbolButtonComponent? symbolButtonComponent) => + this(symbolButtonComponent: symbolButtonComponent); + + @override + ComponentThemeData informationCardComponent( + InformationCardComponent? informationCardComponent) => + this(informationCardComponent: informationCardComponent); + + @override + ComponentThemeData portfolioCardComponent( + PortfolioCardComponent? portfolioCardComponent) => + this(portfolioCardComponent: portfolioCardComponent); + + @override + ComponentThemeData quoteCardComponent( + QuoteCardComponent? quoteCardComponent) => + this(quoteCardComponent: quoteCardComponent); + + @override + ComponentThemeData skillCardComponent( + SkillCardComponent? skillCardComponent) => + this(skillCardComponent: skillCardComponent); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// ComponentThemeData(...).copyWith(id: 12, name: "My name") + /// ```` + ComponentThemeData call({ + Object? appBar = const $CopyWithPlaceholder(), + Object? topNavigationBarComponent = const $CopyWithPlaceholder(), + Object? bottomNavigationBar = const $CopyWithPlaceholder(), + Object? errorWidget = const $CopyWithPlaceholder(), + Object? loadingWidget = const $CopyWithPlaceholder(), + Object? loaderComponent = const $CopyWithPlaceholder(), + Object? richTextBuilderComponent = const $CopyWithPlaceholder(), + Object? textInputComponent = const $CopyWithPlaceholder(), + Object? fileSelectionButtonComponent = const $CopyWithPlaceholder(), + Object? flatButtonComponent = const $CopyWithPlaceholder(), + Object? simpleIconButtonComponent = const $CopyWithPlaceholder(), + Object? symbolButtonComponent = const $CopyWithPlaceholder(), + Object? informationCardComponent = const $CopyWithPlaceholder(), + Object? portfolioCardComponent = const $CopyWithPlaceholder(), + Object? quoteCardComponent = const $CopyWithPlaceholder(), + Object? skillCardComponent = const $CopyWithPlaceholder(), + }) { + return ComponentThemeData( + appBar: appBar == const $CopyWithPlaceholder() + ? _value.appBar + // ignore: cast_nullable_to_non_nullable + : appBar as TopAppBarComponent?, + topNavigationBarComponent: + topNavigationBarComponent == const $CopyWithPlaceholder() + ? _value.topNavigationBarComponent + // ignore: cast_nullable_to_non_nullable + : topNavigationBarComponent as TopNavigationBarComponent?, + bottomNavigationBar: bottomNavigationBar == const $CopyWithPlaceholder() + ? _value.bottomNavigationBar + // ignore: cast_nullable_to_non_nullable + : bottomNavigationBar as BottomNavigationBarComponent?, + errorWidget: errorWidget == const $CopyWithPlaceholder() + ? _value.errorWidget + // ignore: cast_nullable_to_non_nullable + : errorWidget as ErrorWidgetComponent?, + loadingWidget: loadingWidget == const $CopyWithPlaceholder() + ? _value.loadingWidget + // ignore: cast_nullable_to_non_nullable + : loadingWidget as LoadingWidgetComponent?, + loaderComponent: loaderComponent == const $CopyWithPlaceholder() + ? _value.loaderComponent + // ignore: cast_nullable_to_non_nullable + : loaderComponent as LoaderComponent?, + richTextBuilderComponent: + richTextBuilderComponent == const $CopyWithPlaceholder() + ? _value.richTextBuilderComponent + // ignore: cast_nullable_to_non_nullable + : richTextBuilderComponent as RichTextBuilderComponent?, + textInputComponent: textInputComponent == const $CopyWithPlaceholder() + ? _value.textInputComponent + // ignore: cast_nullable_to_non_nullable + : textInputComponent as TextInputComponent?, + fileSelectionButtonComponent: + fileSelectionButtonComponent == const $CopyWithPlaceholder() + ? _value.fileSelectionButtonComponent + // ignore: cast_nullable_to_non_nullable + : fileSelectionButtonComponent as FileSelectionButtonComponent?, + flatButtonComponent: flatButtonComponent == const $CopyWithPlaceholder() + ? _value.flatButtonComponent + // ignore: cast_nullable_to_non_nullable + : flatButtonComponent as FlatButtonComponent?, + simpleIconButtonComponent: + simpleIconButtonComponent == const $CopyWithPlaceholder() + ? _value.simpleIconButtonComponent + // ignore: cast_nullable_to_non_nullable + : simpleIconButtonComponent as SimpleIconButtonComponent?, + symbolButtonComponent: + symbolButtonComponent == const $CopyWithPlaceholder() + ? _value.symbolButtonComponent + // ignore: cast_nullable_to_non_nullable + : symbolButtonComponent as SymbolButtonComponent?, + informationCardComponent: + informationCardComponent == const $CopyWithPlaceholder() + ? _value.informationCardComponent + // ignore: cast_nullable_to_non_nullable + : informationCardComponent as InformationCardComponent?, + portfolioCardComponent: + portfolioCardComponent == const $CopyWithPlaceholder() + ? _value.portfolioCardComponent + // ignore: cast_nullable_to_non_nullable + : portfolioCardComponent as PortfolioCardComponent?, + quoteCardComponent: quoteCardComponent == const $CopyWithPlaceholder() + ? _value.quoteCardComponent + // ignore: cast_nullable_to_non_nullable + : quoteCardComponent as QuoteCardComponent?, + skillCardComponent: skillCardComponent == const $CopyWithPlaceholder() + ? _value.skillCardComponent + // ignore: cast_nullable_to_non_nullable + : skillCardComponent as SkillCardComponent?, + ); + } +} + +extension $ComponentThemeDataCopyWith on ComponentThemeData { + /// Returns a callable class that can be used as follows: `instanceOfComponentThemeData.copyWith(...)` or like so:`instanceOfComponentThemeData.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$ComponentThemeDataCWProxy get copyWith => + _$ComponentThemeDataCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 80e5e707..6b8848b6 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -10,17 +10,20 @@ environment: dependencies: flutter: { sdk: flutter } + copy_with_extension: ^5.0.0 wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git path: packages/wyatt_component_copy_with_extension dev_dependencies: - build_runner: ^2.3.3 flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.0 + + build_runner: ^2.3.3 + copy_with_extension_gen: ^5.0.0 wyatt_component_copy_with_gen: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git -- 2.47.2 From 2e187b26eb910f64ac14e6fb8ceeeace57f89b83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 23 Feb 2023 09:30:11 +0100 Subject: [PATCH 184/320] feat(ui_kit): export ui kit as component theme data --- .../bars/widgets/navigation_item.dart | 2 +- .../components/text_inputs/text_input.dart | 2 +- .../features/wyatt_component_theme_data.dart | 37 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart index f5a4a2aa..9e1578e9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart @@ -42,7 +42,7 @@ class NavigationItem extends StatelessWidget { context .themeExtension() ?.secondaryColor, - Theme.of(context).primaryColor, + context.colorScheme.primary ], valueValidator: (value) => value != null, transform: (value) => value, diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart index 8e5139c7..e64b1b41 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart @@ -25,7 +25,7 @@ part 'text_input.g.dart'; @ComponentCopyWithExtension() class TextInput extends TextInputComponent with $TextInputCWMixin { - TextInput({ + const TextInput({ super.expand, super.validator, super.key, diff --git a/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart new file mode 100644 index 00000000..d6e44fe2 --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart @@ -0,0 +1,37 @@ +// 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 . + +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class WyattComponentThemeData { + static ComponentThemeData get wyattComponentThemeData => + ComponentThemeData.raw( + appBar: const TopAppBar(), + topNavigationBarComponent: const TopNavigationBar(), + loaderComponent: const Loader(), + richTextBuilderComponent: const RichTextBuilder(), + textInputComponent: const TextInput(), + fileSelectionButtonComponent: FileSelectionButton(), + flatButtonComponent: FlatButton(), + simpleIconButtonComponent: SimpleIconButton(), + symbolButtonComponent: SymbolButton(), + informationCardComponent: const InformationCard(), + portfolioCardComponent: const PortfolioCard(), + quoteCardComponent: const QuoteCard(), + skillCardComponent: const SkillCard(), + ); +} -- 2.47.2 From 970dde2ef161820562cba6a54128897800f46c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 23 Feb 2023 09:33:05 +0100 Subject: [PATCH 185/320] feat(ui_kit): remove .raw call --- .../lib/src/features/wyatt_component_theme_data.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart index d6e44fe2..a8f83f3a 100644 --- a/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart +++ b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart @@ -18,8 +18,7 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class WyattComponentThemeData { - static ComponentThemeData get wyattComponentThemeData => - ComponentThemeData.raw( + static ComponentThemeData get wyattComponentThemeData => ComponentThemeData( appBar: const TopAppBar(), topNavigationBarComponent: const TopNavigationBar(), loaderComponent: const Loader(), -- 2.47.2 From 0c176ba0faad9eca40f7d846d919ed659987242b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 23 Feb 2023 10:24:54 +0100 Subject: [PATCH 186/320] feat(ui_kit-ui_components): Modify the theme resolver to utilize the theme helper and streamline the logic --- .../lib/src/core/utils}/theme_helper.dart | 0 .../lib/src/core/utils/theme_resolver.dart | 64 +++++++------------ .../lib/src/core/utils/utils.dart | 1 + .../file_selection_button_theme_resolver.dart | 16 ++--- .../flat_button_theme_resolver.dart | 12 ++-- .../simple_icon_button_theme_resolver.dart | 12 ++-- .../symbol_button_theme_resolver.dart | 14 ++-- .../loader/loader_theme_resolver.dart | 6 +- .../rich_text_builder_theme_resolver.dart | 6 +- .../text_input_theme_resolver.dart | 10 +-- .../lib/src/core/helpers/helpers.dart | 1 - 11 files changed, 63 insertions(+), 79 deletions(-) rename packages/{wyatt_ui_kit/lib/src/core/helpers => wyatt_ui_components/lib/src/core/utils}/theme_helper.dart (100%) diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart similarity index 100% rename from packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart rename to packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index 4626fb50..0995251d 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/src/core/utils/theme_helper.dart'; import 'package:wyatt_ui_components/src/domain/entities/theme_style.dart'; /// {@template theme_resolver} @@ -38,52 +39,35 @@ abstract class ThemeResolver, T, E> { S? Function(BuildContext context, {E? extra}) get customStyleFn; /// Compute default value from Flutter Theme or with hardcoded values. - S computeDefaultValue(BuildContext context, {E? extra}); - - S? computeExtensionValueFn( - BuildContext context, - T themeExtension, { + S computeDefaultValue( + BuildContext context, { E? extra, }); - /// Compute values from the extension if found - S? _computeExtensionValue( - BuildContext context, { + /// Compute extension value from custom component extension. + S? computeExtensionValueFn( + BuildContext context, + T? themeExtension, { E? extra, - }) { - final themeExtension = Theme.of(context).extension(); - if (themeExtension != null) { - return computeExtensionValueFn( - context, - themeExtension, - extra: extra, - ); - } - return null; - } - - /// Compute custom value - S? _computeCustomValue( - BuildContext context, { - E? extra, - }) { - final customStyle = customStyleFn( - context, - extra: extra, - ); - if (customStyle != null) { - return customStyle; - } - return null; - } + }); /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { - S style = computeDefaultValue(context, extra: extra); - style = - style.mergeWith(_computeExtensionValue(context, extra: extra)) ?? style; - style = - style.mergeWith(_computeCustomValue(context, extra: extra)) ?? style; - return style; + final style = computeDefaultValue(context, extra: extra); + return ThemeHelper.getThemeElement( + [ + style, + computeExtensionValueFn( + context, + Theme.of(context).extension(), + extra: extra, + ), + // _computeExtensionValue(context, extra: extra), + customStyleFn(context, extra: extra) + ], + transform: (value) => value, + combine: (value, element) => value?.mergeWith(element), + ) ?? + style; } } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart index 17821996..ec38db81 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart @@ -16,4 +16,5 @@ export 'multi_color.dart'; export 'text_wrapper.dart'; +export 'theme_helper.dart'; export 'theme_resolver.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index 505e9e37..feb496b7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -80,33 +80,33 @@ class FileSelectionButtonThemeResolver extends ThemeResolver< @override FileSelectionButtonStyle? computeExtensionValueFn( BuildContext context, - FileSelectionButtonThemeExtension themeExtension, { + FileSelectionButtonThemeExtension? themeExtension, { ButtonState? extra, }) { FileSelectionButtonStyle? style; switch (extra?.state) { case ControlState.disabled: - style = themeExtension.disabledStyle; + style = themeExtension?.disabledStyle; break; case ControlState.focused: - style = themeExtension.focusedStyle; + style = themeExtension?.focusedStyle; break; case ControlState.hovered: - style = themeExtension.hoveredStyle; + style = themeExtension?.hoveredStyle; break; case ControlState.tapped: - style = themeExtension.tappedStyle; + style = themeExtension?.tappedStyle; break; case ControlState.normal: case null: - style = themeExtension.normalStyle; + style = themeExtension?.normalStyle; break; } if (extra?.isSelected ?? false) { - style = themeExtension.selectedStyle; + style = themeExtension?.selectedStyle; } if (extra?.isInvalid ?? false) { - style = themeExtension.invalidStyle; + style = themeExtension?.invalidStyle; } return style; } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart index dfbe1349..abb6b8c3 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart @@ -76,21 +76,21 @@ class FlatButtonThemeResolver extends ThemeResolver LoaderStyle( - colors: themeExtension.colors, - stroke: themeExtension.stroke, + colors: themeExtension?.colors, + stroke: themeExtension?.stroke, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart index 4661a264..74202562 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart @@ -43,11 +43,11 @@ class RichTextBuilderThemeResolver extends ThemeResolver RichTextBuilderStyle( - defaultStyle: themeExtension.defaultStyle, - styles: themeExtension.styles, + defaultStyle: themeExtension?.defaultStyle, + styles: themeExtension?.styles, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart index 5a3fbd0c..0791ac25 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart @@ -118,19 +118,19 @@ class TextInputThemeResolver extends ThemeResolver. export './linear_gradient_helper.dart'; -export './theme_helper.dart'; -- 2.47.2 From 81c8851ac8170a31e47b2d1fb0b4caedc730bb10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Thu, 23 Feb 2023 10:40:05 +0100 Subject: [PATCH 187/320] style(ui_components): remove useless comment --- .../wyatt_ui_components/lib/src/core/utils/theme_resolver.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index 0995251d..a8cb2d1e 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -62,7 +62,6 @@ abstract class ThemeResolver, T, E> { Theme.of(context).extension(), extra: extra, ), - // _computeExtensionValue(context, extra: extra), customStyleFn(context, extra: extra) ], transform: (value) => value, -- 2.47.2 From 881cbc5befcab26bd6e248896182fcdf54004860 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 11:50:13 +0100 Subject: [PATCH 188/320] fix(ui): change example to be compatible with new AppTopBar and TextWrapper --- .../lib/components/custom_app_bar.dart | 5 +- .../lib/components/custom_app_bar.g.dart | 67 ++++++++++- .../lib/components/custom_error_widget.dart | 2 +- .../example/lib/custom_app_bar_example.g.dart | 36 ------ ...ample.dart => custom_top_bar_example.dart} | 11 +- .../example/lib/custom_top_bar_example.g.dart | 106 ++++++++++++++++++ .../lib/components/custom_app_bar.dart | 4 +- .../lib/components/custom_app_bar.g.dart | 71 +++++++++++- 8 files changed, 250 insertions(+), 52 deletions(-) delete mode 100644 packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart rename packages/wyatt_component_copy_with_gen/example/lib/{custom_app_bar_example.dart => custom_top_bar_example.dart} (78%) create mode 100644 packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.g.dart diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart index 0cb81c93..8d57fb2b 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart @@ -1,14 +1,15 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; part 'custom_app_bar.g.dart'; @ComponentCopyWithExtension() -class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { +class CustomAppBar extends TopAppBarComponent with $CustomAppBarCWMixin { const CustomAppBar({super.title}); @override Widget build(BuildContext context) => AppBar( - title: Text(title?.text ?? 'Title'), + title: Text(title?.data ?? 'Title'), ); } diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart index f64c8fee..ca934616 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart @@ -6,22 +6,85 @@ part of 'custom_app_bar.dart'; // ComponentCopyWithGenerator // ************************************************************************** -class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { +class $CustomAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { const $CustomAppBarCWProxyImpl(this._value); final CustomAppBar _value; @override CustomAppBar title(TextWrapper? title) => this(title: title); @override + CustomAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); + @override + CustomAppBar shape(ShapeBorder? shape) => this(shape: shape); + @override + CustomAppBar systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle) => + this(systemOverlayStyle: systemOverlayStyle); + @override + CustomAppBar automaticallyImplyLeading(bool? automaticallyImplyLeading) => + this(automaticallyImplyLeading: automaticallyImplyLeading); + @override + CustomAppBar flexibleSpace(Widget? flexibleSpace) => + this(flexibleSpace: flexibleSpace); + @override + CustomAppBar bottom(PreferredSizeWidget? bottom) => this(bottom: bottom); + @override + CustomAppBar elevation(double? elevation) => this(elevation: elevation); + @override + CustomAppBar scrolledUnderElevation(double? scrolledUnderElevation) => + this(scrolledUnderElevation: scrolledUnderElevation); + @override + CustomAppBar shadowColor(Color? shadowColor) => + this(shadowColor: shadowColor); + @override + CustomAppBar surfaceTintColor(Color? surfaceTintColor) => + this(surfaceTintColor: surfaceTintColor); + @override + CustomAppBar backgroundColor(MultiColor? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + CustomAppBar iconTheme(IconThemeData? iconTheme) => + this(iconTheme: iconTheme); + @override + CustomAppBar primary(bool? primary) => this(primary: primary); + @override + CustomAppBar excludeHeaderSemantics(bool? excludeHeaderSemantics) => + this(excludeHeaderSemantics: excludeHeaderSemantics); + @override + CustomAppBar toolbarHeight(double? toolbarHeight) => + this(toolbarHeight: toolbarHeight); + @override + CustomAppBar leadingWidth(double? leadingWidth) => + this(leadingWidth: leadingWidth); + @override CustomAppBar leading(Widget? leading) => this(leading: leading); @override CustomAppBar actions(List? actions) => this(actions: actions); @override + CustomAppBar expandedWidget(List? expandedWidget) => + this(expandedWidget: expandedWidget); + @override CustomAppBar key(Key? key) => this(key: key); @override CustomAppBar call({ TextWrapper? title, + bool? centerTitle, + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, Widget? leading, List? actions, + List? expandedWidget, Key? key, }) => CustomAppBar( @@ -30,6 +93,6 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { } mixin $CustomAppBarCWMixin on Component { - $AppBarComponentCWProxy get copyWith => + $TopAppBarComponentCWProxy get copyWith => $CustomAppBarCWProxyImpl(this as CustomAppBar); } diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart index 8890f785..57447de2 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart @@ -12,6 +12,6 @@ class CustomErrorWidget extends ErrorWidgetComponent @override Widget build(BuildContext context) => ColoredBox( color: Colors.red, - child: Center(child: Text(error?.text ?? 'Error')), + child: Center(child: Text(error?.data ?? 'Error')), ); } diff --git a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart b/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart deleted file mode 100644 index 95d56868..00000000 --- a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.g.dart +++ /dev/null @@ -1,36 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'custom_app_bar_example.dart'; - -// ************************************************************************** -// ComponentCopyWithGenerator -// ************************************************************************** - -class $CustomAppBarExampleCWProxyImpl implements $AppBarComponentCWProxy { - const $CustomAppBarExampleCWProxyImpl(this._value); - final CustomAppBarExample _value; - @override - CustomAppBarExample title(String? title) => this(title: title); - @override - CustomAppBarExample leading(Widget? leading) => this(leading: leading); - @override - CustomAppBarExample actions(List? actions) => this(actions: actions); - @override - CustomAppBarExample key(Key? key) => this(key: key); - @override - CustomAppBarExample call({ - String? title, - Widget? leading, - List? actions, - Key? key, - }) => - CustomAppBarExample( - title: title ?? _value.title, - key: key ?? _value.key, - ); -} - -mixin $CustomAppBarExampleCWMixin on Component { - $AppBarComponentCWProxy get copyWith => - $CustomAppBarExampleCWProxyImpl(this as CustomAppBarExample); -} diff --git a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart b/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.dart similarity index 78% rename from packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart rename to packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.dart index 870222a6..6ac4ade7 100644 --- a/packages/wyatt_component_copy_with_gen/example/lib/custom_app_bar_example.dart +++ b/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.dart @@ -15,18 +15,19 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -part 'custom_app_bar_example.g.dart'; +part 'custom_top_bar_example.g.dart'; @ComponentCopyWithExtension() -class CustomAppBarExample extends AppBarComponent - with $CustomAppBarExampleCWMixin { - const CustomAppBarExample({super.title, super.key}); +class CustomTopAppBarExample extends TopAppBarComponent + with $CustomTopAppBarExampleCWMixin { + const CustomTopAppBarExample({super.title, super.key}); @override Widget build(BuildContext context) => AppBar( - title: Text(super.title?.text ?? ''), + title: Text(super.title?.data ?? ''), ); } diff --git a/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.g.dart b/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.g.dart new file mode 100644 index 00000000..ac4e015b --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.g.dart @@ -0,0 +1,106 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'custom_top_bar_example.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $CustomTopAppBarExampleCWProxyImpl implements $TopAppBarComponentCWProxy { + const $CustomTopAppBarExampleCWProxyImpl(this._value); + final CustomTopAppBarExample _value; + @override + CustomTopAppBarExample title(TextWrapper? title) => this(title: title); + @override + CustomTopAppBarExample centerTitle(bool? centerTitle) => + this(centerTitle: centerTitle); + @override + CustomTopAppBarExample shape(ShapeBorder? shape) => this(shape: shape); + @override + CustomTopAppBarExample systemOverlayStyle( + SystemUiOverlayStyle? systemOverlayStyle) => + this(systemOverlayStyle: systemOverlayStyle); + @override + CustomTopAppBarExample automaticallyImplyLeading( + bool? automaticallyImplyLeading) => + this(automaticallyImplyLeading: automaticallyImplyLeading); + @override + CustomTopAppBarExample flexibleSpace(Widget? flexibleSpace) => + this(flexibleSpace: flexibleSpace); + @override + CustomTopAppBarExample bottom(PreferredSizeWidget? bottom) => + this(bottom: bottom); + @override + CustomTopAppBarExample elevation(double? elevation) => + this(elevation: elevation); + @override + CustomTopAppBarExample scrolledUnderElevation( + double? scrolledUnderElevation) => + this(scrolledUnderElevation: scrolledUnderElevation); + @override + CustomTopAppBarExample shadowColor(Color? shadowColor) => + this(shadowColor: shadowColor); + @override + CustomTopAppBarExample surfaceTintColor(Color? surfaceTintColor) => + this(surfaceTintColor: surfaceTintColor); + @override + CustomTopAppBarExample backgroundColor(MultiColor? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + CustomTopAppBarExample iconTheme(IconThemeData? iconTheme) => + this(iconTheme: iconTheme); + @override + CustomTopAppBarExample primary(bool? primary) => this(primary: primary); + @override + CustomTopAppBarExample excludeHeaderSemantics(bool? excludeHeaderSemantics) => + this(excludeHeaderSemantics: excludeHeaderSemantics); + @override + CustomTopAppBarExample toolbarHeight(double? toolbarHeight) => + this(toolbarHeight: toolbarHeight); + @override + CustomTopAppBarExample leadingWidth(double? leadingWidth) => + this(leadingWidth: leadingWidth); + @override + CustomTopAppBarExample leading(Widget? leading) => this(leading: leading); + @override + CustomTopAppBarExample actions(List? actions) => + this(actions: actions); + @override + CustomTopAppBarExample expandedWidget(List? expandedWidget) => + this(expandedWidget: expandedWidget); + @override + CustomTopAppBarExample key(Key? key) => this(key: key); + @override + CustomTopAppBarExample call({ + TextWrapper? title, + bool? centerTitle, + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, + Widget? leading, + List? actions, + List? expandedWidget, + Key? key, + }) => + CustomTopAppBarExample( + title: title ?? _value.title, + key: key ?? _value.key, + ); +} + +mixin $CustomTopAppBarExampleCWMixin on Component { + $TopAppBarComponentCWProxy get copyWith => + $CustomTopAppBarExampleCWProxyImpl(this as CustomTopAppBarExample); +} diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart index 5943737e..94bafe9d 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart @@ -5,7 +5,7 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'custom_app_bar.g.dart'; @ComponentCopyWithExtension() -class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { +class CustomAppBar extends TopAppBarComponent with $CustomAppBarCWMixin { const CustomAppBar({ super.title, super.key, @@ -13,6 +13,6 @@ class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { @override Widget build(BuildContext context) => AppBar( - title: Text(title?.text ?? ''), + title: Text(title?.data ?? ''), ); } diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.g.dart index 89c78122..125680d9 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.g.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.g.dart @@ -6,22 +6,85 @@ part of 'custom_app_bar.dart'; // ComponentCopyWithGenerator // ************************************************************************** -class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { +class $CustomAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { const $CustomAppBarCWProxyImpl(this._value); final CustomAppBar _value; @override - CustomAppBar title(String? title) => this(title: title); + CustomAppBar title(TextWrapper? title) => this(title: title); + @override + CustomAppBar centerTitle(bool? centerTitle) => this(centerTitle: centerTitle); + @override + CustomAppBar shape(ShapeBorder? shape) => this(shape: shape); + @override + CustomAppBar systemOverlayStyle(SystemUiOverlayStyle? systemOverlayStyle) => + this(systemOverlayStyle: systemOverlayStyle); + @override + CustomAppBar automaticallyImplyLeading(bool? automaticallyImplyLeading) => + this(automaticallyImplyLeading: automaticallyImplyLeading); + @override + CustomAppBar flexibleSpace(Widget? flexibleSpace) => + this(flexibleSpace: flexibleSpace); + @override + CustomAppBar bottom(PreferredSizeWidget? bottom) => this(bottom: bottom); + @override + CustomAppBar elevation(double? elevation) => this(elevation: elevation); + @override + CustomAppBar scrolledUnderElevation(double? scrolledUnderElevation) => + this(scrolledUnderElevation: scrolledUnderElevation); + @override + CustomAppBar shadowColor(Color? shadowColor) => + this(shadowColor: shadowColor); + @override + CustomAppBar surfaceTintColor(Color? surfaceTintColor) => + this(surfaceTintColor: surfaceTintColor); + @override + CustomAppBar backgroundColor(MultiColor? backgroundColor) => + this(backgroundColor: backgroundColor); + @override + CustomAppBar iconTheme(IconThemeData? iconTheme) => + this(iconTheme: iconTheme); + @override + CustomAppBar primary(bool? primary) => this(primary: primary); + @override + CustomAppBar excludeHeaderSemantics(bool? excludeHeaderSemantics) => + this(excludeHeaderSemantics: excludeHeaderSemantics); + @override + CustomAppBar toolbarHeight(double? toolbarHeight) => + this(toolbarHeight: toolbarHeight); + @override + CustomAppBar leadingWidth(double? leadingWidth) => + this(leadingWidth: leadingWidth); @override CustomAppBar leading(Widget? leading) => this(leading: leading); @override CustomAppBar actions(List? actions) => this(actions: actions); @override + CustomAppBar expandedWidget(List? expandedWidget) => + this(expandedWidget: expandedWidget); + @override CustomAppBar key(Key? key) => this(key: key); @override CustomAppBar call({ - String? title, + TextWrapper? title, + bool? centerTitle, + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, Widget? leading, List? actions, + List? expandedWidget, Key? key, }) => CustomAppBar( @@ -31,6 +94,6 @@ class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { } mixin $CustomAppBarCWMixin on Component { - $AppBarComponentCWProxy get copyWith => + $TopAppBarComponentCWProxy get copyWith => $CustomAppBarCWProxyImpl(this as CustomAppBar); } -- 2.47.2 From d6c9dfd8a71b7ac25a448bdd2b365ae1c566cb56 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 16:57:18 +0100 Subject: [PATCH 189/320] feat(ui_components): add extra state --- .../lib/src/core/enums/control_state.dart | 1 + .../lib/src/core/enums/enums.dart | 1 + .../lib/src/core/enums/extra_state.dart | 35 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 packages/wyatt_ui_components/lib/src/core/enums/extra_state.dart diff --git a/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart index e4629e75..c2e83c43 100644 --- a/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart +++ b/packages/wyatt_ui_components/lib/src/core/enums/control_state.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines standard UI control states enum ControlState { /// When the control is disabled and un-clickable disabled, diff --git a/packages/wyatt_ui_components/lib/src/core/enums/enums.dart b/packages/wyatt_ui_components/lib/src/core/enums/enums.dart index 9b4b1438..75260d47 100644 --- a/packages/wyatt_ui_components/lib/src/core/enums/enums.dart +++ b/packages/wyatt_ui_components/lib/src/core/enums/enums.dart @@ -15,4 +15,5 @@ // along with this program. If not, see . export './control_state.dart'; +export './extra_state.dart'; export './status_state.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/enums/extra_state.dart b/packages/wyatt_ui_components/lib/src/core/enums/extra_state.dart new file mode 100644 index 00000000..6cf782bb --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/enums/extra_state.dart @@ -0,0 +1,35 @@ +// 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 . + +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; + +/// Defines extra UI control states that can +/// be combined with [ControlState] +enum ExtraState { + /// When the control is selected + selected, + + /// When the control is invalid + invalid, + + /// When the control is freezed + /// Useful to prevent user from changing the control state + freezed; + + bool isSelected() => this == ExtraState.selected; + bool isInvalid() => this == ExtraState.invalid; + bool isFreezed() => this == ExtraState.freezed; +} -- 2.47.2 From 6c5468939357139bf1806d2d3636e28afc5444dc Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 16:59:56 +0100 Subject: [PATCH 190/320] refactor(ui)!: remove bloc export in buttons to be state management solution agnostic (closes #147) --- .../entities/buttons/button_component.dart | 10 +- .../file_selection_button_component.dart | 1 + .../file_selection_button_component.g.dart | 2 + .../buttons/flat_button_component.dart | 1 + .../buttons/flat_button_component.g.dart | 2 + .../buttons/simple_icon_button_component.dart | 1 + .../simple_icon_button_component.g.dart | 2 + .../buttons/symbol_button_component.dart | 1 + .../buttons/symbol_button_component.g.dart | 2 + .../file_selection_buttons.dart | 132 +++++++++++------ .../lib/buttons/flat_button/flat_buttons.dart | 85 +++++++---- .../simple_icon_buttons.dart | 108 +++++++++----- .../buttons/symbol_button/symbol_buttons.dart | 100 ++++++++----- packages/wyatt_ui_kit/example/pubspec.yaml | 1 + .../lib/src/components/buttons/buttons.dart | 3 + .../buttons/cubit/button_cubit.dart | 137 ++++++++++++++++-- .../buttons/cubit/button_state.dart | 43 ++---- .../buttons/cubit/invalid_button_cubit.dart | 58 +++----- .../cubit/selectable_button_cubit.dart | 51 +++++-- .../state_listener.dart} | 35 +++-- .../file_selection_button.dart | 43 +++--- .../file_selection_button.g.dart | 5 + .../file_selection_button_screen.dart | 17 +++ .../buttons/flat_button/flat_button.dart | 39 ++--- .../buttons/flat_button/flat_button.g.dart | 5 + .../flat_button/flat_button_screen.dart | 14 ++ .../simple_icon_button.dart | 33 ++--- .../simple_icon_button.g.dart | 5 + .../simple_icon_screen.dart | 15 ++ .../buttons/symbol_button/symbol_button.dart | 42 +++--- .../symbol_button/symbol_button.g.dart | 5 + .../symbol_button/symbol_button_screen.dart | 17 +++ 32 files changed, 673 insertions(+), 342 deletions(-) rename packages/wyatt_ui_kit/lib/src/components/buttons/{exportable_bloc.dart => cubit/state_listener.dart} (55%) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index 57b543c2..b412b05f 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/foundation.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; abstract class ButtonComponent extends Component { @@ -26,6 +27,7 @@ abstract class ButtonComponent extends Component { this.selectedStyle, this.invalidStyle, this.onPressed, + this.disabled, super.themeResolver, super.key, }); @@ -51,6 +53,12 @@ abstract class ButtonComponent extends Component { /// Style of this button in invalid state final ButtonStyle? invalidStyle; - /// Callback on button press + /// Callback on button press, + /// + /// [ControlState] is passed as argument and can be used to determine if the + /// button was pressed in disabled state or not. final void Function(ControlState state)? onPressed; + + /// Current state of this button + final ValueNotifier? disabled; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart index b0e5866b..32639be6 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart @@ -36,6 +36,7 @@ abstract class FileSelectionButtonComponent extends ButtonComponent super.selectedStyle, super.invalidStyle, super.onPressed, + super.disabled, super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart index aa5816fe..a22edea2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart @@ -22,6 +22,7 @@ abstract class $FileSelectionButtonComponentCWProxy { FileSelectionButtonComponent invalidStyle(ButtonStyle? invalidStyle); FileSelectionButtonComponent onPressed( void Function(ControlState)? onPressed); + FileSelectionButtonComponent disabled(ValueNotifier? disabled); FileSelectionButtonComponent themeResolver( ThemeResolver? themeResolver); FileSelectionButtonComponent key(Key? key); @@ -38,6 +39,7 @@ abstract class $FileSelectionButtonComponentCWProxy { ButtonStyle? selectedStyle, ButtonStyle? invalidStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index 83420a59..e10d134c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -34,6 +34,7 @@ abstract class FlatButtonComponent extends ButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + super.disabled, super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart index fb87d810..25acefba 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.g.dart @@ -17,6 +17,7 @@ abstract class $FlatButtonComponentCWProxy { FlatButtonComponent focusedStyle(ButtonStyle? focusedStyle); FlatButtonComponent tappedStyle(ButtonStyle? tappedStyle); FlatButtonComponent onPressed(void Function(ControlState)? onPressed); + FlatButtonComponent disabled(ValueNotifier? disabled); FlatButtonComponent themeResolver( ThemeResolver? themeResolver); FlatButtonComponent key(Key? key); @@ -31,6 +32,7 @@ abstract class $FlatButtonComponentCWProxy { ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart index b9a3c746..c2260ac4 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart @@ -31,6 +31,7 @@ abstract class SimpleIconButtonComponent extends ButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + super.disabled, super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart index 9a4b83ac..fdbce6a8 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.g.dart @@ -14,6 +14,7 @@ abstract class $SimpleIconButtonComponentCWProxy { SimpleIconButtonComponent focusedStyle(ButtonStyle? focusedStyle); SimpleIconButtonComponent tappedStyle(ButtonStyle? tappedStyle); SimpleIconButtonComponent onPressed(void Function(ControlState)? onPressed); + SimpleIconButtonComponent disabled(ValueNotifier? disabled); SimpleIconButtonComponent themeResolver( ThemeResolver? themeResolver); SimpleIconButtonComponent key(Key? key); @@ -25,6 +26,7 @@ abstract class $SimpleIconButtonComponentCWProxy { ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart index a09255d0..3a34c60a 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart @@ -34,6 +34,7 @@ abstract class SymbolButtonComponent extends ButtonComponent super.tappedStyle, super.selectedStyle, super.onPressed, + super.disabled, super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart index a97dced0..be5cbb51 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.g.dart @@ -17,6 +17,7 @@ abstract class $SymbolButtonComponentCWProxy { SymbolButtonComponent tappedStyle(ButtonStyle? tappedStyle); SymbolButtonComponent selectedStyle(ButtonStyle? selectedStyle); SymbolButtonComponent onPressed(void Function(ControlState)? onPressed); + SymbolButtonComponent disabled(ValueNotifier? disabled); SymbolButtonComponent themeResolver( ThemeResolver? themeResolver); SymbolButtonComponent key(Key? key); @@ -31,6 +32,7 @@ abstract class $SymbolButtonComponentCWProxy { ButtonStyle? tappedStyle, ButtonStyle? selectedStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }); diff --git a/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart index 0f398c13..d8863a85 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/file_selection_button/file_selection_buttons.dart @@ -15,14 +15,23 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; import 'package:wyatt_ui_kit_example/theme/constants.dart'; -class FileSelectionButtons extends StatelessWidget { +class FileSelectionButtons extends StatefulWidget { const FileSelectionButtons({super.key}); + @override + State createState() => _FileSelectionButtonsState(); +} + +class _FileSelectionButtonsState extends State { + final _disabled = ValueNotifier(true); + final _dynamic = ValueNotifier(false); + Widget _leading() => const DecoratedBox( decoration: BoxDecoration( color: Constants.grey2, @@ -48,6 +57,7 @@ class FileSelectionButtons extends StatelessWidget { style: Theme.of(context).textTheme.titleMedium, ), const Gap(20), + // Default FileSelectionButton( leading: _leading(), title: const TextWrapper( @@ -56,65 +66,99 @@ class FileSelectionButtons extends StatelessWidget { subTitle: const TextWrapper('Taille max: 20 Mo'), ), const Gap(20), - FileSelectionButton( - leading: _leading(), - title: const TextWrapper( - 'Enabled', + BlocProvider( + create: (context) => InvalidButtonCubit()..freeze(), + child: FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Enabled', + ), + subTitle: const TextWrapper('Subtitle'), ), - subTitle: const TextWrapper('Subtitle'), - ) - ..bloc.enable() - ..bloc.freeze(), + ), const Gap(20), + // Using a ValueNotifier to disable the button FileSelectionButton( leading: _leading(), title: const TextWrapper( 'Disabled', ), subTitle: const TextWrapper('Subtitle'), - ) - ..bloc.disable() - ..bloc.freeze(), + disabled: _disabled, + ), const Gap(20), - FileSelectionButton( - leading: _leading(), - title: const TextWrapper( - 'Hovered', + BlocProvider( + create: (context) => InvalidButtonCubit()..hover(), + child: FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Hovered', + ), + subTitle: const TextWrapper('Subtitle'), ), - subTitle: const TextWrapper('Subtitle'), - ) - ..bloc.onMouseEnter() - ..bloc.freeze(), + ), const Gap(20), - FileSelectionButton( - leading: _leading(), - title: const TextWrapper( - 'Focused', + BlocProvider( + create: (context) => InvalidButtonCubit()..focus(), + child: FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Focused', + ), + subTitle: const TextWrapper('Subtitle'), ), - subTitle: const TextWrapper('Subtitle'), - ) - ..bloc.onFocus() - ..bloc.freeze(), + ), const Gap(20), - FileSelectionButton( - leading: _leading(), - title: const TextWrapper( - 'Tapped', + BlocProvider( + create: (context) => InvalidButtonCubit()..tap(), + child: FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Tapped', + ), + subTitle: const TextWrapper('Subtitle'), ), - subTitle: const TextWrapper('Subtitle'), - ) - ..bloc.onClickDown() - ..bloc.freeze(), + ), const Gap(20), - FileSelectionButton( - leading: _leading(), - title: const TextWrapper( - 'Invalid', + BlocProvider( + create: (context) => InvalidButtonCubit()..invalidate(), + child: FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Invalid', + ), + subTitle: const TextWrapper('Subtitle'), ), - subTitle: const TextWrapper('Subtitle'), - ) - ..bloc.invalidate() - ..bloc.freeze(), + ), + const Gap(20), + // Dynamic, disabled with ValueNotifier and invalid with BlocProvider. + // Keep the state when the button is disabled. + Column( + children: [ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('Enabled'), + Checkbox( + value: !_dynamic.value, + onChanged: (value) { + setState(() { + _dynamic.value = !_dynamic.value; + }); + }, + ), + ], + ), + FileSelectionButton( + leading: _leading(), + title: const TextWrapper( + 'Dynamic', + ), + subTitle: const TextWrapper('Subtitle'), + disabled: _dynamic, + ), + ], + ), const Gap(20), ], ); diff --git a/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart index 4c1a6b1d..e4b59a3c 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/flat_button/flat_buttons.dart @@ -15,13 +15,22 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; -class FlatButtons extends StatelessWidget { +class FlatButtons extends StatefulWidget { const FlatButtons({super.key}); + @override + State createState() => _FlatButtonsState(); +} + +class _FlatButtonsState extends State { + final _disabled = ValueNotifier(true); + final _dynamic = ValueNotifier(false); + @override Widget build(BuildContext context) => Column( children: [ @@ -30,56 +39,80 @@ class FlatButtons extends StatelessWidget { style: Theme.of(context).textTheme.titleMedium, ), const Gap(20), - Center( + // Default + const Center( /// You can overwrite global textstyle of the label with [label], /// but if you only want to override the color/gradient of the text /// in a particular case you can override the style that will /// be merge during the build. child: FlatButton( - label: const TextWrapper( + label: TextWrapper( 'Voir notre savoir faire', ), ), ), const Gap(20), Center( - child: FlatButton( - label: const TextWrapper('Enabled'), - ) - ..bloc.enable() - ..bloc.freeze(), + child: BlocProvider( + create: (context) => ButtonCubit()..freeze(), + child: const FlatButton( + label: TextWrapper('Enabled'), + ), + ), ), const Gap(20), + // Disabled with ValueNotifier Center( child: FlatButton( label: const TextWrapper('Disabled'), - ) - ..bloc.disable() - ..bloc.freeze(), + disabled: _disabled, + ), ), const Gap(20), Center( - child: FlatButton( - label: const TextWrapper('Hovered'), - ) - ..bloc.onMouseEnter() - ..bloc.freeze(), + child: BlocProvider( + create: (context) => ButtonCubit()..hover(), + child: const FlatButton( + label: TextWrapper('Hovered'), + ), + ), ), const Gap(20), Center( - child: FlatButton( - label: const TextWrapper('Focused'), - ) - ..bloc.onFocus() - ..bloc.freeze(), + child: BlocProvider( + create: (context) => ButtonCubit()..focus(), + child: const FlatButton( + label: TextWrapper('Focused'), + ), + ), ), const Gap(20), Center( - child: FlatButton( - label: const TextWrapper('Tapped'), - ) - ..bloc.onClickDown() - ..bloc.freeze(), + child: BlocProvider( + create: (context) => ButtonCubit()..tap(), + child: const FlatButton( + label: TextWrapper('Tapped'), + ), + ), + ), + const Gap(20), + // Dynamic, disabled with ValueNotifier and + // keep the state when the button is disabled + Row( + children: [ + Checkbox( + value: !_dynamic.value, + onChanged: (value) { + setState(() { + _dynamic.value = !_dynamic.value; + }); + }, + ), + FlatButton( + label: const TextWrapper('Dynamic'), + disabled: _dynamic, + ), + ], ), const Gap(20), ], diff --git a/packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart index 1de93f70..44143a5c 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/simple_icon_button/simple_icon_buttons.dart @@ -15,12 +15,21 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; -class SimpleIconButtons extends StatelessWidget { +class SimpleIconButtons extends StatefulWidget { const SimpleIconButtons({super.key}); + @override + State createState() => _SimpleIconButtonsState(); +} + +class _SimpleIconButtonsState extends State { + final _disabled = ValueNotifier(true); + final _dynamic = ValueNotifier(false); + @override Widget build(BuildContext context) => Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -30,8 +39,9 @@ class SimpleIconButtons extends StatelessWidget { style: Theme.of(context).textTheme.titleMedium, ), const Gap(20), - SimpleIconButton( - icon: const Icon( + // Default + const SimpleIconButton( + icon: Icon( Icons.storm_outlined, size: 17, ), @@ -42,71 +52,101 @@ class SimpleIconButtons extends StatelessWidget { style: Theme.of(context).textTheme.labelMedium, ), const Gap(10), - SimpleIconButton( - icon: const Icon( - Icons.storm_outlined, - size: 17, + BlocProvider( + create: (context) => ButtonCubit()..freeze(), + child: const SimpleIconButton( + icon: Icon( + Icons.storm_outlined, + size: 17, + ), ), - ) - ..bloc.enable() - ..bloc.freeze(), + ), const Gap(20), Text( 'Disabled', style: Theme.of(context).textTheme.labelMedium, ), const Gap(10), + // Disabled using ValueNotifier SimpleIconButton( icon: const Icon( Icons.storm_outlined, size: 17, ), - ) - ..bloc.disable() - ..bloc.freeze(), + disabled: _disabled, + ), const Gap(20), Text( 'Hovered', style: Theme.of(context).textTheme.labelMedium, ), const Gap(10), - SimpleIconButton( - icon: const Icon( - Icons.storm_outlined, - size: 17, + BlocProvider( + create: (context) => ButtonCubit()..hover(), + child: const SimpleIconButton( + icon: Icon( + Icons.storm_outlined, + size: 17, + ), ), - ) - ..bloc.onMouseEnter() - ..bloc.freeze(), + ), const Gap(20), Text( 'Focused', style: Theme.of(context).textTheme.labelMedium, ), const Gap(10), - SimpleIconButton( - icon: const Icon( - Icons.storm_outlined, - size: 17, + BlocProvider( + create: (context) => ButtonCubit()..focus(), + child: const SimpleIconButton( + icon: Icon( + Icons.storm_outlined, + size: 17, + ), ), - ) - ..bloc.onFocus() - ..bloc.freeze(), + ), const Gap(20), Text( 'Tapped', style: Theme.of(context).textTheme.labelMedium, ), const Gap(10), - SimpleIconButton( - icon: const Icon( - Icons.storm_outlined, - size: 17, + BlocProvider( + create: (context) => ButtonCubit()..tap(), + child: const SimpleIconButton( + icon: Icon( + Icons.storm_outlined, + size: 17, + ), ), - ) - ..bloc.onClickDown() - ..bloc.freeze(), + ), const Gap(20), + Text( + 'Dynamic', + style: Theme.of(context).textTheme.labelMedium, + ), + const Gap(10), + // Dynamic, disabled with ValueNotifier and + // keep the state when the button is disabled + Row( + children: [ + Checkbox( + value: !_dynamic.value, + onChanged: (value) { + setState(() { + _dynamic.value = !_dynamic.value; + }); + }, + ), + SimpleIconButton( + icon: const Icon( + Icons.storm_outlined, + size: 17, + ), + disabled: _dynamic, + ), + ], + ), ], ); } diff --git a/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart index 54aa9cb5..659ae233 100644 --- a/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart +++ b/packages/wyatt_ui_kit/example/lib/buttons/symbol_button/symbol_buttons.dart @@ -15,14 +15,23 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; import 'package:wyatt_ui_kit_example/theme/constants.dart'; -class SymbolButtons extends StatelessWidget { +class SymbolButtons extends StatefulWidget { const SymbolButtons({super.key}); + @override + State createState() => _SymbolButtonsState(); +} + +class _SymbolButtonsState extends State { + final _disabled = ValueNotifier(true); + final _dynamic = ValueNotifier(false); + Icon _icon(BuildContext context) => Icon( Icons.android, size: 25, @@ -45,47 +54,70 @@ class SymbolButtons extends StatelessWidget { icon: _icon(context), ), const Gap(20), - SymbolButton( - label: const TextWrapper('Enabled'), - icon: _icon(context), - ) - ..bloc.enable() - ..bloc.freeze(), + BlocProvider( + create: (context) => SelectableButtonCubit()..freeze(), + child: SymbolButton( + label: const TextWrapper('Enabled'), + icon: _icon(context), + ), + ), const Gap(20), + // Disabled SymbolButton( label: const TextWrapper('Disabled'), icon: _icon(context), - ) - ..bloc.disable() - ..bloc.freeze(), + disabled: _disabled, + ), const Gap(20), - SymbolButton( - label: const TextWrapper('Hovered'), - icon: _icon(context), - ) - ..bloc.onMouseEnter() - ..bloc.freeze(), + BlocProvider( + create: (context) => SelectableButtonCubit()..hover(), + child: SymbolButton( + label: const TextWrapper('Hovered'), + icon: _icon(context), + ), + ), const Gap(20), - SymbolButton( - label: const TextWrapper('Focused'), - icon: _icon(context), - ) - ..bloc.onFocus() - ..bloc.freeze(), + BlocProvider( + create: (context) => SelectableButtonCubit()..focus(), + child: SymbolButton( + label: const TextWrapper('Focused'), + icon: _icon(context), + ), + ), const Gap(20), - SymbolButton( - label: const TextWrapper('Tapped'), - icon: _icon(context), - ) - ..bloc.onClickDown() - ..bloc.freeze(), + BlocProvider( + create: (context) => SelectableButtonCubit()..tap(), + child: SymbolButton( + label: const TextWrapper('Tapped'), + icon: _icon(context), + ), + ), const Gap(20), - SymbolButton( - label: const TextWrapper('Selected'), - icon: _icon(context), - ) - ..bloc.select() - ..bloc.freeze(), + BlocProvider( + create: (context) => SelectableButtonCubit()..select(), + child: SymbolButton( + label: const TextWrapper('Selected'), + icon: _icon(context), + ), + ), + const Gap(20), + Row( + children: [ + Checkbox( + value: !_dynamic.value, + onChanged: (value) { + setState(() { + _dynamic.value = !_dynamic.value; + }); + }, + ), + SymbolButton( + label: const TextWrapper('Dynamic'), + icon: _icon(context), + disabled: _dynamic, + ), + ], + ), const Gap(20), DecoratedBox( decoration: BoxDecoration( diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index d9953115..cf855e24 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -10,6 +10,7 @@ environment: dependencies: flutter: { sdk: flutter } + flutter_bloc: ^8.1.2 flutter_localizations: { sdk: flutter } gap: ^2.0.1 diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart index bf04a627..34d6fae2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart @@ -14,6 +14,9 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export './cubit/button_cubit.dart'; +export './cubit/invalid_button_cubit.dart'; +export './cubit/selectable_button_cubit.dart'; export './file_selection_button/file_selection_button.dart'; export './flat_button/flat_button.dart'; export './simple_icon_button/simple_icon_button.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart index d317a181..accafce5 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart @@ -23,8 +23,19 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'button_state.dart'; class ButtonCubit extends Cubit { - ButtonCubit() : super(const ButtonState.initial(ControlState.normal)); + ButtonCubit() : super(const ButtonState.initial(ControlState.normal)) { + _previousState = state.copyWith(); + } + /// The previous state of the button. + /// This is used to restore the state of the button when + /// the button is enabled again. + ButtonState? _previousState; + + /// When the mouse enters the button. The button will change + /// its state to [ControlState.hovered]. + /// + /// If the button is disabled or freezed, this method does nothing. FutureOr onMouseEnter() async { if (state.isDisabled || state.isFreezed) { return; @@ -32,6 +43,10 @@ class ButtonCubit extends Cubit { emit(state.copyWith(state: ControlState.hovered)); } + /// When the mouse leaves the button. The button will change + /// its state to [ControlState.normal]. + /// + /// If the button is disabled or freezed, this method does nothing. FutureOr onMouseLeave() async { if (state.isDisabled || state.isFreezed) { return; @@ -40,6 +55,10 @@ class ButtonCubit extends Cubit { emit(state.copyWith(state: ControlState.normal)); } + /// When the button is focused. The button will change + /// its state to [ControlState.focused]. + /// + /// If the button is disabled or freezed, this method does nothing. FutureOr onFocus() async { if (state.isDisabled || state.isFreezed) { return; @@ -47,6 +66,10 @@ class ButtonCubit extends Cubit { emit(state.copyWith(state: ControlState.focused)); } + /// When the button is unfocused. The button will change + /// its state to [ControlState.normal]. + /// + /// If the button is disabled or freezed, this method does nothing. FutureOr onUnfocus() async { if (state.isDisabled || state.isFreezed) { return; @@ -54,6 +77,10 @@ class ButtonCubit extends Cubit { emit(state.copyWith(state: ControlState.normal)); } + /// When the mouse is pressed on the button. The button will change + /// its state to [ControlState.tapped]. + /// + /// If the button is disabled or freezed, this method does nothing. FutureOr onClickDown() async { if (state.isDisabled || state.isFreezed) { return; @@ -61,39 +88,127 @@ class ButtonCubit extends Cubit { emit(state.copyWith(state: ControlState.tapped)); } + /// When the mouse is released on the button. The button will change + /// its state to [ControlState.hovered]. + /// + /// If the button is disabled or freezed, this method does nothing. FutureOr onClickUpIn() async { - if (state.isDisabled) { + if (state.isDisabled || state.isFreezed) { return; } emit(state.copyWith(state: ControlState.hovered)); } + /// When the mouse is released outside the button. The button will change + /// its state to [ControlState.normal]. + /// + /// If the button is disabled or freezed, this method does nothing. FutureOr onClickUpOut() async { - if (state.isDisabled) { + if (state.isDisabled || state.isFreezed) { return; } emit(state.copyWith(state: ControlState.normal)); } + /// Programmatically change the state or extra states of the button. + FutureOr setState({ + ControlState? state, + List? extraStates, + }) async { + emit(this.state.copyWith(state: state, extraStates: extraStates)); + } + + /// Disable the button. + /// + /// This will remove all extra states and set + /// the state to [ControlState.disabled] and add [ExtraState.freezed]. FutureOr disable() async { - if (state.isFreezed) { - return; - } - emit(state.copyWith(state: ControlState.disabled)); + /// Save the previous state. + /// copyWith() is used to make sure the previous state is not + /// affected by any changes to the current state. + _previousState = state.copyWith(); + + emit( + const ButtonState( + state: ControlState.disabled, + extraStates: [ExtraState.freezed], + ), + ); } + /// Enable the button. + /// + /// This will restore the previous state of the button. FutureOr enable() async { - if (state.isFreezed) { + if (_previousState == null) { return; } - emit(state.copyWith(state: ControlState.normal)); + + emit(_previousState!); + _previousState = null; } + /// Set the button to hovered state and freeze it. + /// + /// Use this method to programmatically set the button to hovered state. + FutureOr hover() async { + emit( + state.copyWith( + state: ControlState.hovered, + extraStates: state.extraStates + [ExtraState.freezed], + ), + ); + } + + /// Set the button to focused state and freeze it. + /// + /// Use this method to programmatically set the button to focused state. + FutureOr focus() async { + emit( + state.copyWith( + state: ControlState.focused, + extraStates: state.extraStates + [ExtraState.freezed], + ), + ); + } + + /// Set the button to tapped state and freeze it. + /// + /// Use this method to programmatically set the button to tapped state. + FutureOr tap() async { + emit( + state.copyWith( + state: ControlState.tapped, + extraStates: state.extraStates + [ExtraState.freezed], + ), + ); + } + + /// Freeze the button in its current state. + /// + /// Shortcut for [setState] with extra state [ExtraState.freezed]. + /// + /// Use this method to programmatically freeze the button. FutureOr freeze() async { - emit(state.copyWith(freezed: true)); + emit( + state.copyWith( + extraStates: state.extraStates + [ExtraState.freezed], + ), + ); } + /// Unfreeze the button. + /// + /// Shortcut for [setState] without extra state [ExtraState.freezed]. + /// + /// Use this method to programmatically unfreeze the button. FutureOr unfreeze() async { - emit(state.copyWith(freezed: false)); + emit( + state.copyWith( + extraStates: state.extraStates + .where((element) => element != ExtraState.freezed) + .toList(), + ), + ); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart index 1d2e5350..2abdd360 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_state.dart @@ -18,54 +18,41 @@ part of 'button_cubit.dart'; class ButtonState extends Equatable { - const ButtonState({ - required this.state, - required this.selected, - required this.invalid, - required this.freezed, - }); + const ButtonState({required this.state, required this.extraStates}); - const ButtonState.initial(this.state) - : selected = false, - invalid = false, - freezed = false; + const ButtonState.initial(this.state) : extraStates = const []; + /// The control state of the button final ControlState state; - // Not in control state, because a button state can be - // a control state + extra state - // e.g : hover + invalid, or selected + tapped - final bool selected; - final bool invalid; - final bool freezed; + /// Not in control state, because a button state can be + /// a control state + extra state + /// e.g : + /// - ControlState.hover + [ExtraState.invalid] + /// - ControlState.tapped + [ExtraState.invalid + ExtraState.freezed] + final List extraStates; bool get isDisabled => state.isDisabled(); bool get isEnabled => state.isEnabled(); bool get isFocused => state.isFocused(); bool get isHovered => state.isHovered(); bool get isTapped => state.isTapped(); - - // only for consistence - bool get isSelected => selected; - bool get isInvalid => invalid; - bool get isFreezed => freezed; + bool get isSelected => extraStates.contains(ExtraState.selected); + bool get isInvalid => extraStates.contains(ExtraState.invalid); + bool get isFreezed => extraStates.contains(ExtraState.freezed); @override - List get props => [state, selected, invalid, freezed]; + List get props => [state, extraStates]; @override bool? get stringify => true; ButtonState copyWith({ ControlState? state, - bool? selected, - bool? invalid, - bool? freezed, + List? extraStates, }) => ButtonState( state: state ?? this.state, - selected: selected ?? this.selected, - invalid: invalid ?? this.invalid, - freezed: freezed ?? this.freezed, + extraStates: extraStates ?? this.extraStates, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart index 30626192..4d2d1263 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/invalid_button_cubit.dart @@ -20,49 +20,29 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; class InvalidButtonCubit extends ButtonCubit { - @override - FutureOr onClickUpIn() async { - if (state.isDisabled || state.isFreezed) { - return; - } - - emit( - state.copyWith( - state: ControlState.hovered, - ), - ); - } - - @override - FutureOr onClickUpOut() async { - if (state.isDisabled || state.isFreezed) { - return; - } - - emit( - state.copyWith( - state: ControlState.normal, - ), - ); - } - + /// When the button is invalid. The button will add the + /// [ExtraState.invalid] to its extra states. + /// + /// Use [validate] to remove the [ExtraState.invalid] from the extra states. + /// + /// Use this method to invalidate the button programmatically. FutureOr invalidate() async { - if (state.isDisabled || state.isFreezed) { - return; - } - - emit( - state.copyWith(invalid: true), - ); + emit(state.copyWith(extraStates: state.extraStates + [ExtraState.invalid])); } - FutureOr fix() async { - if (state.isDisabled || state.isFreezed) { - return; - } - + /// When the button is valid. The button will remove the + /// [ExtraState.invalid] from its extra states. + /// + /// Use [invalidate] to add the [ExtraState.invalid] to the extra states. + /// + /// Use this method to validate the button programmatically. + FutureOr validate() async { emit( - state.copyWith(invalid: false), + state.copyWith( + extraStates: state.extraStates + .where((element) => element != ExtraState.invalid) + .toList(), + ), ); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart index 9b747ad4..affaea42 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/selectable_button_cubit.dart @@ -20,14 +20,32 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; class SelectableButtonCubit extends ButtonCubit { + ButtonState _toggle(ButtonState state) { + if (state.isSelected) { + return state.copyWith( + extraStates: state.extraStates + .where((element) => element != ExtraState.selected) + .toList(), + ); + } else { + return state.copyWith( + extraStates: state.extraStates + [ExtraState.selected], + ); + } + } + + /// When the mouse is released on the button, the button will + /// add the [ExtraState.selected] if it is selected, or remove + /// the [ExtraState.selected] if it is not selected. + /// + /// If the button is disabled or freezed, this method does nothing. @override FutureOr onClickUpIn() async { if (state.isDisabled || state.isFreezed) { return; } - emit( - state.copyWith(state: ControlState.hovered, selected: !state.selected), - ); + + emit(_toggle(state).copyWith(state: ControlState.hovered)); } @override @@ -35,26 +53,31 @@ class SelectableButtonCubit extends ButtonCubit { if (state.isDisabled || state.isFreezed) { return; } - emit(state.copyWith(state: ControlState.normal, selected: !state.selected)); + + emit(_toggle(state).copyWith(state: ControlState.normal)); } + /// When the button is selected. The button will add the + /// [ExtraState.selected] to its extra states. + /// + /// Use this method to select the button programmatically. FutureOr select() async { - if (state.isDisabled || state.isFreezed) { - return; - } - emit( - state.copyWith(selected: true), + state.copyWith(extraStates: state.extraStates + [ExtraState.selected]), ); } + /// When the button is unselected. The button will remove the + /// [ExtraState.selected] from its extra states. + /// + /// Use this method to unselect the button programmatically. FutureOr unselect() async { - if (state.isDisabled || state.isFreezed) { - return; - } - emit( - state.copyWith(selected: false), + state.copyWith( + extraStates: state.extraStates + .where((element) => element != ExtraState.selected) + .toList(), + ), ); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/exportable_bloc.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/state_listener.dart similarity index 55% rename from packages/wyatt_ui_kit/lib/src/components/buttons/exportable_bloc.dart rename to packages/wyatt_ui_kit/lib/src/components/buttons/cubit/state_listener.dart index 0f9fbd73..53754e74 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/exportable_bloc.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/state_listener.dart @@ -14,23 +14,22 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter/foundation.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; -class ExportableBloc> - extends StatelessWidget { - const ExportableBloc({ - required this.bloc, - required this.child, - super.key, - }); - - final T bloc; - final Widget child; - - @override - Widget build(BuildContext context) => BlocProvider.value( - value: bloc, - child: child, - ); +/// A class that listens to the state of a [ValueNotifier] and +/// changes the state of a [ButtonCubit] accordingly. +abstract class StateListener { + /// Listens to the state of the [ValueNotifier] and + /// changes the state of the [ButtonCubit] accordingly. + static void listen( + ValueNotifier? state, + B bloc, + ) { + if (state!.value) { + bloc.disable(); + } else { + bloc.enable(); + } + } } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart index 1c038237..06353a4e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart @@ -17,8 +17,6 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; @@ -27,7 +25,7 @@ part 'file_selection_button.g.dart'; @ComponentCopyWithExtension() class FileSelectionButton extends FileSelectionButtonComponent with $FileSelectionButtonCWMixin { - FileSelectionButton({ + const FileSelectionButton({ super.leading, super.title, super.subTitle, @@ -39,15 +37,12 @@ class FileSelectionButton extends FileSelectionButtonComponent super.selectedStyle, super.invalidStyle, super.onPressed, + super.disabled, super.mainAxisSize, super.themeResolver, super.key, }); - final InvalidButtonCubit _cubit = InvalidButtonCubit(); - - InvalidButtonCubit get bloc => _cubit; - @override FileSelectionButtonStyle? get disabledStyle => super.disabledStyle as FileSelectionButtonStyle?; @@ -81,23 +76,21 @@ class FileSelectionButton extends FileSelectionButtonComponent super.themeResolver as FileSelectionButtonThemeResolver?; @override - Widget build(BuildContext context) => ExportableBloc( - bloc: _cubit, - child: FileSelectionButtonScreen( - leading: leading, - title: title, - subTitle: subTitle, - disabledStyle: disabledStyle, - normalStyle: normalStyle, - hoveredStyle: hoveredStyle, - focusedStyle: focusedStyle, - tappedStyle: tappedStyle, - selectedStyle: selectedStyle, - invalidStyle: invalidStyle, - onPressed: onPressed, - mainAxisSize: mainAxisSize, - themeResolver: themeResolver, - key: key, - ), + Widget build(BuildContext context) => FileSelectionButtonScreen( + leading: leading, + title: title, + subTitle: subTitle, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + selectedStyle: selectedStyle, + invalidStyle: invalidStyle, + onPressed: onPressed, + disabled: disabled, + mainAxisSize: mainAxisSize, + themeResolver: themeResolver, + key: key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart index 45b7eca4..3e151c7b 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart @@ -45,6 +45,9 @@ class $FileSelectionButtonCWProxyImpl FileSelectionButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + FileSelectionButton disabled(ValueNotifier? disabled) => + this(disabled: disabled); + @override FileSelectionButton themeResolver( ThemeResolver? themeResolver) => this(themeResolver: themeResolver); @@ -64,6 +67,7 @@ class $FileSelectionButtonCWProxyImpl ButtonStyle? selectedStyle, ButtonStyle? invalidStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }) => @@ -79,6 +83,7 @@ class $FileSelectionButtonCWProxyImpl selectedStyle: selectedStyle ?? _value.selectedStyle, invalidStyle: invalidStyle ?? _value.invalidStyle, onPressed: onPressed ?? _value.onPressed, + disabled: disabled ?? _value.disabled, mainAxisSize: mainAxisSize ?? _value.mainAxisSize, themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart index 36495ec9..a8080da9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_screen.dart @@ -21,6 +21,7 @@ import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/invalid_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/state_listener.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/dotter_border_child.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; @@ -39,6 +40,7 @@ class FileSelectionButtonScreen this.selectedStyle, this.invalidStyle, this.onPressed, + this.disabled, this.mainAxisSize, this.themeResolver, super.key, @@ -58,11 +60,26 @@ class FileSelectionButtonScreen final FileSelectionButtonStyle? invalidStyle; final void Function(ControlState state)? onPressed; + final ValueNotifier? disabled; final FileSelectionButtonThemeResolver? themeResolver; @override InvalidButtonCubit create(BuildContext context) => InvalidButtonCubit(); + @override + InvalidButtonCubit init(BuildContext context, InvalidButtonCubit bloc) { + disabled?.addListener( + () => StateListener.listen(disabled, bloc), + ); + + /// Set the initial state depending on the disabled value + /// after adding the listener. + if (disabled?.value ?? false) { + bloc.disable(); + } + return bloc; + } + /// Negotiate the theme to get a complete style. FileSelectionButtonStyle _resolve(BuildContext context, ButtonState state) { final FileSelectionButtonThemeResolver resolver = themeResolver ?? diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index df67bb11..ebcfec92 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -17,8 +17,6 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_theme_resolver.dart'; @@ -26,7 +24,7 @@ part 'flat_button.g.dart'; @ComponentCopyWithExtension() class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { - FlatButton({ + const FlatButton({ super.prefix, super.suffix, super.label, @@ -36,15 +34,12 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { super.focusedStyle, super.tappedStyle, super.onPressed, + super.disabled, super.mainAxisSize, super.themeResolver, super.key, }); - final ButtonCubit _cubit = ButtonCubit(); - - ButtonCubit get bloc => _cubit; - @override FlatButtonStyle? get disabledStyle => super.disabledStyle as FlatButtonStyle?; @@ -65,21 +60,19 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin { super.themeResolver as FlatButtonThemeResolver?; @override - Widget build(BuildContext context) => ExportableBloc( - bloc: _cubit, - child: FlatButtonScreen( - prefix: prefix, - suffix: suffix, - label: label, - disabledStyle: disabledStyle, - normalStyle: normalStyle, - hoveredStyle: hoveredStyle, - focusedStyle: focusedStyle, - tappedStyle: tappedStyle, - onPressed: onPressed, - mainAxisSize: mainAxisSize, - themeResolver: themeResolver, - key: key, - ), + Widget build(BuildContext context) => FlatButtonScreen( + prefix: prefix, + suffix: suffix, + label: label, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + onPressed: onPressed, + disabled: disabled, + mainAxisSize: mainAxisSize, + themeResolver: themeResolver, + key: key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index 2fb990d5..8f28dd65 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -37,6 +37,9 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { FlatButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + FlatButton disabled(ValueNotifier? disabled) => + this(disabled: disabled); + @override FlatButton themeResolver( ThemeResolver? themeResolver) => this(themeResolver: themeResolver); @@ -54,6 +57,7 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }) => @@ -67,6 +71,7 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { focusedStyle: focusedStyle ?? _value.focusedStyle, tappedStyle: tappedStyle ?? _value.tappedStyle, onPressed: onPressed ?? _value.onPressed, + disabled: disabled ?? _value.disabled, mainAxisSize: mainAxisSize ?? _value.mainAxisSize, themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index 07df2a77..f16b626c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -20,6 +20,7 @@ import 'package:gap/gap.dart'; import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/state_listener.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; @@ -35,6 +36,7 @@ class FlatButtonScreen extends CubitScreen { this.focusedStyle, this.tappedStyle, this.onPressed, + this.disabled, this.mainAxisSize, this.themeResolver, super.key, @@ -52,11 +54,23 @@ class FlatButtonScreen extends CubitScreen { final FlatButtonStyle? tappedStyle; final void Function(ControlState state)? onPressed; + final ValueNotifier? disabled; final FlatButtonThemeResolver? themeResolver; @override ButtonCubit create(BuildContext context) => ButtonCubit(); + @override + ButtonCubit init(BuildContext context, ButtonCubit bloc) { + disabled?.addListener(() => StateListener.listen(disabled, bloc)); + /// Set the initial state depending on the disabled value + /// after adding the listener. + if (disabled?.value ?? false) { + bloc.disable(); + } + return bloc; + } + /// Negotiate the theme to get a complete style. FlatButtonStyle _resolve(BuildContext context, ControlState state) { final FlatButtonThemeResolver resolver = themeResolver ?? diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart index 9bd074b1..6d2be5d2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -17,8 +17,6 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_screen.dart'; @@ -27,7 +25,7 @@ part 'simple_icon_button.g.dart'; @ComponentCopyWithExtension() class SimpleIconButton extends SimpleIconButtonComponent with $SimpleIconButtonCWMixin { - SimpleIconButton({ + const SimpleIconButton({ super.icon, super.disabledStyle, super.normalStyle, @@ -35,14 +33,11 @@ class SimpleIconButton extends SimpleIconButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + super.disabled, super.themeResolver, super.key, }); - final ButtonCubit _cubit = ButtonCubit(); - - ButtonCubit get bloc => _cubit; - @override SimpleIconButtonStyle? get disabledStyle => super.disabledStyle as SimpleIconButtonStyle?; @@ -68,18 +63,16 @@ class SimpleIconButton extends SimpleIconButtonComponent super.themeResolver as SimpleIconButtonThemeResolver?; @override - Widget build(BuildContext context) => ExportableBloc( - bloc: _cubit, - child: SimpleIconButtonScreen( - icon: icon, - disabledStyle: disabledStyle, - normalStyle: normalStyle, - hoveredStyle: hoveredStyle, - focusedStyle: focusedStyle, - tappedStyle: tappedStyle, - onPressed: onPressed, - themeResolver: themeResolver, - key: key, - ), + Widget build(BuildContext context) => SimpleIconButtonScreen( + icon: icon, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + onPressed: onPressed, + disabled: disabled, + themeResolver: themeResolver, + key: key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart index 79bfba6a..9ad48526 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart @@ -31,6 +31,9 @@ class $SimpleIconButtonCWProxyImpl SimpleIconButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + SimpleIconButton disabled(ValueNotifier? disabled) => + this(disabled: disabled); + @override SimpleIconButton themeResolver( ThemeResolver? themeResolver) => this(themeResolver: themeResolver); @@ -45,6 +48,7 @@ class $SimpleIconButtonCWProxyImpl ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }) => @@ -56,6 +60,7 @@ class $SimpleIconButtonCWProxyImpl focusedStyle: focusedStyle ?? _value.focusedStyle, tappedStyle: tappedStyle ?? _value.tappedStyle, onPressed: onPressed ?? _value.onPressed, + disabled: disabled ?? _value.disabled, themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, ); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart index 4467cd54..0aa1687f 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_screen.dart @@ -19,6 +19,7 @@ import 'package:flutter/services.dart'; import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/state_listener.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart'; @@ -33,6 +34,7 @@ class SimpleIconButtonScreen extends CubitScreen { this.focusedStyle, this.tappedStyle, this.onPressed, + this.disabled, this.themeResolver, super.key, }); @@ -46,11 +48,24 @@ class SimpleIconButtonScreen extends CubitScreen { final SimpleIconButtonStyle? tappedStyle; final void Function(ControlState state)? onPressed; + final ValueNotifier? disabled; final SimpleIconButtonThemeResolver? themeResolver; @override ButtonCubit create(BuildContext context) => ButtonCubit(); + @override + ButtonCubit init(BuildContext context, ButtonCubit bloc) { + disabled?.addListener(() => StateListener.listen(disabled, bloc)); + + /// Set the initial state depending on the disabled value + /// after adding the listener. + if (disabled?.value ?? false) { + bloc.disable(); + } + return bloc; + } + /// Negotiate the theme to get a complete style. SimpleIconButtonStyle _resolve(BuildContext context, ControlState state) { final SimpleIconButtonThemeResolver resolver = themeResolver ?? diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart index 64436fa5..1f343e8a 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart @@ -17,17 +17,14 @@ import 'package:flutter/material.dart' hide ButtonStyle; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubit.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/exportable_bloc.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart'; part 'symbol_button.g.dart'; @ComponentCopyWithExtension() -class SymbolButton extends SymbolButtonComponent - with $SymbolButtonCWMixin{ - SymbolButton({ +class SymbolButton extends SymbolButtonComponent with $SymbolButtonCWMixin { + const SymbolButton({ super.icon, super.label, super.disabledStyle, @@ -39,13 +36,10 @@ class SymbolButton extends SymbolButtonComponent super.mainAxisSize, super.themeResolver, super.onPressed, + super.disabled, super.key, }); - final SelectableButtonCubit _cubit = SelectableButtonCubit(); - - SelectableButtonCubit get bloc => _cubit; - @override SymbolButtonStyle? get disabledStyle => super.disabledStyle as SymbolButtonStyle?; @@ -73,21 +67,19 @@ class SymbolButton extends SymbolButtonComponent super.themeResolver as SymbolButtonThemeResolver?; @override - Widget build(BuildContext context) => ExportableBloc( - bloc: _cubit, - child: SymbolButtonScreen( - icon: icon, - label: label, - disabledStyle: disabledStyle, - normalStyle: normalStyle, - hoveredStyle: hoveredStyle, - focusedStyle: focusedStyle, - tappedStyle: tappedStyle, - selectedStyle: selectedStyle, - onPressed: onPressed, - mainAxisSize: mainAxisSize, - themeResolver: themeResolver, - key: key, - ), + Widget build(BuildContext context) => SymbolButtonScreen( + icon: icon, + label: label, + disabledStyle: disabledStyle, + normalStyle: normalStyle, + hoveredStyle: hoveredStyle, + focusedStyle: focusedStyle, + tappedStyle: tappedStyle, + selectedStyle: selectedStyle, + onPressed: onPressed, + disabled: disabled, + mainAxisSize: mainAxisSize, + themeResolver: themeResolver, + key: key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart index c7e06ab2..536fe3c4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart @@ -38,6 +38,9 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { SymbolButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + SymbolButton disabled(ValueNotifier? disabled) => + this(disabled: disabled); + @override SymbolButton themeResolver( ThemeResolver? themeResolver) => this(themeResolver: themeResolver); @@ -55,6 +58,7 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { ButtonStyle? tappedStyle, ButtonStyle? selectedStyle, void Function(ControlState)? onPressed, + ValueNotifier? disabled, ThemeResolver? themeResolver, Key? key, }) => @@ -70,6 +74,7 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { mainAxisSize: mainAxisSize ?? _value.mainAxisSize, themeResolver: themeResolver ?? _value.themeResolver, onPressed: onPressed ?? _value.onPressed, + disabled: disabled ?? _value.disabled, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart index e51505ec..468d4e1e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_screen.dart @@ -21,6 +21,7 @@ import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/selectable_button_cubit.dart'; +import 'package:wyatt_ui_kit/src/components/buttons/cubit/state_listener.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart'; import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart'; @@ -37,6 +38,7 @@ class SymbolButtonScreen this.tappedStyle, this.selectedStyle, this.onPressed, + this.disabled, this.mainAxisSize, this.themeResolver, super.key, @@ -54,11 +56,26 @@ class SymbolButtonScreen final SymbolButtonStyle? selectedStyle; final void Function(ControlState state)? onPressed; + final ValueNotifier? disabled; final SymbolButtonThemeResolver? themeResolver; @override SelectableButtonCubit create(BuildContext context) => SelectableButtonCubit(); + @override + SelectableButtonCubit init(BuildContext context, SelectableButtonCubit bloc) { + disabled?.addListener( + () => StateListener.listen(disabled, bloc), + ); + + /// Set the initial state depending on the disabled value + /// after adding the listener. + if (disabled?.value ?? false) { + bloc.disable(); + } + return bloc; + } + /// Negotiate the theme to get a complete style. SymbolButtonStyle _resolve(BuildContext context, ButtonState state) { final SymbolButtonThemeResolver resolver = themeResolver ?? -- 2.47.2 From 1a48b606a4d542fd629214ab2fc36e38a7d10b6c Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 18:27:17 +0100 Subject: [PATCH 191/320] refactor(ui): replace ThemeResolver by ThemeHelper in Loader / RichTextBuilder (closes #148) --- .../lib/src/domain/entities/entities.dart | 3 +- .../src/domain/entities/loader/loader.dart | 17 ++++ .../{ => loader}/loader_component.dart | 0 .../{ => loader}/loader_component.g.dart | 0 .../lib/src/domain/entities/loader_style.dart | 82 ------------------- .../rich_text_builder/rich_text_builder.dart | 1 - .../rich_text_builder_component.dart | 1 - .../rich_text_builder_component.g.dart | 3 - .../rich_text_builder_style.dart | 79 ------------------ .../lib/src/components/loader/loader.dart | 49 ++++++----- .../lib/src/components/loader/loader.g.dart | 1 - .../loader/loader_theme_resolver.dart | 58 ------------- .../rich_text_builder/rich_text_builder.dart | 45 +++++----- .../rich_text_builder.g.dart | 6 -- .../rich_text_builder_theme_resolver.dart | 53 ------------ 15 files changed, 68 insertions(+), 330 deletions(-) create mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loader/loader.dart rename packages/wyatt_ui_components/lib/src/domain/entities/{ => loader}/loader_component.dart (100%) rename packages/wyatt_ui_components/lib/src/domain/entities/{ => loader}/loader_component.g.dart (100%) delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart delete mode 100644 packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart delete mode 100644 packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart delete mode 100644 packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart index 1c7756e8..6fc5b795 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/entities.dart @@ -19,8 +19,7 @@ export './buttons/buttons.dart'; export './cards/cards.dart'; export './component.dart'; export './error_widget_component.dart'; -export './loader_component.dart'; -export './loader_style.dart'; +export './loader/loader.dart'; export './loading_widget_component.dart'; export './rich_text_builder/rich_text_builder.dart'; export './text_inputs/text_inputs.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader.dart new file mode 100644 index 00000000..67446c69 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader.dart @@ -0,0 +1,17 @@ +// 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 . + +export './loader_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/loader_component.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.g.dart similarity index 100% rename from packages/wyatt_ui_components/lib/src/domain/entities/loader_component.g.dart rename to packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.g.dart diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart deleted file mode 100644 index b32c3a35..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loader_style.dart +++ /dev/null @@ -1,82 +0,0 @@ -// 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 . - -import 'dart:ui'; - -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; - -class LoaderStyle extends ThemeStyle { - const LoaderStyle({ - this.colors, - this.stroke, - }); - - /// Merges non-null `b` attributes in `a` - static LoaderStyle? merge( - LoaderStyle? a, - LoaderStyle? b, - ) { - if (b == null) { - return a?.copyWith(); - } - if (a == null) { - return b.copyWith(); - } - - return a.copyWith( - colors: b.colors, - stroke: b.stroke, - ); - } - - /// Used for interpolation. - static LoaderStyle? lerp( - LoaderStyle? a, - LoaderStyle? b, - double t, - ) { - if (a == null || b == null) { - return null; - } - // b.copyWith to return b attributes even if they are not lerped - return b.copyWith( - colors: MultiColor.lerp(a.colors, b.colors, t), - stroke: lerpDouble(a.stroke, b.stroke, t), - ); - } - - /// Gradient colors from start to end. - final MultiColor? colors; - - /// Loader stroke width - final double? stroke; - - @override - LoaderStyle? mergeWith(LoaderStyle? other) => LoaderStyle.merge(this, other); - - @override - LoaderStyle copyWith({ - MultiColor? colors, - double? stroke, - }) => - LoaderStyle( - colors: colors ?? this.colors, - stroke: stroke ?? this.stroke, - ); - - @override - String toString() => 'LoaderStyle($colors, $stroke)'; -} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart index 1eae2365..61d315f5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder.dart @@ -16,4 +16,3 @@ export 'parser.dart'; export 'rich_text_builder_component.dart'; -export 'rich_text_builder_style.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart index 603aaa32..31fed0cf 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart @@ -28,7 +28,6 @@ abstract class RichTextBuilderComponent extends Component this.parser, this.defaultStyle, this.styles, - super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart index 9c5194e6..52532f5c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.g.dart @@ -11,15 +11,12 @@ abstract class $RichTextBuilderComponentCWProxy { RichTextBuilderComponent parser(RichTextParser? parser); RichTextBuilderComponent defaultStyle(TextStyle? defaultStyle); RichTextBuilderComponent styles(Map? styles); - RichTextBuilderComponent themeResolver( - ThemeResolver? themeResolver); RichTextBuilderComponent key(Key? key); RichTextBuilderComponent call({ String? text, RichTextParser? parser, TextStyle? defaultStyle, Map? styles, - ThemeResolver? themeResolver, Key? key, }); } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart deleted file mode 100644 index 814bc237..00000000 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_style.dart +++ /dev/null @@ -1,79 +0,0 @@ -// 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 . - -import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; - -class RichTextBuilderStyle extends ThemeStyle { - const RichTextBuilderStyle({ - this.defaultStyle, - this.styles, - }); - - /// Merges non-null `b` attributes in `a` - static RichTextBuilderStyle? merge( - RichTextBuilderStyle? a, - RichTextBuilderStyle? b, - ) { - if (b == null) { - return a?.copyWith(); - } - if (a == null) { - return b.copyWith(); - } - - return a.copyWith( - defaultStyle: b.defaultStyle, - styles: b.styles, - ); - } - - /// Used for interpolation. - static RichTextBuilderStyle? lerp( - RichTextBuilderStyle? a, - RichTextBuilderStyle? b, - double t, - ) { - if (a == null || b == null) { - return null; - } - // b.copyWith to return b attributes even if they are not lerped - return b.copyWith( - defaultStyle: TextStyle.lerp(a.defaultStyle, b.defaultStyle, t), - styles: b.styles, // TODO(wyatt): compute lerp value of each styles - ); - } - - /// Default TextStyle used in this rich text component. - final TextStyle? defaultStyle; - - /// Used styles in this rich text component. - final Map? styles; - - @override - RichTextBuilderStyle? mergeWith(RichTextBuilderStyle? other) => - RichTextBuilderStyle.merge(this, other); - - @override - RichTextBuilderStyle? copyWith({ - TextStyle? defaultStyle, - Map? styles, - }) => - RichTextBuilderStyle( - defaultStyle: defaultStyle ?? this.defaultStyle, - styles: styles ?? this.styles, - ); -} diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart index dd28e602..807274c4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart @@ -20,7 +20,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/loader/loader_theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; part 'loader.g.dart'; @@ -33,30 +32,11 @@ class Loader extends LoaderComponent with $LoaderCWMixin { super.stroke, super.duration, super.flip, - super.themeResolver, super.key, }); - @override - LoaderThemeResolver? get themeResolver => - super.themeResolver as LoaderThemeResolver?; - - /// Negotiate the theme to get a complete style. - LoaderStyle _resolve(BuildContext context) { - final LoaderThemeResolver resolver = themeResolver ?? - LoaderThemeResolver( - customStyleFn: (context, {extra}) => LoaderStyle( - colors: colors, - stroke: stroke, - ), - ); - - return resolver.negotiate(context); - } - @override Widget build(BuildContext context) { - final style = _resolve(context); final dimension = (radius != null) ? radius! * 2 : context.buttonTheme.height; return SizedBox.square( @@ -64,9 +44,34 @@ class Loader extends LoaderComponent with $LoaderCWMixin { child: RepaintBoundary( child: CustomPaint( painter: _LoaderPainter( - style.colors ?? const MultiColor([]), + ThemeHelper.getThemeElement( + [ + colors, + Theme.of(context).extension()?.colors, + MultiColor([ + Theme.of(context).progressIndicatorTheme.color ?? + context.colorScheme.primary, + context.colorScheme.onPrimary, + ]), + + /// This is the default value. So the final + /// value cannot be null. + const MultiColor([]) + ], + valueValidator: (multiColor) => + multiColor != null && multiColor.isColor, + transform: (multiColor) => multiColor, + )!, dimension / 2, - style.stroke ?? 4, + ThemeHelper.getThemeElement( + [ + stroke, + Theme.of(context).extension()?.stroke, + 4, + ], + valueValidator: (stroke) => stroke != null, + transform: (stroke) => stroke, + )!, flip: flip ?? false, ), ) diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart index 4f1243de..7576c3b4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader.g.dart @@ -41,7 +41,6 @@ class $LoaderCWProxyImpl implements $LoaderComponentCWProxy { stroke: stroke ?? _value.stroke, duration: duration ?? _value.duration, flip: flip ?? _value.flip, - themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart deleted file mode 100644 index 72e98477..00000000 --- a/packages/wyatt_ui_kit/lib/src/components/loader/loader_theme_resolver.dart +++ /dev/null @@ -1,58 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; - -class LoaderThemeResolver - extends ThemeResolver { - const LoaderThemeResolver({ - required this.customStyleFn, - }); - - @override - final LoaderStyle? Function( - BuildContext context, { - void extra, - }) customStyleFn; - - /// Values taken from - @override - LoaderStyle computeDefaultValue( - BuildContext context, { - void extra, - }) => - LoaderStyle( - colors: MultiColor([ - Theme.of(context).progressIndicatorTheme.color ?? - context.colorScheme.primary, - context.colorScheme.onPrimary, - ]), - stroke: 4, - ); - - @override - LoaderStyle? computeExtensionValueFn( - BuildContext context, - LoaderThemeExtension? themeExtension, { - void extra, - }) => - LoaderStyle( - colors: themeExtension?.colors, - stroke: themeExtension?.stroke, - ); -} diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart index c16df96c..a0f80177 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; part 'rich_text_builder.g.dart'; @@ -30,37 +29,39 @@ class RichTextBuilder extends RichTextBuilderComponent super.parser, super.defaultStyle, super.styles, - super.themeResolver, super.key, }); - @override - RichTextBuilderThemeResolver? get themeResolver => - super.themeResolver as RichTextBuilderThemeResolver?; - - /// Negotiate the theme to get a complete style. - RichTextBuilderStyle _resolve(BuildContext context) { - final RichTextBuilderThemeResolver resolver = themeResolver ?? - RichTextBuilderThemeResolver( - customStyleFn: (context, {extra}) => RichTextBuilderStyle( - defaultStyle: defaultStyle, - styles: styles, - ), - ); - - return resolver.negotiate(context); - } - @override Widget build(BuildContext context) { - final style = _resolve(context); final RegExp regex = RegExp(r'<(.*?)>(.*?)<\/\1>'); final root = RichTextNode.from( text ?? '', regex, RichTextStyleParameter( - style.defaultStyle, - style.styles ?? {}, + ThemeHelper.getThemeElement( + [ + defaultStyle, + Theme.of(context) + .extension() + ?.defaultStyle, + context.textTheme.bodyMedium, + ], + valueValidator: (style) => style != null, + transform: (style) => style, + ), + ThemeHelper.getThemeElement, + Map>( + [ + styles, + Theme.of(context) + .extension() + ?.styles, + const {}, + ], + valueValidator: (styles) => styles != null, + transform: (styles) => styles, + )!, null, ), ); diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart index 235c5f0f..87ca0548 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.g.dart @@ -20,10 +20,6 @@ class $RichTextBuilderCWProxyImpl implements $RichTextBuilderComponentCWProxy { RichTextBuilder styles(Map? styles) => this(styles: styles); @override - RichTextBuilder themeResolver( - ThemeResolver? themeResolver) => - this(themeResolver: themeResolver); - @override RichTextBuilder key(Key? key) => this(key: key); @override RichTextBuilder call({ @@ -31,7 +27,6 @@ class $RichTextBuilderCWProxyImpl implements $RichTextBuilderComponentCWProxy { RichTextParser? parser, TextStyle? defaultStyle, Map? styles, - ThemeResolver? themeResolver, Key? key, }) => RichTextBuilder( @@ -39,7 +34,6 @@ class $RichTextBuilderCWProxyImpl implements $RichTextBuilderComponentCWProxy { parser: parser ?? _value.parser, defaultStyle: defaultStyle ?? _value.defaultStyle, styles: styles ?? _value.styles, - themeResolver: themeResolver ?? _value.themeResolver, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart deleted file mode 100644 index 74202562..00000000 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart +++ /dev/null @@ -1,53 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; - -class RichTextBuilderThemeResolver extends ThemeResolver { - const RichTextBuilderThemeResolver({ - required this.customStyleFn, - }); - - /// Values taken from - @override - RichTextBuilderStyle computeDefaultValue( - BuildContext context, { - void extra, - }) => - RichTextBuilderStyle( - defaultStyle: context.textTheme.bodyMedium, - ); - - @override - final RichTextBuilderStyle? Function( - BuildContext context, { - void extra, - }) customStyleFn; - - @override - RichTextBuilderStyle? computeExtensionValueFn( - BuildContext context, - RichTextBuilderThemeExtension? themeExtension, { - void extra, - }) => - RichTextBuilderStyle( - defaultStyle: themeExtension?.defaultStyle, - styles: themeExtension?.styles, - ); -} -- 2.47.2 From 20f07a177b5ffdddbbc32dc0f613adfd195e1985 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 18:50:17 +0100 Subject: [PATCH 192/320] feat(analysis): ignore todo's --- .../lib/analysis_options.2.4.1.yaml | 217 ++++++++++++++++++ .../lib/analysis_options.flutter.2.4.1.yaml | 32 +++ .../lib/analysis_options.flutter.yaml | 3 +- .../wyatt_analysis/lib/analysis_options.yaml | 3 +- .../wyatt_analysis/lib/wyatt_analysis.dart | 2 +- packages/wyatt_analysis/pubspec.yaml | 8 +- 6 files changed, 256 insertions(+), 9 deletions(-) create mode 100644 packages/wyatt_analysis/lib/analysis_options.2.4.1.yaml create mode 100644 packages/wyatt_analysis/lib/analysis_options.flutter.2.4.1.yaml diff --git a/packages/wyatt_analysis/lib/analysis_options.2.4.1.yaml b/packages/wyatt_analysis/lib/analysis_options.2.4.1.yaml new file mode 100644 index 00000000..7e6df9b3 --- /dev/null +++ b/packages/wyatt_analysis/lib/analysis_options.2.4.1.yaml @@ -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 . + +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: + - 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 diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.2.4.1.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.2.4.1.yaml new file mode 100644 index 00000000..0d3a8fd9 --- /dev/null +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.2.4.1.yaml @@ -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 . + +include: package:wyatt_analysis/analysis_options.2.4.1.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 diff --git a/packages/wyatt_analysis/lib/analysis_options.flutter.yaml b/packages/wyatt_analysis/lib/analysis_options.flutter.yaml index d956036f..acb4b152 100644 --- a/packages/wyatt_analysis/lib/analysis_options.flutter.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.flutter.yaml @@ -14,5 +14,4 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.flutter.2.4.0.yaml - +include: package:wyatt_analysis/analysis_options.flutter.2.4.1.yaml diff --git a/packages/wyatt_analysis/lib/analysis_options.yaml b/packages/wyatt_analysis/lib/analysis_options.yaml index d86a924d..247b8c81 100644 --- a/packages/wyatt_analysis/lib/analysis_options.yaml +++ b/packages/wyatt_analysis/lib/analysis_options.yaml @@ -14,5 +14,4 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -include: package:wyatt_analysis/analysis_options.2.4.0.yaml - +include: package:wyatt_analysis/analysis_options.2.4.1.yaml diff --git a/packages/wyatt_analysis/lib/wyatt_analysis.dart b/packages/wyatt_analysis/lib/wyatt_analysis.dart index 8edb8a9e..6e1cf545 100644 --- a/packages/wyatt_analysis/lib/wyatt_analysis.dart +++ b/packages/wyatt_analysis/lib/wyatt_analysis.dart @@ -18,4 +18,4 @@ /// used internally at [Wyatt Studio](https://wyatt-studio.fr). library wyatt_analysis; -const String wyattAnalysisVersion = '2.4.0'; +const String wyattAnalysisVersion = '2.4.1'; diff --git a/packages/wyatt_analysis/pubspec.yaml b/packages/wyatt_analysis/pubspec.yaml index 53e34c1b..0b9e09f1 100644 --- a/packages/wyatt_analysis/pubspec.yaml +++ b/packages/wyatt_analysis/pubspec.yaml @@ -1,16 +1,16 @@ # 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 . @@ -22,4 +22,4 @@ version: 2.4.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: - sdk: '>=2.12.0 <3.0.0' \ No newline at end of file + sdk: ">=2.12.0 <3.0.0" -- 2.47.2 From 0f8c5bb9832592d2a1e14688bf83fa006cf2faa0 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 18:52:27 +0100 Subject: [PATCH 193/320] ci(analysis): ignore script in publish (closes #124) --- packages/wyatt_analysis/.pubignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 packages/wyatt_analysis/.pubignore diff --git a/packages/wyatt_analysis/.pubignore b/packages/wyatt_analysis/.pubignore new file mode 100644 index 00000000..e2355bec --- /dev/null +++ b/packages/wyatt_analysis/.pubignore @@ -0,0 +1,2 @@ +new_version.sh +.latest_version \ No newline at end of file -- 2.47.2 From d098d9a6bf518a5a23208f30914a9b2f5e42bba0 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 18:53:03 +0100 Subject: [PATCH 194/320] feat(analysis): add latest version persistence between script executions --- packages/wyatt_analysis/.latest_version | 1 + .../wyatt_analysis/.vscode/extensions.json | 2 +- packages/wyatt_analysis/README.md | 21 ++++++++---- packages/wyatt_analysis/new_version.sh | 33 ++++++++++++------- 4 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 packages/wyatt_analysis/.latest_version diff --git a/packages/wyatt_analysis/.latest_version b/packages/wyatt_analysis/.latest_version new file mode 100644 index 00000000..005119ba --- /dev/null +++ b/packages/wyatt_analysis/.latest_version @@ -0,0 +1 @@ +2.4.1 diff --git a/packages/wyatt_analysis/.vscode/extensions.json b/packages/wyatt_analysis/.vscode/extensions.json index 30cd2233..bc053a4b 100644 --- a/packages/wyatt_analysis/.vscode/extensions.json +++ b/packages/wyatt_analysis/.vscode/extensions.json @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 WYATT GROUP + * Copyright (C) 2023 WYATT GROUP * Please see the AUTHORS file for details. * * This program is free software: you can redistribute it and/or modify diff --git a/packages/wyatt_analysis/README.md b/packages/wyatt_analysis/README.md index bd675c4a..28b5244d 100644 --- a/packages/wyatt_analysis/README.md +++ b/packages/wyatt_analysis/README.md @@ -20,10 +20,18 @@ ![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.4.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.1.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). +## Adding Wyatt Analysis to your project + +Using CLI: + +```sh +dart pub add wyatt_analysis:2.4.1 --dev --hosted-url=https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ +``` + ## Usage To use the lints, add a dependency in your `pubspec.yaml` : @@ -31,7 +39,7 @@ To use the lints, add a dependency in your `pubspec.yaml` : ```yaml wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.4.0 + version: 2.4.1 ``` Then, add an include in `analysis_options.yaml` : @@ -49,13 +57,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: ```yaml -include: package:wyatt_analysis/analysis_options.flutter.2.4.0.yaml +include: package:wyatt_analysis/analysis_options.flutter.2.4.1.yaml ``` If you just want **Dart** version: ```yaml -include: package:wyatt_analysis/analysis_options.2.4.0.yaml +include: package:wyatt_analysis/analysis_options.2.4.1.yaml ``` ## Suppressing Lints @@ -109,10 +117,11 @@ To indicate your project is using `wyatt_analysis` → [![style: wyatt analysis] 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 +./new_version.sh ``` -> Where `` is 2.4.0 +The previous version is automatically detected thanks to the `.latest_version` file. +So `.latest_version` needs to be versioned! ## Notes diff --git a/packages/wyatt_analysis/new_version.sh b/packages/wyatt_analysis/new_version.sh index 625f89c5..2c40cb61 100755 --- a/packages/wyatt_analysis/new_version.sh +++ b/packages/wyatt_analysis/new_version.sh @@ -18,20 +18,12 @@ usage=" usage: - $(basename "$0") -- create new analyzer files. + $(basename "$0") -- 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 +new=$1 if [ -z "$new" ]; then echo "new_version cannot be null" @@ -43,6 +35,19 @@ SCRIPT_PATH="${BASH_SOURCE:-$0}" ABS_SCRIPT_PATH="$(realpath "${SCRIPT_PATH}")" ABS_DIRECTORY="$(dirname "${ABS_SCRIPT_PATH}")" +LATEST_VERSION="${ABS_DIRECTORY}/.latest_version" + +# Read latest version +if [ -e "$LATEST_VERSION" ]; then + old=$(cat "$LATEST_VERSION") + echo "> latest package version is: $old" + echo "> new package version is: $new" +else + echo "latest version is not set" + echo "create a file named \`.latest_version\` in the root of the project" + exit 1 +fi + LIB="${ABS_DIRECTORY}/lib/wyatt_analysis.dart" OPTIONS="${ABS_DIRECTORY}/lib/analysis_options.yaml" OLD_OPTIONS="${ABS_DIRECTORY}/lib/analysis_options.${old}.yaml" @@ -52,6 +57,7 @@ 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}" @@ -91,7 +97,7 @@ sed -e "s/${old}/${new}/g" "README.md" > tempfile.tmp mv -f tempfile.tmp "README.md" echo " -# Copyright (C) 2022 WYATT GROUP +# Copyright (C) 2023 WYATT GROUP # Please see the AUTHORS file for details. # # This program is free software: you can redistribute it and/or modify @@ -111,7 +117,7 @@ include: package:wyatt_analysis/analysis_options.${new}.yaml " > "${OPTIONS}" echo " -# Copyright (C) 2022 WYATT GROUP +# Copyright (C) 2023 WYATT GROUP # Please see the AUTHORS file for details. # # This program is free software: you can redistribute it and/or modify @@ -130,4 +136,7 @@ echo " include: package:wyatt_analysis/analysis_options.flutter.${new}.yaml " > "${OPTIONS_FLUTTER}" +# Update latest version +echo "${new}" > "$LATEST_VERSION" + exit 0 -- 2.47.2 From 8d833d39d7f0da4cde74852f8f6257348c2cdc76 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 23 Feb 2023 19:19:48 +0100 Subject: [PATCH 195/320] chore: fix and format using melos --- melos.yaml | 14 +- .../lib/data/models/list_photo_model.dart | 1 - .../repositories/photo_repository_impl.dart | 1 - .../local/favorite_local_data_source.dart | 6 +- .../remote/album_remote_data_source.dart | 6 +- .../remote/photo_remote_data_source.dart | 6 +- .../photos/add_photo_to_favorites.dart | 1 - .../check_if_photo_is_in_favorites.dart | 1 - .../usecases/photos/display_favorites.dart | 1 - .../domain/usecases/photos/display_photo.dart | 1 - .../domain/usecases/photos/open_album.dart | 1 - .../photos/params/query_parameters.dart | 1 - .../photos/remove_photo_from_favorites.dart | 1 - .../usecases/photos/retrieve_all_albums.dart | 1 - .../albums/blocs/album/album_bloc.dart | 1 - .../state_management/widgets/albums_list.dart | 7 +- .../photo_details/photo_details_state.dart | 2 - .../favorite_checker_cubit.dart | 1 - .../favorite_checker_state.dart | 2 - .../photos/blocs/photo/photo_bloc.dart | 1 - .../photos/blocs/photo/photo_event.dart | 1 - .../state_management/widgets/photos_grid.dart | 26 ++-- .../widgets/photos_grid_thumbnail.dart | 5 +- .../lib/src/core/exceptions/exceptions.dart | 1 - .../domain/data_sources/base_data_source.dart | 6 +- .../src/domain/data_sources/data_sources.dart | 6 +- .../local/base_local_data_source.dart | 6 +- .../src/domain/data_sources/local/local.dart | 6 +- .../remote/base_remote_data_source.dart | 6 +- .../domain/data_sources/remote/remote.dart | 6 +- .../lib/src/domain/entities/entities.dart | 6 +- .../lib/src/domain/entities/entity.dart | 6 +- .../src/domain/repositories/repositories.dart | 6 +- packages/wyatt_architecture/lib/src/src.dart | 6 +- .../email_verification_cubit_test.dart | 4 +- .../password_reset_cubit_test.dart | 4 +- .../test/sign_in/sign_in_cubit_test.dart | 4 +- .../test/sign_up/sign_up_cubit_test.dart | 4 +- .../lib/counter/bloc/counter_bloc.dart | 7 +- .../lib/counter/bloc/counter_event.dart | 6 +- .../lib/counter/bloc/counter_state.dart | 7 +- .../lib/counter/counter_bloc_page.dart | 6 +- .../lib/counter/counter_consumer_page.dart | 3 +- .../lib/counter/counter_cubit_page.dart | 17 +-- .../lib/counter/counter_provider_page.dart | 2 +- .../lib/counter/cubit/counter_state.dart | 7 +- .../example/lib/counter_observer.dart | 8 +- .../example/lib/main_page.dart | 3 +- .../src/mixins/bloc_base_provider_mixin.dart | 2 +- .../lib/src/mixins/bloc_provider_mixin.dart | 2 +- .../lib/src/widgets/multi_provider.dart | 6 +- .../wyatt_bloc_layout/analysis_options.yaml | 6 +- .../example/lib/bloc/example_cubit.dart | 20 +-- .../lib/components/custom_app_bar.dart | 2 +- .../lib/components/custom_bottom_bar.dart | 22 +-- .../lib/components/custom_error_widget.dart | 2 +- .../lib/components/custom_loading_widget.dart | 2 +- .../lib/components/theme_components.dart | 4 +- .../wyatt_bloc_layout/example/lib/main.dart | 100 ++++++------- .../example/test/widget_test.dart | 2 +- .../crud_cubit_consumer_screen_mixin.dart | 2 +- ...bar_layout_crud_cubit_consumer_screen.dart | 2 +- .../src/presentation/consumers/crud/crud.dart | 2 +- .../crud/crud_cubit_consumer_screen.dart | 2 +- .../src/presentation/screens/crud/crud.dart | 2 +- .../screens/crud/crud_cubit_screen.dart | 2 +- packages/wyatt_bloc_layout/lib/src/src.dart | 12 +- packages/wyatt_bloc_layout/pubspec.yaml | 13 +- .../analysis_options.yaml | 6 - .../pubspec.yaml | 2 + packages/wyatt_crud_bloc/example/lib/app.dart | 5 +- .../example/lib/app_bloc_observer.dart | 6 +- .../example/test/widget_test.dart | 1 + .../wyatt_crud_bloc/lib/src/data/data.dart | 6 +- .../crud_in_memory_data_source_impl.dart | 1 - .../crud_firestore_data_source_impl.dart | 1 - .../repositories/crud_repository_impl.dart | 1 - .../src/data/repositories/repositories.dart | 6 +- .../src/domain/data_sources/data_sources.dart | 6 +- .../lib/src/domain/domain.dart | 6 +- .../lib/src/domain/entities/entities.dart | 6 +- .../lib/src/domain/entities/query.dart | 3 - .../src/domain/repositories/repositories.dart | 6 +- .../lib/src/domain/usecases/delete.dart | 1 - .../lib/src/domain/usecases/delete_all.dart | 1 - .../lib/src/domain/usecases/get.dart | 1 - .../lib/src/domain/usecases/get_all.dart | 1 - .../src/domain/usecases/params/params.dart | 6 +- .../usecases/params/stream_parameters.dart | 2 +- .../usecases/params/update_parameters.dart | 2 +- .../lib/src/domain/usecases/query.dart | 1 - .../lib/src/domain/usecases/stream_query.dart | 10 +- .../lib/src/domain/usecases/update.dart | 1 - .../lib/src/domain/usecases/update_all.dart | 1 - .../lib/src/domain/usecases/usecases.dart | 6 +- .../src/features/crud/builder/builder.dart | 6 +- .../src/features/crud/cubit/crud_cubit.dart | 1 - .../src/features/crud/cubit/crud_state.dart | 3 - .../lib/src/features/features.dart | 6 +- .../wyatt_form_bloc/example/lib/app/app.dart | 6 +- .../example/lib/app/metadata.dart | 5 +- .../example/lib/constants.dart | 8 +- .../lib/sign_up/widgets/sign_up_form.dart | 3 +- .../example/test/widget_test.dart | 1 + .../lib/src/core/enums/set_operations.dart | 4 +- .../lib/src/core/enums/validation_error.dart | 6 +- .../lib/src/data/form/wyatt_form_impl.dart | 3 +- .../src/data/input_validators/boolean.dart | 6 +- .../data/input_validators/enum_option.dart | 3 +- .../lib/src/domain/entities/form_input.dart | 3 +- .../features/form_data/form_data_state.dart | 2 +- .../form_data_impl/form_data_cubit_impl.dart | 1 - .../example/http_client_fastapi_example.dart | 133 +++++++++--------- .../lib/src/middleware_client.dart | 1 - .../access_token_auth_middleware.dart | 7 +- .../middlewares/basic_auth_middleware.dart | 1 - .../middlewares/digest_auth_middleware.dart | 1 - .../lib/src/middlewares/middlewares.dart | 6 +- .../refresh_token_auth_middleware.dart | 1 - .../middlewares/unsafe_auth_middleware.dart | 1 - .../middlewares/uri_prefix_middleware.dart | 1 - .../lib/src/models/middleware_context.dart | 22 +-- .../lib/src/models/middleware_response.dart | 11 +- .../lib/src/models/models.dart | 6 +- .../lib/src/models/unfreezed_request.dart | 18 +-- .../wyatt_http_client/lib/src/pipeline.dart | 4 +- .../lib/src/utils/convert.dart | 10 +- .../lib/src/utils/digest_auth.dart | 3 +- .../lib/src/utils/http_methods.dart | 4 +- .../lib/src/utils/http_status.dart | 11 +- .../lib/src/utils/utils.dart | 6 +- .../example/lib/main.dart | 2 +- .../lib/src/wyatt_notification_bloc_base.dart | 2 - .../wyatt_type_utils/example/lib/error.dart | 1 - .../wyatt_type_utils/example/lib/todo.dart | 2 +- .../lib/src/either/option.dart | 15 +- .../lib/src/either/result.dart | 2 - .../src/extensions/iterable_extension.dart | 2 +- .../lib/src/extensions/string_extension.dart | 2 +- .../wyatt_type_utils/lib/src/pair/pair.dart | 1 - .../wyatt_type_utils/test/result_test.dart | 6 +- .../entities/loader/loader_component.dart | 2 +- .../rich_text_builder_component.dart | 2 +- .../lib/src/features/component_theme.dart | 1 - .../example/test/widget_test.dart | 1 + .../file_selection_button_theme_resolver.dart | 1 - .../flat_button/flat_button_screen.dart | 1 + .../symbol_button_theme_resolver.dart | 1 - .../components/cards/widgets/card_text.dart | 2 +- .../src/components/gradients/gradients.dart | 6 +- .../features/wyatt_component_theme_data.dart | 8 +- packages/wyatt_ui_layout/pubspec.yaml | 2 + 152 files changed, 441 insertions(+), 468 deletions(-) diff --git a/melos.yaml b/melos.yaml index 3430ffd7..627be29e 100644 --- a/melos.yaml +++ b/melos.yaml @@ -24,13 +24,17 @@ scripts: melos exec -c 1 -- flutter analyze --fatal-infos description: Run `flutter analyze` for all packages. - format: - run: melos exec flutter format . --fix - description: Run `flutter format` for all packages. + fix: + run: melos exec dart fix . --apply + description: Run `dart fix` for all packages. + format: + run: melos exec dart format . + description: Run `dart format` for all packages. + format-check: - run: melos exec flutter format . --set-exit-if-changed - description: Run `flutter format` checks for all packages. + run: melos exec dart fix . --set-exit-if-changed + description: Run `dart fix` checks for all packages. clean:deep: run: git clean -x -d -f -q diff --git a/packages/wyatt_architecture/example/lib/data/models/list_photo_model.dart b/packages/wyatt_architecture/example/lib/data/models/list_photo_model.dart index 1112389a..38350986 100644 --- a/packages/wyatt_architecture/example/lib/data/models/list_photo_model.dart +++ b/packages/wyatt_architecture/example/lib/data/models/list_photo_model.dart @@ -15,7 +15,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . - import 'package:architecture_example/data/models/photo_model.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; diff --git a/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart b/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart index d30d74ba..d7a5aaf3 100644 --- a/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart +++ b/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart @@ -24,7 +24,6 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class PhotoRepositoryImpl extends PhotoRepository { - PhotoRepositoryImpl( this._photoRemoteDataSource, this._albumRemoteDataSource, diff --git a/packages/wyatt_architecture/example/lib/domain/data_sources/local/favorite_local_data_source.dart b/packages/wyatt_architecture/example/lib/domain/data_sources/local/favorite_local_data_source.dart index c9b06187..587a99ee 100644 --- a/packages/wyatt_architecture/example/lib/domain/data_sources/local/favorite_local_data_source.dart +++ b/packages/wyatt_architecture/example/lib/domain/data_sources/local/favorite_local_data_source.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/example/lib/domain/data_sources/remote/album_remote_data_source.dart b/packages/wyatt_architecture/example/lib/domain/data_sources/remote/album_remote_data_source.dart index 996f76b2..fbef7f9a 100644 --- a/packages/wyatt_architecture/example/lib/domain/data_sources/remote/album_remote_data_source.dart +++ b/packages/wyatt_architecture/example/lib/domain/data_sources/remote/album_remote_data_source.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/example/lib/domain/data_sources/remote/photo_remote_data_source.dart b/packages/wyatt_architecture/example/lib/domain/data_sources/remote/photo_remote_data_source.dart index 5b1d79a9..81d03a9a 100644 --- a/packages/wyatt_architecture/example/lib/domain/data_sources/remote/photo_remote_data_source.dart +++ b/packages/wyatt_architecture/example/lib/domain/data_sources/remote/photo_remote_data_source.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart index f84969a3..769ae81d 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart @@ -21,7 +21,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class AddPhotoToFavorites extends AsyncUseCase> { - AddPhotoToFavorites(this._photoRepository); final PhotoRepository _photoRepository; diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart index d208f554..7ff464ce 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart @@ -20,7 +20,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class CheckIfPhotoIsInFavorites extends AsyncUseCase { - CheckIfPhotoIsInFavorites(this._photoRepository); final PhotoRepository _photoRepository; diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart index 4d7bb3d9..8bdf027f 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_favorites.dart @@ -19,7 +19,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class DisplayFavorites extends AsyncUseCase> { - DisplayFavorites(this._photoRepository); final PhotoRepository _photoRepository; diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart index 82b3ecce..36076c70 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart @@ -21,7 +21,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class DisplayPhoto extends AsyncUseCase { - DisplayPhoto(this._photoRepository); final PhotoRepository _photoRepository; diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart index ca59d1b5..8badf689 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart @@ -22,7 +22,6 @@ import 'package:architecture_example/domain/usecases/photos/params/query_paramet import 'package:wyatt_architecture/wyatt_architecture.dart'; class OpenAlbum extends AsyncUseCase> { - OpenAlbum(this._photoRepository); final PhotoRepository _photoRepository; diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart index 525dd438..4ac96e8e 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/params/query_parameters.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . class QueryParameters { - QueryParameters(this.start, this.limit, {this.albumId = -1}); final int albumId; final int? start; diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart index 9e361137..737c59a1 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart @@ -21,7 +21,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; class RemovePhotoFromFavorites extends AsyncUseCase> { - RemovePhotoFromFavorites(this._photoRepository); final PhotoRepository _photoRepository; diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart index 286de15b..0fc6a757 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart @@ -22,7 +22,6 @@ import 'package:architecture_example/domain/usecases/photos/params/query_paramet import 'package:wyatt_architecture/wyatt_architecture.dart'; class RetrieveAllAlbums extends AsyncUseCase> { - RetrieveAllAlbums(this._photoRepository); final PhotoRepository _photoRepository; diff --git a/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart b/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart index ae79c30d..896a06dd 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/albums/blocs/album/album_bloc.dart @@ -33,7 +33,6 @@ EventTransformer throttleDroppable(Duration duration) => (events, mapper) => droppable().call(events.throttle(duration), mapper); class AlbumBloc extends Bloc { - AlbumBloc(this._retrieveAllAlbums) : super(const AlbumState()) { on( _onAlbumFetched, diff --git a/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/widgets/albums_list.dart b/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/widgets/albums_list.dart index 82af8ecd..5e2db9f6 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/widgets/albums_list.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/widgets/albums_list.dart @@ -22,8 +22,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class AlbumsList extends StatefulWidget { - const AlbumsList( - {required this.albums, required this.hasReachedMax, super.key,}); + const AlbumsList({ + required this.albums, + required this.hasReachedMax, + super.key, + }); final List albums; final bool hasReachedMax; diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart b/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart index c8da9232..980678c0 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photo_details/blocs/photo_details/photo_details_state.dart @@ -26,7 +26,6 @@ abstract class PhotoDetailsState extends Equatable { class PhotoDetailsInitial extends PhotoDetailsState {} class PhotoDetailsSuccess extends PhotoDetailsState { - const PhotoDetailsSuccess(this.photo, {required this.isFavorite}); final Photo photo; final bool isFavorite; @@ -36,7 +35,6 @@ class PhotoDetailsSuccess extends PhotoDetailsState { } class PhotoDetailsFailure extends PhotoDetailsState { - const PhotoDetailsFailure(this.error); final String error; diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart index 1a15f123..7999f3a4 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_cubit.dart @@ -23,7 +23,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; part 'favorite_checker_state.dart'; class FavoriteCheckerCubit extends Cubit { - FavoriteCheckerCubit(this._checkIfPhotoIsInFavorites) : super(FavoriteCheckerInitial()); final CheckIfPhotoIsInFavorites _checkIfPhotoIsInFavorites; diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart index ca762080..08a58826 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/favorite_checker/favorite_checker_state.dart @@ -10,7 +10,6 @@ abstract class FavoriteCheckerState extends Equatable { class FavoriteCheckerInitial extends FavoriteCheckerState {} class FavoriteCheckerSuccess extends FavoriteCheckerState { - const FavoriteCheckerSuccess(this.photoId, {required this.isFavorite}); final int photoId; final bool isFavorite; @@ -20,7 +19,6 @@ class FavoriteCheckerSuccess extends FavoriteCheckerState { } class FavoriteCheckerFailure extends FavoriteCheckerState { - const FavoriteCheckerFailure(this.error); final String error; diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart index c82c84c5..a0893eca 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_bloc.dart @@ -33,7 +33,6 @@ EventTransformer throttleDroppable(Duration duration) => (events, mapper) => droppable().call(events.throttle(duration), mapper); class PhotoBloc extends Bloc { - PhotoBloc(this._openAlbum) : super(const PhotoState()) { on( _onPhotoFetched, diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart index c9a6bfab..7f52aa44 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/blocs/photo/photo_event.dart @@ -24,7 +24,6 @@ abstract class PhotoEvent extends Equatable { } class PhotoFetched extends PhotoEvent { - const PhotoFetched(this.albumId); final int albumId; } diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid.dart index 80e6ad99..8f1d125a 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid.dart @@ -71,17 +71,17 @@ class _PhotosGridState extends State { @override Widget build(BuildContext context) => GridView.builder( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisSpacing: 4, - mainAxisSpacing: 4, - crossAxisCount: 4, - ), - itemCount: widget.hasReachedMax - ? widget.photos.length - : widget.photos.length + 1, - controller: _scrollController, - itemBuilder: (context, index) => index >= widget.photos.length - ? const BottomLoader() - : PhotosGridThumbnail(photo: widget.photos[index]), - ); + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisSpacing: 4, + mainAxisSpacing: 4, + crossAxisCount: 4, + ), + itemCount: widget.hasReachedMax + ? widget.photos.length + : widget.photos.length + 1, + controller: _scrollController, + itemBuilder: (context, index) => index >= widget.photos.length + ? const BottomLoader() + : PhotosGridThumbnail(photo: widget.photos[index]), + ); } diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid_thumbnail.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid_thumbnail.dart index ab312ca2..021227ff 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid_thumbnail.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/widgets/photos_grid_thumbnail.dart @@ -55,7 +55,10 @@ class PhotosGridThumbnail ), if (state is FavoriteCheckerSuccess && state.isFavorite) ...[ const Positioned( - bottom: 10, right: 10, child: Icon(Icons.favorite),) + bottom: 10, + right: 10, + child: Icon(Icons.favorite), + ) ] ], ), diff --git a/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart index 5f568cd5..3fb15944 100644 --- a/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart @@ -17,7 +17,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; abstract class AppException implements Exception { - AppException([this.message]); final String? message; diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart index f6a0688a..5dc243db 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart index c226b67b..17ffc5c8 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart index 820a5fd3..1d7c134c 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart index 08fce718..e45c6a57 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart index 08e10d36..a4a72999 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart index 81d8f125..7403e595 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/entities/entities.dart b/packages/wyatt_architecture/lib/src/domain/entities/entities.dart index 47ef61fa..937b195e 100644 --- a/packages/wyatt_architecture/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_architecture/lib/src/domain/entities/entities.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/entities/entity.dart b/packages/wyatt_architecture/lib/src/domain/entities/entity.dart index 67df1106..fd988950 100644 --- a/packages/wyatt_architecture/lib/src/domain/entities/entity.dart +++ b/packages/wyatt_architecture/lib/src/domain/entities/entity.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart b/packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart index bc97c14e..bac1ea4c 100644 --- a/packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart +++ b/packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_architecture/lib/src/src.dart b/packages/wyatt_architecture/lib/src/src.dart index 50ef204e..2a39a026 100644 --- a/packages/wyatt_architecture/lib/src/src.dart +++ b/packages/wyatt_architecture/lib/src/src.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart b/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart index e07a4f2d..05ea7a74 100644 --- a/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart @@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class MockAuthenticationRepository extends Mock implements AuthenticationRepository {} -class MockAuthenticationCubit extends Mock implements AuthenticationCubit { -} +class MockAuthenticationCubit extends Mock + implements AuthenticationCubit {} class MockAccount extends Mock implements Account {} diff --git a/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart b/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart index e28ecb73..ab37fcd3 100644 --- a/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart @@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class MockAuthenticationRepository extends Mock implements AuthenticationRepository {} -class MockAuthenticationCubit extends Mock implements AuthenticationCubit { -} +class MockAuthenticationCubit extends Mock + implements AuthenticationCubit {} class MockAccount extends Mock implements Account {} diff --git a/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart b/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart index d45316ff..622bfb79 100644 --- a/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart @@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class MockAuthenticationRepository extends Mock implements AuthenticationRepository {} -class MockAuthenticationCubit extends Mock implements AuthenticationCubit { -} +class MockAuthenticationCubit extends Mock + implements AuthenticationCubit {} class MockAccount extends Mock implements Account {} diff --git a/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart b/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart index 3d54a978..cc966202 100644 --- a/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart @@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class MockAuthenticationRepository extends Mock implements AuthenticationRepository {} -class MockAuthenticationCubit extends Mock implements AuthenticationCubit { -} +class MockAuthenticationCubit extends Mock + implements AuthenticationCubit {} class MockAccount extends Mock implements Account {} diff --git a/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_bloc.dart b/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_bloc.dart index 5bbd3d8e..7c807148 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_bloc.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_bloc.dart @@ -1,16 +1,16 @@ // 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 . @@ -25,7 +25,6 @@ class CounterBloc extends Bloc { final CounterRepository counterRepository; CounterBloc(this.counterRepository) : super(const CounterInitial()) { - on((event, emit) { emit(CounterModified(counterRepository.increment(state.count))); }); diff --git a/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_event.dart b/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_event.dart index c9d38554..53712a48 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_event.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_event.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_state.dart b/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_state.dart index c0179e74..3a92be0f 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_state.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/bloc/counter_state.dart @@ -1,16 +1,16 @@ // 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 . @@ -32,4 +32,3 @@ class CounterInitial extends CounterState { class CounterModified extends CounterState { const CounterModified(super.count); } - diff --git a/packages/wyatt_bloc_helper/example/lib/counter/counter_bloc_page.dart b/packages/wyatt_bloc_helper/example/lib/counter/counter_bloc_page.dart index 2cb6f1d5..de9582da 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/counter_bloc_page.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/counter_bloc_page.dart @@ -24,14 +24,16 @@ class CounterBlocPage const CounterBlocPage({super.key}); @override - CounterBloc create(BuildContext context) => CounterBloc(repo(context)); + CounterBloc create(BuildContext context) => + CounterBloc(repo(context)); @override Widget onBuild(BuildContext context, CounterState state) { final textTheme = Theme.of(context).textTheme; return Scaffold( appBar: AppBar(title: const Text('Counter with Bloc')), - body: Center(child: Text('${state.count}', style: textTheme.headline2)), + body: + Center(child: Text('${state.count}', style: textTheme.displayMedium)), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, diff --git a/packages/wyatt_bloc_helper/example/lib/counter/counter_consumer_page.dart b/packages/wyatt_bloc_helper/example/lib/counter/counter_consumer_page.dart index 9a4a3005..76d426ad 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/counter_consumer_page.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/counter_consumer_page.dart @@ -28,7 +28,8 @@ class CounterConsumerPage final textTheme = Theme.of(context).textTheme; return Scaffold( appBar: AppBar(title: const Text('Counter with Consumer')), - body: Center(child: Text('${state.count}', style: textTheme.headline2)), + body: + Center(child: Text('${state.count}', style: textTheme.displayMedium)), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, diff --git a/packages/wyatt_bloc_helper/example/lib/counter/counter_cubit_page.dart b/packages/wyatt_bloc_helper/example/lib/counter/counter_cubit_page.dart index 5e04d72a..d906c30e 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/counter_cubit_page.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/counter_cubit_page.dart @@ -1,16 +1,16 @@ // 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 . @@ -19,19 +19,20 @@ import 'package:bloc_helper_example/counter/repository/counter_repository.dart'; import 'package:flutter/material.dart'; import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; -class CounterCubitPage - extends CubitScreen { +class CounterCubitPage extends CubitScreen { const CounterCubitPage({super.key}); @override - CounterCubit create(BuildContext context) => CounterCubit(repo(context)); + CounterCubit create(BuildContext context) => + CounterCubit(repo(context)); @override Widget onBuild(BuildContext context, CounterState state) { final textTheme = Theme.of(context).textTheme; return Scaffold( appBar: AppBar(title: const Text('Counter with Cubit')), - body: Center(child: Text('${state.count}', style: textTheme.headline2)), + body: + Center(child: Text('${state.count}', style: textTheme.displayMedium)), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, @@ -53,4 +54,4 @@ class CounterCubitPage ), ); } -} \ No newline at end of file +} diff --git a/packages/wyatt_bloc_helper/example/lib/counter/counter_provider_page.dart b/packages/wyatt_bloc_helper/example/lib/counter/counter_provider_page.dart index 7a6c3d8c..4b81135a 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/counter_provider_page.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/counter_provider_page.dart @@ -35,7 +35,7 @@ class CounterProviderPage appBar: AppBar(title: const Text('Counter with Provider')), body: Center(child: BlocBuilder( builder: (context, state) { - return Text('${state.count}', style: textTheme.headline2); + return Text('${state.count}', style: textTheme.displayMedium); }, )), floatingActionButton: Column( diff --git a/packages/wyatt_bloc_helper/example/lib/counter/cubit/counter_state.dart b/packages/wyatt_bloc_helper/example/lib/counter/cubit/counter_state.dart index e1f39749..87e880b8 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter/cubit/counter_state.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter/cubit/counter_state.dart @@ -1,16 +1,16 @@ // 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 . @@ -32,4 +32,3 @@ class CounterInitial extends CounterState { class CounterModified extends CounterState { const CounterModified(super.count); } - diff --git a/packages/wyatt_bloc_helper/example/lib/counter_observer.dart b/packages/wyatt_bloc_helper/example/lib/counter_observer.dart index 8c75491b..26b1784c 100644 --- a/packages/wyatt_bloc_helper/example/lib/counter_observer.dart +++ b/packages/wyatt_bloc_helper/example/lib/counter_observer.dart @@ -1,16 +1,16 @@ // 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 . @@ -23,4 +23,4 @@ class CounterObserver extends BlocObserver { super.onChange(bloc, change); debugPrint('${bloc.runtimeType} $change'); } -} \ No newline at end of file +} diff --git a/packages/wyatt_bloc_helper/example/lib/main_page.dart b/packages/wyatt_bloc_helper/example/lib/main_page.dart index 2a82d039..b68383e3 100644 --- a/packages/wyatt_bloc_helper/example/lib/main_page.dart +++ b/packages/wyatt_bloc_helper/example/lib/main_page.dart @@ -56,7 +56,8 @@ class MainPage extends StatelessWidget { onPressed: () => Navigator.of(context) .push(MaterialPageRoute(builder: (context) { return BlocProvider( - create: (context) => CounterCubit(context.read()), + create: (context) => + CounterCubit(context.read()), child: const CounterConsumerPage(), ); })), diff --git a/packages/wyatt_bloc_helper/lib/src/mixins/bloc_base_provider_mixin.dart b/packages/wyatt_bloc_helper/lib/src/mixins/bloc_base_provider_mixin.dart index 6c2cf006..37b3c524 100644 --- a/packages/wyatt_bloc_helper/lib/src/mixins/bloc_base_provider_mixin.dart +++ b/packages/wyatt_bloc_helper/lib/src/mixins/bloc_base_provider_mixin.dart @@ -25,7 +25,7 @@ mixin BlocBaseProviderMixin> { /// Returns another [BlocBase] **not** used by this [BlocBaseProviderMixin]. /// Short hand for `context.read();` - /// + /// /// To get [BlocBase] used by by this [BlocBaseProviderMixin] see `bloc()` AnotherBloc anotherBloc(BuildContext context) => context.read(); diff --git a/packages/wyatt_bloc_helper/lib/src/mixins/bloc_provider_mixin.dart b/packages/wyatt_bloc_helper/lib/src/mixins/bloc_provider_mixin.dart index 0680a048..dae33c71 100644 --- a/packages/wyatt_bloc_helper/lib/src/mixins/bloc_provider_mixin.dart +++ b/packages/wyatt_bloc_helper/lib/src/mixins/bloc_provider_mixin.dart @@ -21,7 +21,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as blocbase; /// of helper methods for events. mixin BlocProviderMixin, Event> { /// Add an event to the [Bloc]. - /// + /// /// Short hand for `context.read().add(event)`. void add(BuildContext context, Event event) => context.read().add(event); diff --git a/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart b/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart index f6503928..4cb3c2bf 100644 --- a/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart +++ b/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart @@ -18,14 +18,14 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; /// {@template multi_provider} -/// Merges [MultiRepositoryProvider] and [MultiBlocProvider] widgets into +/// Merges [MultiRepositoryProvider] and [MultiBlocProvider] widgets into /// one widget tree. /// /// [MultiProvider] improves the readability and eliminates the need /// to nest multiple providers. /// /// By using [MultiProvider] we can go from: -/// +/// /// ```dart /// MultiRepositoryProvider( /// providers: [ @@ -69,7 +69,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; /// ) /// ``` /// -/// [MultiProvider] converts the [RepositoryProvider] and [BlocProvider] lists +/// [MultiProvider] converts the [RepositoryProvider] and [BlocProvider] lists /// into a tree of nested provider widgets. /// As a result, the only advantage of using [MultiProvider] is /// improved readability due to the reduction in nesting and boilerplate. diff --git a/packages/wyatt_bloc_layout/analysis_options.yaml b/packages/wyatt_bloc_layout/analysis_options.yaml index 22f1fb8e..90d6bd51 100644 --- a/packages/wyatt_bloc_layout/analysis_options.yaml +++ b/packages/wyatt_bloc_layout/analysis_options.yaml @@ -1,4 +1,4 @@ -# Copyright (C) 2022 WYATT GROUP +# Copyright (C) 2023 WYATT GROUP # Please see the AUTHORS file for details. # # This program is free software: you can redistribute it and/or modify @@ -14,6 +14,4 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . - -include: package:wyatt_analysis/analysis_options.flutter.experimental.yaml - +include: package:wyatt_analysis/analysis_options.flutter.yaml diff --git a/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart index 02f810db..6ae6a19b 100644 --- a/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart +++ b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart @@ -10,9 +10,9 @@ class ExampleCubit extends Cubit { await Future.delayed(const Duration(seconds: 1)); emit(CrudLoading()); await Future.delayed(const Duration(seconds: 1)); - emit(CrudError('Cubit Error')); + emit(const CrudError('Cubit Error')); await Future.delayed(const Duration(seconds: 1)); - emit(CrudLoaded('DATA LOADED')); + emit(const CrudLoaded('DATA LOADED')); await Future.delayed(const Duration(seconds: 1)); emit(CrudInitial()); } @@ -23,14 +23,16 @@ class ExampleCubit extends Cubit { await Future.delayed(const Duration(seconds: 1)); emit(CrudLoading()); await Future.delayed(const Duration(seconds: 1)); - emit(CrudError('Cubit Error')); + emit(const CrudError('Cubit Error')); await Future.delayed(const Duration(seconds: 1)); - emit(CrudListLoaded([ - 'DATA LOADED 1', - 'DATA LOADED 2', - 'DATA LOADED 3', - 'DATA LOADED 4' - ])); + emit( + const CrudListLoaded([ + 'DATA LOADED 1', + 'DATA LOADED 2', + 'DATA LOADED 3', + 'DATA LOADED 4' + ]), + ); await Future.delayed(const Duration(seconds: 1)); emit(CrudInitial()); } diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart index 8d57fb2b..aff474a8 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart @@ -7,7 +7,7 @@ part 'custom_app_bar.g.dart'; @ComponentCopyWithExtension() class CustomAppBar extends TopAppBarComponent with $CustomAppBarCWMixin { - const CustomAppBar({super.title}); + const CustomAppBar({super.key, super.title}); @override Widget build(BuildContext context) => AppBar( title: Text(title?.data ?? 'Title'), diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart index 5d16b5a5..1b094adf 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart @@ -7,19 +7,23 @@ part 'custom_bottom_bar.g.dart'; @ComponentCopyWithExtension() class CustomBottomBar extends BottomNavigationBarComponent with $CustomBottomBarCWMixin { + const CustomBottomBar({super.key}); + @override Widget build(BuildContext context) => BottomNavigationBar( - items: [ + items: const [ BottomNavigationBarItem( - icon: Icon( - Icons.e_mobiledata, - ), - label: 'Icon 1'), + icon: Icon( + Icons.e_mobiledata, + ), + label: 'Icon 1', + ), BottomNavigationBarItem( - icon: Icon( - Icons.do_not_disturb_off, - ), - label: 'Icon 2'), + icon: Icon( + Icons.do_not_disturb_off, + ), + label: 'Icon 2', + ), ], backgroundColor: Colors.blue, ); diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart index 57447de2..77364998 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart @@ -7,7 +7,7 @@ part 'custom_error_widget.g.dart'; @ComponentCopyWithExtension() class CustomErrorWidget extends ErrorWidgetComponent with $CustomErrorWidgetCWMixin { - CustomErrorWidget({super.error}); + CustomErrorWidget({super.key, super.error}); @override Widget build(BuildContext context) => ColoredBox( diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart index 9a8cc10e..94517557 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart @@ -7,7 +7,7 @@ part 'custom_loading_widget.g.dart'; @ComponentCopyWithExtension() class CustomLoadingWidget extends LoadingWidgetComponent with $CustomLoadingWidgetCWMixin { - CustomLoadingWidget({super.color}); + CustomLoadingWidget({super.key, super.color}); @override Widget build(BuildContext context) => diff --git a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart index 6441c0c8..b0b1f404 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart @@ -6,8 +6,8 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; class AppThemeComponent { static ComponentThemeData get components => ComponentThemeData.raw( - appBar: CustomAppBar(), - bottomNavigationBar: CustomBottomBar(), + appBar: const CustomAppBar(), + bottomNavigationBar: const CustomBottomBar(), loadingWidget: CustomLoadingWidget(), errorWidget: CustomErrorWidget(), ); diff --git a/packages/wyatt_bloc_layout/example/lib/main.dart b/packages/wyatt_bloc_layout/example/lib/main.dart index cbe743c0..e5f0207a 100644 --- a/packages/wyatt_bloc_layout/example/lib/main.dart +++ b/packages/wyatt_bloc_layout/example/lib/main.dart @@ -28,61 +28,63 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override - Widget build(BuildContext context) { - return ComponentTheme( - componentThemeWidget: AppThemeComponent.components, - child: MaterialApp( - title: 'Bloc Layout Example', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: Scaffold( - body: Column( - children: [ - Expanded( - child: Row( - children: [ - Expanded( - child: BlocProvider( - create: (_) => ExampleCubit()..run(), - child: ExampleCrudStateManagement(), - ), - ), - Expanded( - child: BlocProvider( - create: (_) => ExampleCubit()..runList(), - child: ExampleListCrudStateManagement(), - ), - ), - ], - ), - ), - Expanded( - child: Row( - children: [ - Expanded( - child: BlocProvider( + Widget build(BuildContext context) => ComponentTheme( + componentThemeWidget: AppThemeComponent.components, + child: MaterialApp( + title: 'Bloc Layout Example', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: Scaffold( + body: Column( + children: [ + Expanded( + child: Row( + children: [ + Expanded( + child: BlocProvider( create: (_) => ExampleCubit()..run(), - child: ExampleFrameLayoutCrudConsumer()), - ), - Expanded( - child: BlocProvider( + child: const ExampleCrudStateManagement(), + ), + ), + Expanded( + child: BlocProvider( create: (_) => ExampleCubit()..runList(), - child: ExampleFrameLayoutCrudListConsumer()), - ), - ], + child: const ExampleListCrudStateManagement(), + ), + ), + ], + ), ), - ), - ], + Expanded( + child: Row( + children: [ + Expanded( + child: BlocProvider( + create: (_) => ExampleCubit()..run(), + child: const ExampleFrameLayoutCrudConsumer(), + ), + ), + Expanded( + child: BlocProvider( + create: (_) => ExampleCubit()..runList(), + child: const ExampleFrameLayoutCrudListConsumer(), + ), + ), + ], + ), + ), + ], + ), ), ), - ), - ); - } + ); } class ExampleCrudStateManagement extends CrudCubitConsumerScreen { + const ExampleCrudStateManagement({super.key}); + @override Widget initialBuilder(BuildContext context, CrudInitial state) => Container(color: Colors.yellow); @@ -93,6 +95,8 @@ class ExampleCrudStateManagement class ExampleListCrudStateManagement extends CrudListCubitConsumerScreen { + const ExampleListCrudStateManagement({super.key}); + @override Widget initialBuilder(BuildContext context, CrudInitial state) => Container(color: Colors.green); @@ -106,7 +110,7 @@ class ExampleListCrudStateManagement class ExampleFrameLayoutCrudConsumer extends FrameLayoutCrudCubitConsumerScreen { - const ExampleFrameLayoutCrudConsumer() + const ExampleFrameLayoutCrudConsumer({super.key}) : super( title: 'Example Title', currentIndex: 0, @@ -119,7 +123,7 @@ class ExampleFrameLayoutCrudConsumer class ExampleFrameLayoutCrudListConsumer extends FrameLayoutCrudListCubitConsumerScreen { - const ExampleFrameLayoutCrudListConsumer() + const ExampleFrameLayoutCrudListConsumer({super.key}) : super( title: 'Example Title', currentIndex: 0, diff --git a/packages/wyatt_bloc_layout/example/test/widget_test.dart b/packages/wyatt_bloc_layout/example/test/widget_test.dart index 52de7a27..1bb8b149 100644 --- a/packages/wyatt_bloc_layout/example/test/widget_test.dart +++ b/packages/wyatt_bloc_layout/example/test/widget_test.dart @@ -12,4 +12,4 @@ // 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 . \ No newline at end of file +// along with this program. If not, see . diff --git a/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart index 62d9ea8b..20880e37 100644 --- a/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart +++ b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart @@ -20,7 +20,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -mixin CrudMixin, SuccessState extends CrudSuccess> { Widget errorBuilder(BuildContext context, CrudError state) => context.components.errorWidget?.copyWith(error: state.message.wrap()) ?? diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart index 61e0bc86..5e16c8b9 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart index 0b3f1bee..a444cf2b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart @@ -16,5 +16,5 @@ export './app_bar_layout_crud_cubit_consumer_screen.dart'; export './bottom_bar_layout_crud_cubit_consumer_screen.dart'; -export './frame_layout_crud_cubit_consumer_screen.dart'; export './crud_cubit_consumer_screen.dart'; +export './frame_layout_crud_cubit_consumer_screen.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart index 08597474..9a36e4a8 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart @@ -15,8 +15,8 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class CrudCubitConsumerScreen, T extends Object?> extends CubitConsumerScreen diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart index 1b71aa69..40e3aca4 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export './crud_cubit_screen.dart'; export 'app_bar_layout_crud_cubit_screen.dart'; export 'bottom_bar_layout_crud_cubit_screen.dart'; export 'frame_layout_crud_cubit_screen.dart'; -export './crud_cubit_screen.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart index 7c8b8fa1..b256af58 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart @@ -15,8 +15,8 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class CrudCubitScreen, T extends Object?> extends CubitScreen diff --git a/packages/wyatt_bloc_layout/lib/src/src.dart b/packages/wyatt_bloc_layout/lib/src/src.dart index 1bc39e49..69296b9a 100644 --- a/packages/wyatt_bloc_layout/lib/src/src.dart +++ b/packages/wyatt_bloc_layout/lib/src/src.dart @@ -14,11 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'presentation/presentation.dart'; -export 'core/core.dart'; - export 'package:flutter_bloc/flutter_bloc.dart'; -export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -export 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; -export 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; export 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; +export 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +export 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +export 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart'; + +export 'core/core.dart'; +export 'presentation/presentation.dart'; diff --git a/packages/wyatt_bloc_layout/pubspec.yaml b/packages/wyatt_bloc_layout/pubspec.yaml index c24b039e..ece9dd45 100644 --- a/packages/wyatt_bloc_layout/pubspec.yaml +++ b/packages/wyatt_bloc_layout/pubspec.yaml @@ -3,14 +3,17 @@ description: Layouts based on bloc helper library repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_bloc_layout version: 0.0.1 +publish_to: "none" + environment: - sdk: '>=2.17.0 <3.0.0' + sdk: ">=2.17.0 <3.0.0" dependencies: - flutter: sdk: flutter + flutter_bloc: ^8.1.2 + wyatt_bloc_helper: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages @@ -32,13 +35,11 @@ dependencies: path: packages/wyatt_ui_components dev_dependencies: - flutter_test: sdk: flutter - - + wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages ref: wyatt_analysis-v2.4.0 - path: packages/wyatt_analysis \ No newline at end of file + path: packages/wyatt_analysis diff --git a/packages/wyatt_component_copy_with_gen/analysis_options.yaml b/packages/wyatt_component_copy_with_gen/analysis_options.yaml index 50ed209d..e1caf220 100644 --- a/packages/wyatt_component_copy_with_gen/analysis_options.yaml +++ b/packages/wyatt_component_copy_with_gen/analysis_options.yaml @@ -1,7 +1 @@ - - - include: package:wyatt_analysis/analysis_options.yaml - - - diff --git a/packages/wyatt_component_copy_with_gen/pubspec.yaml b/packages/wyatt_component_copy_with_gen/pubspec.yaml index d297befe..fb456294 100644 --- a/packages/wyatt_component_copy_with_gen/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/pubspec.yaml @@ -3,6 +3,8 @@ description: Generator for copywith method for components. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/component_copy_with_gen version: 1.0.0 +publish_to: "none" + environment: sdk: ">=2.19.0 <3.0.0" diff --git a/packages/wyatt_crud_bloc/example/lib/app.dart b/packages/wyatt_crud_bloc/example/lib/app.dart index 7f5e9357..47d7e59e 100644 --- a/packages/wyatt_crud_bloc/example/lib/app.dart +++ b/packages/wyatt_crud_bloc/example/lib/app.dart @@ -92,7 +92,6 @@ class MyHomePage extends StatelessWidget { ); }, ), - const SizedBox(height: 20), ElevatedButton( onPressed: () { @@ -121,9 +120,7 @@ class MyHomePage extends StatelessWidget { ), ElevatedButton( onPressed: () { - context - .read() - .query([LimitQuery(2)]); + context.read().query([LimitQuery(2)]); }, child: const Text("Query"), ), diff --git a/packages/wyatt_crud_bloc/example/lib/app_bloc_observer.dart b/packages/wyatt_crud_bloc/example/lib/app_bloc_observer.dart index 3bbf28e5..630d240d 100644 --- a/packages/wyatt_crud_bloc/example/lib/app_bloc_observer.dart +++ b/packages/wyatt_crud_bloc/example/lib/app_bloc_observer.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/example/test/widget_test.dart b/packages/wyatt_crud_bloc/example/test/widget_test.dart index e69de29b..8b137891 100644 --- a/packages/wyatt_crud_bloc/example/test/widget_test.dart +++ b/packages/wyatt_crud_bloc/example/test/widget_test.dart @@ -0,0 +1 @@ + diff --git a/packages/wyatt_crud_bloc/lib/src/data/data.dart b/packages/wyatt_crud_bloc/lib/src/data/data.dart index ad1ef342..2fbca202 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/data.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/data.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart index 5ed56791..bb892251 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart @@ -24,7 +24,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; class CrudInMemoryDataSourceImpl extends CrudDataSource { - CrudInMemoryDataSourceImpl({required this.toMap, Map? data}) : _data = data ?? {}; final Map _data; diff --git a/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart index 4059dcb6..e70ecc9c 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart @@ -22,7 +22,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; class CrudFirestoreDataSourceImpl extends CrudDataSource { - CrudFirestoreDataSourceImpl( String collection, { required Model Function( diff --git a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart index 7b8b6fe3..f26fdc1d 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart @@ -23,7 +23,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class CrudRepositoryImpl extends CrudRepository { - CrudRepositoryImpl({ required CrudDataSource crudDataSource, }) : _crudDataSource = crudDataSource; diff --git a/packages/wyatt_crud_bloc/lib/src/data/repositories/repositories.dart b/packages/wyatt_crud_bloc/lib/src/data/repositories/repositories.dart index bf40c523..f31c2358 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/repositories/repositories.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/repositories/repositories.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/domain/data_sources/data_sources.dart b/packages/wyatt_crud_bloc/lib/src/domain/data_sources/data_sources.dart index 8495ee03..925fd22f 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/data_sources/data_sources.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/data_sources/data_sources.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/domain/domain.dart b/packages/wyatt_crud_bloc/lib/src/domain/domain.dart index a02a23f3..35c41307 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/domain.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/domain.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/domain/entities/entities.dart b/packages/wyatt_crud_bloc/lib/src/domain/entities/entities.dart index bd9cb1f9..bb2a29f7 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/entities/entities.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart index fbb55c9a..a414f3ff 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart @@ -25,7 +25,6 @@ abstract class QueryParser { abstract class QueryInterface extends Entity {} class WhereQuery extends QueryInterface { - WhereQuery(this.type, this.field, this.value); final WhereQueryType type; final String field; @@ -33,13 +32,11 @@ class WhereQuery extends QueryInterface { } class LimitQuery extends QueryInterface { - LimitQuery(this.limit); final int limit; } class OrderByQuery extends QueryInterface { - OrderByQuery(this.field, {this.ascending = true}); final String field; final bool ascending; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/repositories/repositories.dart b/packages/wyatt_crud_bloc/lib/src/domain/repositories/repositories.dart index decedffe..fb45fc62 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/repositories/repositories.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/repositories/repositories.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart index f8a5446c..cdebd878 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart @@ -21,7 +21,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class Delete extends AsyncUseCase { - Delete(this._crudRepository); final CrudRepository _crudRepository; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart index 8310f267..a1a36275 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart @@ -19,7 +19,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class DeleteAll extends AsyncUseCase { - DeleteAll(this._crudRepository); final CrudRepository _crudRepository; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart index 520609a3..40d6719c 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart @@ -21,7 +21,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class Get extends AsyncUseCase { - Get(this._crudRepository); final CrudRepository _crudRepository; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart index 3d91ab65..6fde76b7 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart @@ -20,7 +20,6 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class GetAll extends AsyncUseCase> { - GetAll(this._crudRepository); final CrudRepository _crudRepository; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/params.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/params.dart index 3b67e551..3b8bf1ee 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/params.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/params.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart index 6a3cfa0e..ed7768d4 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart @@ -20,7 +20,7 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; class StreamParameters { final String? id; final List? conditions; - + StreamParameters({ this.id, this.conditions, diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart index b23744bd..cbe4cd2b 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart @@ -19,7 +19,7 @@ class UpdateParameters { final String id; final Model? object; final Map? raw; - + UpdateParameters({ required this.id, this.object, diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart index d36035c8..2070b015 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart @@ -23,7 +23,6 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class Query extends AsyncUseCase, List> { - Query(this._crudRepository); final CrudRepository _crudRepository; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart index 2b2c80e5..35e42b9e 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart @@ -14,9 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . - - -// class Stream extends UseCase> { +// class Stream extends UseCase> { // final CrudRepository _crudRepository; // Stream(this._crudRepository); @@ -38,7 +37,8 @@ // throw ClientException('Stream parameters cannot be null.'); // } // } - + // @override -// FutureOrResult>> call(StreamParameters? params) => _crudRepository.stream(); +// FutureOrResult>> call(StreamParameters? params) => +// _crudRepository.stream(); // } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart index bbc29d0f..70c82b73 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart @@ -23,7 +23,6 @@ import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dar class Update extends AsyncUseCase, void> { - Update(this._crudRepository); final CrudRepository _crudRepository; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart index c9c4505f..60a81957 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart @@ -22,7 +22,6 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class UpdateAll extends AsyncUseCase, void> { - UpdateAll(this._crudRepository); final CrudRepository _crudRepository; diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart index 984bbb28..b53d1702 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/builder/builder.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/builder/builder.dart index 0184a4a5..52cf109d 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/builder/builder.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/builder/builder.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart index 807cf77a..dcb466aa 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart @@ -35,7 +35,6 @@ import 'package:wyatt_crud_bloc/src/domain/usecases/update_all.dart'; part 'crud_state.dart'; abstract class CrudCubit extends Cubit { - CrudCubit() : super(CrudInitial()); Create? get crudCreate; DeleteAll? get crudDeleteAll; diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart index 8541a664..f8ab26e2 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart @@ -36,7 +36,6 @@ class CrudOkReturn extends CrudState { } class CrudError extends CrudState { - const CrudError(this.message); final String? message; @@ -45,7 +44,6 @@ class CrudError extends CrudState { } class CrudLoaded extends CrudSuccess { - const CrudLoaded(this.data); final T? data; @@ -54,7 +52,6 @@ class CrudLoaded extends CrudSuccess { } class CrudListLoaded extends CrudSuccess { - const CrudListLoaded(this.data); final List data; diff --git a/packages/wyatt_crud_bloc/lib/src/features/features.dart b/packages/wyatt_crud_bloc/lib/src/features/features.dart index 996ab833..f91fc8cf 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/features.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/features.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_form_bloc/example/lib/app/app.dart b/packages/wyatt_form_bloc/example/lib/app/app.dart index 63c35292..d69e3a30 100644 --- a/packages/wyatt_form_bloc/example/lib/app/app.dart +++ b/packages/wyatt_form_bloc/example/lib/app/app.dart @@ -35,7 +35,9 @@ class App extends StatelessWidget { FormInput(formFieldEmail, const Email.pure(), metadata: const FormInputMetadata(extra: blue)), FormInput( - formFieldList, const ListOption.pure(choices: ['c1', 'c2', 'c3'],defaultValue: 'c3')), + formFieldList, + const ListOption.pure( + choices: ['c1', 'c2', 'c3'], defaultValue: 'c3')), FormInput(formFieldRadio, const TextString.pure()), FormInput(formFieldPro, const Boolean.pure(), metadata: const FormInputMetadata(name: 'business')), @@ -65,7 +67,7 @@ class App extends StatelessWidget { Widget build(BuildContext context) { FormRepository formRepository = FormRepositoryImpl() ..registerForm(getNormalFormData()); - + // FormRepository formRepository = FormRepositoryImpl() // ..registerForm(WyattFormImpl([ // FormInput(formFieldName, const Name.pure('Test'), diff --git a/packages/wyatt_form_bloc/example/lib/app/metadata.dart b/packages/wyatt_form_bloc/example/lib/app/metadata.dart index 6d66f961..138da48b 100644 --- a/packages/wyatt_form_bloc/example/lib/app/metadata.dart +++ b/packages/wyatt_form_bloc/example/lib/app/metadata.dart @@ -15,10 +15,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -enum Category { - perso, - business -} +enum Category { perso, business } class Metadata { final Category category; diff --git a/packages/wyatt_form_bloc/example/lib/constants.dart b/packages/wyatt_form_bloc/example/lib/constants.dart index a52efc92..f8c7dca6 100644 --- a/packages/wyatt_form_bloc/example/lib/constants.dart +++ b/packages/wyatt_form_bloc/example/lib/constants.dart @@ -1,16 +1,16 @@ // 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 . @@ -23,4 +23,4 @@ const String formFieldList = 'list'; const String formFieldRadio = 'radio'; const String formFieldHidden = 'hidden'; -const String formFieldPro = 'isPro'; \ No newline at end of file +const String formFieldPro = 'isPro'; diff --git a/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart b/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart index fd87bc2d..3d71e18f 100644 --- a/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart +++ b/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart @@ -38,8 +38,7 @@ class _NameInput extends StatelessWidget { Widget build(BuildContext context) { return InputBuilderTextController( field: formFieldName, - builder: - (context, cubit, state, field, input, controller, metadata) { + builder: (context, cubit, state, field, input, controller, metadata) { final meta = state.form.metadataOf(field).extra; final color = computeColor(meta); return Row( diff --git a/packages/wyatt_form_bloc/example/test/widget_test.dart b/packages/wyatt_form_bloc/example/test/widget_test.dart index e69de29b..8b137891 100644 --- a/packages/wyatt_form_bloc/example/test/widget_test.dart +++ b/packages/wyatt_form_bloc/example/test/widget_test.dart @@ -0,0 +1 @@ + diff --git a/packages/wyatt_form_bloc/lib/src/core/enums/set_operations.dart b/packages/wyatt_form_bloc/lib/src/core/enums/set_operations.dart index 3e27f437..6395940d 100644 --- a/packages/wyatt_form_bloc/lib/src/core/enums/set_operations.dart +++ b/packages/wyatt_form_bloc/lib/src/core/enums/set_operations.dart @@ -33,7 +33,7 @@ enum SetOperation { /// Add new elements to set. union(FormUnion()); - final FormOperation operation; - const SetOperation(this.operation); + + final FormOperation operation; } diff --git a/packages/wyatt_form_bloc/lib/src/core/enums/validation_error.dart b/packages/wyatt_form_bloc/lib/src/core/enums/validation_error.dart index 4966b6b8..cb9b2526 100644 --- a/packages/wyatt_form_bloc/lib/src/core/enums/validation_error.dart +++ b/packages/wyatt_form_bloc/lib/src/core/enums/validation_error.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart b/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart index 5cf16e28..6e3b9912 100644 --- a/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart +++ b/packages/wyatt_form_bloc/lib/src/data/form/wyatt_form_impl.dart @@ -26,7 +26,6 @@ import 'package:wyatt_form_bloc/src/domain/input_validators/form_input_validator // ignore: must_be_immutable class WyattFormImpl extends WyattForm { - WyattFormImpl( this._inputs, { required String name, @@ -149,7 +148,7 @@ class WyattFormImpl extends WyattForm { @override bool isValidInput(String key) => inputOf(key).validator.valid; - + @override bool isInvalidInput(String key) => inputOf(key).validator.invalid; diff --git a/packages/wyatt_form_bloc/lib/src/data/input_validators/boolean.dart b/packages/wyatt_form_bloc/lib/src/data/input_validators/boolean.dart index dba84780..4cbb9722 100644 --- a/packages/wyatt_form_bloc/lib/src/data/input_validators/boolean.dart +++ b/packages/wyatt_form_bloc/lib/src/data/input_validators/boolean.dart @@ -22,17 +22,15 @@ import 'package:wyatt_form_bloc/src/domain/input_validators/form_input_validator /// {@endtemplate} class Boolean extends NullableValidator { /// {@macro boolean} - const Boolean.pure({bool defaultValue = false}) - : super.pure(defaultValue); + const Boolean.pure({bool defaultValue = false}) : super.pure(defaultValue); /// {@macro boolean} const Boolean.dirty({bool? value}) : super.dirty(value); - + @override ValidationStandardError get onNull => ValidationStandardError.invalid; @override ValidationStandardError? validator(bool? value) => value != null ? null : onNull; - } diff --git a/packages/wyatt_form_bloc/lib/src/data/input_validators/enum_option.dart b/packages/wyatt_form_bloc/lib/src/data/input_validators/enum_option.dart index 8a939fba..b4e1eaa8 100644 --- a/packages/wyatt_form_bloc/lib/src/data/input_validators/enum_option.dart +++ b/packages/wyatt_form_bloc/lib/src/data/input_validators/enum_option.dart @@ -21,8 +21,7 @@ class EnumOption extends AnyValidator, ValidationError> { const EnumOption.pure({this.enums = const [], T? defaultValue}) : super.pure(defaultValue); - const EnumOption.dirty({required this.enums, T? value}) - : super.dirty(value); + const EnumOption.dirty({required this.enums, T? value}) : super.dirty(value); final List enums; diff --git a/packages/wyatt_form_bloc/lib/src/domain/entities/form_input.dart b/packages/wyatt_form_bloc/lib/src/domain/entities/form_input.dart index 741b3ac2..39bdd7e2 100644 --- a/packages/wyatt_form_bloc/lib/src/domain/entities/form_input.dart +++ b/packages/wyatt_form_bloc/lib/src/domain/entities/form_input.dart @@ -61,6 +61,5 @@ class FormInput< List get props => [key, validator, metadata]; @override - String toString() => - 'FormInput(name: $name, $validator)'; + String toString() => 'FormInput(name: $name, $validator)'; } diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart index ec07d6fc..05caf251 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data/form_data_state.dart @@ -17,12 +17,12 @@ part of 'form_data_cubit.dart'; abstract class FormDataState extends Equatable { - const FormDataState({ required this.form, this.status = FormStatus.pure, this.errorMessage, }); + /// Global status of a form. final FormStatus status; diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart index 1894e478..7721ff36 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/form_data_impl/form_data_cubit_impl.dart @@ -27,7 +27,6 @@ import 'package:wyatt_form_bloc/src/presentation/features/form_data/form_data_cu part 'form_data_state_impl.dart'; abstract class FormDataCubitImpl extends FormDataCubit { - FormDataCubitImpl(this._formRepository, this._formName) : super(FormDataStateImpl(form: _formRepository.accessForm(_formName))); final FormRepository _formRepository; diff --git a/packages/wyatt_http_client/example/http_client_fastapi_example.dart b/packages/wyatt_http_client/example/http_client_fastapi_example.dart index 9aa2be25..a671d464 100644 --- a/packages/wyatt_http_client/example/http_client_fastapi_example.dart +++ b/packages/wyatt_http_client/example/http_client_fastapi_example.dart @@ -32,14 +32,15 @@ enum EmailVerificationAction { changeEmail; String toSnakeCase() => name.splitMapJoin( - RegExp('[A-Z]'), - onMatch: (m) => '_${m[0]?.toLowerCase()}', - onNonMatch: (n) => n, - ); + RegExp('[A-Z]'), + onMatch: (m) => '_${m[0]?.toLowerCase()}', + onNonMatch: (n) => n, + ); - factory EmailVerificationAction.fromString(String str) => EmailVerificationAction.values.firstWhere( - (element) => element.toSnakeCase() == str, - ); + factory EmailVerificationAction.fromString(String str) => + EmailVerificationAction.values.firstWhere( + (element) => element.toSnakeCase() == str, + ); } class VerifyCode { @@ -56,23 +57,24 @@ class VerifyCode { String? email, String? verificationCode, EmailVerificationAction? action, - }) => VerifyCode( - email: email ?? this.email, - verificationCode: verificationCode ?? this.verificationCode, - action: action ?? this.action, - ); + }) => + VerifyCode( + email: email ?? this.email, + verificationCode: verificationCode ?? this.verificationCode, + action: action ?? this.action, + ); Map toMap() => { - 'email': email, - 'verification_code': verificationCode, - 'action': action.toSnakeCase(), - }; + 'email': email, + 'verification_code': verificationCode, + 'action': action.toSnakeCase(), + }; factory VerifyCode.fromMap(Map map) => VerifyCode( - email: map['email'] as String, - verificationCode: map['verification_code'] as String, - action: EmailVerificationAction.fromString(map['action'] as String), - ); + email: map['email'] as String, + verificationCode: map['verification_code'] as String, + action: EmailVerificationAction.fromString(map['action'] as String), + ); String toJson() => json.encode(toMap()); @@ -95,20 +97,22 @@ class Account { Account copyWith({ String? email, String? sessionId, - }) => Account( - email: email ?? this.email, - sessionId: sessionId ?? this.sessionId, - ); + }) => + Account( + email: email ?? this.email, + sessionId: sessionId ?? this.sessionId, + ); Map toMap() => { - 'email': email, - 'session_id': sessionId, - }; + 'email': email, + 'session_id': sessionId, + }; factory Account.fromMap(Map map) => Account( - email: map['email'] as String, - sessionId: map['session_id'] != null ? map['session_id'] as String : null, - ); + email: map['email'] as String, + sessionId: + map['session_id'] != null ? map['session_id'] as String : null, + ); String toJson() => json.encode(toMap()); @@ -130,20 +134,21 @@ class SignUp { SignUp copyWith({ String? sessionId, String? password, - }) => SignUp( - sessionId: sessionId ?? this.sessionId, - password: password ?? this.password, - ); + }) => + SignUp( + sessionId: sessionId ?? this.sessionId, + password: password ?? this.password, + ); Map toMap() => { - 'session_id': sessionId, - 'password': password, - }; + 'session_id': sessionId, + 'password': password, + }; factory SignUp.fromMap(Map map) => SignUp( - sessionId: map['session_id'] as String, - password: map['password'] as String, - ); + sessionId: map['session_id'] as String, + password: map['password'] as String, + ); String toJson() => json.encode(toMap()); @@ -168,23 +173,24 @@ class TokenSuccess { String? accessToken, String? refreshToken, Account? account, - }) => TokenSuccess( - accessToken: accessToken ?? this.accessToken, - refreshToken: refreshToken ?? this.refreshToken, - account: account ?? this.account, - ); + }) => + TokenSuccess( + accessToken: accessToken ?? this.accessToken, + refreshToken: refreshToken ?? this.refreshToken, + account: account ?? this.account, + ); Map toMap() => { - 'access_token': accessToken, - 'refresh_token': refreshToken, - 'account': account.toMap(), - }; + 'access_token': accessToken, + 'refresh_token': refreshToken, + 'account': account.toMap(), + }; factory TokenSuccess.fromMap(Map map) => TokenSuccess( - accessToken: map['access_token'] as String, - refreshToken: map['refresh_token'] as String, - account: Account.fromMap(map['account'] as Map), - ); + accessToken: map['access_token'] as String, + refreshToken: map['refresh_token'] as String, + account: Account.fromMap(map['account'] as Map), + ); String toJson() => json.encode(toMap()); @@ -207,20 +213,21 @@ class Login { Login copyWith({ String? email, String? password, - }) => Login( - email: email ?? this.email, - password: password ?? this.password, - ); + }) => + Login( + email: email ?? this.email, + password: password ?? this.password, + ); Map toMap() => { - 'email': email, - 'password': password, - }; + 'email': email, + 'password': password, + }; factory Login.fromMap(Map map) => Login( - email: map['email'] as String, - password: map['password'] as String, - ); + email: map['email'] as String, + password: map['password'] as String, + ); String toJson() => json.encode(toMap()); diff --git a/packages/wyatt_http_client/lib/src/middleware_client.dart b/packages/wyatt_http_client/lib/src/middleware_client.dart index 389b6fce..14cbd094 100644 --- a/packages/wyatt_http_client/lib/src/middleware_client.dart +++ b/packages/wyatt_http_client/lib/src/middleware_client.dart @@ -25,7 +25,6 @@ import 'package:wyatt_http_client/src/pipeline.dart'; import 'package:wyatt_http_client/src/utils/http_methods.dart'; class MiddlewareClient extends BaseClient { - MiddlewareClient({ Pipeline? pipeline, Client? inner, diff --git a/packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart index ece1af01..1bb8b149 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart @@ -1,16 +1,15 @@ // 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 . - diff --git a/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart index 432a33a2..529e3113 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart @@ -23,7 +23,6 @@ import 'package:wyatt_http_client/src/utils/authentication_methods.dart'; import 'package:wyatt_http_client/src/utils/header_keys.dart'; class BasicAuthMiddleware with OnRequestMiddleware implements Middleware { - BasicAuthMiddleware({ this.username, this.password, diff --git a/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart index 64dd5020..c09d0423 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart @@ -25,7 +25,6 @@ import 'package:wyatt_http_client/src/utils/http_status.dart'; class DigestAuthMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { - DigestAuthMiddleware({ required this.username, required this.password, diff --git a/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart b/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart index 724b3ac9..9c2b70b0 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart index fc6937e6..19f3f137 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart @@ -31,7 +31,6 @@ typedef TokenParser = String Function(Map); class RefreshTokenAuthMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { - RefreshTokenAuthMiddleware({ required this.authorizationEndpoint, required this.tokenEndpoint, diff --git a/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart index 4b43359a..724d7211 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart @@ -20,7 +20,6 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/utils/convert.dart'; class UnsafeAuthMiddleware with OnRequestMiddleware implements Middleware { - UnsafeAuthMiddleware({ this.username, this.password, diff --git a/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart index 1eec0fe4..04c3232f 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart @@ -20,7 +20,6 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/utils/protocols.dart'; class UriPrefixMiddleware with OnRequestMiddleware implements Middleware { - UriPrefixMiddleware({ required this.protocol, required this.authority, diff --git a/packages/wyatt_http_client/lib/src/models/middleware_context.dart b/packages/wyatt_http_client/lib/src/models/middleware_context.dart index 9fb1db30..503c2e3e 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_context.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_context.dart @@ -44,15 +44,19 @@ class MiddlewareContext { MiddlewareRequest? lastRequest, MiddlewareResponse? originalResponse, MiddlewareResponse? lastResponse, - }) => MiddlewareContext( - pipeline: pipeline ?? this.pipeline, - client: client ?? this.client, - originalRequest: originalRequest ?? this.originalRequest, - lastRequest: lastRequest ?? this.lastRequest, - originalResponse: originalResponse ?? this.originalResponse, - lastResponse: lastResponse ?? this.lastResponse, - ); + }) => + MiddlewareContext( + pipeline: pipeline ?? this.pipeline, + client: client ?? this.client, + originalRequest: originalRequest ?? this.originalRequest, + lastRequest: lastRequest ?? this.lastRequest, + originalResponse: originalResponse ?? this.originalResponse, + lastResponse: lastResponse ?? this.lastResponse, + ); @override - String toString() => 'MiddlewareContext(pipeline: $pipeline, client: $client, originalRequest: $originalRequest, lastRequest: $lastRequest, originalResponse: $originalResponse, lastResponse: $lastResponse)'; + String toString() => + 'MiddlewareContext(pipeline: $pipeline, client: $client, ' + 'originalRequest: $originalRequest, lastRequest: $lastRequest, ' + 'originalResponse: $originalResponse, lastResponse: $lastResponse)'; } diff --git a/packages/wyatt_http_client/lib/src/models/middleware_response.dart b/packages/wyatt_http_client/lib/src/models/middleware_response.dart index d58a2591..500c17c3 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_response.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_response.dart @@ -31,6 +31,7 @@ class MiddlewareResponse { return ''; } } + int? get contentLength => httpResponse.contentLength; Map get headers => httpResponse.headers; @@ -40,11 +41,11 @@ class MiddlewareResponse { MiddlewareResponse copyWith({ BaseResponse? httpResponse, - }) => MiddlewareResponse( - httpResponse: httpResponse ?? this.httpResponse, - ); + }) => + MiddlewareResponse( + httpResponse: httpResponse ?? this.httpResponse, + ); @override - String toString() => - 'MiddlewareResponse(httpResponse: $httpResponse)'; + String toString() => 'MiddlewareResponse(httpResponse: $httpResponse)'; } diff --git a/packages/wyatt_http_client/lib/src/models/models.dart b/packages/wyatt_http_client/lib/src/models/models.dart index 4170d54b..95b3b377 100644 --- a/packages/wyatt_http_client/lib/src/models/models.dart +++ b/packages/wyatt_http_client/lib/src/models/models.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart b/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart index 437b21d3..d29c15d8 100644 --- a/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart +++ b/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart @@ -17,7 +17,6 @@ import 'dart:convert'; class UnfreezedRequest { - UnfreezedRequest({ required this.method, required this.url, @@ -37,15 +36,16 @@ class UnfreezedRequest { Map? headers, Object? body, Encoding? encoding, - }) => UnfreezedRequest( - method: method ?? this.method, - url: url ?? this.url, - headers: headers ?? this.headers, - body: body ?? this.body, - encoding: encoding ?? this.encoding, - ); + }) => + UnfreezedRequest( + method: method ?? this.method, + url: url ?? this.url, + headers: headers ?? this.headers, + body: body ?? this.body, + encoding: encoding ?? this.encoding, + ); @override String toString() => 'UnfreezedRequest(method: $method, url: $url, headers: ' - '$headers, body: $body, encoding: $encoding)'; + '$headers, body: $body, encoding: $encoding)'; } diff --git a/packages/wyatt_http_client/lib/src/pipeline.dart b/packages/wyatt_http_client/lib/src/pipeline.dart index bf0b2107..ae4029ec 100644 --- a/packages/wyatt_http_client/lib/src/pipeline.dart +++ b/packages/wyatt_http_client/lib/src/pipeline.dart @@ -20,7 +20,6 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/models/middleware_response.dart'; class Pipeline { - Pipeline() : _middlewares = []; Pipeline.fromIterable(Iterable middlewares) : _middlewares = middlewares.toList(); @@ -65,8 +64,7 @@ class Pipeline { MiddlewareContext ctx = context.copyWith(lastRequest: req); for (final middleware in _middlewares) { if (middleware is OnRequestMiddleware) { - req = await (middleware as OnRequestMiddleware) - .onRequest(ctx, request); + req = await (middleware as OnRequestMiddleware).onRequest(ctx, request); ctx = context.copyWith(lastRequest: req); } } diff --git a/packages/wyatt_http_client/lib/src/utils/convert.dart b/packages/wyatt_http_client/lib/src/utils/convert.dart index 059b20a5..1f287757 100644 --- a/packages/wyatt_http_client/lib/src/utils/convert.dart +++ b/packages/wyatt_http_client/lib/src/utils/convert.dart @@ -34,10 +34,12 @@ class Convert { static String mapToQuery(Map map, {Encoding? encoding}) { final pairs = >[]; - map.forEach((key, value) => pairs.add([ - Uri.encodeQueryComponent(key, encoding: encoding ?? utf8), - Uri.encodeQueryComponent(value, encoding: encoding ?? utf8) - ]),); + map.forEach( + (key, value) => pairs.add([ + Uri.encodeQueryComponent(key, encoding: encoding ?? utf8), + Uri.encodeQueryComponent(value, encoding: encoding ?? utf8) + ]), + ); return pairs.map((pair) => '${pair[0]}=${pair[1]}').join('&'); } } diff --git a/packages/wyatt_http_client/lib/src/utils/digest_auth.dart b/packages/wyatt_http_client/lib/src/utils/digest_auth.dart index 1a8ee9f1..ba16c0aa 100644 --- a/packages/wyatt_http_client/lib/src/utils/digest_auth.dart +++ b/packages/wyatt_http_client/lib/src/utils/digest_auth.dart @@ -19,7 +19,8 @@ import 'dart:math'; import 'package:wyatt_http_client/src/utils/convert.dart'; import 'package:wyatt_http_client/src/utils/crypto.dart'; -class DigestAuth { // request counter +class DigestAuth { + // request counter DigestAuth(this.username, this.password); String username; diff --git a/packages/wyatt_http_client/lib/src/utils/http_methods.dart b/packages/wyatt_http_client/lib/src/utils/http_methods.dart index 49087965..7b0a4c7a 100644 --- a/packages/wyatt_http_client/lib/src/utils/http_methods.dart +++ b/packages/wyatt_http_client/lib/src/utils/http_methods.dart @@ -22,7 +22,7 @@ enum HttpMethods { patch('PATCH'), delete('DELETE'); - final String method; - const HttpMethods(this.method); + + final String method; } diff --git a/packages/wyatt_http_client/lib/src/utils/http_status.dart b/packages/wyatt_http_client/lib/src/utils/http_status.dart index 2714b5ba..e5360309 100644 --- a/packages/wyatt_http_client/lib/src/utils/http_status.dart +++ b/packages/wyatt_http_client/lib/src/utils/http_status.dart @@ -81,10 +81,13 @@ enum HttpStatus { // Client generated status code. networkConnectTimeoutError(599); - final int statusCode; - const HttpStatus(this.statusCode); + factory HttpStatus.from(int status) => + HttpStatus.values.firstWhere((element) => element.statusCode == status); + + final int statusCode; + bool equals(Object other) { if (other is HttpStatus) { return statusCode == other.statusCode; @@ -104,8 +107,4 @@ enum HttpStatus { bool isClientError() => statusCode >= 400 && statusCode < 500; bool isServerError() => statusCode >= 500 && statusCode < 600; - - factory HttpStatus.from(int status) => HttpStatus.values - .firstWhere((element) => element.statusCode == status); - } diff --git a/packages/wyatt_http_client/lib/src/utils/utils.dart b/packages/wyatt_http_client/lib/src/utils/utils.dart index 5dfc082c..91d8efc1 100644 --- a/packages/wyatt_http_client/lib/src/utils/utils.dart +++ b/packages/wyatt_http_client/lib/src/utils/utils.dart @@ -1,16 +1,16 @@ // 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 . diff --git a/packages/wyatt_notification_bloc/example/lib/main.dart b/packages/wyatt_notification_bloc/example/lib/main.dart index e0160294..008fa38e 100644 --- a/packages/wyatt_notification_bloc/example/lib/main.dart +++ b/packages/wyatt_notification_bloc/example/lib/main.dart @@ -100,7 +100,7 @@ class _MyHomePageState extends State { ), Text( '$_counter', - style: Theme.of(context).textTheme.headline4, + style: Theme.of(context).textTheme.headlineMedium, ), ], ), diff --git a/packages/wyatt_notification_bloc/lib/src/wyatt_notification_bloc_base.dart b/packages/wyatt_notification_bloc/lib/src/wyatt_notification_bloc_base.dart index e8a6f159..41deac69 100644 --- a/packages/wyatt_notification_bloc/lib/src/wyatt_notification_bloc_base.dart +++ b/packages/wyatt_notification_bloc/lib/src/wyatt_notification_bloc_base.dart @@ -1,5 +1,3 @@ -// TODO: Put public facing types in this file. - /// Checks if you are awesome. Spoiler: you are. class Awesome { bool get isAwesome => true; diff --git a/packages/wyatt_type_utils/example/lib/error.dart b/packages/wyatt_type_utils/example/lib/error.dart index 945855bf..27a67828 100644 --- a/packages/wyatt_type_utils/example/lib/error.dart +++ b/packages/wyatt_type_utils/example/lib/error.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . class AppError { - const AppError(this.message); final String message; diff --git a/packages/wyatt_type_utils/example/lib/todo.dart b/packages/wyatt_type_utils/example/lib/todo.dart index e5f21752..2751b70b 100644 --- a/packages/wyatt_type_utils/example/lib/todo.dart +++ b/packages/wyatt_type_utils/example/lib/todo.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// ignore_for_file: public_member_api_docs, sort_constructors_first, +// ignore_for_file: public_member_api_docs, sort_constructors_first, // ignore_for_file: avoid_equals_and_hash_code_on_mutable_classes import 'dart:convert'; diff --git a/packages/wyatt_type_utils/lib/src/either/option.dart b/packages/wyatt_type_utils/lib/src/either/option.dart index 3f8e9a74..d97ed2ac 100644 --- a/packages/wyatt_type_utils/lib/src/either/option.dart +++ b/packages/wyatt_type_utils/lib/src/either/option.dart @@ -32,13 +32,13 @@ class OptionException extends _EitherBaseException { } /// {@template option} -/// [Option] is a container object which may or may not contain a non-null -/// value. If a [Value] is present, isPresent() will return true and get() +/// [Option] is a container object which may or may not contain a non-null +/// value. If a [Value] is present, isPresent() will return true and get() /// will return the value. -/// -/// Additional methods that depend on the presence or absence of -/// a contained value are provided, such as orElse() (return a default value -/// if value not present) and ifPresent() (execute a block of code if the +/// +/// Additional methods that depend on the presence or absence of +/// a contained value are provided, such as orElse() (return a default value +/// if value not present) and ifPresent() (execute a block of code if the /// value is present). /// {@endtemplate} abstract class Option extends _EitherBase { @@ -69,7 +69,7 @@ abstract class Option extends _EitherBase { (left) => value(left), (right) => none(), ); - + /// Match **async** [Value] and [None]. Future matchAsync( Future Function(T value) value, @@ -172,7 +172,6 @@ abstract class Option extends _EitherBase { } class Value extends Option with _Left { - /// {@macro ok} const Value(this.value) : super._(); final T value; diff --git a/packages/wyatt_type_utils/lib/src/either/result.dart b/packages/wyatt_type_utils/lib/src/either/result.dart index 6333e46d..c4d03189 100644 --- a/packages/wyatt_type_utils/lib/src/either/result.dart +++ b/packages/wyatt_type_utils/lib/src/either/result.dart @@ -203,7 +203,6 @@ abstract class Result extends _EitherBase { /// {@macro result} /// {@endtemplate} class Ok extends Result with _Left { - /// {@macro ok} const Ok(this.value) : super._(); final T value; @@ -268,7 +267,6 @@ class Ok extends Result with _Left { /// {@macro result} /// {@endtemplate} class Err extends Result with _Right { - /// {@macro err} const Err(this.error) : super._(); final E error; diff --git a/packages/wyatt_type_utils/lib/src/extensions/iterable_extension.dart b/packages/wyatt_type_utils/lib/src/extensions/iterable_extension.dart index d69fd22b..0d04c775 100644 --- a/packages/wyatt_type_utils/lib/src/extensions/iterable_extension.dart +++ b/packages/wyatt_type_utils/lib/src/extensions/iterable_extension.dart @@ -32,7 +32,7 @@ extension IterableIntExtension on Iterable? { Uint8List toTypedList() => Uint8List.fromList(this?.toList() ?? []); /// Converts a [Uint8List] to a [String] using the specified [Encoding]. - String toStr({final Encoding to = Encoding.utf16}) { + String toStr({Encoding to = Encoding.utf16}) { String str; switch (to) { case Encoding.utf8: diff --git a/packages/wyatt_type_utils/lib/src/extensions/string_extension.dart b/packages/wyatt_type_utils/lib/src/extensions/string_extension.dart index 3e28b3c7..db75dd62 100644 --- a/packages/wyatt_type_utils/lib/src/extensions/string_extension.dart +++ b/packages/wyatt_type_utils/lib/src/extensions/string_extension.dart @@ -28,7 +28,7 @@ extension StringExtension on String? { bool get isNotNullOrEmpty => this != null && this!.isNotEmpty; /// Converts a [String] to a [Uint8List] using the specified [Encoding]. - Uint8List toBytes({final Encoding from = Encoding.utf16}) { + Uint8List toBytes({Encoding from = Encoding.utf16}) { Uint8List bytes; switch (from) { case Encoding.utf8: diff --git a/packages/wyatt_type_utils/lib/src/pair/pair.dart b/packages/wyatt_type_utils/lib/src/pair/pair.dart index ca66961d..2a2104f9 100644 --- a/packages/wyatt_type_utils/lib/src/pair/pair.dart +++ b/packages/wyatt_type_utils/lib/src/pair/pair.dart @@ -22,7 +22,6 @@ extension PairExtension on Pair { /// [Pair] is a simple object which contains pair of two values. /// {@endtemplate} class Pair { - /// {@macro pair} const Pair(this.left, this.right); final L? left; diff --git a/packages/wyatt_type_utils/test/result_test.dart b/packages/wyatt_type_utils/test/result_test.dart index eababedf..53706fd5 100644 --- a/packages/wyatt_type_utils/test/result_test.dart +++ b/packages/wyatt_type_utils/test/result_test.dart @@ -351,14 +351,16 @@ void main() { (await Result.tryCatchAsync( () => throw Exception('not success'), (err) => 'error', - )).isErr, + )) + .isErr, true, ); expect( (await Result.tryCatchAsync( () => Future.value(2), (err) => 'error', - )).isOk, + )) + .isOk, true, ); }, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart index 9d26ba10..6e3a8945 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart @@ -44,7 +44,7 @@ abstract class LoaderComponent extends Component /// Animation duration final Duration? duration; - + /// Flip the animation final bool? flip; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart index 31fed0cf..da2bfb91 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart @@ -41,7 +41,7 @@ abstract class RichTextBuilderComponent extends Component final TextStyle? defaultStyle; /// Used styles in this rich text component. - /// + /// /// e.g. /// ```dart /// styles = {'red': TextStyle(color: Colors.red)}; diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme.dart b/packages/wyatt_ui_components/lib/src/features/component_theme.dart index 49de4780..0ed44487 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme.dart @@ -18,7 +18,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/src/features/features.dart'; class ComponentTheme extends StatelessWidget { - const ComponentTheme({ required this.child, required this.componentThemeWidget, diff --git a/packages/wyatt_ui_kit/example/test/widget_test.dart b/packages/wyatt_ui_kit/example/test/widget_test.dart index e69de29b..8b137891 100644 --- a/packages/wyatt_ui_kit/example/test/widget_test.dart +++ b/packages/wyatt_ui_kit/example/test/widget_test.dart @@ -0,0 +1 @@ + diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index feb496b7..0e8d2051 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class FileSelectionButtonThemeResolver extends ThemeResolver< diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index f16b626c..43a4fa52 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -63,6 +63,7 @@ class FlatButtonScreen extends CubitScreen { @override ButtonCubit init(BuildContext context, ButtonCubit bloc) { disabled?.addListener(() => StateListener.listen(disabled, bloc)); + /// Set the initial state depending on the disabled value /// after adding the listener. if (disabled?.value ?? false) { diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart index 6124ccc1..3066c870 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class SymbolButtonThemeResolver extends ThemeResolver. diff --git a/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart index a8f83f3a..0f365423 100644 --- a/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart +++ b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart @@ -24,10 +24,10 @@ class WyattComponentThemeData { loaderComponent: const Loader(), richTextBuilderComponent: const RichTextBuilder(), textInputComponent: const TextInput(), - fileSelectionButtonComponent: FileSelectionButton(), - flatButtonComponent: FlatButton(), - simpleIconButtonComponent: SimpleIconButton(), - symbolButtonComponent: SymbolButton(), + fileSelectionButtonComponent: const FileSelectionButton(), + flatButtonComponent: const FlatButton(), + simpleIconButtonComponent: const SimpleIconButton(), + symbolButtonComponent: const SymbolButton(), informationCardComponent: const InformationCard(), portfolioCardComponent: const PortfolioCard(), quoteCardComponent: const QuoteCard(), diff --git a/packages/wyatt_ui_layout/pubspec.yaml b/packages/wyatt_ui_layout/pubspec.yaml index 3a6da750..46debeab 100644 --- a/packages/wyatt_ui_layout/pubspec.yaml +++ b/packages/wyatt_ui_layout/pubspec.yaml @@ -3,6 +3,8 @@ description: Main layouts to help you build your application views. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_layout version: 0.0.1 +publish_to: "none" + environment: sdk: ">=2.17.0 <3.0.0" -- 2.47.2 From 25cf9518f9761d450245538dd7e2f5e539d8f1cb Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 24 Feb 2023 10:12:04 +0100 Subject: [PATCH 196/320] chore: fix all problems --- .../state_management/albums_screen.dart | 2 +- .../photo_details_screen.dart | 2 +- .../state_management/photos_screen.dart | 2 +- .../blocs/edit_profile_cubit.dart | 2 +- .../wyatt_bloc_helper/example/lib/main.dart | 4 +-- .../example/lib/bloc/example_cubit.dart | 16 ++++----- .../wyatt_form_bloc/example/lib/main.dart | 8 ++--- .../example/http_client_example.dart | 2 +- .../example/http_client_fastapi_example.dart | 34 +++++++++---------- .../wyatt_http_client/example/pipeline.dart | 6 ++-- .../wyatt_http_client/lib/src/pipeline.dart | 2 ++ 11 files changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/albums_screen.dart b/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/albums_screen.dart index 2aae70fd..b180827e 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/albums_screen.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/albums/state_management/albums_screen.dart @@ -35,7 +35,7 @@ class AlbumsScreen extends BlocScreen { bloc..add(AlbumFetched()); @override - Widget onWrap(BuildContext context, Widget child) => AlbumsWrapperWidget( + Widget parent(BuildContext context, Widget child) => AlbumsWrapperWidget( child: child, ); diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photo_details/state_management/photo_details_screen.dart b/packages/wyatt_architecture/example/lib/presentation/features/photo_details/state_management/photo_details_screen.dart index 4cbc2e83..98a41c54 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photo_details/state_management/photo_details_screen.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photo_details/state_management/photo_details_screen.dart @@ -43,7 +43,7 @@ class PhotoDetailsScreen bloc..load(photoId); @override - Widget onWrap(BuildContext context, Widget child) => + Widget parent(BuildContext context, Widget child) => PhotoDetailsWrapperWidget(child: child); @override diff --git a/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/photos_screen.dart b/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/photos_screen.dart index 57ceef4e..bf9352dd 100644 --- a/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/photos_screen.dart +++ b/packages/wyatt_architecture/example/lib/presentation/features/photos/state_management/photos_screen.dart @@ -37,7 +37,7 @@ class PhotosScreen extends BlocScreen { bloc..add(PhotoFetched(albumId)); @override - Widget onWrap(BuildContext context, Widget child) => PhotosWrapperWidget( + Widget parent(BuildContext context, Widget child) => PhotosWrapperWidget( child: child, ); diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart index c92aa597..40063f4c 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_profile/blocs/edit_profile_cubit.dart @@ -35,7 +35,7 @@ class EditProfileCubit extends FormDataCubitImpl { status: FormStatus.submissionInProgress, ), ); - final user = (await authenticationRepository.getAccount()).ok; + // final user = (await authenticationRepository.getAccount()).ok; final form = state.form; final email = form.valueOf(AuthFormField.email); diff --git a/packages/wyatt_bloc_helper/example/lib/main.dart b/packages/wyatt_bloc_helper/example/lib/main.dart index a707077c..3d825120 100644 --- a/packages/wyatt_bloc_helper/example/lib/main.dart +++ b/packages/wyatt_bloc_helper/example/lib/main.dart @@ -20,6 +20,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; void main() { - BlocOverrides.runZoned(() => runApp(const CounterRepositoryProviderPage()), - blocObserver: CounterObserver()); + Bloc.observer = CounterObserver(); + runApp(const CounterRepositoryProviderPage()); } diff --git a/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart index 6ae6a19b..80c20d1a 100644 --- a/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart +++ b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart @@ -7,24 +7,24 @@ class ExampleCubit extends Cubit { FutureOr run() async { while (true) { - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit(CrudLoading()); - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit(const CrudError('Cubit Error')); - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit(const CrudLoaded('DATA LOADED')); - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit(CrudInitial()); } } FutureOr runList() async { while (true) { - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit(CrudLoading()); - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit(const CrudError('Cubit Error')); - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit( const CrudListLoaded([ 'DATA LOADED 1', @@ -33,7 +33,7 @@ class ExampleCubit extends Cubit { 'DATA LOADED 4' ]), ); - await Future.delayed(const Duration(seconds: 1)); + await Future.delayed(const Duration(seconds: 1)); emit(CrudInitial()); } } diff --git a/packages/wyatt_form_bloc/example/lib/main.dart b/packages/wyatt_form_bloc/example/lib/main.dart index 42275ce9..28a8f3d9 100644 --- a/packages/wyatt_form_bloc/example/lib/main.dart +++ b/packages/wyatt_form_bloc/example/lib/main.dart @@ -21,10 +21,6 @@ import 'package:form_bloc_example/app/bloc_observer.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); - BlocOverrides.runZoned( - () => runApp( - const App(), - ), - blocObserver: AppBlocObserver(), - ); + Bloc.observer = AppBlocObserver(); + runApp(const App()); } diff --git a/packages/wyatt_http_client/example/http_client_example.dart b/packages/wyatt_http_client/example/http_client_example.dart index 3787f1c8..43009540 100644 --- a/packages/wyatt_http_client/example/http_client_example.dart +++ b/packages/wyatt_http_client/example/http_client_example.dart @@ -66,7 +66,7 @@ Future handleDigest(HttpRequest req) async { Future handleUnsafe(HttpRequest req) async { print( 'Query parameters => ' - '${req.uri.queryParameters.toString()}', + '${req.uri.queryParameters}', ); } diff --git a/packages/wyatt_http_client/example/http_client_fastapi_example.dart b/packages/wyatt_http_client/example/http_client_fastapi_example.dart index a671d464..b9a900fd 100644 --- a/packages/wyatt_http_client/example/http_client_fastapi_example.dart +++ b/packages/wyatt_http_client/example/http_client_fastapi_example.dart @@ -82,8 +82,8 @@ class VerifyCode { VerifyCode.fromMap(json.decode(source) as Map); @override - String toString() => - 'VerifyCode(email: $email, verificationCode: $verificationCode, action: $action)'; + String toString() => 'VerifyCode(email: $email, verificationCode: ' + '$verificationCode, action: $action)'; } class Account { @@ -198,8 +198,8 @@ class TokenSuccess { TokenSuccess.fromMap(json.decode(source) as Map); @override - String toString() => - 'TokenSuccess(accessToken: $accessToken, refreshToken: $refreshToken, account: $account)'; + String toString() => 'TokenSuccess(accessToken: $accessToken, refreshToken: ' + '$refreshToken, account: $account)'; } class Login { @@ -353,19 +353,19 @@ void main(List args) async { ); await api.sendSignUpCode('git@pcl.ovh'); - final verifiedAccount = await api.verifyCode( - VerifyCode( - email: 'git@pcl.ovh', - verificationCode: '000000000', - action: EmailVerificationAction.signUp, - ), - ); - final registeredAccount = await api.signUp( - SignUp(sessionId: verifiedAccount.sessionId ?? '', password: 'password'), - ); - final signedInAccount = await api.signInWithPassword( - Login(email: 'git@pcl.ovh', password: 'password'), - ); + // final verifiedAccount = await api.verifyCode( + // VerifyCode( + // email: 'git@pcl.ovh', + // verificationCode: '000000000', + // action: EmailVerificationAction.signUp, + // ), + // ); + // final registeredAccount = await api.signUp( + // SignUp(sessionId: verifiedAccount.sessionId ?? '', password: 'password'), + // ); + // final signedInAccount = await api.signInWithPassword( + // Login(email: 'git@pcl.ovh', password: 'password'), + // ); final accountList = await api.getAccountList(); print(accountList); } diff --git a/packages/wyatt_http_client/example/pipeline.dart b/packages/wyatt_http_client/example/pipeline.dart index 334fc509..7f261f39 100644 --- a/packages/wyatt_http_client/example/pipeline.dart +++ b/packages/wyatt_http_client/example/pipeline.dart @@ -45,7 +45,8 @@ import 'package:wyatt_http_client/src/utils/protocols.dart'; // BaseResponse onResponse(BaseResponse response) { // final res = child?.onResponse(response) ?? response; // print( -// 'RequestMutator::OnResponse: ${res.statusCode} -> ${res.contentLength} bytes', +// 'RequestMutator::OnResponse: ${res.statusCode} -> ${res.contentLength} +// bytes', // ); // return res; // } @@ -75,7 +76,8 @@ import 'package:wyatt_http_client/src/utils/protocols.dart'; // if (response != null) return response; // return Future.sync(() => innerHandler(request)) -// .then((response) => responseHandler!(response), onError: onError); +// .then((response) => responseHandler!(response), onError: +// onError); // }); // }; // }; diff --git a/packages/wyatt_http_client/lib/src/pipeline.dart b/packages/wyatt_http_client/lib/src/pipeline.dart index ae4029ec..3cebc400 100644 --- a/packages/wyatt_http_client/lib/src/pipeline.dart +++ b/packages/wyatt_http_client/lib/src/pipeline.dart @@ -30,6 +30,8 @@ class Pipeline { /// Add a [Middleware] to this [Pipeline] Pipeline addMiddleware(Middleware middleware) { _middlewares.add(middleware); + // TODO(hpcl): use Dart cascades instead of returning this + // ignore: avoid_returning_this return this; } -- 2.47.2 From b1d66dc6e4914de5b3f79829176f08d3abaa27ce Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 24 Feb 2023 10:20:00 +0100 Subject: [PATCH 197/320] chore(release): publish packages - wyatt_analysis@2.4.1 --- CHANGELOG.md | 22 +++++++++++++++++++ packages/wyatt_analysis/CHANGELOG.md | 5 +++++ packages/wyatt_analysis/pubspec.yaml | 2 +- .../wyatt_architecture/example/pubspec.yaml | 2 +- packages/wyatt_architecture/pubspec.yaml | 2 +- .../wyatt_authentication_bloc/pubspec.yaml | 2 +- packages/wyatt_bloc_helper/pubspec.yaml | 2 +- .../wyatt_bloc_layout/example/pubspec.yaml | 2 +- packages/wyatt_bloc_layout/pubspec.yaml | 2 +- .../example/pubspec.yaml | 2 +- .../pubspec.yaml | 2 +- .../example/pubspec.yaml | 2 +- .../pubspec.yaml | 2 +- packages/wyatt_crud_bloc/pubspec.yaml | 2 +- packages/wyatt_form_bloc/pubspec.yaml | 2 +- packages/wyatt_http_client/pubspec.yaml | 2 +- .../wyatt_type_utils/example/pubspec.yaml | 2 +- packages/wyatt_type_utils/pubspec.yaml | 2 +- .../wyatt_ui_components/example/pubspec.yaml | 2 +- packages/wyatt_ui_components/pubspec.yaml | 2 +- packages/wyatt_ui_kit/example/pubspec.yaml | 2 +- packages/wyatt_ui_kit/pubspec.yaml | 2 +- packages/wyatt_ui_layout/example/pubspec.yaml | 2 +- packages/wyatt_ui_layout/pubspec.yaml | 2 +- 24 files changed, 49 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efdb8e83..7794040e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2023-02-24 + +### Changes + +--- + +Packages with breaking changes: + + - There are no breaking changes in this release. + +Packages with other changes: + + - [`wyatt_analysis` - `v2.4.1`](#wyatt_analysis---v241) + +--- + +#### `wyatt_analysis` - `v2.4.1` + + - **FEAT**: add latest version persistence between script executions. + - **FEAT**: ignore todo's. + + ## 2023-02-07 ### Changes diff --git a/packages/wyatt_analysis/CHANGELOG.md b/packages/wyatt_analysis/CHANGELOG.md index a328a7ed..78d43938 100644 --- a/packages/wyatt_analysis/CHANGELOG.md +++ b/packages/wyatt_analysis/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.4.1 + + - **FEAT**: add latest version persistence between script executions. + - **FEAT**: ignore todo's. + ## 2.4.0 - **FEAT**: add new lint rules. diff --git a/packages/wyatt_analysis/pubspec.yaml b/packages/wyatt_analysis/pubspec.yaml index 0b9e09f1..399c7794 100644 --- a/packages/wyatt_analysis/pubspec.yaml +++ b/packages/wyatt_analysis/pubspec.yaml @@ -17,7 +17,7 @@ name: wyatt_analysis 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 -version: 2.4.0 +version: 2.4.1 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub diff --git a/packages/wyatt_architecture/example/pubspec.yaml b/packages/wyatt_architecture/example/pubspec.yaml index e9760764..0d208bb9 100644 --- a/packages/wyatt_architecture/example/pubspec.yaml +++ b/packages/wyatt_architecture/example/pubspec.yaml @@ -67,7 +67,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_architecture/pubspec.yaml b/packages/wyatt_architecture/pubspec.yaml index bb742765..cac59f5f 100644 --- a/packages/wyatt_architecture/pubspec.yaml +++ b/packages/wyatt_architecture/pubspec.yaml @@ -24,4 +24,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 \ No newline at end of file + version: ^2.4.1 \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/pubspec.yaml b/packages/wyatt_authentication_bloc/pubspec.yaml index 2caaecd6..a97dba05 100644 --- a/packages/wyatt_authentication_bloc/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/pubspec.yaml @@ -37,4 +37,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.4.0 + version: 2.4.1 diff --git a/packages/wyatt_bloc_helper/pubspec.yaml b/packages/wyatt_bloc_helper/pubspec.yaml index 851aa25c..00af1bf5 100644 --- a/packages/wyatt_bloc_helper/pubspec.yaml +++ b/packages/wyatt_bloc_helper/pubspec.yaml @@ -22,4 +22,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 \ No newline at end of file + version: ^2.4.1 \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml index cb1c765b..50944ac6 100644 --- a/packages/wyatt_bloc_layout/example/pubspec.yaml +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -51,7 +51,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_bloc_layout/pubspec.yaml b/packages/wyatt_bloc_layout/pubspec.yaml index ece9dd45..11e03807 100644 --- a/packages/wyatt_bloc_layout/pubspec.yaml +++ b/packages/wyatt_bloc_layout/pubspec.yaml @@ -41,5 +41,5 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis diff --git a/packages/wyatt_component_copy_with_extension/example/pubspec.yaml b/packages/wyatt_component_copy_with_extension/example/pubspec.yaml index aaff40a0..82995754 100644 --- a/packages/wyatt_component_copy_with_extension/example/pubspec.yaml +++ b/packages/wyatt_component_copy_with_extension/example/pubspec.yaml @@ -20,7 +20,7 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.1 # The following section is specific to Flutter. flutter: diff --git a/packages/wyatt_component_copy_with_extension/pubspec.yaml b/packages/wyatt_component_copy_with_extension/pubspec.yaml index aac16282..de13dc2d 100644 --- a/packages/wyatt_component_copy_with_extension/pubspec.yaml +++ b/packages/wyatt_component_copy_with_extension/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.1 # The following section is specific to Flutter. flutter: diff --git a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml index 4a0ceb88..ab05f5a8 100644 --- a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml @@ -25,4 +25,4 @@ dev_dependencies: path: "../" wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.1 diff --git a/packages/wyatt_component_copy_with_gen/pubspec.yaml b/packages/wyatt_component_copy_with_gen/pubspec.yaml index fb456294..bae83cb0 100644 --- a/packages/wyatt_component_copy_with_gen/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/pubspec.yaml @@ -24,4 +24,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.1 diff --git a/packages/wyatt_crud_bloc/pubspec.yaml b/packages/wyatt_crud_bloc/pubspec.yaml index 64a23de5..0cfd4a64 100644 --- a/packages/wyatt_crud_bloc/pubspec.yaml +++ b/packages/wyatt_crud_bloc/pubspec.yaml @@ -31,4 +31,4 @@ dev_dependencies: bloc_test: ^9.1.0 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.4.0 + version: 2.4.1 diff --git a/packages/wyatt_form_bloc/pubspec.yaml b/packages/wyatt_form_bloc/pubspec.yaml index ed393cf5..b4ddf0a2 100644 --- a/packages/wyatt_form_bloc/pubspec.yaml +++ b/packages/wyatt_form_bloc/pubspec.yaml @@ -30,4 +30,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^2.4.0 + version: ^2.4.1 diff --git a/packages/wyatt_http_client/pubspec.yaml b/packages/wyatt_http_client/pubspec.yaml index 78af5489..699732db 100644 --- a/packages/wyatt_http_client/pubspec.yaml +++ b/packages/wyatt_http_client/pubspec.yaml @@ -14,5 +14,5 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis diff --git a/packages/wyatt_type_utils/example/pubspec.yaml b/packages/wyatt_type_utils/example/pubspec.yaml index 6414963a..a2e63491 100644 --- a/packages/wyatt_type_utils/example/pubspec.yaml +++ b/packages/wyatt_type_utils/example/pubspec.yaml @@ -36,7 +36,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/wyatt_type_utils/pubspec.yaml b/packages/wyatt_type_utils/pubspec.yaml index 7fde7c9f..c74145af 100644 --- a/packages/wyatt_type_utils/pubspec.yaml +++ b/packages/wyatt_type_utils/pubspec.yaml @@ -13,4 +13,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 \ No newline at end of file + version: ^2.4.1 \ No newline at end of file diff --git a/packages/wyatt_ui_components/example/pubspec.yaml b/packages/wyatt_ui_components/example/pubspec.yaml index a88163fa..dc9412e9 100644 --- a/packages/wyatt_ui_components/example/pubspec.yaml +++ b/packages/wyatt_ui_components/example/pubspec.yaml @@ -51,7 +51,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 6b8848b6..81f439f9 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -20,7 +20,7 @@ dev_dependencies: flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.1 build_runner: ^2.3.3 copy_with_extension_gen: ^5.0.0 diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index cf855e24..fe539089 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -30,7 +30,7 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.1 # The following section is specific to Flutter. flutter: diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index 912ae443..d34b1dbc 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -35,7 +35,7 @@ dev_dependencies: flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.1 wyatt_component_copy_with_gen: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git diff --git a/packages/wyatt_ui_layout/example/pubspec.yaml b/packages/wyatt_ui_layout/example/pubspec.yaml index e1e53f97..5f054e02 100644 --- a/packages/wyatt_ui_layout/example/pubspec.yaml +++ b/packages/wyatt_ui_layout/example/pubspec.yaml @@ -57,7 +57,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_ui_layout/pubspec.yaml b/packages/wyatt_ui_layout/pubspec.yaml index 46debeab..f62e4219 100644 --- a/packages/wyatt_ui_layout/pubspec.yaml +++ b/packages/wyatt_ui_layout/pubspec.yaml @@ -24,5 +24,5 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis -- 2.47.2 From 4a73a8a4c0ccc27630976104f906d26bdb55aff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Fri, 24 Feb 2023 16:26:51 +0100 Subject: [PATCH 198/320] chore(ui_kit): export wyatt component theme data --- packages/wyatt_ui_kit/lib/src/src.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/wyatt_ui_kit/lib/src/src.dart b/packages/wyatt_ui_kit/lib/src/src.dart index 406639aa..b7e3c1de 100644 --- a/packages/wyatt_ui_kit/lib/src/src.dart +++ b/packages/wyatt_ui_kit/lib/src/src.dart @@ -17,3 +17,4 @@ export './components/components.dart'; export './core/core.dart'; export './domain/domain.dart'; +export './features/wyatt_component_theme_data.dart'; -- 2.47.2 From 0a55df8638b4d31fbc7796bddd0486ee304204f0 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 27 Feb 2023 13:55:26 +0100 Subject: [PATCH 199/320] chore(i18n): initialize new package --- packages/wyatt_i18n/.gitignore | 7 + packages/wyatt_i18n/.vscode/extensions.json | 24 + packages/wyatt_i18n/.vscode/launch.json | 34 + packages/wyatt_i18n/.vscode/settings.json | 72 ++ packages/wyatt_i18n/AUTHORS | 7 + packages/wyatt_i18n/CHANGELOG.md | 3 + packages/wyatt_i18n/LICENSE | 674 ++++++++++++++++++ packages/wyatt_i18n/README.md | 50 ++ packages/wyatt_i18n/analysis_options.yaml | 25 + packages/wyatt_i18n/example/.gitignore | 44 ++ packages/wyatt_i18n/example/.metadata | 30 + packages/wyatt_i18n/example/README.md | 16 + .../wyatt_i18n/example/analysis_options.yaml | 1 + .../wyatt_i18n/example/assets/i18n.en.arb | 13 + packages/wyatt_i18n/example/lib/main.dart | 58 ++ packages/wyatt_i18n/example/pubspec.yaml | 20 + .../wyatt_i18n/example/test/widget_test.dart | 1 + packages/wyatt_i18n/example/web/favicon.png | Bin 0 -> 917 bytes .../wyatt_i18n/example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../wyatt_i18n/example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes packages/wyatt_i18n/example/web/index.html | 59 ++ packages/wyatt_i18n/example/web/manifest.json | 35 + packages/wyatt_i18n/lib/src/core/core.dart | 18 + .../wyatt_i18n/lib/src/core/enums/format.dart | 45 ++ .../lib/src/core/exceptions/exceptions.dart | 53 ++ packages/wyatt_i18n/lib/src/data/data.dart | 19 + .../assets_file_data_source_impl.dart | 82 +++ .../network_data_source_impl.dart | 28 + .../repositories/i18_repository_impl.dart | 43 ++ .../domain/data_sources/i18n_data_source.dart | 32 + .../wyatt_i18n/lib/src/domain/domain.dart | 19 + .../lib/src/domain/entities/i18n.dart | 45 ++ .../domain/repositories/i18n_repository.dart | 26 + packages/wyatt_i18n/lib/src/src.dart | 19 + packages/wyatt_i18n/lib/src/wyatt_i18n.dart | 19 + packages/wyatt_i18n/lib/wyatt_i18n.dart | 20 + packages/wyatt_i18n/pubspec.yaml | 37 + packages/wyatt_i18n/test/wyatt_i18n_test.dart | 23 + 40 files changed, 1701 insertions(+) create mode 100644 packages/wyatt_i18n/.gitignore create mode 100644 packages/wyatt_i18n/.vscode/extensions.json create mode 100644 packages/wyatt_i18n/.vscode/launch.json create mode 100644 packages/wyatt_i18n/.vscode/settings.json create mode 100644 packages/wyatt_i18n/AUTHORS create mode 100644 packages/wyatt_i18n/CHANGELOG.md create mode 100644 packages/wyatt_i18n/LICENSE create mode 100644 packages/wyatt_i18n/README.md create mode 100644 packages/wyatt_i18n/analysis_options.yaml create mode 100644 packages/wyatt_i18n/example/.gitignore create mode 100644 packages/wyatt_i18n/example/.metadata create mode 100644 packages/wyatt_i18n/example/README.md create mode 100644 packages/wyatt_i18n/example/analysis_options.yaml create mode 100644 packages/wyatt_i18n/example/assets/i18n.en.arb create mode 100644 packages/wyatt_i18n/example/lib/main.dart create mode 100644 packages/wyatt_i18n/example/pubspec.yaml create mode 100644 packages/wyatt_i18n/example/test/widget_test.dart create mode 100644 packages/wyatt_i18n/example/web/favicon.png create mode 100644 packages/wyatt_i18n/example/web/icons/Icon-192.png create mode 100644 packages/wyatt_i18n/example/web/icons/Icon-512.png create mode 100644 packages/wyatt_i18n/example/web/icons/Icon-maskable-192.png create mode 100644 packages/wyatt_i18n/example/web/icons/Icon-maskable-512.png create mode 100644 packages/wyatt_i18n/example/web/index.html create mode 100644 packages/wyatt_i18n/example/web/manifest.json create mode 100644 packages/wyatt_i18n/lib/src/core/core.dart create mode 100644 packages/wyatt_i18n/lib/src/core/enums/format.dart create mode 100644 packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart create mode 100644 packages/wyatt_i18n/lib/src/data/data.dart create mode 100644 packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart create mode 100644 packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart create mode 100644 packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart create mode 100644 packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart create mode 100644 packages/wyatt_i18n/lib/src/domain/domain.dart create mode 100644 packages/wyatt_i18n/lib/src/domain/entities/i18n.dart create mode 100644 packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart create mode 100644 packages/wyatt_i18n/lib/src/src.dart create mode 100644 packages/wyatt_i18n/lib/src/wyatt_i18n.dart create mode 100644 packages/wyatt_i18n/lib/wyatt_i18n.dart create mode 100644 packages/wyatt_i18n/pubspec.yaml create mode 100644 packages/wyatt_i18n/test/wyatt_i18n_test.dart diff --git a/packages/wyatt_i18n/.gitignore b/packages/wyatt_i18n/.gitignore new file mode 100644 index 00000000..3cceda55 --- /dev/null +++ b/packages/wyatt_i18n/.gitignore @@ -0,0 +1,7 @@ +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ + +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/packages/wyatt_i18n/.vscode/extensions.json b/packages/wyatt_i18n/.vscode/extensions.json new file mode 100644 index 00000000..30cd2233 --- /dev/null +++ b/packages/wyatt_i18n/.vscode/extensions.json @@ -0,0 +1,24 @@ +/* + * 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 . + */ + +{ + "recommendations": [ + "psioniq.psi-header", + "blaugold.melos-code" + ] +} \ No newline at end of file diff --git a/packages/wyatt_i18n/.vscode/launch.json b/packages/wyatt_i18n/.vscode/launch.json new file mode 100644 index 00000000..653eabc8 --- /dev/null +++ b/packages/wyatt_i18n/.vscode/launch.json @@ -0,0 +1,34 @@ +/* + * 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 . + */ + +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Example", + "request": "launch", + "type": "dart", + "cwd": "example/", + "program": "lib/main.dart", + "flutterMode": "debug" + }, + ] +} \ No newline at end of file diff --git a/packages/wyatt_i18n/.vscode/settings.json b/packages/wyatt_i18n/.vscode/settings.json new file mode 100644 index 00000000..a729c46c --- /dev/null +++ b/packages/wyatt_i18n/.vscode/settings.json @@ -0,0 +1,72 @@ +{ + "dart.runPubGetOnPubspecChanges": "never", + "bloc.newCubitTemplate.type": "equatable", + "psi-header.changes-tracking": { + "isActive": true + }, + "psi-header.config": { + "blankLinesAfter": 1, + "forceToTop": true + }, + "psi-header.lang-config": [ + { + "beforeHeader": [ + "# -*- coding:utf-8 -*-", + "#!/usr/bin/env python3" + ], + "begin": "###", + "end": "###", + "language": "python", + "prefix": "# " + }, + { + "beforeHeader": [ + "#!/usr/bin/env sh", + "" + ], + "language": "shellscript", + "begin": "", + "end": "", + "prefix": "# " + }, + { + "begin": "", + "end": "", + "language": "dart", + "prefix": "// " + }, + { + "begin": "", + "end": "", + "language": "yaml", + "prefix": "# " + }, + { + "begin": "", + "language": "markdown", + }, + ], + "psi-header.templates": [ + { + "language": "*", + "template": [ + "Copyright (C) <> 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 ." + ], + } + ], +} \ No newline at end of file diff --git a/packages/wyatt_i18n/AUTHORS b/packages/wyatt_i18n/AUTHORS new file mode 100644 index 00000000..8a49779b --- /dev/null +++ b/packages/wyatt_i18n/AUTHORS @@ -0,0 +1,7 @@ +# Below is a list of people and organizations that have contributed +# to this project. Names should be added to the list like so: +# +# Name/Organization + +Wyatt Group S.A.S +Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_i18n/CHANGELOG.md b/packages/wyatt_i18n/CHANGELOG.md new file mode 100644 index 00000000..effe43c8 --- /dev/null +++ b/packages/wyatt_i18n/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/packages/wyatt_i18n/LICENSE b/packages/wyatt_i18n/LICENSE new file mode 100644 index 00000000..e72bfdda --- /dev/null +++ b/packages/wyatt_i18n/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + (at your option) 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/packages/wyatt_i18n/README.md b/packages/wyatt_i18n/README.md new file mode 100644 index 00000000..c3d48592 --- /dev/null +++ b/packages/wyatt_i18n/README.md @@ -0,0 +1,50 @@ + + +# Flutter - Wyatt I18n + +

    + Style: Wyatt Analysis + SDK: Flutter +

    + +A package by wyatt studio + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/packages/wyatt_i18n/analysis_options.yaml b/packages/wyatt_i18n/analysis_options.yaml new file mode 100644 index 00000000..265c79a8 --- /dev/null +++ b/packages/wyatt_i18n/analysis_options.yaml @@ -0,0 +1,25 @@ +include: package:wyatt_analysis/analysis_options.flutter.yaml +analyzer: + plugins: + - dart_code_metrics +dart_code_metrics: + anti-patterns: + - long-method + - long-parameter-list + metrics: + cyclomatic-complexity: 20 + maximum-nesting-level: 5 + number-of-parameters: 4 + source-lines-of-code: 50 + metrics-exclude: + - test/** + rules: + - newline-before-return + - no-boolean-literal-compare + - no-empty-block + - prefer-trailing-comma + - prefer-conditional-expressions + - no-equal-then-else + - avoid-border-all + - prefer-const-border-radius + - prefer-using-list-view diff --git a/packages/wyatt_i18n/example/.gitignore b/packages/wyatt_i18n/example/.gitignore new file mode 100644 index 00000000..24476c5d --- /dev/null +++ b/packages/wyatt_i18n/example/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/wyatt_i18n/example/.metadata b/packages/wyatt_i18n/example/.metadata new file mode 100644 index 00000000..30e0d3ce --- /dev/null +++ b/packages/wyatt_i18n/example/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + - platform: web + create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/wyatt_i18n/example/README.md b/packages/wyatt_i18n/example/README.md new file mode 100644 index 00000000..2b3fce4c --- /dev/null +++ b/packages/wyatt_i18n/example/README.md @@ -0,0 +1,16 @@ +# example + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/packages/wyatt_i18n/example/analysis_options.yaml b/packages/wyatt_i18n/example/analysis_options.yaml new file mode 100644 index 00000000..8c9daa4e --- /dev/null +++ b/packages/wyatt_i18n/example/analysis_options.yaml @@ -0,0 +1 @@ +include: package:wyatt_analysis/analysis_options.flutter.yaml diff --git a/packages/wyatt_i18n/example/assets/i18n.en.arb b/packages/wyatt_i18n/example/assets/i18n.en.arb new file mode 100644 index 00000000..f59abc87 --- /dev/null +++ b/packages/wyatt_i18n/example/assets/i18n.en.arb @@ -0,0 +1,13 @@ +{ + "@@locale": "en", + "youHavePushed": "You have pushed {count} times the bouton !", + "@youHavePushed": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "btnAddFile": "Add file", + "btnAddFileCaption": "Max size: 20MB" +} \ No newline at end of file diff --git a/packages/wyatt_i18n/example/lib/main.dart b/packages/wyatt_i18n/example/lib/main.dart new file mode 100644 index 00000000..dd147bd8 --- /dev/null +++ b/packages/wyatt_i18n/example/lib/main.dart @@ -0,0 +1,58 @@ +// 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 . + +import 'package:flutter/material.dart'; + +import 'package:wyatt_i18n/wyatt_i18n.dart'; + +void main(List args) { + runApp(const App()); +} + +class App extends StatelessWidget { + const App({super.key}); + + static const String title = 'Wyatt i18n Example'; + + @override + Widget build(BuildContext context) => MaterialApp( + title: title, + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: Scaffold( + appBar: AppBar( + title: const Text(title), + ), + body: Center( + child: FutureBuilder( + future: Future(() async { + // test + const I18nDataSource dataSource = AssetsFileDataSourceImpl(); + + const I18nRepository repository = + I18RepositoryImpl(dataSource: dataSource); + + print((await repository.load('fr')).err); + + return 'test'; + }), + builder: (context, snapshot) => const Text('WyattI18n'), + ), + ), + ), + ); +} diff --git a/packages/wyatt_i18n/example/pubspec.yaml b/packages/wyatt_i18n/example/pubspec.yaml new file mode 100644 index 00000000..65ff8685 --- /dev/null +++ b/packages/wyatt_i18n/example/pubspec.yaml @@ -0,0 +1,20 @@ +name: wyatt_i18n_example +description: A new Flutter project. +version: 1.0.0 +publish_to: 'none' +environment: + sdk: ">=2.19.0 <3.0.0" +dependencies: + flutter: {sdk: flutter} + wyatt_i18n: + path: "../" +dev_dependencies: + flutter_test: {sdk: flutter} + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.0 +# The following section is specific to Flutter. +flutter: + uses-material-design: true + assets: + - assets/ \ No newline at end of file diff --git a/packages/wyatt_i18n/example/test/widget_test.dart b/packages/wyatt_i18n/example/test/widget_test.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/packages/wyatt_i18n/example/test/widget_test.dart @@ -0,0 +1 @@ + diff --git a/packages/wyatt_i18n/example/web/favicon.png b/packages/wyatt_i18n/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/packages/wyatt_i18n/example/web/icons/Icon-192.png b/packages/wyatt_i18n/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_i18n/example/web/icons/Icon-512.png b/packages/wyatt_i18n/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 zcmd5=2T+s!lYZ%-(h(2@5fr2dC?F^$C=i-}R6$UX8af(!je;W5yC_|HmujSgN*6?W z3knF*TL1$|?oD*=zPbBVex*RUIKsL<(&Rj9%^UD2IK3W?2j>D?eWQgvS-HLymHo9%~|N2Q{~j za?*X-{b9JRowv_*Mh|;*-kPFn>PI;r<#kFaxFqbn?aq|PduQg=2Q;~Qc}#z)_T%x9 zE|0!a70`58wjREmAH38H1)#gof)U3g9FZ^ zF7&-0^Hy{4XHWLoC*hOG(dg~2g6&?-wqcpf{ z&3=o8vw7lMi22jCG9RQbv8H}`+}9^zSk`nlR8?Z&G2dlDy$4#+WOlg;VHqzuE=fM@ z?OI6HEJH4&tA?FVG}9>jAnq_^tlw8NbjNhfqk2rQr?h(F&WiKy03Sn=-;ZJRh~JrD zbt)zLbnabttEZ>zUiu`N*u4sfQaLE8-WDn@tHp50uD(^r-}UsUUu)`!Rl1PozAc!a z?uj|2QDQ%oV-jxUJmJycySBINSKdX{kDYRS=+`HgR2GO19fg&lZKyBFbbXhQV~v~L za^U944F1_GtuFXtvDdDNDvp<`fqy);>Vw=ncy!NB85Tw{&sT5&Ox%-p%8fTS;OzlRBwErvO+ROe?{%q-Zge=%Up|D4L#>4K@Ke=x%?*^_^P*KD zgXueMiS63!sEw@fNLB-i^F|@Oib+S4bcy{eu&e}Xvb^(mA!=U=Xr3||IpV~3K zQWzEsUeX_qBe6fky#M zzOJm5b+l;~>=sdp%i}}0h zO?B?i*W;Ndn02Y0GUUPxERG`3Bjtj!NroLoYtyVdLtl?SE*CYpf4|_${ku2s`*_)k zN=a}V8_2R5QANlxsq!1BkT6$4>9=-Ix4As@FSS;1q^#TXPrBsw>hJ}$jZ{kUHoP+H zvoYiR39gX}2OHIBYCa~6ERRPJ#V}RIIZakUmuIoLF*{sO8rAUEB9|+A#C|@kw5>u0 zBd=F!4I)Be8ycH*)X1-VPiZ+Ts8_GB;YW&ZFFUo|Sw|x~ZajLsp+_3gv((Q#N>?Jz zFBf`~p_#^${zhPIIJY~yo!7$-xi2LK%3&RkFg}Ax)3+dFCjGgKv^1;lUzQlPo^E{K zmCnrwJ)NuSaJEmueEPO@(_6h3f5mFffhkU9r8A8(JC5eOkux{gPmx_$Uv&|hyj)gN zd>JP8l2U&81@1Hc>#*su2xd{)T`Yw< zN$dSLUN}dfx)Fu`NcY}TuZ)SdviT{JHaiYgP4~@`x{&h*Hd>c3K_To9BnQi@;tuoL z%PYQo&{|IsM)_>BrF1oB~+`2_uZQ48z9!)mtUR zdfKE+b*w8cPu;F6RYJiYyV;PRBbThqHBEu_(U{(gGtjM}Zi$pL8Whx}<JwE3RM0F8x7%!!s)UJVq|TVd#hf1zVLya$;mYp(^oZQ2>=ZXU1c$}f zm|7kfk>=4KoQoQ!2&SOW5|JP1)%#55C$M(u4%SP~tHa&M+=;YsW=v(Old9L3(j)`u z2?#fK&1vtS?G6aOt@E`gZ9*qCmyvc>Ma@Q8^I4y~f3gs7*d=ATlP>1S zyF=k&6p2;7dn^8?+!wZO5r~B+;@KXFEn^&C=6ma1J7Au6y29iMIxd7#iW%=iUzq&C=$aPLa^Q zncia$@TIy6UT@69=nbty5epP>*fVW@5qbUcb2~Gg75dNd{COFLdiz3}kODn^U*=@E z0*$7u7Rl2u)=%fk4m8EK1ctR!6%Ve`e!O20L$0LkM#f+)n9h^dn{n`T*^~d+l*Qlx z$;JC0P9+en2Wlxjwq#z^a6pdnD6fJM!GV7_%8%c)kc5LZs_G^qvw)&J#6WSp< zmsd~1-(GrgjC56Pdf6#!dt^y8Rg}!#UXf)W%~PeU+kU`FeSZHk)%sFv++#Dujk-~m zFHvVJC}UBn2jN& zs!@nZ?e(iyZPNo`p1i#~wsv9l@#Z|ag3JR>0#u1iW9M1RK1iF6-RbJ4KYg?B`dET9 zyR~DjZ>%_vWYm*Z9_+^~hJ_|SNTzBKx=U0l9 z9x(J96b{`R)UVQ$I`wTJ@$_}`)_DyUNOso6=WOmQKI1e`oyYy1C&%AQU<0-`(ow)1 zT}gYdwWdm4wW6|K)LcfMe&psE0XGhMy&xS`@vLi|1#Za{D6l@#D!?nW87wcscUZgELT{Cz**^;Zb~7 z(~WFRO`~!WvyZAW-8v!6n&j*PLm9NlN}BuUN}@E^TX*4Or#dMMF?V9KBeLSiLO4?B zcE3WNIa-H{ThrlCoN=XjOGk1dT=xwwrmt<1a)mrRzg{35`@C!T?&_;Q4Ce=5=>z^*zE_c(0*vWo2_#TD<2)pLXV$FlwP}Ik74IdDQU@yhkCr5h zn5aa>B7PWy5NQ!vf7@p_qtC*{dZ8zLS;JetPkHi>IvPjtJ#ThGQD|Lq#@vE2xdl%`x4A8xOln}BiQ92Po zW;0%A?I5CQ_O`@Ad=`2BLPPbBuPUp@Hb%a_OOI}y{Rwa<#h z5^6M}s7VzE)2&I*33pA>e71d78QpF>sNK;?lj^Kl#wU7G++`N_oL4QPd-iPqBhhs| z(uVM}$ItF-onXuuXO}o$t)emBO3Hjfyil@*+GF;9j?`&67GBM;TGkLHi>@)rkS4Nj zAEk;u)`jc4C$qN6WV2dVd#q}2X6nKt&X*}I@jP%Srs%%DS92lpDY^K*Sx4`l;aql$ zt*-V{U&$DM>pdO?%jt$t=vg5|p+Rw?SPaLW zB6nvZ69$ne4Z(s$3=Rf&RX8L9PWMV*S0@R zuIk&ba#s6sxVZ51^4Kon46X^9`?DC9mEhWB3f+o4#2EXFqy0(UTc>GU| zGCJmI|Dn-dX#7|_6(fT)>&YQ0H&&JX3cTvAq(a@ydM4>5Njnuere{J8p;3?1az60* z$1E7Yyxt^ytULeokgDnRVKQw9vzHg1>X@@jM$n$HBlveIrKP5-GJq%iWH#odVwV6cF^kKX(@#%%uQVb>#T6L^mC@)%SMd4DF? zVky!~ge27>cpUP1Vi}Z32lbLV+CQy+T5Wdmva6Fg^lKb!zrg|HPU=5Qu}k;4GVH+x z%;&pN1LOce0w@9i1Mo-Y|7|z}fbch@BPp2{&R-5{GLoeu8@limQmFF zaJRR|^;kW_nw~0V^ zfTnR!Ni*;-%oSHG1yItARs~uxra|O?YJxBzLjpeE-=~TO3Dn`JL5Gz;F~O1u3|FE- zvK2Vve`ylc`a}G`gpHg58Cqc9fMoy1L}7x7T>%~b&irrNMo?np3`q;d3d;zTK>nrK zOjPS{@&74-fA7j)8uT9~*g23uGnxwIVj9HorzUX#s0pcp2?GH6i}~+kv9fWChtPa_ z@T3m+$0pbjdQw7jcnHn;Pi85hk_u2-1^}c)LNvjdam8K-XJ+KgKQ%!?2n_!#{$H|| zLO=%;hRo6EDmnOBKCL9Cg~ETU##@u^W_5joZ%Et%X_n##%JDOcsO=0VL|Lkk!VdRJ z^|~2pB@PUspT?NOeO?=0Vb+fAGc!j%Ufn-cB`s2A~W{Zj{`wqWq_-w0wr@6VrM zbzni@8c>WS!7c&|ZR$cQ;`niRw{4kG#e z70e!uX8VmP23SuJ*)#(&R=;SxGAvq|&>geL&!5Z7@0Z(No*W561n#u$Uc`f9pD70# z=sKOSK|bF~#khTTn)B28h^a1{;>EaRnHj~>i=Fnr3+Fa4 z`^+O5_itS#7kPd20rq66_wH`%?HNzWk@XFK0n;Z@Cx{kx==2L22zWH$Yg?7 zvDj|u{{+NR3JvUH({;b*$b(U5U z7(lF!1bz2%06+|-v(D?2KgwNw7( zJB#Tz+ZRi&U$i?f34m7>uTzO#+E5cbaiQ&L}UxyOQq~afbNB4EI{E04ZWg53w0A{O%qo=lF8d zf~ktGvIgf-a~zQoWf>loF7pOodrd0a2|BzwwPDV}ShauTK8*fmF6NRbO>Iw9zZU}u zw8Ya}?seBnEGQDmH#XpUUkj}N49tP<2jYwTFp!P+&Fd(%Z#yo80|5@zN(D{_pNow*&4%ql zW~&yp@scb-+Qj-EmErY+Tu=dUmf@*BoXY2&oKT8U?8?s1d}4a`Aq>7SV800m$FE~? zjmz(LY+Xx9sDX$;vU`xgw*jLw7dWOnWWCO8o|;}f>cu0Q&`0I{YudMn;P;L3R-uz# zfns_mZED_IakFBPP2r_S8XM$X)@O-xVKi4`7373Jkd5{2$M#%cRhWer3M(vr{S6>h zj{givZJ3(`yFL@``(afn&~iNx@B1|-qfYiZu?-_&Z8+R~v`d6R-}EX9IVXWO-!hL5 z*k6T#^2zAXdardU3Ao~I)4DGdAv2bx{4nOK`20rJo>rmk3S2ZDu}))8Z1m}CKigf0 z3L`3Y`{huj`xj9@`$xTZzZc3je?n^yG<8sw$`Y%}9mUsjUR%T!?k^(q)6FH6Af^b6 zlPg~IEwg0y;`t9y;#D+uz!oE4VP&Je!<#q*F?m5L5?J3i@!0J6q#eu z!RRU`-)HeqGi_UJZ(n~|PSNsv+Wgl{P-TvaUQ9j?ZCtvb^37U$sFpBrkT{7Jpd?HpIvj2!}RIq zH{9~+gErN2+}J`>Jvng2hwM`=PLNkc7pkjblKW|+Fk9rc)G1R>Ww>RC=r-|!m-u7( zc(a$9NG}w#PjWNMS~)o=i~WA&4L(YIW25@AL9+H9!?3Y}sv#MOdY{bb9j>p`{?O(P zIvb`n?_(gP2w3P#&91JX*md+bBEr%xUHMVqfB;(f?OPtMnAZ#rm5q5mh;a2f_si2_ z3oXWB?{NF(JtkAn6F(O{z@b76OIqMC$&oJ_&S|YbFJ*)3qVX_uNf5b8(!vGX19hsG z(OP>RmZp29KH9Ge2kKjKigUmOe^K_!UXP`von)PR8Qz$%=EmOB9xS(ZxE_tnyzo}7 z=6~$~9k0M~v}`w={AeqF?_)9q{m8K#6M{a&(;u;O41j)I$^T?lx5(zlebpY@NT&#N zR+1bB)-1-xj}R8uwqwf=iP1GbxBjneCC%UrSdSxK1vM^i9;bUkS#iRZw2H>rS<2<$ zNT3|sDH>{tXb=zq7XZi*K?#Zsa1h1{h5!Tq_YbKFm_*=A5-<~j63he;4`77!|LBlo zR^~tR3yxcU=gDFbshyF6>o0bdp$qmHS7D}m3;^QZq9kBBU|9$N-~oU?G5;jyFR7>z hN`IR97YZXIo@y!QgFWddJ3|0`sjFx!m))><{BI=FK%f8s literal 0 HcmV?d00001 diff --git a/packages/wyatt_i18n/example/web/icons/Icon-maskable-192.png b/packages/wyatt_i18n/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/packages/wyatt_i18n/example/web/icons/Icon-maskable-512.png b/packages/wyatt_i18n/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/packages/wyatt_i18n/example/web/index.html b/packages/wyatt_i18n/example/web/index.html new file mode 100644 index 00000000..be820e83 --- /dev/null +++ b/packages/wyatt_i18n/example/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + example + + + + + + + + + + diff --git a/packages/wyatt_i18n/example/web/manifest.json b/packages/wyatt_i18n/example/web/manifest.json new file mode 100644 index 00000000..096edf8f --- /dev/null +++ b/packages/wyatt_i18n/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "example", + "short_name": "example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/packages/wyatt_i18n/lib/src/core/core.dart b/packages/wyatt_i18n/lib/src/core/core.dart new file mode 100644 index 00000000..cd89b9c1 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/core.dart @@ -0,0 +1,18 @@ +// 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 . + +export 'enums/format.dart'; +export 'exceptions/exceptions.dart'; diff --git a/packages/wyatt_i18n/lib/src/core/enums/format.dart b/packages/wyatt_i18n/lib/src/core/enums/format.dart new file mode 100644 index 00000000..adc5bb90 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/enums/format.dart @@ -0,0 +1,45 @@ +// 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 . + +enum Format { + /// JSON i18 file format. + json(['json']), + + /// YAML i18 file format. + yaml(['yaml', 'yml']), + + /// ARB i18 file format. + arb(['arb']); + + const Format(this.extensions); + + final List extensions; + + /// Returns the [Format] that matches the given [ext]. + static Format? fromExtension(String ext) { + for (final format in Format.values) { + if (format.extensions.contains(ext)) { + return format; + } + } + + return null; + } + + /// Returns the [Format] that matches the given [path]. + static Format? extensionOf(String path) => + fromExtension(path.split('.').last); +} diff --git a/packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart new file mode 100644 index 00000000..aa4ae2e3 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart @@ -0,0 +1,53 @@ +// 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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_i18n/src/core/enums/format.dart'; + +/// Exception thrown when the i18n file is not found. +/// +/// Source can be a file path or a URL. +class SourceNotFoundException extends ClientException { + SourceNotFoundException(String source, {required Format format}) + : super('Source `$source` (format: $format) not found.'); +} + +/// Exception thrown when the i18n file is not valid. +class NoLocaleException extends ClientException { + NoLocaleException() + : super('No `@@locale` key found in the source nor locale provided.'); +} + +/// Exception thrown when the key is not found in the i18n file. +class KeyNotFoundException extends ClientException { + KeyNotFoundException(String key, [Map arguments = const {}]) + : super( + 'Key `$key` not found. ${arguments.isNotEmpty ? '($arguments)' : ''}', + ); +} + +/// Exception thrown when the searched key requires arguments but none were +/// provided. +class ArgumentsRequiredException extends ClientException { + ArgumentsRequiredException(String key, String value) + : super('Key `$key` requires arguments. ($value)'); +} + +/// Exception thrown when the key references a malformed value. +class MalformedValueException extends ClientException { + MalformedValueException(String key, String value) + : super('Key `$key` references a malformed value. ($value)'); +} diff --git a/packages/wyatt_i18n/lib/src/data/data.dart b/packages/wyatt_i18n/lib/src/data/data.dart new file mode 100644 index 00000000..aa424ac5 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/data/data.dart @@ -0,0 +1,19 @@ +// 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 . + +export 'data_sources/assets_file_data_source_impl.dart'; +export 'data_sources/network_data_source_impl.dart'; +export 'repositories/i18_repository_impl.dart'; diff --git a/packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart b/packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart new file mode 100644 index 00000000..ad2634e7 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart @@ -0,0 +1,82 @@ +// 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 . + +import 'dart:convert'; + +import 'package:flutter/services.dart' show ServicesBinding, rootBundle; +import 'package:wyatt_i18n/src/core/enums/format.dart'; +import 'package:wyatt_i18n/src/core/exceptions/exceptions.dart'; +import 'package:wyatt_i18n/src/domain/data_sources/i18n_data_source.dart'; + +class AssetsFileDataSourceImpl extends I18nDataSource { + const AssetsFileDataSourceImpl({super.format = Format.arb}) : super(); + + /// Checks if the given [assetPath] is a local asset. + Future assetExists(String assetPath) async { + final encoded = utf8.encoder.convert( + Uri(path: Uri.encodeFull(assetPath)).path, + ); + final asset = await ServicesBinding.instance.defaultBinaryMessenger + .send('flutter/assets', encoded.buffer.asByteData()); + + return asset != null; + } + + Future _tryLoad(String basePath) async { + String? content; + try { + for (final ext in super.format.extensions) { + if (await assetExists('$basePath.$ext')) { + content = await rootBundle.loadString('$basePath.$ext'); + } + } + } catch (_) { + throw SourceNotFoundException(basePath, format: format); + } + + if (content == null) { + throw SourceNotFoundException(basePath, format: format); + } + + return content; + } + + Future _load(String locale) async { + String? content; + + try { + content = await _tryLoad('assets/i18n.$locale'); + } catch (_) { + content = await _tryLoad('assets/i18n'); + } + + /// Content can't be null at this point. + /// Because if it is, previous [_tryLoad] calls would have t + /// hrown an exception. + return content!; + } + + /// Loads the i18n file from Assets folder. + /// + /// The i18n file must be named `i18n..` and must + /// be specified in the `pubspec.yaml` file. + @override + Future load(String locale) async { + final content = await _load(locale); + + return content; + } +} diff --git a/packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart b/packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart new file mode 100644 index 00000000..44964fd1 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart @@ -0,0 +1,28 @@ +// 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 . + +import 'package:wyatt_i18n/src/core/enums/format.dart'; +import 'package:wyatt_i18n/src/domain/data_sources/i18n_data_source.dart'; + +class NetworkDataSourceImpl extends I18nDataSource { + const NetworkDataSourceImpl({super.format = Format.arb}) : super(); + + @override + Future load(String locale) { + // TODO(wyatt): implement load from network + throw UnimplementedError(); + } +} diff --git a/packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart b/packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart new file mode 100644 index 00000000..4ae477da --- /dev/null +++ b/packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart @@ -0,0 +1,43 @@ +// 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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_i18n/src/domain/data_sources/i18n_data_source.dart'; +import 'package:wyatt_i18n/src/domain/entities/i18n.dart'; +import 'package:wyatt_i18n/src/domain/repositories/i18n_repository.dart'; +import 'package:wyatt_type_utils/wyatt_type_utils.dart'; + +class I18RepositoryImpl extends I18nRepository { + const I18RepositoryImpl({ + required this.dataSource, + }) : super(); + + final I18nDataSource dataSource; + + @override + FutureOrResult load(String locale) async => + await Result.tryCatchAsync( + () async { + final content = await dataSource.load(locale); + // TODO: Parse the content into a Map and return it. + + return I18n(locale: locale, + unparsedData: content, + data: {},); + }, + (error) => error, + ); +} diff --git a/packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart b/packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart new file mode 100644 index 00000000..7020ca8f --- /dev/null +++ b/packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart @@ -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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_i18n/src/core/enums/format.dart'; + +/// Base class for i18n data sources. +/// +/// This class is used to load i18n files from a source. +/// It returns a [Future] that resolves to a [String] containing the i18n file +/// contents. +abstract class I18nDataSource extends BaseDataSource { + const I18nDataSource({this.format = Format.arb}); + + final Format format; + + /// Loads the i18n file from the source. + Future load(String locale); +} diff --git a/packages/wyatt_i18n/lib/src/domain/domain.dart b/packages/wyatt_i18n/lib/src/domain/domain.dart new file mode 100644 index 00000000..ffeb7774 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/domain/domain.dart @@ -0,0 +1,19 @@ +// 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 . + +export 'data_sources/i18n_data_source.dart'; +export 'entities/i18n.dart'; +export 'repositories/i18n_repository.dart'; diff --git a/packages/wyatt_i18n/lib/src/domain/entities/i18n.dart b/packages/wyatt_i18n/lib/src/domain/entities/i18n.dart new file mode 100644 index 00000000..e09c06c4 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/domain/entities/i18n.dart @@ -0,0 +1,45 @@ +// 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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; + +/// Data structure for i18n files. +class I18n extends Entity { + const I18n({ + required this.locale, + required this.unparsedData, + required this.data, + }) : super(); + + /// The locale of the i18n file. + final String locale; + + /// The unparsed data of the i18n file. + final String unparsedData; + + /// The data of the i18n file. + final Map data; + + String operator [](String key) { + final value = data[key]; + + if (value is String) { + return value; + } else { + throw Exception('Invalid i18n key: $key'); + } + } +} diff --git a/packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart b/packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart new file mode 100644 index 00000000..aaf84b76 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart @@ -0,0 +1,26 @@ +// 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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_i18n/src/domain/entities/i18n.dart'; + +/// Base class for i18n repositories. +abstract class I18nRepository extends BaseRepository { + const I18nRepository() : super(); + + /// Loads the i18n file from the source. + FutureOrResult load(String locale); +} diff --git a/packages/wyatt_i18n/lib/src/src.dart b/packages/wyatt_i18n/lib/src/src.dart new file mode 100644 index 00000000..0839d5b4 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/src.dart @@ -0,0 +1,19 @@ +// 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 . + +export 'core/core.dart'; +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/packages/wyatt_i18n/lib/src/wyatt_i18n.dart b/packages/wyatt_i18n/lib/src/wyatt_i18n.dart new file mode 100644 index 00000000..5d6435ef --- /dev/null +++ b/packages/wyatt_i18n/lib/src/wyatt_i18n.dart @@ -0,0 +1,19 @@ +// 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 . + +abstract class WyattI18n { + static String get testString => 'Package: Wyatt I18n'; +} diff --git a/packages/wyatt_i18n/lib/wyatt_i18n.dart b/packages/wyatt_i18n/lib/wyatt_i18n.dart new file mode 100644 index 00000000..6cb291c7 --- /dev/null +++ b/packages/wyatt_i18n/lib/wyatt_i18n.dart @@ -0,0 +1,20 @@ +// 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 . + +/// A package by wyatt studio +library wyatt_i18n; + +export 'src/src.dart'; diff --git a/packages/wyatt_i18n/pubspec.yaml b/packages/wyatt_i18n/pubspec.yaml new file mode 100644 index 00000000..5f04ca90 --- /dev/null +++ b/packages/wyatt_i18n/pubspec.yaml @@ -0,0 +1,37 @@ +name: wyatt_i18n +description: A package by wyatt studio. +repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_i18n +version: 1.0.0 + +environment: + sdk: ">=2.19.0 <3.0.0" + +dependencies: + flutter: {sdk: flutter} + path: ^1.8.0 + wyatt_architecture: + hosted: + url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + name: wyatt_architecture + version: 0.1.0+1 + wyatt_bloc_helper: + hosted: + url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + name: wyatt_bloc_helper + version: 2.0.0 + wyatt_type_utils: + hosted: + url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + name: wyatt_type_utils + version: 0.0.4 + +dev_dependencies: + flutter_test: {sdk: flutter} + dart_code_metrics: ^5.5.1 + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.1 + +# The following section is specific to Flutter. +flutter: + uses-material-design: true diff --git a/packages/wyatt_i18n/test/wyatt_i18n_test.dart b/packages/wyatt_i18n/test/wyatt_i18n_test.dart new file mode 100644 index 00000000..a1b0e305 --- /dev/null +++ b/packages/wyatt_i18n/test/wyatt_i18n_test.dart @@ -0,0 +1,23 @@ +/// The i18n works as follows: +/// 1. The i18n file is loaded from a source. +/// - The i18n file is loaded from the assets folder. +/// - The i18n file can be in json, yaml or ARB format. +/// - The i18n file must contain a `@@locale` key with the locale code. +/// - The i18n file must be named `i18n..`. +/// - The i18n file is loaded from a network source. +/// - The i18n file can be in json, yaml or ARB format. +/// - The i18n file must contain a `@@locale` key with the locale code. +/// - The assets folder must contain a `i18n..` or +/// `i18n.` files used as a fallback. +/// 2. The i18n file is parsed and the locale is extracted. +/// 3. The i18n file is added to the i18n map. +/// 4. The i18n map is provided to the app. +/// +/// The i18n map can be reloaded by calling the `reload` method. +/// This will reload the i18n file from the source and update the i18n map. +/// And update any widgets that are listening to the i18n map. +/// +/// A top level BLoC is used to provide the i18n map to the app. +void main() { + +} -- 2.47.2 From 8a37aec12751e95d9f8a477a9073ab948002f0d1 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 27 Feb 2023 16:32:22 +0100 Subject: [PATCH 200/320] feat(i18n): add arb, json and yaml parsers --- .../wyatt_i18n/example/assets/i18n.en.json | 13 +++ .../wyatt_i18n/example/assets/i18n.en.yaml | 8 ++ packages/wyatt_i18n/example/lib/main.dart | 6 +- packages/wyatt_i18n/lib/src/core/core.dart | 7 +- .../wyatt_i18n/lib/src/core/enums/format.dart | 34 +++++-- .../lib/src/core/exceptions/exceptions.dart | 11 +++ .../lib/src/core/utils/arb_parser.dart | 26 +++++ .../lib/src/core/utils/json_parser.dart | 33 +++++++ .../wyatt_i18n/lib/src/core/utils/parser.dart | 21 ++++ .../wyatt_i18n/lib/src/core/utils/utils.dart | 20 ++++ .../lib/src/core/utils/yaml_parser.dart | 34 +++++++ .../assets_file_data_source_impl.dart | 85 +++++++++++----- .../network_data_source_impl.dart | 12 ++- .../repositories/i18_repository_impl.dart | 97 +++++++++++++++++-- .../domain/data_sources/i18n_data_source.dart | 9 +- .../domain/repositories/i18n_repository.dart | 27 +++++- packages/wyatt_i18n/pubspec.yaml | 2 + 17 files changed, 397 insertions(+), 48 deletions(-) create mode 100644 packages/wyatt_i18n/example/assets/i18n.en.json create mode 100644 packages/wyatt_i18n/example/assets/i18n.en.yaml create mode 100644 packages/wyatt_i18n/lib/src/core/utils/arb_parser.dart create mode 100644 packages/wyatt_i18n/lib/src/core/utils/json_parser.dart create mode 100644 packages/wyatt_i18n/lib/src/core/utils/parser.dart create mode 100644 packages/wyatt_i18n/lib/src/core/utils/utils.dart create mode 100644 packages/wyatt_i18n/lib/src/core/utils/yaml_parser.dart diff --git a/packages/wyatt_i18n/example/assets/i18n.en.json b/packages/wyatt_i18n/example/assets/i18n.en.json new file mode 100644 index 00000000..f59abc87 --- /dev/null +++ b/packages/wyatt_i18n/example/assets/i18n.en.json @@ -0,0 +1,13 @@ +{ + "@@locale": "en", + "youHavePushed": "You have pushed {count} times the bouton !", + "@youHavePushed": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "btnAddFile": "Add file", + "btnAddFileCaption": "Max size: 20MB" +} \ No newline at end of file diff --git a/packages/wyatt_i18n/example/assets/i18n.en.yaml b/packages/wyatt_i18n/example/assets/i18n.en.yaml new file mode 100644 index 00000000..e894e5d6 --- /dev/null +++ b/packages/wyatt_i18n/example/assets/i18n.en.yaml @@ -0,0 +1,8 @@ +"@@locale": en +youHavePushed: You have pushed {count} times the bouton ! +"@youHavePushed": + placeholders: + count: + type: int +btnAddFile: Add file +btnAddFileCaption: "Max size: 20MB" diff --git a/packages/wyatt_i18n/example/lib/main.dart b/packages/wyatt_i18n/example/lib/main.dart index dd147bd8..ed462ce9 100644 --- a/packages/wyatt_i18n/example/lib/main.dart +++ b/packages/wyatt_i18n/example/lib/main.dart @@ -45,8 +45,12 @@ class App extends StatelessWidget { const I18nRepository repository = I18RepositoryImpl(dataSource: dataSource); + + final test = (await repository.load('en')).ok; - print((await repository.load('fr')).err); + print(test?.locale); + print(test?.data); + print(test?.data['btnAddFile']); return 'test'; }), diff --git a/packages/wyatt_i18n/lib/src/core/core.dart b/packages/wyatt_i18n/lib/src/core/core.dart index cd89b9c1..575e445b 100644 --- a/packages/wyatt_i18n/lib/src/core/core.dart +++ b/packages/wyatt_i18n/lib/src/core/core.dart @@ -1,18 +1,19 @@ // 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 . export 'enums/format.dart'; export 'exceptions/exceptions.dart'; +export 'utils/utils.dart'; diff --git a/packages/wyatt_i18n/lib/src/core/enums/format.dart b/packages/wyatt_i18n/lib/src/core/enums/format.dart index adc5bb90..7ff768a8 100644 --- a/packages/wyatt_i18n/lib/src/core/enums/format.dart +++ b/packages/wyatt_i18n/lib/src/core/enums/format.dart @@ -14,24 +14,30 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:wyatt_i18n/src/core/utils/arb_parser.dart'; +import 'package:wyatt_i18n/src/core/utils/json_parser.dart'; +import 'package:wyatt_i18n/src/core/utils/parser.dart'; + +import 'package:wyatt_i18n/src/core/utils/yaml_parser.dart'; + +/// Enum for i18n file formats and extensions. +/// +/// This enum is used to determine the parser to use for a given i18n file. enum Format { /// JSON i18 file format. - json(['json']), + json, /// YAML i18 file format. - yaml(['yaml', 'yml']), + yaml, + yml, /// ARB i18 file format. - arb(['arb']); - - const Format(this.extensions); - - final List extensions; + arb; /// Returns the [Format] that matches the given [ext]. static Format? fromExtension(String ext) { for (final format in Format.values) { - if (format.extensions.contains(ext)) { + if (format.name == ext) { return format; } } @@ -42,4 +48,16 @@ enum Format { /// Returns the [Format] that matches the given [path]. static Format? extensionOf(String path) => fromExtension(path.split('.').last); + + Parser> get parser { + switch (this) { + case Format.json: + return const JsonParser(); + case Format.yaml: + case Format.yml: + return const YamlParser(); + case Format.arb: + return const ArbParser(); + } + } } diff --git a/packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart index aa4ae2e3..b91aaf48 100644 --- a/packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_i18n/lib/src/core/exceptions/exceptions.dart @@ -31,6 +31,12 @@ class NoLocaleException extends ClientException { : super('No `@@locale` key found in the source nor locale provided.'); } +/// Exception thrown when the i18n locale is not valid. +class InvalidLocaleException extends ClientException { + InvalidLocaleException(String locale, String expected) + : super('Invalid locale `$locale`. Expected `$expected`.'); +} + /// Exception thrown when the key is not found in the i18n file. class KeyNotFoundException extends ClientException { KeyNotFoundException(String key, [Map arguments = const {}]) @@ -51,3 +57,8 @@ class MalformedValueException extends ClientException { MalformedValueException(String key, String value) : super('Key `$key` references a malformed value. ($value)'); } + +class ParserException extends ClientException { + ParserException(String message, StackTrace? stackTrace) + : super('$message\n\n$stackTrace'); +} diff --git a/packages/wyatt_i18n/lib/src/core/utils/arb_parser.dart b/packages/wyatt_i18n/lib/src/core/utils/arb_parser.dart new file mode 100644 index 00000000..e796b809 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/utils/arb_parser.dart @@ -0,0 +1,26 @@ +// 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 . + +import 'package:wyatt_i18n/src/core/utils/json_parser.dart'; +import 'package:wyatt_i18n/src/core/utils/parser.dart'; + +class ArbParser extends Parser> { + const ArbParser() : super(); + + /// ARB files are JSON files, so we can use the JSON parser. + @override + Map parse(String input) => const JsonParser().parse(input); +} diff --git a/packages/wyatt_i18n/lib/src/core/utils/json_parser.dart b/packages/wyatt_i18n/lib/src/core/utils/json_parser.dart new file mode 100644 index 00000000..66015bc7 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/utils/json_parser.dart @@ -0,0 +1,33 @@ +// 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 . + +import 'dart:convert'; + +import 'package:wyatt_i18n/src/core/exceptions/exceptions.dart'; +import 'package:wyatt_i18n/src/core/utils/parser.dart'; + +class JsonParser extends Parser> { + const JsonParser() : super(); + + @override + Map parse(String input) { + try { + return jsonDecode(input) as Map; + } catch (e, s) { + throw ParserException(e.toString(), s); + } + } +} diff --git a/packages/wyatt_i18n/lib/src/core/utils/parser.dart b/packages/wyatt_i18n/lib/src/core/utils/parser.dart new file mode 100644 index 00000000..9ef63217 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/utils/parser.dart @@ -0,0 +1,21 @@ +// 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 . + +abstract class Parser { + const Parser(); + + O parse(I input); +} diff --git a/packages/wyatt_i18n/lib/src/core/utils/utils.dart b/packages/wyatt_i18n/lib/src/core/utils/utils.dart new file mode 100644 index 00000000..6dc64f48 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/utils/utils.dart @@ -0,0 +1,20 @@ +// 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 . + +export 'arb_parser.dart'; +export 'json_parser.dart'; +export 'parser.dart'; +export 'yaml_parser.dart'; diff --git a/packages/wyatt_i18n/lib/src/core/utils/yaml_parser.dart b/packages/wyatt_i18n/lib/src/core/utils/yaml_parser.dart new file mode 100644 index 00000000..ab3414db --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/utils/yaml_parser.dart @@ -0,0 +1,34 @@ +// 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 . + +import 'package:wyatt_i18n/src/core/exceptions/exceptions.dart'; +import 'package:wyatt_i18n/src/core/utils/parser.dart'; +import 'package:yaml/yaml.dart'; + +class YamlParser extends Parser> { + const YamlParser() : super(); + + @override + Map parse(String input) { + try { + final yaml = loadYaml(input) as YamlMap; + + return yaml.map((key, value) => MapEntry(key.toString(), value)); + } catch (e, s) { + throw ParserException(e.toString(), s); + } + } +} diff --git a/packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart b/packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart index ad2634e7..eb2a69f2 100644 --- a/packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart +++ b/packages/wyatt_i18n/lib/src/data/data_sources/assets_file_data_source_impl.dart @@ -21,10 +21,34 @@ import 'package:wyatt_i18n/src/core/enums/format.dart'; import 'package:wyatt_i18n/src/core/exceptions/exceptions.dart'; import 'package:wyatt_i18n/src/domain/data_sources/i18n_data_source.dart'; +/// {@template assets_file_data_source_impl} +/// Implementation of [I18nDataSource] that loads i18n files from the assets. +/// +/// The [basePath] is the folder where the i18n files are located. +/// The [baseName] is the name of the i18n files without the extension. +/// The [format] is the format of the i18n files. +/// +/// For example, if the i18n files are located in the `assets` and are named +/// `i18n.en.arb`, `i18n.fr.arb`, etc., then the [basePath] is `assets` and +/// the [baseName] is `i18n` and the [format] is [Format.arb]. +/// {@endtemplate} class AssetsFileDataSourceImpl extends I18nDataSource { - const AssetsFileDataSourceImpl({super.format = Format.arb}) : super(); + /// {@macro assets_file_data_source_impl} + const AssetsFileDataSourceImpl({ + this.basePath = 'assets', + this.baseName = 'i18n', + super.format = Format.arb, + }) : super(); + + /// The folder where the i18n files are located. + final String basePath; + + /// The name of the i18n files without the extension. + final String baseName; /// Checks if the given [assetPath] is a local asset. + /// + /// In fact, this method loads the asset and checks if it is null. Future assetExists(String assetPath) async { final encoded = utf8.encoder.convert( Uri(path: Uri.encodeFull(assetPath)).path, @@ -35,48 +59,65 @@ class AssetsFileDataSourceImpl extends I18nDataSource { return asset != null; } - Future _tryLoad(String basePath) async { + /// Tries to load the i18n file from the given [locale]. + Future _tryLoad(String? locale) async { String? content; + final ext = format.name; + final path = locale == null + ? '$basePath/$baseName.$ext' + : '$basePath/$baseName.$locale.$ext'; try { - for (final ext in super.format.extensions) { - if (await assetExists('$basePath.$ext')) { - content = await rootBundle.loadString('$basePath.$ext'); - } + if (await assetExists(path)) { + content = await rootBundle.loadString(path); } } catch (_) { - throw SourceNotFoundException(basePath, format: format); + content = null; } + /// If the i18n file is not found, then we try to load the + /// default i18n file. + if (content == null && locale != null) { + try { + content = await rootBundle.loadString('$basePath/$baseName.$ext'); + } catch (_) { + throw SourceNotFoundException(path, format: format); + } + } + + /// If the default i18n file is not found, then we throw an exception. + /// This case should happen only if the locale is null. if (content == null) { - throw SourceNotFoundException(basePath, format: format); + throw SourceNotFoundException(path, format: format); } return content; } - Future _load(String locale) async { + /// Tries to load the i18n file from a given [uri]. + /// This method is used when the [uri] is not null. + Future _tryLoadUri(Uri uri) async { String? content; - try { - content = await _tryLoad('assets/i18n.$locale'); + content = await rootBundle.loadString(uri.toString()); } catch (_) { - content = await _tryLoad('assets/i18n'); + throw SourceNotFoundException(uri.toString(), format: format); } - /// Content can't be null at this point. - /// Because if it is, previous [_tryLoad] calls would have t - /// hrown an exception. - return content!; + return content; } /// Loads the i18n file from Assets folder. /// - /// The i18n file must be named `i18n..` and must - /// be specified in the `pubspec.yaml` file. + /// The i18n file must be in [basePath], named [baseName] + + /// `..` and must be specified in the `pubspec.yaml` file. @override - Future load(String locale) async { - final content = await _load(locale); + Future load({required String? locale}) async => _tryLoad(locale); - return content; - } + /// Loads the i18n file from Assets folder. + /// + /// If the [uri] is not null, then we try to load the i18n file + /// from the given [uri]. In this case, the [basePath] and the + /// [baseName] are ignored. And there is no fallback. + @override + Future loadFrom(Uri uri) async => _tryLoadUri(uri); } diff --git a/packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart b/packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart index 44964fd1..64280681 100644 --- a/packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart +++ b/packages/wyatt_i18n/lib/src/data/data_sources/network_data_source_impl.dart @@ -19,10 +19,16 @@ import 'package:wyatt_i18n/src/domain/data_sources/i18n_data_source.dart'; class NetworkDataSourceImpl extends I18nDataSource { const NetworkDataSourceImpl({super.format = Format.arb}) : super(); - + @override - Future load(String locale) { - // TODO(wyatt): implement load from network + Future load({required String? locale}) { + // TODO(wyatt): implement load + throw UnimplementedError(); + } + + @override + Future loadFrom(Uri uri) { + // TODO(wyatt): implement loadFrom throw UnimplementedError(); } } diff --git a/packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart b/packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart index 4ae477da..3bd2a38d 100644 --- a/packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart +++ b/packages/wyatt_i18n/lib/src/data/repositories/i18_repository_impl.dart @@ -15,9 +15,7 @@ // along with this program. If not, see . import 'package:wyatt_architecture/wyatt_architecture.dart'; -import 'package:wyatt_i18n/src/domain/data_sources/i18n_data_source.dart'; -import 'package:wyatt_i18n/src/domain/entities/i18n.dart'; -import 'package:wyatt_i18n/src/domain/repositories/i18n_repository.dart'; +import 'package:wyatt_i18n/wyatt_i18n.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class I18RepositoryImpl extends I18nRepository { @@ -27,17 +25,98 @@ class I18RepositoryImpl extends I18nRepository { final I18nDataSource dataSource; + Future _parse( + String content, + Parser> parser, { + String? locale, + bool strict = false, + }) async { + final parsed = parser.parse(content); + + String parsedLocale; + + /// Checks if the locale is present in the parsed data. + /// If not, throws an exception. + /// If yes, sets the locale to the parsed locale. + if (parsed.containsKey('@@locale')) { + if (strict) { + /// Checks if the parsed locale is a string. + if (parsed['@@locale'] is! String) { + throw NoLocaleException(); + } + + /// Checks if the parsed locale is the same as the given locale. + if (locale != null && parsed['@@locale'] as String != locale) { + throw InvalidLocaleException(locale, parsed['@@locale'] as String); + } + } + parsedLocale = parsed['@@locale'] as String; + } else { + if (strict) { + /// Throws an exception if the locale is not present in the parsed data. + throw NoLocaleException(); + } else { + /// Sets the locale to the given locale. + /// If the given locale is null, sets the locale to 'null'. + /// This is done to prevent the locale from being null. + /// It should never be null. + parsedLocale = locale ?? 'null'; + } + } + + return I18n( + locale: parsedLocale, + unparsedData: content, + data: parsed, + ); + } + @override - FutureOrResult load(String locale) async => + FutureOrResult load({ + required String? locale, + bool strict = false, + Parser>? parser, + }) async => await Result.tryCatchAsync( () async { - final content = await dataSource.load(locale); - // TODO: Parse the content into a Map and return it. + final content = await dataSource.load(locale: locale); - return I18n(locale: locale, - unparsedData: content, - data: {},); + return _parse( + content, + parser ?? dataSource.format.parser, + locale: locale, + strict: strict, + ); }, (error) => error, ); + + @override + FutureOrResult loadFrom( + Uri uri, { + Parser>? parser, + }) async => + await Result.tryCatchAsync( + () async { + final content = await dataSource.loadFrom(uri); + + /// Strict is always true when loading from a uri. Because + /// the locale is not given and can't be inferred. + return _parse( + content, + parser ?? dataSource.format.parser, + strict: true, + ); + }, + (error) => error, + ); + + @override + Result get( + String key, [ + Map arguments = const {}, + ]) { + // TODO: implement get + throw UnimplementedError(); + } } diff --git a/packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart b/packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart index 7020ca8f..3421387b 100644 --- a/packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart +++ b/packages/wyatt_i18n/lib/src/domain/data_sources/i18n_data_source.dart @@ -28,5 +28,12 @@ abstract class I18nDataSource extends BaseDataSource { final Format format; /// Loads the i18n file from the source. - Future load(String locale); + /// If [locale] is not `null`, it will load the file with the given [locale]. + /// Otherwise, it will load the file from the default location. + Future load({required String? locale}); + + /// Loads the i18n file from the source. + /// + /// This method is used to load the i18n file from the given [Uri]. + Future loadFrom(Uri uri); } diff --git a/packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart b/packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart index aaf84b76..7716713a 100644 --- a/packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart +++ b/packages/wyatt_i18n/lib/src/domain/repositories/i18n_repository.dart @@ -15,12 +15,37 @@ // along with this program. If not, see . import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_i18n/src/core/utils/parser.dart'; import 'package:wyatt_i18n/src/domain/entities/i18n.dart'; +import 'package:wyatt_type_utils/wyatt_type_utils.dart'; /// Base class for i18n repositories. abstract class I18nRepository extends BaseRepository { const I18nRepository() : super(); /// Loads the i18n file from the source. - FutureOrResult load(String locale); + /// If [strict] is `true`, it will throw an NoLocaleException if the + /// `@@locale` key is not found in the i18n file, otherwise it will + /// set the locale to the given [locale]. + /// If [parser] is not `null`, it will use the given parser to parse + /// the i18n file. Otherwise, it will use the default parser for the format. + FutureOrResult load({ + required String? locale, + bool strict = false, + Parser>? parser, + }); + + /// Loads the i18n file from the given [uri]. + /// If [parser] is not `null`, it will use the given parser to parse + /// the i18n file. Otherwise, it will use the default parser for the format. + FutureOrResult loadFrom( + Uri uri, { + Parser>? parser, + }); + + /// Gets the translation for the given [key]. + Result get( + String key, [ + Map arguments = const {}, + ]); } diff --git a/packages/wyatt_i18n/pubspec.yaml b/packages/wyatt_i18n/pubspec.yaml index 5f04ca90..9124a7cd 100644 --- a/packages/wyatt_i18n/pubspec.yaml +++ b/packages/wyatt_i18n/pubspec.yaml @@ -9,6 +9,7 @@ environment: dependencies: flutter: {sdk: flutter} path: ^1.8.0 + petitparser: ^5.1.0 wyatt_architecture: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ @@ -24,6 +25,7 @@ dependencies: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_type_utils version: 0.0.4 + yaml: ^3.1.1 dev_dependencies: flutter_test: {sdk: flutter} -- 2.47.2 From 75f561a19e0484e67e511dbf29601ec5f58544aa Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Mon, 27 Feb 2023 17:42:22 +0100 Subject: [PATCH 201/320] feat(i18n): add ICU parser --- packages/wyatt_i18n/example/lib/main.dart | 30 ++- .../lib/src/core/utils/i18n_parser.dart | 135 ++++++++++++++ .../lib/src/core/utils/icu_parser.dart | 173 ++++++++++++++++++ .../wyatt_i18n/lib/src/core/utils/utils.dart | 8 +- packages/wyatt_i18n/lib/src/data/data.dart | 2 +- ...ry_impl.dart => i18n_repository_impl.dart} | 24 ++- .../lib/src/domain/entities/i18n.dart | 13 +- .../lib/src/domain/entities/tokens.dart | 52 ++++++ packages/wyatt_i18n/pubspec.yaml | 2 + 9 files changed, 413 insertions(+), 26 deletions(-) create mode 100644 packages/wyatt_i18n/lib/src/core/utils/i18n_parser.dart create mode 100644 packages/wyatt_i18n/lib/src/core/utils/icu_parser.dart rename packages/wyatt_i18n/lib/src/data/repositories/{i18_repository_impl.dart => i18n_repository_impl.dart} (84%) create mode 100644 packages/wyatt_i18n/lib/src/domain/entities/tokens.dart diff --git a/packages/wyatt_i18n/example/lib/main.dart b/packages/wyatt_i18n/example/lib/main.dart index ed462ce9..82ac6a5b 100644 --- a/packages/wyatt_i18n/example/lib/main.dart +++ b/packages/wyatt_i18n/example/lib/main.dart @@ -43,14 +43,30 @@ class App extends StatelessWidget { // test const I18nDataSource dataSource = AssetsFileDataSourceImpl(); - const I18nRepository repository = - I18RepositoryImpl(dataSource: dataSource); - - final test = (await repository.load('en')).ok; + final I18nRepository repository = + I18nRepositoryImpl(dataSource: dataSource); - print(test?.locale); - print(test?.data); - print(test?.data['btnAddFile']); + final test1 = (await repository.load(locale: 'en')).ok; + // final test2 = (await repository.loadFrom( + // Uri.parse('assets/i18n.en.yaml'), + // parser: const YamlParser(), + // )) + // .ok; + + // print(test1?.locale); + // print(test1?.data); + // print(test1?.data['btnAddFile']); + + final text = repository.get('youHavePushed', { + 'count': 8, + }); + + print(text.ok); + + + // print(test2?.locale); + // print(test2?.data); + // print(test2?.data['btnAddFile']); return 'test'; }), diff --git a/packages/wyatt_i18n/lib/src/core/utils/i18n_parser.dart b/packages/wyatt_i18n/lib/src/core/utils/i18n_parser.dart new file mode 100644 index 00000000..6cfb1273 --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/utils/i18n_parser.dart @@ -0,0 +1,135 @@ +// 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 . + +import 'package:collection/collection.dart'; +import 'package:intl/intl.dart'; +import 'package:wyatt_i18n/src/core/utils/icu_parser.dart'; +import 'package:wyatt_i18n/src/domain/entities/tokens.dart'; +import 'package:wyatt_i18n/wyatt_i18n.dart'; + +class I18nParser extends Parser { + const I18nParser({ + required this.i18n, + this.arguments = const {}, + }) : super(); + + final I18n i18n; + final Map arguments; + + dynamic getArgument(String key) { + final arg = arguments[key]; + if (arg == null) { + throw ArgumentsRequiredException(key, 'value'); + } + + return arg; + } + + String pluralToString(Plural token) { + final List options = token.options; + final zero = + options.firstWhereOrNull((o) => o!.name == 'zero' || o.name == '=0'); + final one = + options.firstWhereOrNull((o) => o!.name == 'one' || o.name == '=1'); + final two = + options.firstWhereOrNull((o) => o!.name == 'two' || o.name == '=2'); + final few = options.firstWhereOrNull((o) => o!.name == 'few'); + final many = options.firstWhereOrNull((o) => o!.name == 'many'); + final other = options.firstWhereOrNull((o) => o!.name == 'other'); + final zeroStr = zero?.value.map(parsedElementToString).join() ?? ''; + final oneStr = one?.value.map(parsedElementToString).join() ?? ''; + final twoStr = two?.value.map(parsedElementToString).join() ?? ''; + final fewStr = few?.value.map(parsedElementToString).join() ?? ''; + final manyStr = many?.value.map(parsedElementToString).join() ?? ''; + final otherStr = other?.value.map(parsedElementToString).join() ?? ''; + + return Intl.plural( + getArgument(token.value) as num, + zero: zeroStr, + two: twoStr, + one: oneStr, + few: fewStr, + other: otherStr, + many: manyStr, + ); + } + + String genderToString(Gender token) { + final List options = token.options; + final other = options.firstWhereOrNull((o) => o!.name == 'other'); + final male = options.firstWhereOrNull((o) => o!.name == 'male'); + final female = options.firstWhereOrNull((o) => o!.name == 'female'); + final otherStr = other?.value.map(parsedElementToString).join() ?? ''; + final maleStr = male?.value.map(parsedElementToString).join() ?? ''; + final femaleStr = female?.value.map(parsedElementToString).join() ?? ''; + + return Intl.gender( + getArgument(token.value) as String, + other: otherStr, + female: femaleStr, + male: maleStr, + ); + } + + String selectToString(Select token) { + final Map cases = { + for (var e in token.options.map( + (o) => MapEntry( + o.name, + o.value.map(parsedElementToString).join(), + ), + )) + e.key: e.value, + }; + + return Intl.select( + getArgument(token.value) as String, + cases, + ); + } + + String parsedElementToString(Token token) { + switch (token.type) { + case TokenType.literal: + return token.value; + case TokenType.plural: + return pluralToString(token as Plural); + case TokenType.gender: + return genderToString(token as Gender); + case TokenType.argument: + return getArgument(token.value).toString(); + case TokenType.select: + return selectToString(token as Select); + } + } + + @override + String parse(String input, {String? key}) { + String? result; + try { + result = IcuParser().parse(input)?.map(parsedElementToString).join(); + if (result == null) { + throw MalformedValueException(key ?? '', input); + } + } on ArgumentsRequiredException catch (_) { + rethrow; + } catch (e) { + throw MalformedValueException(key ?? '', input); + } + + return result; + } +} diff --git a/packages/wyatt_i18n/lib/src/core/utils/icu_parser.dart b/packages/wyatt_i18n/lib/src/core/utils/icu_parser.dart new file mode 100644 index 00000000..8405642a --- /dev/null +++ b/packages/wyatt_i18n/lib/src/core/utils/icu_parser.dart @@ -0,0 +1,173 @@ +// 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 . + +// ignore_for_file: avoid_dynamic_calls, inference_failure_on_untyped_parameter + +import 'package:petitparser/petitparser.dart' hide Token; +import 'package:wyatt_i18n/src/domain/entities/tokens.dart'; + +class IcuParser { + IcuParser() { + // There is a cycle here, so we need the explicit + // set to avoid infinite recursion. + interiorText.set(contents.plus() | empty); + } + Parser get openCurly => char('{'); + + Parser get closeCurly => char('}'); + + Parser get quotedCurly => (string("'{'") | string("'}'")).map((x) => x[1]); + + Parser get icuEscapedText => quotedCurly | twoSingleQuotes; + + Parser get curly => openCurly | closeCurly; + + Parser get notAllowedInIcuText => curly | char('<'); + + Parser get icuText => notAllowedInIcuText.neg(); + + Parser get notAllowedInNormalText => char('{'); + + Parser get normalText => notAllowedInNormalText.neg(); + + Parser get messageText => + (icuEscapedText | icuText).plus().flatten().map(Literal.new); + + Parser get nonIcuMessageText => normalText.plus().flatten().map(Literal.new); + + Parser get twoSingleQuotes => string("''").map((x) => "'"); + + Parser get number => digit().plus().flatten().trim().map(int.parse); + + Parser get id => (letter() & (word() | char('_')).star()).flatten().trim(); + + Parser get comma => char(',').trim(); + + /// Given a list of possible keywords, return a rule that accepts any of them. + /// e.g., given ["male", "female", "other"], accept any of them. + Parser asKeywords(List list) => + list.map(string).cast().reduce((a, b) => a | b).flatten().trim(); + + Parser get pluralKeyword => asKeywords( + ['=0', '=1', '=2', 'zero', 'one', 'two', 'few', 'many', 'other'], + ); + + Parser get genderKeyword => asKeywords(['female', 'male', 'other']); + + SettableParser interiorText = undefined(); + + Parser get preface => (openCurly & id & comma).map((values) => values[1]); + + Parser get pluralLiteral => string('plural'); + + Parser get pluralClause => + (pluralKeyword & openCurly & interiorText & closeCurly).trim().map( + (result) => Option( + result[0] as String, + List.from( + (result[2] is List ? result[2] as List : [result[2]]) + .cast(), + ), + ), + ); + + Parser get plural => + preface & pluralLiteral & comma & pluralClause.plus() & closeCurly; + + Parser get intlPlural => plural.map( + (result) => Plural( + result[0] as String, + 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_layout/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/packages/wyatt_ui_layout/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/wyatt_ui_layout/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/wyatt_ui_layout/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..dda192bc --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/packages/wyatt_ui_layout/example/macos/Runner/Configs/Debug.xcconfig b/packages/wyatt_ui_layout/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/wyatt_ui_layout/example/macos/Runner/Configs/Release.xcconfig b/packages/wyatt_ui_layout/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/wyatt_ui_layout/example/macos/Runner/Configs/Warnings.xcconfig b/packages/wyatt_ui_layout/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/packages/wyatt_ui_layout/example/macos/Runner/DebugProfile.entitlements b/packages/wyatt_ui_layout/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/packages/wyatt_ui_layout/example/macos/Runner/Info.plist b/packages/wyatt_ui_layout/example/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/packages/wyatt_ui_layout/example/macos/Runner/MainFlutterWindow.swift b/packages/wyatt_ui_layout/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..2722837e --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/packages/wyatt_ui_layout/example/macos/Runner/Release.entitlements b/packages/wyatt_ui_layout/example/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/packages/wyatt_ui_layout/example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/packages/wyatt_ui_layout/example/web/favicon.png b/packages/wyatt_ui_layout/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_layout/example/web/icons/Icon-192.png b/packages/wyatt_ui_layout/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_layout/example/web/icons/Icon-512.png b/packages/wyatt_ui_layout/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_layout/example/web/icons/Icon-maskable-192.png b/packages/wyatt_ui_layout/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_layout/example/web/icons/Icon-maskable-512.png b/packages/wyatt_ui_layout/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_layout/example/web/index.html b/packages/wyatt_ui_layout/example/web/index.html new file mode 100644 index 00000000..be820e83 --- /dev/null +++ b/packages/wyatt_ui_layout/example/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + example + + + + + + + + + + diff --git a/packages/wyatt_ui_layout/example/web/manifest.json b/packages/wyatt_ui_layout/example/web/manifest.json new file mode 100644 index 00000000..096edf8f --- /dev/null +++ b/packages/wyatt_ui_layout/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "example", + "short_name": "example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart index 26cd6fdb..0604657e 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart @@ -18,30 +18,51 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; -class AppBarLayout extends Layout { - const AppBarLayout({ +abstract class TopBarLayout extends Layout { + const TopBarLayout({ required this.body, - this.title, - this.leading, - this.actions, + this.custom, + this.height = 60, super.key, }); - final String? title; - final Widget? leading; - final List? actions; final Widget body; + final T? Function(T?)? custom; + final double height; + + T? child(BuildContext context); + @override Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( - preferredSize: const Size.fromHeight(60), - child: context.components.appBar?.copyWith( - title: title.wrap(), - leading: leading, - actions: actions, - ) ?? - const SizedBox.shrink(), + preferredSize: Size.fromHeight(height), + child: custom?.call(child(context)) ?? const SizedBox.shrink(), ), body: body, ); } + +class TopAppBarLayout extends TopBarLayout { + const TopAppBarLayout({ + required super.body, + super.custom, + super.height, + super.key, + }); + + @override + TopAppBarComponent? child(BuildContext context) => context.components.appBar; +} + +class TopNavigationBarLayout extends TopBarLayout { + const TopNavigationBarLayout({ + required super.body, + super.custom, + super.height, + super.key, + }); + + @override + TopNavigationBarComponent? child(BuildContext context) => + context.components.topNavigationBarComponent; +} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart index 97287f0f..39203efd 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart @@ -4,17 +4,18 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class BottomNavigationBarLayout extends Layout { const BottomNavigationBarLayout({ - this.currentIndex, - this.body, + required this.body, + this.custom, super.key, }); final Widget? body; - final int? currentIndex; + final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? + custom; @override Widget build(BuildContext context) => Scaffold( body: body, - bottomNavigationBar: context.components.bottomNavigationBar?.copyWith( - currentIndex: currentIndex ?? 0, + bottomNavigationBar: custom?.call( + context.components.bottomNavigationBar, ), ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart index da0f7f40..99001657 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -21,32 +21,27 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; class FrameLayout extends Layout { const FrameLayout({ required this.body, - this.title, - this.leading, - this.actions, - this.currentIndex, + this.customAppBar, + this.customBottomNavBar, + this.height = 60, super.key, }); - final String? title; - final Widget? leading; - final List? actions; + + final TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar; + final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? + customBottomNavBar; final Widget body; - final int? currentIndex; + final double height; @override Widget build(BuildContext context) => Scaffold( appBar: PreferredSize( - preferredSize: const Size.fromHeight(60), - child: context.components.appBar?.copyWith( - title: title.wrap(), - leading: leading, - actions: actions, - ) ?? + preferredSize: Size.fromHeight(height), + child: customAppBar?.call(context.components.appBar) ?? const SizedBox.shrink(), ), body: body, - bottomNavigationBar: context.components.bottomNavigationBar?.copyWith( - currentIndex: currentIndex ?? 0, - ), + bottomNavigationBar: + customBottomNavBar?.call(context.components.bottomNavigationBar), ); } -- 2.47.2 From a0783b4b60b455ce0b07949674b6e20c6858256b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Mon, 27 Feb 2023 12:09:15 +0100 Subject: [PATCH 208/320] docs: add doc --- .../lib/pages/app_bar_layout_page.dart | 2 +- .../presentation/layouts/app_bar_layout.dart | 68 ----------- .../layouts/bottom_navigation_bar_layout.dart | 39 ++++++- .../presentation/layouts/frame_layout.dart | 32 ++++-- .../lib/src/presentation/layouts/layout.dart | 28 +++++ .../layouts/top_app_bar_layout.dart | 108 ++++++++++++++++++ .../lib/src/presentation/presentation.dart | 18 ++- 7 files changed, 216 insertions(+), 79 deletions(-) delete mode 100644 packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart create mode 100644 packages/wyatt_ui_layout/lib/src/presentation/layouts/top_app_bar_layout.dart diff --git a/packages/wyatt_ui_layout/example/lib/pages/app_bar_layout_page.dart b/packages/wyatt_ui_layout/example/lib/pages/app_bar_layout_page.dart index 84060a62..0e4defff 100644 --- a/packages/wyatt_ui_layout/example/lib/pages/app_bar_layout_page.dart +++ b/packages/wyatt_ui_layout/example/lib/pages/app_bar_layout_page.dart @@ -7,7 +7,7 @@ class AppBarLayoutPage extends StatelessWidget { @override Widget build(BuildContext context) => TopAppBarLayout( - custom: (p0) => p0?.copyWith.call(title: 'New Title'.wrap()), + custom: (p0) => p0?.copyWith.title('New Title'.wrap()), body: const Center( child: Text( 'Body', diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart deleted file mode 100644 index 0604657e..00000000 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/app_bar_layout.dart +++ /dev/null @@ -1,68 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; - -abstract class TopBarLayout extends Layout { - const TopBarLayout({ - required this.body, - this.custom, - this.height = 60, - super.key, - }); - final Widget body; - - final T? Function(T?)? custom; - final double height; - - T? child(BuildContext context); - - @override - Widget build(BuildContext context) => Scaffold( - appBar: PreferredSize( - preferredSize: Size.fromHeight(height), - child: custom?.call(child(context)) ?? const SizedBox.shrink(), - ), - body: body, - ); -} - -class TopAppBarLayout extends TopBarLayout { - const TopAppBarLayout({ - required super.body, - super.custom, - super.height, - super.key, - }); - - @override - TopAppBarComponent? child(BuildContext context) => context.components.appBar; -} - -class TopNavigationBarLayout extends TopBarLayout { - const TopNavigationBarLayout({ - required super.body, - super.custom, - super.height, - super.key, - }); - - @override - TopNavigationBarComponent? child(BuildContext context) => - context.components.topNavigationBarComponent; -} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart index 39203efd..0f0bf02d 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart @@ -1,21 +1,56 @@ +// 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 . + +/// This file contains the concrete class [BottomNavigationBarLayout]. +/// +/// The [BottomNavigationBarLayout] class is a concrete implementation of the +/// [Layout] abstract class, which defines a layout structure with a bottom +/// navigation bar component. +/// +/// [BottomNavigationBarLayout] includes an optional +/// [BottomNavigationBarLayout.custom] +/// function for customizing the bottom navigation bar component. import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; +/// A concrete implementation of the [Layout] abstract class for a layout with +/// a bottom navigation bar component. class BottomNavigationBarLayout extends Layout { + /// Creates a [BottomNavigationBarLayout] instance. + /// + /// [body] represents the main content of the layout. + /// [custom] is an optional function that can be used to customize + /// the bottom navigation bar component. const BottomNavigationBarLayout({ required this.body, this.custom, super.key, }); + final Widget? body; final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? custom; + @override Widget build(BuildContext context) => Scaffold( body: body, bottomNavigationBar: custom?.call( - context.components.bottomNavigationBar, - ), + context.components.bottomNavigationBar, + ) ?? + context.components.bottomNavigationBar, ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart index 99001657..8b5e3ce6 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart @@ -13,12 +13,26 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . - import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; +/// A layout that contains a top app bar, a body and a bottom navigation bar. +/// +/// This layout consists of a [TopAppBarComponent] at the top of the screen, +/// a [body] in the middle and a [BottomNavigationBarComponent] at the bottom. +/// You can customize the app bar and the bottom navigation bar by passing +/// a [customAppBar] and a [customBottomNavBar] functions that take +/// the corresponding components and return the customized ones. class FrameLayout extends Layout { + /// Creates a [FrameLayout] instance. + /// + /// [body] represents the main content of the layout. + /// [customAppBar] is an optional function that can be used to customize + /// the top app bar component. + /// [customBottomNavBar] is an optional function that can be used to customize + /// the bottom navigation bar component. + /// [height] represents the height of the top app bar. const FrameLayout({ required this.body, this.customAppBar, @@ -35,13 +49,17 @@ class FrameLayout extends Layout { @override Widget build(BuildContext context) => Scaffold( - appBar: PreferredSize( - preferredSize: Size.fromHeight(height), - child: customAppBar?.call(context.components.appBar) ?? - const SizedBox.shrink(), - ), + appBar: (customAppBar?.call(context.components.appBar) != null || + context.components.appBar != null) + ? PreferredSize( + preferredSize: Size.fromHeight(height), + child: customAppBar?.call(context.components.appBar) ?? + context.components.appBar!, + ) + : null, body: body, bottomNavigationBar: - customBottomNavBar?.call(context.components.bottomNavigationBar), + customBottomNavBar?.call(context.components.bottomNavigationBar) ?? + context.components.bottomNavigationBar, ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart index e05ee26a..2edd15d5 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart @@ -1,5 +1,33 @@ +// 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 . + +/// This file contains the [Layout] abstract class, which provides a base +/// for creating custom layout widgets in Flutter. import 'package:flutter/material.dart'; +/// An abstract class that provides a base for creating custom layout widgets. +/// +/// This class can be used as a base for creating custom layout widgets in +/// Flutter. It extends the [StatelessWidget] class and adds support for +/// providing a custom key. Custom layout widgets that extend this class should +/// override the [build] method to define the layout. abstract class Layout extends StatelessWidget { + /// Creates a new [Layout] instance. + /// + /// [key] is an optional parameter that can be used to provide a custom key + /// for the widget. const Layout({super.key}); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/top_app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/top_app_bar_layout.dart new file mode 100644 index 00000000..2f3c781a --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/top_app_bar_layout.dart @@ -0,0 +1,108 @@ +// 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 . + +/// This file contains the abstract class [TopBarLayout] and two concrete +/// classes [TopAppBarLayout] and [TopNavigationBarLayout]. +/// The [TopBarLayout] abstract class defines a layout structure with a top bar. +/// The [TopAppBarLayout] and [TopNavigationBarLayout] classes are concrete +/// implementations of the [TopBarLayout] class. + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; + +/// An abstract class for creating layouts with a top bar component. +/// +/// This class provides a base for creating layouts that include a top bar +/// component, such as an app bar or navigation bar. +/// +/// Implementations of this class must provide a concrete implementation of +/// the [child] method, which returns the specific top bar component for the +/// given [BuildContext]. +/// +/// [T] represents the type of the top bar component. +abstract class TopBarLayout extends Layout { + /// Creates a [TopBarLayout] instance. + /// + /// [body] represents the main content of the layout. + /// [custom] is an optional function that can be used to customize + /// the top bar component. + /// [height] represents the height of the top bar. + const TopBarLayout({ + required this.body, + this.custom, + this.height = 60, + super.key, + }); + + final Widget body; + + final T? Function(T?)? custom; + final double height; + + /// Returns the top bar component for the given [BuildContext]. + T? child(BuildContext context); + + @override + Widget build(BuildContext context) => Scaffold( + appBar: (custom?.call(child(context)) != null || child(context) != null) + ? PreferredSize( + preferredSize: Size.fromHeight(height), + child: custom?.call(child(context)) ?? child(context)!, + ) + : null, + body: body, + ); +} + +/// A concrete implementation of [TopBarLayout] for an app bar. +class TopAppBarLayout extends TopBarLayout { + /// Creates a [TopAppBarLayout] instance. + /// + /// [body] represents the main content of the layout. + /// [custom] is an optional function that can be used to customize + /// the top bar component. + /// [height] represents the height of the top bar. + const TopAppBarLayout({ + required super.body, + super.custom, + super.height, + super.key, + }); + + @override + TopAppBarComponent? child(BuildContext context) => context.components.appBar; +} + +/// A concrete implementation of [TopBarLayout] for a navigation bar. +class TopNavigationBarLayout extends TopBarLayout { + /// Creates a [TopNavigationBarLayout] instance. + /// + /// [body] represents the main content of the layout. + /// [custom] is an optional function that can be used to customize + /// the top bar component. + /// [height] represents the height of the top bar. + const TopNavigationBarLayout({ + required super.body, + super.custom, + super.height, + super.key, + }); + + @override + TopNavigationBarComponent? child(BuildContext context) => + context.components.topNavigationBarComponent; +} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart b/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart index a1bff66c..c1787ad7 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart @@ -1,3 +1,19 @@ -export 'layouts/app_bar_layout.dart'; +// 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 . + export 'layouts/bottom_navigation_bar_layout.dart'; export 'layouts/frame_layout.dart'; +export 'layouts/top_app_bar_layout.dart'; -- 2.47.2 From 99311c5d8cb8610f0a21a1599b4848aebb2786eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 28 Feb 2023 13:57:27 +0100 Subject: [PATCH 209/320] feat(bloc_layout): rework on structure using new components and layouts --- .../wyatt_bloc_layout/example/lib/main.dart | 38 ++++++++----- .../bottom_navigation_bar_bloc_layout.dart | 21 ++++++++ ...m_navigation_bar_layout_cubit_screen.dart} | 16 +++--- ...igation_bar_layout_cubit_screen_crud.dart} | 24 ++++----- ...ion_bar_layout_cubit_screen_crud_item.dart | 30 +++++++++++ ...ion_bar_layout_cubit_screen_crud_list.dart | 30 +++++++++++ ...bar_layout_crud_cubit_consumer_screen.dart | 51 ------------------ ...bar_layout_crud_cubit_consumer_screen.dart | 47 ---------------- ...ame_layout_crud_cubit_consumer_screen.dart | 53 ------------------- .../bases.dart => cubit_screen_base.dart} | 10 ++-- ...creen.dart => cubit_screen_crud_base.dart} | 21 +++----- .../cubit_screen_crud_item_base.dart | 23 ++++++++ .../cubit_screen_crud_list_base.dart | 23 ++++++++ .../frame_bloc_layout.dart} | 9 ++-- .../frame_layout_cubit_screen.dart | 23 ++++---- .../frame_layout_cubit_screen_crud.dart} | 26 +++++---- .../frame_layout_cubit_screen_crud_item.dart | 29 ++++++++++ .../frame_layout_cubit_screen_crud_list.dart | 29 ++++++++++ .../lib/src/presentation/presentation.dart | 10 +++- .../app_bar_layout_crud_cubit_screen.dart | 51 ------------------ .../bottom_bar_layout_crud_cubit_screen.dart | 47 ---------------- .../src/presentation/screens/crud/crud.dart | 20 ------- .../crud/frame_layout_crud_cubit_screen.dart | 53 ------------------- .../lib/src/presentation/screens/screens.dart | 18 ------- .../top_app_bar_bloc_layout.dart} | 8 +-- .../top_app_bar_layout_cubit_screen.dart} | 26 ++++----- .../top_app_bar_layout_cubit_screen_crud.dart | 36 +++++++++++++ ...app_bar_layout_cubit_screen_crud_item.dart | 29 ++++++++++ ...app_bar_layout_cubit_screen_crud_list.dart | 29 ++++++++++ .../top_navigation_bar_bloc_layout.dart} | 7 ++- ...p_navigation_bar_layout_cubit_screen.dart} | 22 ++++---- ...igation_bar_layout_cubit_screen_crud.dart} | 25 ++++----- ...ion_bar_layout_cubit_screen_crud_item.dart | 30 +++++++++++ ...ion_bar_layout_cubit_screen_crud_list.dart | 30 +++++++++++ .../lib/src/domain/entities/bars/bars.dart | 2 +- .../bars/top_navigation_bar_component.dart | 1 - 36 files changed, 479 insertions(+), 468 deletions(-) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart => bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart} (71%) rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/crud/crud_cubit_consumer_screen.dart => bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart} (64%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/bases/bases.dart => cubit_screen_base.dart} (70%) rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/bases/bottom_bar_layout_cubit_screen.dart => cubit_screen_crud_base.dart} (68%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/crud/crud.dart => frame_bloc_layout/frame_bloc_layout.dart} (75%) rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/bases => frame_bloc_layout}/frame_layout_cubit_screen.dart (68%) rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/crud/crud_cubit_screen.dart => frame_bloc_layout/frame_layout_cubit_screen_crud.dart} (63%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart delete mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/bases/bases.dart => top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart} (73%) rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/bases/frame_layout_cubit_consumer_screen.dart => top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart} (64%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/consumers.dart => top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart} (70%) rename packages/wyatt_bloc_layout/lib/src/presentation/{consumers/bases/app_bar_layout_cubit_consumer_screen.dart => top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart} (65%) rename packages/wyatt_bloc_layout/lib/src/presentation/{screens/bases/app_bar_layout_cubit_screen.dart => top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart} (67%) create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart diff --git a/packages/wyatt_bloc_layout/example/lib/main.dart b/packages/wyatt_bloc_layout/example/lib/main.dart index e5f0207a..4542215e 100644 --- a/packages/wyatt_bloc_layout/example/lib/main.dart +++ b/packages/wyatt_bloc_layout/example/lib/main.dart @@ -62,13 +62,13 @@ class MyApp extends StatelessWidget { Expanded( child: BlocProvider( create: (_) => ExampleCubit()..run(), - child: const ExampleFrameLayoutCrudConsumer(), + child: ExampleFrameLayoutCrudConsumer(), ), ), Expanded( child: BlocProvider( create: (_) => ExampleCubit()..runList(), - child: const ExampleFrameLayoutCrudListConsumer(), + child: ExampleFrameLayoutCrudListConsumer(), ), ), ], @@ -82,7 +82,7 @@ class MyApp extends StatelessWidget { } class ExampleCrudStateManagement - extends CrudCubitConsumerScreen { + extends CubitScreenCrudItemBase { const ExampleCrudStateManagement({super.key}); @override @@ -91,10 +91,13 @@ class ExampleCrudStateManagement @override Widget successBuilder(BuildContext context, CrudLoaded state) => Center(child: Text(state.data ?? 'errors')); + + @override + ExampleCubit create(BuildContext context) => ExampleCubit()..run(); } class ExampleListCrudStateManagement - extends CrudListCubitConsumerScreen { + extends CubitScreenCrudListBase { const ExampleListCrudStateManagement({super.key}); @override @@ -106,27 +109,35 @@ class ExampleListCrudStateManagement mainAxisAlignment: MainAxisAlignment.center, children: state.data.map((e) => Text(e ?? 'error')).toList(), ); + + @override + ExampleCubit create(BuildContext context) => ExampleCubit()..run(); } class ExampleFrameLayoutCrudConsumer - extends FrameLayoutCrudCubitConsumerScreen { - const ExampleFrameLayoutCrudConsumer({super.key}) + extends FrameLayoutCubitScreenCrudItem { + ExampleFrameLayoutCrudConsumer({super.key}) : super( - title: 'Example Title', - currentIndex: 0, + customAppBar: (bar) => bar?.copyWith.title( + 'Example Title'.wrap(), + ), ); @override Widget successBuilder(BuildContext context, CrudLoaded state) => Center(child: Text(state.data ?? 'errors')); + + @override + ExampleCubit create(BuildContext context) => ExampleCubit()..run(); } class ExampleFrameLayoutCrudListConsumer - extends FrameLayoutCrudListCubitConsumerScreen { - const ExampleFrameLayoutCrudListConsumer({super.key}) + extends FrameLayoutCubitScreenCrudList { + ExampleFrameLayoutCrudListConsumer({super.key}) : super( - title: 'Example Title', - currentIndex: 0, + customAppBar: (bar) => bar?.copyWith.title( + 'Example Title'.wrap(), + ), ); @override @@ -135,4 +146,7 @@ class ExampleFrameLayoutCrudListConsumer mainAxisAlignment: MainAxisAlignment.center, children: state.data.map((e) => Text(e ?? 'error')).toList(), ); + + @override + ExampleCubit create(BuildContext context) => ExampleCubit()..run(); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart new file mode 100644 index 00000000..407aafb3 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart @@ -0,0 +1,21 @@ +// 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 . + +export './bottom_navigation_bar_bloc_layout.dart'; +export './bottom_navigation_bar_layout_cubit_screen.dart'; +export './bottom_navigation_bar_layout_cubit_screen_crud.dart'; +export './bottom_navigation_bar_layout_cubit_screen_crud_item.dart'; +export './bottom_navigation_bar_layout_cubit_screen_crud_list.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart similarity index 71% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart index 0b2cab99..32d1eb93 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bottom_bar_layout_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart @@ -16,23 +16,27 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class BottomBarLayoutCubitConsumerScreen< +abstract class BottomNavigationBarLayoutCubitScreen< Cubit extends bloc_base.Cubit, - State extends Object> extends CubitConsumerScreen { - const BottomBarLayoutCubitConsumerScreen({ - this.currentIndex, + State extends Object> extends CubitScreenBase { + const BottomNavigationBarLayoutCubitScreen({ + this.custom, + this.height = 60, super.key, }); - final int? currentIndex; + final double height; + final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? + custom; @override Widget parent(BuildContext context, Widget child) => BottomNavigationBarLayout( - currentIndex: currentIndex, + custom: custom, body: child, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart similarity index 64% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart index 9a36e4a8..ee7c347c 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart @@ -16,23 +16,19 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class CrudCubitConsumerScreen, - T extends Object?> extends CubitConsumerScreen - with CrudMixin> { - const CrudCubitConsumerScreen({super.key}); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class CrudListCubitConsumerScreen< +abstract class BottomNavigationBarLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, - T extends Object?> extends CubitConsumerScreen - with CrudMixin> { - const CrudListCubitConsumerScreen({super.key}); + CrudSuccessType extends CrudSuccess> + extends BottomNavigationBarLayoutCubitScreen + with CrudMixin { + const BottomNavigationBarLayoutCubitScreenCrud({ + super.custom, + super.height, + super.key, + }); @override Widget onBuild(BuildContext context, CrudState state) => diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart new file mode 100644 index 00000000..719b977a --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart @@ -0,0 +1,30 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class BottomNavigationBarLayoutCubitScreenCrudItem< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends BottomNavigationBarLayoutCubitScreenCrud> { + const BottomNavigationBarLayoutCubitScreenCrudItem({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..f946bb1b --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart @@ -0,0 +1,30 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class BottomNavigationBarLayoutCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends BottomNavigationBarLayoutCubitScreenCrud> { + const BottomNavigationBarLayoutCubitScreenCrudList({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart deleted file mode 100644 index 5e16c8b9..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/app_bar_layout_crud_cubit_consumer_screen.dart +++ /dev/null @@ -1,51 +0,0 @@ -// 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 . - -import 'package:flutter/widgets.dart'; -import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; - -abstract class AppBarLayoutCrudCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object?> - extends AppBarLayoutCubitConsumerScreen - with CrudMixin> { - const AppBarLayoutCrudCubitConsumerScreen({ - super.title, - super.leading, - super.actions, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class AppBarLayoutCrudListCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object?> - extends AppBarLayoutCubitConsumerScreen - with CrudMixin> { - const AppBarLayoutCrudListCubitConsumerScreen({ - super.title, - super.leading, - super.actions, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart deleted file mode 100644 index 2cfd586b..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/bottom_bar_layout_crud_cubit_consumer_screen.dart +++ /dev/null @@ -1,47 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; - -abstract class BottomBarLayoutCrudCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object?> - extends BottomBarLayoutCubitConsumerScreen - with CrudMixin> { - const BottomBarLayoutCrudCubitConsumerScreen({ - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class BottomBarLayoutCrudListCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object?> - extends BottomBarLayoutCubitConsumerScreen - with CrudMixin> { - const BottomBarLayoutCrudListCubitConsumerScreen({ - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart deleted file mode 100644 index 48d5c73d..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/frame_layout_crud_cubit_consumer_screen.dart +++ /dev/null @@ -1,53 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; - -abstract class FrameLayoutCrudCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object?> - extends FrameLayoutCubitConsumerScreen - with CrudMixin> { - const FrameLayoutCrudCubitConsumerScreen({ - super.title, - super.leading, - super.actions, - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class FrameLayoutCrudListCubitConsumerScreen< - Cubit extends bloc_base.Cubit, T extends Object?> - extends FrameLayoutCubitConsumerScreen - with CrudMixin> { - const FrameLayoutCrudListCubitConsumerScreen({ - super.title, - super.leading, - super.actions, - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_base.dart similarity index 70% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bases.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_base.dart index 1b44493c..b4848316 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bases.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_base.dart @@ -14,6 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'app_bar_layout_cubit_screen.dart'; -export 'bottom_bar_layout_cubit_screen.dart'; -export 'frame_layout_cubit_screen.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class CubitScreenBase, + State extends Object> extends CubitScreen { + const CubitScreenBase({super.key}); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bottom_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart similarity index 68% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bottom_bar_layout_cubit_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart index d864dbab..598bdb16 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/bottom_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart @@ -16,22 +16,15 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; - import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class BottomBarLayoutCubitScreen, - State extends Object> extends CubitScreen { - const BottomBarLayoutCubitScreen({ - this.currentIndex, - super.key, - }); - - final int? currentIndex; +abstract class CubitScreenCrudBase, + CrudSuccessType extends CrudSuccess> + extends CubitScreenBase + with CrudMixin { + const CubitScreenCrudBase({super.key}); @override - Widget parent(BuildContext context, Widget child) => - BottomNavigationBarLayout( - currentIndex: currentIndex, - body: child, - ); + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart new file mode 100644 index 00000000..5e81a799 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart @@ -0,0 +1,23 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class CubitScreenCrudItemBase, + T extends Object?> extends CubitScreenCrudBase> { + const CubitScreenCrudItemBase({super.key}); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart new file mode 100644 index 00000000..d641b6b5 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart @@ -0,0 +1,23 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class CubitScreenCrudListBase, + T extends Object?> extends CubitScreenCrudBase> { + const CubitScreenCrudListBase({super.key}); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_bloc_layout.dart similarity index 75% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_bloc_layout.dart index a444cf2b..1f36b42e 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/crud/crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_bloc_layout.dart @@ -14,7 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export './app_bar_layout_crud_cubit_consumer_screen.dart'; -export './bottom_bar_layout_crud_cubit_consumer_screen.dart'; -export './crud_cubit_consumer_screen.dart'; -export './frame_layout_crud_cubit_consumer_screen.dart'; +export './frame_bloc_layout.dart'; +export './frame_layout_cubit_screen.dart'; +export './frame_layout_cubit_screen_crud.dart'; +export './frame_layout_cubit_screen_crud_item.dart'; +export './frame_layout_cubit_screen_crud_list.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/frame_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart similarity index 68% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/frame_layout_cubit_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart index 769664a2..10248fdc 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/frame_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart @@ -16,28 +16,29 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class FrameLayoutCubitScreen, - State extends Object> extends CubitScreen { + State extends Object> extends CubitScreenBase { const FrameLayoutCubitScreen({ - this.title, - this.leading, - this.actions, - this.currentIndex, + this.customAppBar, + this.customBottomNavBar, + this.height = 60, super.key, }); - final int? currentIndex; - final String? title; - final Widget? leading; - final List? actions; + final TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar; + final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? + customBottomNavBar; + final double height; @override Widget parent(BuildContext context, Widget child) => FrameLayout( - title: title, - currentIndex: currentIndex, + customAppBar: customAppBar, + customBottomNavBar: customBottomNavBar, + height: height, body: child, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart similarity index 63% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart index b256af58..45333c20 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart @@ -16,22 +16,20 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class CrudCubitScreen, - T extends Object?> extends CubitScreen - with CrudMixin> { - const CrudCubitScreen({super.key}); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class CrudListCubitScreen, - T extends Object?> extends CubitScreen - with CrudMixin> { - const CrudListCubitScreen({super.key}); +abstract class FrameLayoutCubitScreenCrud< + Cubit extends bloc_base.Cubit, + CrudSuccessType extends CrudSuccess> + extends FrameLayoutCubitScreen + with CrudMixin { + const FrameLayoutCubitScreenCrud({ + super.customAppBar, + super.customBottomNavBar, + super.height, + super.key, + }); @override Widget onBuild(BuildContext context, CrudState state) => diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart new file mode 100644 index 00000000..ab414fae --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class FrameLayoutCubitScreenCrudItem< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends FrameLayoutCubitScreenCrud> { + const FrameLayoutCubitScreenCrudItem({ + super.customAppBar, + super.customBottomNavBar, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..b6114ea4 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class FrameLayoutCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends FrameLayoutCubitScreenCrud> { + const FrameLayoutCubitScreenCrudList({ + super.customAppBar, + super.customBottomNavBar, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart index f5c14cde..61e6c26b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/presentation.dart @@ -14,5 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'consumers/consumers.dart'; -export 'screens/screens.dart'; +export './bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart'; +export './cubit_screen_base.dart'; +export './cubit_screen_crud_base.dart'; +export './cubit_screen_crud_item_base.dart'; +export './cubit_screen_crud_list_base.dart'; +export './frame_bloc_layout/frame_bloc_layout.dart'; +export './top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart'; +export './top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart deleted file mode 100644 index 4cda2415..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/app_bar_layout_crud_cubit_screen.dart +++ /dev/null @@ -1,51 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; - -abstract class AppBarLayoutCrudCubitScreen< - Cubit extends bloc_base.Cubit, - T extends Object?> extends AppBarLayoutCubitScreen - with CrudMixin> { - const AppBarLayoutCrudCubitScreen({ - super.title, - super.leading, - super.actions, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class AppBarLayoutCrudListCubitScreen< - Cubit extends bloc_base.Cubit, - T extends Object?> extends AppBarLayoutCubitScreen - with CrudMixin> { - const AppBarLayoutCrudListCubitScreen({ - super.title, - super.leading, - super.actions, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart deleted file mode 100644 index 5e79311d..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/bottom_bar_layout_crud_cubit_screen.dart +++ /dev/null @@ -1,47 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; - -abstract class BottomBarLayoutCrudCubitScreen< - Cubit extends bloc_base.Cubit, - T extends Object?> extends BottomBarLayoutCubitScreen - with CrudMixin> { - const BottomBarLayoutCrudCubitScreen({ - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class BottomBarLayoutCrudListCubitScreen< - Cubit extends bloc_base.Cubit, - T extends Object?> extends BottomBarLayoutCubitScreen - with CrudMixin> { - const BottomBarLayoutCrudListCubitScreen({ - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart deleted file mode 100644 index 40e3aca4..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/crud.dart +++ /dev/null @@ -1,20 +0,0 @@ -// 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 . - -export './crud_cubit_screen.dart'; -export 'app_bar_layout_crud_cubit_screen.dart'; -export 'bottom_bar_layout_crud_cubit_screen.dart'; -export 'frame_layout_crud_cubit_screen.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart deleted file mode 100644 index 2f738e5d..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/crud/frame_layout_crud_cubit_screen.dart +++ /dev/null @@ -1,53 +0,0 @@ -// 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 . - -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; - -abstract class FrameLayoutCrudCubitScreen< - Cubit extends bloc_base.Cubit, - T extends Object?> extends FrameLayoutCubitScreen - with CrudMixin> { - const FrameLayoutCrudCubitScreen({ - super.title, - super.leading, - super.actions, - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} - -abstract class FrameLayoutCrudListCubitScreen< - Cubit extends bloc_base.Cubit, - T extends Object?> extends FrameLayoutCubitScreen - with CrudMixin> { - const FrameLayoutCrudListCubitScreen({ - super.title, - super.leading, - super.actions, - super.currentIndex, - super.key, - }); - - @override - Widget onBuild(BuildContext context, CrudState state) => - crudBuilder(context, state); -} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart b/packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart deleted file mode 100644 index 57ee4935..00000000 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/screens.dart +++ /dev/null @@ -1,18 +0,0 @@ -// 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 . - -export './bases/bases.dart'; -export './crud/crud.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bases.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart similarity index 73% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bases.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart index 08af9be8..23cd177c 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/bases.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart @@ -14,6 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export './app_bar_layout_cubit_consumer_screen.dart'; -export './bottom_bar_layout_cubit_consumer_screen.dart'; -export './frame_layout_cubit_consumer_screen.dart'; +export './top_app_bar_bloc_layout.dart'; +export './top_app_bar_layout_cubit_screen.dart'; +export './top_app_bar_layout_cubit_screen_crud.dart'; +export './top_app_bar_layout_cubit_screen_crud_item.dart'; +export './top_app_bar_layout_cubit_screen_crud_list.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/frame_layout_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart similarity index 64% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/frame_layout_cubit_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart index 71a5e661..d15032ad 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/frame_layout_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart @@ -16,29 +16,25 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class FrameLayoutCubitConsumerScreen< - Cubit extends bloc_base.Cubit, - State extends Object> extends CubitConsumerScreen { - const FrameLayoutCubitConsumerScreen({ - this.title, - this.leading, - this.actions, - this.currentIndex, +abstract class TopAppBarLayoutCubitScreen, + State extends Object> extends CubitScreenBase { + const TopAppBarLayoutCubitScreen({ + this.custom, + this.height = 60, super.key, }); - final int? currentIndex; - final String? title; - final Widget? leading; - final List? actions; + final double height; + final TopAppBarComponent? Function(TopAppBarComponent?)? custom; @override - Widget parent(BuildContext context, Widget child) => FrameLayout( - title: title, - currentIndex: currentIndex, + Widget parent(BuildContext context, Widget child) => TopAppBarLayout( + height: height, + custom: custom, body: child, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart new file mode 100644 index 00000000..8fe9e332 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart @@ -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 . + +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class TopAppBarLayoutCubitScreenCrud< + Cubit extends bloc_base.Cubit, + CrudSuccessType extends CrudSuccess> + extends TopAppBarLayoutCubitScreen + with CrudMixin { + const TopAppBarLayoutCubitScreenCrud({ + super.custom, + super.height, + super.key, + }); + + @override + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart new file mode 100644 index 00000000..9c3e7b45 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class TopAppBarLayoutCubitScreenCrudItem< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends TopAppBarLayoutCubitScreenCrud> { + const TopAppBarLayoutCubitScreenCrudItem({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..433f8060 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class TopAppBarLayoutCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends TopAppBarLayoutCubitScreenCrud> { + const TopAppBarLayoutCubitScreenCrudList({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/consumers.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart similarity index 70% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/consumers.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart index 7cac2b7f..c1677fbb 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/consumers.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart @@ -14,5 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'bases/bases.dart'; -export 'crud/crud.dart'; +export './top_navigation_bar_bloc_layout.dart'; +export './top_navigation_bar_layout_cubit_screen.dart'; +export './top_navigation_bar_layout_cubit_screen_crud.dart'; +export './top_navigation_bar_layout_cubit_screen_crud_item.dart'; +export './top_navigation_bar_layout_cubit_screen_crud_list.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/app_bar_layout_cubit_consumer_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart similarity index 65% rename from packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/app_bar_layout_cubit_consumer_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart index d12706cd..5ab3ca10 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/consumers/bases/app_bar_layout_cubit_consumer_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart @@ -16,26 +16,26 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class AppBarLayoutCubitConsumerScreen< +abstract class TopNavigationBarLayoutCubitScreen< Cubit extends bloc_base.Cubit, - State extends Object> extends CubitConsumerScreen { - const AppBarLayoutCubitConsumerScreen({ - this.title, - this.leading, - this.actions, + State extends Object> extends CubitScreenBase { + const TopNavigationBarLayoutCubitScreen({ + this.custom, + this.height = 60, super.key, }); - final String? title; - final Widget? leading; - final List? actions; + final double height; + final TopNavigationBarComponent? Function(TopNavigationBarComponent?)? custom; @override - Widget parent(BuildContext context, Widget child) => AppBarLayout( - title: title, + Widget parent(BuildContext context, Widget child) => TopNavigationBarLayout( + height: height, + custom: custom, body: child, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/app_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart similarity index 67% rename from packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/app_bar_layout_cubit_screen.dart rename to packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart index ce82fccb..3c07fa5b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/screens/bases/app_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart @@ -16,25 +16,20 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; - import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; -abstract class AppBarLayoutCubitScreen, - State extends Object> extends CubitScreen { - const AppBarLayoutCubitScreen({ - this.title, - this.leading, - this.actions, +abstract class TopNavigationBarLayoutCubitScreenCrud< + Cubit extends bloc_base.Cubit, + CrudSuccessType extends CrudSuccess> + extends TopNavigationBarLayoutCubitScreen + with CrudMixin { + const TopNavigationBarLayoutCubitScreenCrud({ + super.custom, + super.height, super.key, }); - final String? title; - final Widget? leading; - final List? actions; - @override - Widget parent(BuildContext context, Widget child) => AppBarLayout( - title: title, - body: child, - ); + Widget onBuild(BuildContext context, CrudState state) => + crudBuilder(context, state); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart new file mode 100644 index 00000000..368a90bd --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart @@ -0,0 +1,30 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class TopNavigationBarLayoutCubitScreenCrudItem< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends TopNavigationBarLayoutCubitScreenCrud> { + const TopNavigationBarLayoutCubitScreenCrudItem({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..3e50b826 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart @@ -0,0 +1,30 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class TopNavigationBarLayoutCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + extends TopNavigationBarLayoutCubitScreenCrud> { + const TopNavigationBarLayoutCubitScreenCrudList({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart index 9f391172..a09ee312 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart @@ -15,6 +15,6 @@ // along with this program. If not, see . export './bottom_navigation_bar_component.dart'; -export './top_navigation_bar_component.dart'; export './top_app_bar_component.dart'; export './top_bar_component.dart'; +export './top_navigation_bar_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart index 3f9304ec..4d6a2e05 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/domain/entities/bars/top_bar_component.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'top_navigation_bar_component.g.dart'; -- 2.47.2 From abb5f0c735edef84e9d314f66f08b3b863b16ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 28 Feb 2023 14:00:08 +0100 Subject: [PATCH 210/320] style(bloc_layout): apply dart fix --- .../bottom_navigation_bar_layout_cubit_screen.dart | 1 - .../bottom_navigation_bar_layout_cubit_screen_crud.dart | 1 - .../bottom_navigation_bar_layout_cubit_screen_crud_item.dart | 1 - .../bottom_navigation_bar_layout_cubit_screen_crud_list.dart | 1 - .../frame_bloc_layout/frame_layout_cubit_screen.dart | 1 - .../frame_bloc_layout/frame_layout_cubit_screen_crud.dart | 1 - .../top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart | 1 - .../top_app_bar_layout_cubit_screen_crud.dart | 1 - .../top_app_bar_layout_cubit_screen_crud_item.dart | 1 - .../top_app_bar_layout_cubit_screen_crud_list.dart | 1 - .../top_navigation_bar_layout_cubit_screen.dart | 1 - .../top_navigation_bar_layout_cubit_screen_crud_item.dart | 1 - .../top_navigation_bar_layout_cubit_screen_crud_list.dart | 1 - .../lib/src/domain/entities/bars/top_app_bar_component.dart | 1 - 14 files changed, 14 deletions(-) diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart index 32d1eb93..c729a0f6 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart index ee7c347c..b78b04f6 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrud< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart index 719b977a..8dd8c331 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrudItem< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart index f946bb1b..a59e2383 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrudList< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart index 10248fdc..d8631d8e 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart index 45333c20..5b51a842 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class FrameLayoutCubitScreenCrud< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart index d15032ad..80479742 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart index 8fe9e332..d106f397 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopAppBarLayoutCubitScreenCrud< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart index 9c3e7b45..efb19b6f 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopAppBarLayoutCubitScreenCrudItem< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart index 433f8060..6640800a 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopAppBarLayoutCubitScreenCrudList< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart index 5ab3ca10..7978b76f 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/cubit_screen_base.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart index 368a90bd..34cdc9ea 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopNavigationBarLayoutCubitScreenCrudItem< diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart index 3e50b826..5c4d0df7 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopNavigationBarLayoutCubitScreenCrudList< diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart index 7be231f2..0d94d9cf 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/domain/entities/bars/top_bar_component.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'top_app_bar_component.g.dart'; -- 2.47.2 From 89ce553fa2c60f9933f985dc8ab3c8a2d783a61b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 28 Feb 2023 15:17:46 +0100 Subject: [PATCH 211/320] feat(bloc_layout): add grid content implementations --- .../wyatt_bloc_layout/lib/src/core/core.dart | 1 + .../lib/src/core/mixins/gird_view_mixin.dart | 30 ++++++++ .../lib/src/core/mixins/mixins.dart | 17 +++++ .../bottom_navigation_bar_bloc_layout.dart | 1 + ...ar_grid_layout_cubit_screen_crud_list.dart | 29 +++++++ ...vigation_bar_layout_cubit_screen_crud.dart | 4 +- ...ion_bar_layout_cubit_screen_crud_item.dart | 4 +- ...ion_bar_layout_cubit_screen_crud_list.dart | 4 +- .../presentation/cubit_screen_crud_base.dart | 4 +- .../frame_bloc_layout/frame_bloc_layout.dart | 1 + ...me_grid_layout_cubit_screen_crud_list.dart | 30 ++++++++ .../frame_layout_cubit_screen_crud.dart | 4 +- .../frame_layout_cubit_screen_crud_item.dart | 4 +- .../frame_layout_cubit_screen_crud_list.dart | 4 +- .../grid_cubit_screen_crud_list_base.dart | 24 ++++++ .../top_app_bar_bloc_layout.dart | 1 + ...ar_grid_layout_cubit_screen_crud_list.dart | 29 +++++++ .../top_app_bar_layout_cubit_screen_crud.dart | 4 +- ...app_bar_layout_cubit_screen_crud_item.dart | 4 +- ...app_bar_layout_cubit_screen_crud_list.dart | 4 +- .../top_navigation_bar_bloc_layout.dart | 1 + ...ar_grid_layout_cubit_screen_crud_list.dart | 29 +++++++ ...vigation_bar_layout_cubit_screen_crud.dart | 4 +- ...ion_bar_layout_cubit_screen_crud_item.dart | 4 +- ...ion_bar_layout_cubit_screen_crud_list.dart | 4 +- .../content_layouts/content_layouts.dart | 17 +++++ .../layouts/content_layouts/grid_layout.dart | 76 +++++++++++++++++++ .../lib/src/presentation/layouts/layout.dart | 8 ++ .../lib/src/presentation/layouts/layouts.dart | 18 +++++ .../bottom_navigation_bar_layout.dart | 2 +- .../frame_layout.dart | 3 +- .../structural_layouts.dart | 19 +++++ .../top_app_bar_layout.dart | 3 +- .../lib/src/presentation/presentation.dart | 4 +- packages/wyatt_ui_layout/pubspec.yaml | 1 + 35 files changed, 364 insertions(+), 32 deletions(-) create mode 100644 packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/core/mixins/mixins.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart create mode 100644 packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart create mode 100644 packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/content_layouts.dart create mode 100644 packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart create mode 100644 packages/wyatt_ui_layout/lib/src/presentation/layouts/layouts.dart rename packages/wyatt_ui_layout/lib/src/presentation/layouts/{ => structural_layouts}/bottom_navigation_bar_layout.dart (97%) rename packages/wyatt_ui_layout/lib/src/presentation/layouts/{ => structural_layouts}/frame_layout.dart (98%) create mode 100644 packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/structural_layouts.dart rename packages/wyatt_ui_layout/lib/src/presentation/layouts/{ => structural_layouts}/top_app_bar_layout.dart (97%) diff --git a/packages/wyatt_bloc_layout/lib/src/core/core.dart b/packages/wyatt_bloc_layout/lib/src/core/core.dart index e215b540..2916446f 100644 --- a/packages/wyatt_bloc_layout/lib/src/core/core.dart +++ b/packages/wyatt_bloc_layout/lib/src/core/core.dart @@ -15,3 +15,4 @@ // along with this program. If not, see . export './crud_cubit_consumer_screen_mixin.dart'; +export './mixins/mixins.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart b/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart new file mode 100644 index 00000000..c43cdbd2 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart @@ -0,0 +1,30 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +mixin GridLayoutMixin { + Widget gridChild(BuildContext context, SuccessType? successType); + + Widget successBuilder( + BuildContext context, + CrudListLoaded state, + ) => + GridLayout( + children: state.data.map((e) => gridChild(context, e)).toList(), + ); +} diff --git a/packages/wyatt_bloc_layout/lib/src/core/mixins/mixins.dart b/packages/wyatt_bloc_layout/lib/src/core/mixins/mixins.dart new file mode 100644 index 00000000..d5b9315f --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/core/mixins/mixins.dart @@ -0,0 +1,17 @@ +// 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 . + +export './gird_view_mixin.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart index 407aafb3..24940e8a 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . export './bottom_navigation_bar_bloc_layout.dart'; +export './bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart'; export './bottom_navigation_bar_layout_cubit_screen.dart'; export './bottom_navigation_bar_layout_cubit_screen_crud.dart'; export './bottom_navigation_bar_layout_cubit_screen_crud_item.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..099d6b79 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class BottomNavigationBarGridLayoutCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends BottomNavigationBarLayoutCubitScreenCrudList + with GridLayoutMixin { + const BottomNavigationBarGridLayoutCubitScreenCrudList({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart index b78b04f6..16cc1abf 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart @@ -20,9 +20,9 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, - CrudSuccessType extends CrudSuccess> + CrudSuccessState extends CrudSuccess> extends BottomNavigationBarLayoutCubitScreen - with CrudMixin { + with CrudMixin { const BottomNavigationBarLayoutCubitScreenCrud({ super.custom, super.height, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart index 8dd8c331..f2bbdb07 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart @@ -18,9 +18,9 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrudItem< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + Cubit extends bloc_base.Cubit, SuccessType extends Object?> extends BottomNavigationBarLayoutCubitScreenCrud> { + CrudLoaded> { const BottomNavigationBarLayoutCubitScreenCrudItem({ super.custom, super.height = 60, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart index a59e2383..cce7f2a4 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart @@ -18,9 +18,9 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrudList< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + Cubit extends bloc_base.Cubit, SuccessType extends Object?> extends BottomNavigationBarLayoutCubitScreenCrud> { + CrudListLoaded> { const BottomNavigationBarLayoutCubitScreenCrudList({ super.custom, super.height = 60, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart index 598bdb16..a113c5ad 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart @@ -19,9 +19,9 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class CubitScreenCrudBase, - CrudSuccessType extends CrudSuccess> + CrudSuccessState extends CrudSuccess> extends CubitScreenBase - with CrudMixin { + with CrudMixin { const CubitScreenCrudBase({super.key}); @override diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_bloc_layout.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_bloc_layout.dart index 1f36b42e..3233fe28 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_bloc_layout.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_bloc_layout.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . export './frame_bloc_layout.dart'; +export './frame_grid_layout_cubit_screen_crud_list.dart'; export './frame_layout_cubit_screen.dart'; export './frame_layout_cubit_screen_crud.dart'; export './frame_layout_cubit_screen_crud_item.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..e62fea8c --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart @@ -0,0 +1,30 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class FrameLayoutGridCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends FrameLayoutCubitScreenCrudList + with GridLayoutMixin { + const FrameLayoutGridCubitScreenCrudList({ + super.customAppBar, + super.customBottomNavBar, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart index 5b51a842..a498490b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart @@ -20,9 +20,9 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class FrameLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, - CrudSuccessType extends CrudSuccess> + CrudSuccessState extends CrudSuccess> extends FrameLayoutCubitScreen - with CrudMixin { + with CrudMixin { const FrameLayoutCubitScreenCrud({ super.customAppBar, super.customBottomNavBar, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart index ab414fae..92db37fa 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart @@ -18,8 +18,8 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class FrameLayoutCubitScreenCrudItem< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> - extends FrameLayoutCubitScreenCrud> { + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends FrameLayoutCubitScreenCrud> { const FrameLayoutCubitScreenCrudItem({ super.customAppBar, super.customBottomNavBar, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart index b6114ea4..8c38994a 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart @@ -18,8 +18,8 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class FrameLayoutCubitScreenCrudList< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> - extends FrameLayoutCubitScreenCrud> { + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends FrameLayoutCubitScreenCrud> { const FrameLayoutCubitScreenCrudList({ super.customAppBar, super.customBottomNavBar, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart new file mode 100644 index 00000000..28931c40 --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart @@ -0,0 +1,24 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class GridCubitScreenCrudListBase< + Cubit extends bloc_base.Cubit, T extends Object?> + extends CubitScreenCrudListBase with GridLayoutMixin { + const GridCubitScreenCrudListBase({super.key}); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart index 23cd177c..6cc49ed5 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_bloc_layout.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . export './top_app_bar_bloc_layout.dart'; +export './top_app_bar_grid_layout_cubit_screen_crud_list.dart'; export './top_app_bar_layout_cubit_screen.dart'; export './top_app_bar_layout_cubit_screen_crud.dart'; export './top_app_bar_layout_cubit_screen_crud_item.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..efc7ecdc --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class TopAppBarGridLayoutCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends TopAppBarLayoutCubitScreenCrudList + with GridLayoutMixin { + const TopAppBarGridLayoutCubitScreenCrudList({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart index d106f397..1de4081a 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart @@ -20,9 +20,9 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopAppBarLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, - CrudSuccessType extends CrudSuccess> + CrudSuccessState extends CrudSuccess> extends TopAppBarLayoutCubitScreen - with CrudMixin { + with CrudMixin { const TopAppBarLayoutCubitScreenCrud({ super.custom, super.height, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart index efb19b6f..9e90c286 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart @@ -18,8 +18,8 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopAppBarLayoutCubitScreenCrudItem< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> - extends TopAppBarLayoutCubitScreenCrud> { + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends TopAppBarLayoutCubitScreenCrud> { const TopAppBarLayoutCubitScreenCrudItem({ super.custom, super.height = 60, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart index 6640800a..9bc6047d 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart @@ -18,8 +18,8 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopAppBarLayoutCubitScreenCrudList< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> - extends TopAppBarLayoutCubitScreenCrud> { + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends TopAppBarLayoutCubitScreenCrud> { const TopAppBarLayoutCubitScreenCrudList({ super.custom, super.height = 60, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart index c1677fbb..7697dd49 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_bloc_layout.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . export './top_navigation_bar_bloc_layout.dart'; +export './top_navigation_bar_grid_layout_cubit_screen_crud_list.dart'; export './top_navigation_bar_layout_cubit_screen.dart'; export './top_navigation_bar_layout_cubit_screen_crud.dart'; export './top_navigation_bar_layout_cubit_screen_crud_item.dart'; diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart new file mode 100644 index 00000000..238079ba --- /dev/null +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart @@ -0,0 +1,29 @@ +// 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 . + +import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; + +abstract class TopNavigationBarGridLayoutCubitScreenCrudList< + Cubit extends bloc_base.Cubit, SuccessType extends Object?> + extends TopNavigationBarLayoutCubitScreenCrudList + with GridLayoutMixin { + const TopNavigationBarGridLayoutCubitScreenCrudList({ + super.custom, + super.height = 60, + super.key, + }); +} diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart index 3c07fa5b..65bd7bff 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart @@ -20,9 +20,9 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopNavigationBarLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, - CrudSuccessType extends CrudSuccess> + CrudSuccessState extends CrudSuccess> extends TopNavigationBarLayoutCubitScreen - with CrudMixin { + with CrudMixin { const TopNavigationBarLayoutCubitScreenCrud({ super.custom, super.height, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart index 34cdc9ea..6b4c022b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart @@ -18,9 +18,9 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopNavigationBarLayoutCubitScreenCrudItem< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + Cubit extends bloc_base.Cubit, SuccessType extends Object?> extends TopNavigationBarLayoutCubitScreenCrud> { + CrudLoaded> { const TopNavigationBarLayoutCubitScreenCrudItem({ super.custom, super.height = 60, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart index 5c4d0df7..0b04c6f2 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart @@ -18,9 +18,9 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; abstract class TopNavigationBarLayoutCubitScreenCrudList< - Cubit extends bloc_base.Cubit, SuccessItem extends Object?> + Cubit extends bloc_base.Cubit, SuccessType extends Object?> extends TopNavigationBarLayoutCubitScreenCrud> { + CrudListLoaded> { const TopNavigationBarLayoutCubitScreenCrudList({ super.custom, super.height = 60, diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/content_layouts.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/content_layouts.dart new file mode 100644 index 00000000..e5215b69 --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/content_layouts.dart @@ -0,0 +1,17 @@ +// 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 . + +export './grid_layout.dart'; diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart new file mode 100644 index 00000000..891c649b --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart @@ -0,0 +1,76 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; + +class GridLayout extends StatelessWidget { + const GridLayout({ + required this.children, + this.verticalGap = 30, + this.horizontalGap = 30, + super.key, + }); + + final List children; + final double verticalGap; + final double horizontalGap; + + @override + Widget build(BuildContext context) { + if (children.isEmpty) { + return const SizedBox.shrink(); + } + + final childrenLeft = []; + final childrenRight = []; + + int i = 0; + for (final child in children) { + if (i.isEven) { + childrenLeft + ..add(child) + ..add(Gap(verticalGap)); + } else { + childrenRight + ..add(child) + ..add(Gap(verticalGap)); + } + i++; + } + + return Column( + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + children: childrenLeft, + ), + ), + Gap(horizontalGap), + Expanded( + child: Column( + children: childrenRight, + ), + ), + ], + ), + ], + ); + } +} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart index 2edd15d5..41f839a8 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart @@ -31,3 +31,11 @@ abstract class Layout extends StatelessWidget { /// for the widget. const Layout({super.key}); } + +abstract class StructuralLayout extends Layout { + const StructuralLayout({super.key}); +} + +abstract class ContentLayout extends Layout { + const ContentLayout({super.key}); +} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/layouts.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layouts.dart new file mode 100644 index 00000000..09574c7b --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layouts.dart @@ -0,0 +1,18 @@ +// 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 . + +export './content_layouts/content_layouts.dart'; +export './structural_layouts/structural_layouts.dart'; diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart similarity index 97% rename from packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart rename to packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart index 0f0bf02d..9b04b955 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart @@ -29,7 +29,7 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; /// A concrete implementation of the [Layout] abstract class for a layout with /// a bottom navigation bar component. -class BottomNavigationBarLayout extends Layout { +class BottomNavigationBarLayout extends StructuralLayout { /// Creates a [BottomNavigationBarLayout] instance. /// /// [body] represents the main content of the layout. diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart similarity index 98% rename from packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart rename to packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart index 8b5e3ce6..6c989cc0 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart @@ -13,6 +13,7 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . + import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; @@ -24,7 +25,7 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; /// You can customize the app bar and the bottom navigation bar by passing /// a [customAppBar] and a [customBottomNavBar] functions that take /// the corresponding components and return the customized ones. -class FrameLayout extends Layout { +class FrameLayout extends StructuralLayout { /// Creates a [FrameLayout] instance. /// /// [body] represents the main content of the layout. diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/structural_layouts.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/structural_layouts.dart new file mode 100644 index 00000000..e22f407c --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/structural_layouts.dart @@ -0,0 +1,19 @@ +// 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 . + +export './bottom_navigation_bar_layout.dart'; +export './frame_layout.dart'; +export './top_app_bar_layout.dart'; diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/top_app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart similarity index 97% rename from packages/wyatt_ui_layout/lib/src/presentation/layouts/top_app_bar_layout.dart rename to packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart index 2f3c781a..b9acfbdc 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/top_app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart @@ -34,7 +34,8 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; /// given [BuildContext]. /// /// [T] represents the type of the top bar component. -abstract class TopBarLayout extends Layout { +abstract class TopBarLayout + extends StructuralLayout { /// Creates a [TopBarLayout] instance. /// /// [body] represents the main content of the layout. diff --git a/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart b/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart index c1787ad7..8756e56f 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/presentation.dart @@ -14,6 +14,4 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'layouts/bottom_navigation_bar_layout.dart'; -export 'layouts/frame_layout.dart'; -export 'layouts/top_app_bar_layout.dart'; +export './layouts/layouts.dart'; diff --git a/packages/wyatt_ui_layout/pubspec.yaml b/packages/wyatt_ui_layout/pubspec.yaml index f62e4219..7c8703ed 100644 --- a/packages/wyatt_ui_layout/pubspec.yaml +++ b/packages/wyatt_ui_layout/pubspec.yaml @@ -11,6 +11,7 @@ environment: dependencies: flutter: sdk: flutter + gap: ^2.0.1 wyatt_ui_components: git: -- 2.47.2 From 425662272609c05735137dc20627c9f8891c7369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 28 Feb 2023 15:36:10 +0100 Subject: [PATCH 212/320] style: add models --- .../models/class-models.puml | 255 +++++++++--------- .../layouts/content_layouts/grid_layout.dart | 3 +- .../wyatt_ui_layout/models/class-models.puml | 78 ++++-- 3 files changed, 190 insertions(+), 146 deletions(-) diff --git a/packages/wyatt_bloc_layout/models/class-models.puml b/packages/wyatt_bloc_layout/models/class-models.puml index 3a557834..60bf99ae 100644 --- a/packages/wyatt_bloc_layout/models/class-models.puml +++ b/packages/wyatt_bloc_layout/models/class-models.puml @@ -1,6 +1,11 @@ -@startuml +@startuml Class Model set namespaceSeparator :: +abstract class "wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" { + +Widget gridChild() + +Widget successBuilder() +} + abstract class "wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" { +Widget errorBuilder() +Widget loadingBuilder() @@ -9,173 +14,163 @@ abstract class "wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.d +Widget crudBuilder() } -abstract class "wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" { - +int? currentIndex +abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" { +} + +"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" + +abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_crud_list_base.dart::CubitScreenCrudListBase" { +} + +"wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_list_base.dart::CubitScreenCrudListBase" + +abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud.dart::FrameLayoutCubitScreenCrud" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud.dart::FrameLayoutCubitScreenCrud" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud.dart::FrameLayoutCubitScreenCrud" + +abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud_list.dart::FrameLayoutCubitScreenCrudList" { +} + +"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud.dart::FrameLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud_list.dart::FrameLayoutCubitScreenCrudList" + +abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" { + +TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar + +BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? customBottomNavBar + +double height +Widget parent() } -"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" +"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "null::TopAppBarComponent Function(TopAppBarComponent)" +"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "null::BottomNavigationBarComponent Function(BottomNavigationBarComponent)" +"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" -abstract class "wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" { - +String? title - +Widget? leading - +List? actions +abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_grid_layout_cubit_screen_crud_list.dart::FrameLayoutGridCubitScreenCrudList" { +} + +"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud_list.dart::FrameLayoutCubitScreenCrudList" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_grid_layout_cubit_screen_crud_list.dart::FrameLayoutGridCubitScreenCrudList" +"wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_grid_layout_cubit_screen_crud_list.dart::FrameLayoutGridCubitScreenCrudList" + +abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud_item.dart::FrameLayoutCubitScreenCrudItem" { +} + +"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud.dart::FrameLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud_item.dart::FrameLayoutCubitScreenCrudItem" + +abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_crud_item_base.dart::CubitScreenCrudItemBase" { +} + +"wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_item_base.dart::CubitScreenCrudItemBase" + +abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud_list.dart::TopAppBarLayoutCubitScreenCrudList" { +} + +"wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud.dart::TopAppBarLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud_list.dart::TopAppBarLayoutCubitScreenCrudList" + +abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" { + +double height + +TopAppBarComponent? Function(TopAppBarComponent?)? custom +Widget parent() } -"wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" o-- "flutter::src::widgets::framework.dart::Widget" -"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" +"wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" o-- "null::TopAppBarComponent Function(TopAppBarComponent)" +"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" -abstract class "wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" { - +int? currentIndex - +String? title - +Widget? leading - +List? actions +abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud.dart::TopAppBarLayoutCubitScreenCrud" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud.dart::TopAppBarLayoutCubitScreenCrud" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud.dart::TopAppBarLayoutCubitScreenCrud" + +abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_grid_layout_cubit_screen_crud_list.dart::TopAppBarGridLayoutCubitScreenCrudList" { +} + +"wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud_list.dart::TopAppBarLayoutCubitScreenCrudList" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_grid_layout_cubit_screen_crud_list.dart::TopAppBarGridLayoutCubitScreenCrudList" +"wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_grid_layout_cubit_screen_crud_list.dart::TopAppBarGridLayoutCubitScreenCrudList" + +abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud_item.dart::TopAppBarLayoutCubitScreenCrudItem" { +} + +"wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud.dart::TopAppBarLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud_item.dart::TopAppBarLayoutCubitScreenCrudItem" + +abstract class "wyatt_bloc_layout::src::presentation::grid_cubit_screen_crud_list_base.dart::GridCubitScreenCrudListBase" { +} + +"wyatt_bloc_layout::src::presentation::cubit_screen_crud_list_base.dart::CubitScreenCrudListBase" <|-- "wyatt_bloc_layout::src::presentation::grid_cubit_screen_crud_list_base.dart::GridCubitScreenCrudListBase" +"wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" <|-- "wyatt_bloc_layout::src::presentation::grid_cubit_screen_crud_list_base.dart::GridCubitScreenCrudListBase" + +abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" { + +Widget onBuild() +} + +"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" + +abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" { + +double height + +BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? custom +Widget parent() } -"wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "flutter::src::widgets::framework.dart::Widget" -"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" +"wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" o-- "null::BottomNavigationBarComponent Function(BottomNavigationBarComponent)" +"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudCubitScreen" { +abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud_item.dart::BottomNavigationBarLayoutCubitScreenCrudItem" { +} + +"wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud.dart::BottomNavigationBarLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud_item.dart::BottomNavigationBarLayoutCubitScreenCrudItem" + +abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud.dart::BottomNavigationBarLayoutCubitScreenCrud" { +Widget onBuild() } -"wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudCubitScreen" +"wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud.dart::BottomNavigationBarLayoutCubitScreenCrud" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud.dart::BottomNavigationBarLayoutCubitScreenCrud" -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudListCubitScreen" { - +Widget onBuild() +abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart::BottomNavigationBarGridLayoutCubitScreenCrudList" { } -"wyatt_bloc_layout::src::presentation::screens::bases::app_bar_layout_cubit_screen.dart::AppBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudListCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::app_bar_layout_crud_cubit_screen.dart::AppBarLayoutCrudListCubitScreen" +"wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud_list.dart::BottomNavigationBarLayoutCubitScreenCrudList" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart::BottomNavigationBarGridLayoutCubitScreenCrudList" +"wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart::BottomNavigationBarGridLayoutCubitScreenCrudList" -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudCubitScreen" { - +Widget onBuild() +abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud_list.dart::BottomNavigationBarLayoutCubitScreenCrudList" { } -"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudCubitScreen" +"wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud.dart::BottomNavigationBarLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud_list.dart::BottomNavigationBarLayoutCubitScreenCrudList" -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudListCubitScreen" { - +Widget onBuild() +abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud_list.dart::TopNavigationBarLayoutCubitScreenCrudList" { } -"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudListCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::crud_cubit_screen.dart::CrudListCubitScreen" +"wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud.dart::TopNavigationBarLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud_list.dart::TopNavigationBarLayoutCubitScreenCrudList" -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudCubitScreen" { - +Widget onBuild() +abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_grid_layout_cubit_screen_crud_list.dart::TopNavigationBarGridLayoutCubitScreenCrudList" { } -"wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudCubitScreen" +"wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud_list.dart::TopNavigationBarLayoutCubitScreenCrudList" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_grid_layout_cubit_screen_crud_list.dart::TopNavigationBarGridLayoutCubitScreenCrudList" +"wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_grid_layout_cubit_screen_crud_list.dart::TopNavigationBarGridLayoutCubitScreenCrudList" -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudListCubitScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::screens::bases::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudListCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::frame_layout_crud_cubit_screen.dart::FrameLayoutCrudListCubitScreen" - -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudCubitScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudCubitScreen" - -abstract class "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudListCubitScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::screens::bases::bottom_bar_layout_cubit_screen.dart::BottomBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudListCubitScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::screens::crud::bottom_bar_layout_crud_cubit_screen.dart::BottomBarLayoutCrudListCubitScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" { - +int? currentIndex +abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" { + +double height + +TopNavigationBarComponent? Function(TopNavigationBarComponent?)? custom +Widget parent() } -"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" +"wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" o-- "null::TopNavigationBarComponent Function(TopNavigationBarComponent)" +"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" -abstract class "wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" { - +String? title - +Widget? leading - +List? actions - +Widget parent() +abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud_item.dart::TopNavigationBarLayoutCubitScreenCrudItem" { } -"wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" o-- "flutter::src::widgets::framework.dart::Widget" -"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" +"wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud.dart::TopNavigationBarLayoutCubitScreenCrud" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud_item.dart::TopNavigationBarLayoutCubitScreenCrudItem" -abstract class "wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" { - +int? currentIndex - +String? title - +Widget? leading - +List? actions - +Widget parent() -} - -"wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" o-- "flutter::src::widgets::framework.dart::Widget" -"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudCubitConsumerScreen" { +abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud.dart::TopNavigationBarLayoutCubitScreenCrud" { +Widget onBuild() } -"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudListCubitConsumerScreen" { - +Widget onBuild() -} - -"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudListCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::crud_cubit_consumer_screen.dart::CrudListCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudCubitConsumerScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudListCubitConsumerScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::consumers::bases::app_bar_layout_cubit_consumer_screen.dart::AppBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudListCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::app_bar_layout_crud_cubit_consumer_screen.dart::AppBarLayoutCrudListCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudCubitConsumerScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudListCubitConsumerScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::consumers::bases::bottom_bar_layout_cubit_consumer_screen.dart::BottomBarLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudListCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::bottom_bar_layout_crud_cubit_consumer_screen.dart::BottomBarLayoutCrudListCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudCubitConsumerScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudCubitConsumerScreen" - -abstract class "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudListCubitConsumerScreen" { - +Widget onBuild() -} - -"wyatt_bloc_layout::src::presentation::consumers::bases::frame_layout_cubit_consumer_screen.dart::FrameLayoutCubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudListCubitConsumerScreen" -"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::consumers::crud::frame_layout_crud_cubit_consumer_screen.dart::FrameLayoutCrudListCubitConsumerScreen" +"wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud.dart::TopNavigationBarLayoutCubitScreenCrud" +"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud.dart::TopNavigationBarLayoutCubitScreenCrud" @enduml \ No newline at end of file diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart index 891c649b..c06014c1 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart @@ -16,8 +16,9 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; +import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; -class GridLayout extends StatelessWidget { +class GridLayout extends ContentLayout { const GridLayout({ required this.children, this.verticalGap = 30, diff --git a/packages/wyatt_ui_layout/models/class-models.puml b/packages/wyatt_ui_layout/models/class-models.puml index 8f2a5e98..b74dd870 100644 --- a/packages/wyatt_ui_layout/models/class-models.puml +++ b/packages/wyatt_ui_layout/models/class-models.puml @@ -1,28 +1,76 @@ -@startuml +@startuml Class set namespaceSeparator :: +class "wyatt_ui_layout::src::presentation::layouts::structural_layouts::bottom_navigation_bar_layout.dart::BottomNavigationBarLayout" { + +Widget? body + +BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? custom + +Widget build() +} + +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::bottom_navigation_bar_layout.dart::BottomNavigationBarLayout" o-- "flutter::src::widgets::framework.dart::Widget" +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::bottom_navigation_bar_layout.dart::BottomNavigationBarLayout" o-- "null::BottomNavigationBarComponent Function(BottomNavigationBarComponent)" +"wyatt_ui_layout::src::presentation::layouts::layout.dart::StructuralLayout" <|-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::bottom_navigation_bar_layout.dart::BottomNavigationBarLayout" + +abstract class "wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopBarLayout" { + +Widget body + +T? Function(T?)? custom + +double height + +T? child() + +Widget build() +} + +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopBarLayout" o-- "flutter::src::widgets::framework.dart::Widget" +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopBarLayout" o-- "null::T Function(T)" +"wyatt_ui_layout::src::presentation::layouts::layout.dart::StructuralLayout" <|-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopBarLayout" + +class "wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopAppBarLayout" { + +TopAppBarComponent? child() +} + +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopBarLayout" <|-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopAppBarLayout" + +class "wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopNavigationBarLayout" { + +TopNavigationBarComponent? child() +} + +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopBarLayout" <|-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::top_app_bar_layout.dart::TopNavigationBarLayout" + +class "wyatt_ui_layout::src::presentation::layouts::structural_layouts::frame_layout.dart::FrameLayout" { + +TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar + +BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? customBottomNavBar + +Widget body + +double height + +Widget build() +} + +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::frame_layout.dart::FrameLayout" o-- "null::TopAppBarComponent Function(TopAppBarComponent)" +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::frame_layout.dart::FrameLayout" o-- "null::BottomNavigationBarComponent Function(BottomNavigationBarComponent)" +"wyatt_ui_layout::src::presentation::layouts::structural_layouts::frame_layout.dart::FrameLayout" o-- "flutter::src::widgets::framework.dart::Widget" +"wyatt_ui_layout::src::presentation::layouts::layout.dart::StructuralLayout" <|-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::frame_layout.dart::FrameLayout" + abstract class "wyatt_ui_layout::src::presentation::layouts::layout.dart::Layout" { } "flutter::src::widgets::framework.dart::StatelessWidget" <|-- "wyatt_ui_layout::src::presentation::layouts::layout.dart::Layout" -class "wyatt_ui_layout::src::presentation::layouts::bottom_navigation_bar_layout.dart::BottomNavigationBarLayout" { - +Widget body - +int currentIndex +abstract class "wyatt_ui_layout::src::presentation::layouts::layout.dart::StructuralLayout" { +} + +"wyatt_ui_layout::src::presentation::layouts::layout.dart::Layout" <|-- "wyatt_ui_layout::src::presentation::layouts::layout.dart::StructuralLayout" + +abstract class "wyatt_ui_layout::src::presentation::layouts::layout.dart::ContentLayout" { +} + +"wyatt_ui_layout::src::presentation::layouts::layout.dart::Layout" <|-- "wyatt_ui_layout::src::presentation::layouts::layout.dart::ContentLayout" + +class "wyatt_ui_layout::src::presentation::layouts::content_layouts::grid_layout.dart::GridLayout" { + +List children + +double verticalGap + +double horizontalGap +Widget build() } -"wyatt_ui_layout::src::presentation::layouts::bottom_navigation_bar_layout.dart::BottomNavigationBarLayout" o-- "flutter::src::widgets::framework.dart::Widget" -"wyatt_ui_layout::src::presentation::layouts::layout.dart::Layout" <|-- "wyatt_ui_layout::src::presentation::layouts::bottom_navigation_bar_layout.dart::BottomNavigationBarLayout" - -class "wyatt_ui_layout::src::presentation::layouts::app_bar_layout.dart::AppBarLayout" { - +String title - +Widget body - +Widget build() -} - -"wyatt_ui_layout::src::presentation::layouts::app_bar_layout.dart::AppBarLayout" o-- "flutter::src::widgets::framework.dart::Widget" -"wyatt_ui_layout::src::presentation::layouts::layout.dart::Layout" <|-- "wyatt_ui_layout::src::presentation::layouts::app_bar_layout.dart::AppBarLayout" +"wyatt_ui_layout::src::presentation::layouts::layout.dart::ContentLayout" <|-- "wyatt_ui_layout::src::presentation::layouts::content_layouts::grid_layout.dart::GridLayout" @enduml \ No newline at end of file -- 2.47.2 From 7c97417233f372c7ff22ca94f3ff3dc614da74a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 28 Feb 2023 16:41:05 +0100 Subject: [PATCH 213/320] feat(bloc_layout): add attributs available for grid bloc layouts --- .../lib/src/core/mixins/gird_view_mixin.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart b/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart index c43cdbd2..696ae8e9 100644 --- a/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart +++ b/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart @@ -20,11 +20,16 @@ import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; mixin GridLayoutMixin { Widget gridChild(BuildContext context, SuccessType? successType); + double get verticalGap => 30; + double get horizontalGap => 30; + Widget successBuilder( BuildContext context, CrudListLoaded state, ) => GridLayout( + verticalGap: verticalGap, + horizontalGap: horizontalGap, children: state.data.map((e) => gridChild(context, e)).toList(), ); } -- 2.47.2 From 358debf2fa3122ac66d80cd0a6011fce807d13f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Tue, 28 Feb 2023 17:50:16 +0100 Subject: [PATCH 214/320] docs(ui_layout-bloc_layouts): add readmes --- packages/wyatt_bloc_layout/README.md | 43 +++++++++++++++++++++---- packages/wyatt_ui_layout/README.md | 48 ++++++++++++++++++++++++---- 2 files changed, 77 insertions(+), 14 deletions(-) diff --git a/packages/wyatt_bloc_layout/README.md b/packages/wyatt_bloc_layout/README.md index 057115c4..b31892df 100644 --- a/packages/wyatt_bloc_layout/README.md +++ b/packages/wyatt_bloc_layout/README.md @@ -16,7 +16,6 @@ * along with this program. If not, see . --> - # Flutter - Wyatt Bloc Layout

    @@ -28,16 +27,46 @@ Bloc Layout for Flutter. +Wyatt Bloc Layout is a Flutter package that builds on the Wyatt UI Layout package and the Wyatt Bloc Helper package. It provides a way to link multiple packages in order to create intelligent layouts that combine both layout and logic. The package allows developers to use the available layouts in the Wyatt UI Layout package along with the block state logic available in the Wyatt Bloc Helper package. It also uses the Wyatt Crud Bloc package to make it easier to implement CRUD logic. +### Features -## Features +- Allows developers to use available layouts from Wyatt UI Layout package. +- Links with the Wyatt Bloc Helper package to combine layout and block state logic. +- Uses the Wyatt Crud Bloc package to easily implement CRUD logic. - +#### Available bloc layouts -## Getting started +- BottomNavigationBarGridLayoutCubitScreenCrudList +- BottomNavigationBarLayoutCubitScreen +- BottomNavigationBarLayoutCubitScreenCrud +- BottomNavigationBarLayoutCubitScreenCrudItem +- BottomNavigationBarLayoutCubitScreenCrudList +- FrameGridLayoutCubitScreenCrudList +- FrameLayoutCubitScreen +- FrameLayoutCubitScreenCrud +- FrameLayoutCubitScreenCrudItem +- FrameLayoutCubitScreenCrudList +- TopAppBarGridLayoutCubitScreenCrudList +- TopAppBarLayoutCubitScreen +- TopAppBarLayoutCubitScreenCrud +- TopAppBarLayoutCubitScreenCrudItem +- TopAppBarLayoutCubitScreenCrudList +- TopNavigationBarGridLayoutCubitScreenCrudList +- TopNavigationBarLayoutCubitScreen +- TopNavigationBarLayoutCubitScreenCrud +- TopNavigationBarLayoutCubitScreenCrudItem +- TopNavigationBarLayoutCubitScreenCrudList - +### Installation -## Usage +To use Wyatt Bloc Layout in your Flutter project, add the following dependency to your pubspec.yaml file: - \ No newline at end of file +```yaml +wyatt_bloc_layout: + git: + url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages + path: packages/wyatt_bloc_layout +``` + +Then, run flutter pub get to download the package. diff --git a/packages/wyatt_ui_layout/README.md b/packages/wyatt_ui_layout/README.md index 2cbb1aab..e8d1656d 100644 --- a/packages/wyatt_ui_layout/README.md +++ b/packages/wyatt_ui_layout/README.md @@ -1,5 +1,5 @@ +

    Flutter - Authentication BLoC

    +

    Authentication Bloc for Flutter.

    +

    Features

    +
      +
    • 🧐 Wyatt Architecture
    • +
    • 🧱 Entities +
        +
      • Account -> Contains account information from provider.
      • +
      • Session -> Contains account and associated data retrieved from an external source.
      • +
      • AuthenticationChangeEvent -> Describes an event in authentication change (sign in, sign up, sign out, etc...)
      • +
      • SessionWrapper -> Contains latest authentication change event and session.
      • +
      +
    • +
    • 🔑 Powerful and secured authentication repository
    • +
    • 🔥 Multiple data sources +
        +
      • Mock
      • +
      • Firebase
      • +
      +
    • +
    • 🧊 Cubits, why make it complicated when you can make it simple? +
        +
      • Goes to the essential.
      • +
      +
    • +
    • 📐 Consistent +
        +
      • Every class have same naming convention
      • +
      +
    • +
    • 🧪 Tested
    • +
    • 📚 Documented: available here
    • +
    +

    Getting started

    +

    Simply add wyatt_authentication_bloc in pubspec.yaml , then

    +
    import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
    +
    +

    Data source

    +

    The first step is to provide a data source.

    +
    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.

    +
    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.

    +
    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

    +
    class ExampleSignUpCubit extends SignUpCubit<int> {
    +  ExampleSignUpCubit({
    +    required super.authenticationRepository,
    +  });
    +
    +  @override
    +  FutureOrResult<int?> onSignUpWithEmailAndPassword(Result<Account, AppException> result, WyattForm form) async {
    +    // TODO
    +  }
    +}
    +
    +
    +

    Sign In

    +
    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!

    +
    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.

    +
    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.

    +
    Text('Home | ${context.account<AuthenticationCubit<int>, int>()?.email}'),
    +
    +

    Listeners are used to listen to the status of the sign in and sign up forms.

    +
    return SignInListener<int>(
    +    onError: (context, status, errorMessage) => ScaffoldMessenger.of(context)
    +    ..hideCurrentSnackBar()
    +    ..showSnackBar(
    +        SnackBar(content: Text(errorMessage ?? 'Sign In Failure')),
    +    ),
    +    child: ...
    +);
    +
    + + +## Libraries + +##### [wyatt_authentication_bloc](wyatt_authentication_bloc/wyatt_authentication_bloc-library.md) +An authentication library for BLoC. + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/search.md b/packages/wyatt_authentication_bloc/doc/api/search.md new file mode 100644 index 00000000..0fedbdcf --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/search.md @@ -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). diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account-class.md new file mode 100644 index 00000000..f52d7482 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account-class.md @@ -0,0 +1,237 @@ + + + +# Account class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Represents a user Account in the +various identity provisioning systems.

    + + + +**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) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +The user access token +_final_ + + + +##### [creationTime](../wyatt_authentication_bloc/Account/creationTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? + + + +Returns the users account creation time. +_final_ + + + +##### [email](../wyatt_authentication_bloc/Account/email.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +The users email address. +_final_ + + + +##### [emailVerified](../wyatt_authentication_bloc/Account/emailVerified.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Returns whether the users email address has been verified. +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [id](../wyatt_authentication_bloc/Account/id.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +The user's unique ID. +_final_ + + + +##### [isAnonymous](../wyatt_authentication_bloc/Account/isAnonymous.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Returns whether the user is a anonymous. +_final_ + + + +##### [isNewUser](../wyatt_authentication_bloc/Account/isNewUser.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +Whether the user account has been recently created. +_final_ + + + +##### [lastSignInTime](../wyatt_authentication_bloc/Account/lastSignInTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? + + + +When the user last signed in as dictated by the server clock. +_final_ + + + +##### [phoneNumber](../wyatt_authentication_bloc/Account/phoneNumber.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Returns the users phone number. +_final_ + + + +##### [photoURL](../wyatt_authentication_bloc/Account/photoURL.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Returns a photo URL for the user. +_final_ + + + +##### [props](../wyatt_authentication_bloc/Account/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [providerId](../wyatt_authentication_bloc/Account/providerId.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +The provider ID for the user. +_final_ + + + +##### [refreshToken](../wyatt_authentication_bloc/Account/refreshToken.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +The user refresh token +_final_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/Account/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyoverride_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/Account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/Account.md new file mode 100644 index 00000000..22006c3c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/Account.md @@ -0,0 +1,43 @@ + + + +# Account constructor + + + + + *[](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, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/accessToken.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/accessToken.md new file mode 100644 index 00000000..0ceb6c2e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/accessToken.md @@ -0,0 +1,34 @@ + + + +# accessToken property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? accessToken + +_final_ + + + +

    The user access token

    + + + +## Implementation + +```dart +final String? accessToken; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/creationTime.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/creationTime.md new file mode 100644 index 00000000..cf5dfe5c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/creationTime.md @@ -0,0 +1,35 @@ + + + +# creationTime property + + + + + *[](https://dart.dev/null-safety)* + + + +[DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? creationTime + +_final_ + + + +

    Returns the users account creation time.

    +

    When this account was created as dictated by the server clock.

    + + + +## Implementation + +```dart +final DateTime? creationTime; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/email.md new file mode 100644 index 00000000..2d007ce3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/email.md @@ -0,0 +1,35 @@ + + + +# email property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? email + +_final_ + + + +

    The users email address.

    +

    Will be null if signing in anonymously.

    + + + +## Implementation + +```dart +final String? email; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/emailVerified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/emailVerified.md new file mode 100644 index 00000000..e4e36b29 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/emailVerified.md @@ -0,0 +1,35 @@ + + + +# emailVerified property + + + + + *[](https://dart.dev/null-safety)* + + + +[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) emailVerified + +_final_ + + + +

    Returns whether the users email address has been verified.

    +

    To send a verification email, see SendEmailVerification.

    + + + +## Implementation + +```dart +final bool emailVerified; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/id.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/id.md new file mode 100644 index 00000000..4796ed2f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/id.md @@ -0,0 +1,34 @@ + + + +# id property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) id + +_final_ + + + +

    The user's unique ID.

    + + + +## Implementation + +```dart +final String id; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isAnonymous.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isAnonymous.md new file mode 100644 index 00000000..324b4fda --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isAnonymous.md @@ -0,0 +1,34 @@ + + + +# isAnonymous property + + + + + *[](https://dart.dev/null-safety)* + + + +[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isAnonymous + +_final_ + + + +

    Returns whether the user is a anonymous.

    + + + +## Implementation + +```dart +final bool isAnonymous; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isNewUser.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isNewUser.md new file mode 100644 index 00000000..f96ab918 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isNewUser.md @@ -0,0 +1,34 @@ + + + +# isNewUser property + + + + + *[](https://dart.dev/null-safety)* + + + +[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isNewUser + +_final_ + + + +

    Whether the user account has been recently created.

    + + + +## Implementation + +```dart +final bool? isNewUser; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/lastSignInTime.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/lastSignInTime.md new file mode 100644 index 00000000..0f257f63 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/lastSignInTime.md @@ -0,0 +1,34 @@ + + + +# lastSignInTime property + + + + + *[](https://dart.dev/null-safety)* + + + +[DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? lastSignInTime + +_final_ + + + +

    When the user last signed in as dictated by the server clock.

    + + + +## Implementation + +```dart +final DateTime? lastSignInTime; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/phoneNumber.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/phoneNumber.md new file mode 100644 index 00000000..7b33f623 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/phoneNumber.md @@ -0,0 +1,36 @@ + + + +# phoneNumber property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? phoneNumber + +_final_ + + + +

    Returns the users phone number.

    +

    This property will be null if the user has not signed in or been has +their phone number linked.

    + + + +## Implementation + +```dart +final String? phoneNumber; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/photoURL.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/photoURL.md new file mode 100644 index 00000000..c76a2896 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/photoURL.md @@ -0,0 +1,36 @@ + + + +# photoURL property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? photoURL + +_final_ + + + +

    Returns a photo URL for the user.

    +

    This property will be populated if the user has signed in or been linked +with a 3rd party OAuth provider (such as Google).

    + + + +## Implementation + +```dart +final String? photoURL; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/props.md new file mode 100644 index 00000000..619e2501 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/props.md @@ -0,0 +1,55 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [ + id, + isAnonymous, + email, + emailVerified, + phoneNumber, + photoURL, + creationTime, + lastSignInTime, + providerId, + isNewUser, + accessToken, + refreshToken, + ]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/providerId.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/providerId.md new file mode 100644 index 00000000..a539b552 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/providerId.md @@ -0,0 +1,34 @@ + + + +# providerId property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) providerId + +_final_ + + + +

    The provider ID for the user.

    + + + +## Implementation + +```dart +final String providerId; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/refreshToken.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/refreshToken.md new file mode 100644 index 00000000..781948d8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/refreshToken.md @@ -0,0 +1,34 @@ + + + +# refreshToken property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? refreshToken + +_final_ + + + +

    The user refresh token

    + + + +## Implementation + +```dart +final String? refreshToken; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/stringify.md new file mode 100644 index 00000000..8df8a404 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/stringify.md @@ -0,0 +1,47 @@ + + + +# stringify property + + + + + *[](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 + +_override_ + + + +

    If set to true, the toString method will be overridden to output +this instance's props.

    +

    A global default value for stringify can be set using +EquatableConfig.stringify.

    +

    If this instance's stringify is set to null, the value of +EquatableConfig.stringify will be used instead. This defaults to +false.

    + + + +## Implementation + +```dart +@override +bool get stringify => true; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel-class.md new file mode 100644 index 00000000..68088ea5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel-class.md @@ -0,0 +1,247 @@ + + + +# AccountModel class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Account Model to parse Firebase User data

    + + + +**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) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +The user access token +_finalinherited_ + + + +##### [creationTime](../wyatt_authentication_bloc/Account/creationTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? + + + +Returns the users account creation time. +_finalinherited_ + + + +##### [email](../wyatt_authentication_bloc/Account/email.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +The users email address. +_finalinherited_ + + + +##### [emailVerified](../wyatt_authentication_bloc/Account/emailVerified.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Returns whether the users email address has been verified. +_finalinherited_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [id](../wyatt_authentication_bloc/Account/id.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +The user's unique ID. +_finalinherited_ + + + +##### [isAnonymous](../wyatt_authentication_bloc/Account/isAnonymous.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Returns whether the user is a anonymous. +_finalinherited_ + + + +##### [isNewUser](../wyatt_authentication_bloc/Account/isNewUser.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +Whether the user account has been recently created. +_finalinherited_ + + + +##### [lastSignInTime](../wyatt_authentication_bloc/Account/lastSignInTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? + + + +When the user last signed in as dictated by the server clock. +_finalinherited_ + + + +##### [phoneNumber](../wyatt_authentication_bloc/Account/phoneNumber.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Returns the users phone number. +_finalinherited_ + + + +##### [photoURL](../wyatt_authentication_bloc/Account/photoURL.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Returns a photo URL for the user. +_finalinherited_ + + + +##### [props](../wyatt_authentication_bloc/Account/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyinherited_ + + + +##### [providerId](../wyatt_authentication_bloc/Account/providerId.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +The provider ID for the user. +_finalinherited_ + + + +##### [refreshToken](../wyatt_authentication_bloc/AccountModel/refreshToken.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +The user refresh token +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/Account/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + +##### [user](../wyatt_authentication_bloc/AccountModel/user.md) → [User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)? + + + + +_final_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md new file mode 100644 index 00000000..f040be39 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md @@ -0,0 +1,51 @@ + + + +# AccountModel.fromFirebaseUser constructor + + + + + *[](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'); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md new file mode 100644 index 00000000..ac8c078e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md @@ -0,0 +1,54 @@ + + + +# AccountModel.fromFirebaseUserCredential constructor + + + + + *[](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'); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/refreshToken.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/refreshToken.md new file mode 100644 index 00000000..f8863731 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/refreshToken.md @@ -0,0 +1,41 @@ + + + +# refreshToken property + + + + + *[](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 + +_override_ + + + +

    The user refresh token

    + + + +## Implementation + +```dart +@override +String? get refreshToken => user?.refreshToken; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/user.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/user.md new file mode 100644 index 00000000..e0146cab --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/user.md @@ -0,0 +1,33 @@ + + + +# user property + + + + + *[](https://dart.dev/null-safety)* + + + +[User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)? user + +_final_ + + + + + + +## Implementation + +```dart +final User? user; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md new file mode 100644 index 00000000..451ed5dd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# ApplyActionCodeFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown if during the apply action code process if a failure occurs.

    + + + +**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) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md new file mode 100644 index 00000000..1c261bc6 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md @@ -0,0 +1,49 @@ + + + +# ApplyActionCodeFailureFirebase.fromCode constructor + + + + + *[](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.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md new file mode 100644 index 00000000..2e03e5ae --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# ApplyActionCodeFailureFirebase constructor + + + + + *[](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.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md new file mode 100644 index 00000000..487660fd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# ApplyActionCodeFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown if during the apply action code process if a failure occurs.

    + + + +**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) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md new file mode 100644 index 00000000..72b11f2d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# ApplyActionCodeFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ApplyActionCodeFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown if during the apply action code process if a failure occurs.

    + + + +## Implementation + +```dart +ApplyActionCodeFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md new file mode 100644 index 00000000..0fb17fe9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md @@ -0,0 +1,31 @@ + + + +# ApplyActionCodeFailureInterface constructor + + + + + *[](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) + + +

    Thrown if during the apply action code process if a failure occurs.

    + + + +## Implementation + +```dart +ApplyActionCodeFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField-class.md new file mode 100644 index 00000000..9ccd48b3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField-class.md @@ -0,0 +1,122 @@ + + + +# AuthFormField class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Default authentication form fields name

    + + + + +## Constructors + +[AuthFormField](../wyatt_authentication_bloc/AuthFormField/AuthFormField.md) () + + + + +## Properties + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + +## Constants + +##### [confirmPassword](../wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +Confirm Password field: wyattConfirmPasswordField + + + + +##### [email](../wyatt_authentication_bloc/AuthFormField/email-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +Email field: wyattEmailField + + + + +##### [password](../wyatt_authentication_bloc/AuthFormField/password-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +Password field: wyattPasswordField + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/AuthFormField.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/AuthFormField.md new file mode 100644 index 00000000..ab98b830 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/AuthFormField.md @@ -0,0 +1,25 @@ + + + +# AuthFormField constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthFormField() + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md new file mode 100644 index 00000000..7b7ac157 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md @@ -0,0 +1,34 @@ + + + +# confirmPassword constant + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const confirmPassword + + + + + +

    Confirm Password field: wyattConfirmPasswordField

    + + + +## Implementation + +```dart +static const confirmPassword = 'wyattConfirmPasswordField'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/email-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/email-constant.md new file mode 100644 index 00000000..9d842070 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/email-constant.md @@ -0,0 +1,34 @@ + + + +# email constant + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const email + + + + + +

    Email field: wyattEmailField

    + + + +## Implementation + +```dart +static const email = 'wyattEmailField'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/password-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/password-constant.md new file mode 100644 index 00000000..00dbfc9d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/password-constant.md @@ -0,0 +1,34 @@ + + + +# password constant + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const password + + + + + +

    Password field: wyattPasswordField

    + + + +## Implementation + +```dart +static const password = 'wyattPasswordField'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName-class.md new file mode 100644 index 00000000..f1c34250 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName-class.md @@ -0,0 +1,131 @@ + + + +# AuthFormName class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Default authentication form name

    + + + + +## Constructors + +[AuthFormName](../wyatt_authentication_bloc/AuthFormName/AuthFormName.md) () + + + + +## Properties + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + +## Constants + +##### [editAccountForm](../wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +Edit account form: wyattEditAccountForm + + + + +##### [passwordResetForm](../wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +Password reset form: wyattPasswordResetForm + + + + +##### [signInForm](../wyatt_authentication_bloc/AuthFormName/signInForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +Sign In form: wyattSignInForm + + + + +##### [signUpForm](../wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +Sign Up form: wyattSignUpForm + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/AuthFormName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/AuthFormName.md new file mode 100644 index 00000000..060a09c7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/AuthFormName.md @@ -0,0 +1,25 @@ + + + +# AuthFormName constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthFormName() + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md new file mode 100644 index 00000000..87add4b3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md @@ -0,0 +1,34 @@ + + + +# editAccountForm constant + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const editAccountForm + + + + + +

    Edit account form: wyattEditAccountForm

    + + + +## Implementation + +```dart +static const String editAccountForm = 'wyattEditAccountForm'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md new file mode 100644 index 00000000..0732203c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md @@ -0,0 +1,34 @@ + + + +# passwordResetForm constant + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const passwordResetForm + + + + + +

    Password reset form: wyattPasswordResetForm

    + + + +## Implementation + +```dart +static const String passwordResetForm = 'wyattPasswordResetForm'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signInForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signInForm-constant.md new file mode 100644 index 00000000..b5863475 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signInForm-constant.md @@ -0,0 +1,34 @@ + + + +# signInForm constant + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const signInForm + + + + + +

    Sign In form: wyattSignInForm

    + + + +## Implementation + +```dart +static const String signInForm = 'wyattSignInForm'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md new file mode 100644 index 00000000..83820763 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md @@ -0,0 +1,34 @@ + + + +# signUpForm constant + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const signUpForm + + + + + +

    Sign Up form: wyattSignUpForm

    + + + +## Implementation + +```dart +static const String signUpForm = 'wyattSignUpForm'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder-class.md new file mode 100644 index 00000000..ba5fe7a2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder-class.md @@ -0,0 +1,216 @@ + + + +# AuthenticationBuilder<Data> class + + + + + + + *[](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)<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) → [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)<Data> sessionWrapper) + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? + + + +Controls how one widget replaces another widget in the tree. +_finalinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [unauthenticated](../wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) + + + + +_final_ + + + +##### [unknown](../wyatt_authentication_bloc/AuthenticationBuilder/unknown.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) + + + + +_final_ + + + + + +## 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. +_override_ + + + +##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) + + + +Creates a StatelessElement to manage this widget's location in the tree. +_inherited_ + + + +##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> + + + +Returns a list of DiagnosticsNode objects describing this node's +children. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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 DiagnosticsNode.toStringDeep. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md new file mode 100644 index 00000000..6fa6aa7d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md @@ -0,0 +1,35 @@ + + + +# AuthenticationBuilder<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +AuthenticationBuilder<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)<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, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md new file mode 100644 index 00000000..421ea1b9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md @@ -0,0 +1,36 @@ + + + +# authenticated property + + + + + *[](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)<Data> sessionWrapper) authenticated + +_final_ + + + + + + +## Implementation + +```dart +final Widget Function( + BuildContext context, + SessionWrapper sessionWrapper, +) authenticated; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/build.md new file mode 100644 index 00000000..5b5680da --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/build.md @@ -0,0 +1,85 @@ + + + +# build method + + + + + *[](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) + +_override_ + + + +

    Describes the part of the user interface represented by this widget.

    +

    The framework calls this method when this widget is inserted into the tree +in a given BuildContext and when the dependencies of this widget change +(e.g., an InheritedWidget 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.

    +

    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 Widget.canUpdate.

    +

    Typically implementations return a newly created constellation of widgets +that are configured with information from this widget's constructor and +from the given BuildContext.

    +

    The given BuildContext 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 BuildContext +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.

    +

    The implementation of this method must only depend on:

    + +

    If a widget's build method is to depend on anything else, use a +StatefulWidget instead.

    +

    See also:

    +
      +
    • StatelessWidget, which contains the discussion on performance considerations.
    • +
    + + + +## Implementation + +```dart +@override +Widget build(BuildContext context) => + BlocBuilder, AuthenticationState>( + 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); + } + }, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md new file mode 100644 index 00000000..09ac9fe3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md @@ -0,0 +1,33 @@ + + + +# unauthenticated property + + + + + *[](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 + +_final_ + + + + + + +## Implementation + +```dart +final Widget Function(BuildContext context) unauthenticated; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unknown.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unknown.md new file mode 100644 index 00000000..4573308e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unknown.md @@ -0,0 +1,33 @@ + + + +# unknown property + + + + + *[](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 + +_final_ + + + + + + +## Implementation + +```dart +final Widget Function(BuildContext context) unknown; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent-class.md new file mode 100644 index 00000000..4cb045d8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent-class.md @@ -0,0 +1,137 @@ + + + +# AuthenticationChangeEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Represents an event initiated by a change in +the user's authentication status.

    + + + +**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) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyoverride_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md new file mode 100644 index 00000000..82567010 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md @@ -0,0 +1,30 @@ + + + +# AuthenticationChangeEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +AuthenticationChangeEvent() + + + + + +## Implementation + +```dart +const AuthenticationChangeEvent(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/props.md new file mode 100644 index 00000000..35d92209 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => []; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md new file mode 100644 index 00000000..a2e1620f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md @@ -0,0 +1,47 @@ + + + +# stringify property + + + + + *[](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 + +_override_ + + + +

    If set to true, the toString method will be overridden to output +this instance's props.

    +

    A global default value for stringify can be set using +EquatableConfig.stringify.

    +

    If this instance's stringify is set to null, the value of +EquatableConfig.stringify will be used instead. This defaults to +false.

    + + + +## Implementation + +```dart +@override +bool get stringify => true; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit-class.md new file mode 100644 index 00000000..3758c56f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit-class.md @@ -0,0 +1,292 @@ + + + +# AuthenticationCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Abstract authentication cubit class needs to be implemented in application.

    +

    This cubit is in charge of managing the global authentication state of +the application.

    +

    Its here you can override every callbacks and add your custom logic.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> +- AuthenticationCubit + + + + + + + + +## Constructors + +[AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data> + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [currentSession](../wyatt_authentication_bloc/AuthenticationCubit/currentSession.md)() [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? + + + +Returns latest session wrapper. + + + + +##### [delete](../wyatt_authentication_bloc/AuthenticationCubit/delete.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Delete account. + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data> state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onDelete](../wyatt_authentication_bloc/AuthenticationCubit/onDelete.md)() FutureOrResult<void> + + + +This callback is triggered when the current account is deleted from +the remote. + + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onReauthenticate](../wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result) FutureOrResult<Data?> + + + +This callback is triggered when the account is re-authenticated + + + + +##### [onRefresh](../wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result) FutureOrResult<Data?> + + + +This callback is triggered when the account is refreshed. + + + + +##### [onSignInFromCache](../wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) FutureOrResult<Data?> + + + +This callback is triggered when the user is automaticcaly logged in from +the cache. + + + + +##### [onSignOut](../wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md)() FutureOrResult<void> + + + +This callback is triggered when the user is logged out. + + + + +##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in. + + + + +##### [refresh](../wyatt_authentication_bloc/AuthenticationCubit/refresh.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Refreshes the current user, if signed in. + + + + +##### [signOut](../wyatt_authentication_bloc/AuthenticationCubit/signOut.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Signs out the current user. +It also clears the cache and the associated data. + + + + +##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md new file mode 100644 index 00000000..8a689e53 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md @@ -0,0 +1,34 @@ + + + +# AuthenticationCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthenticationCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +AuthenticationCubit({ + required this.authenticationRepository, +}) : super(const AuthenticationState.unknown()) { + _listenForAuthenticationChanges(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md new file mode 100644 index 00000000..32cdfa2a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md @@ -0,0 +1,33 @@ + + + +# authenticationRepository property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationRepository authenticationRepository; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/currentSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/currentSession.md new file mode 100644 index 00000000..855d8d0e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/currentSession.md @@ -0,0 +1,37 @@ + + + +# currentSession method + + + + + *[](https://dart.dev/null-safety)* + + + + +[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? currentSession +() + + + + + +

    Returns latest session wrapper.

    +

    Contains latest event and latest session data (account + extra data)

    + + + +## Implementation + +```dart +SessionWrapper? currentSession() => _latestSession; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/delete.md new file mode 100644 index 00000000..849e1aca --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/delete.md @@ -0,0 +1,44 @@ + + + +# delete method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> delete +() + + + + + +

    Delete account.

    +

    Throws a DeleteAccountFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOr delete() async => CustomRoutine( + routine: authenticationRepository.delete, + attachedLogic: (routineResult) => onDelete(), + onError: addError, + onSuccess: (result, data) => authenticationRepository + .addSession(SessionWrapper(event: const DeletedEvent())), + ).call(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onDelete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onDelete.md new file mode 100644 index 00000000..b5fd50a4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onDelete.md @@ -0,0 +1,38 @@ + + + +# onDelete method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<void> onDelete +() + + + + + +

    This callback is triggered when the current account is deleted from +the remote.

    +

    For example: when the user wants to delete his account from Firebase

    + + + +## Implementation + +```dart +FutureOrResult onDelete(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md new file mode 100644 index 00000000..434c5de1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md @@ -0,0 +1,38 @@ + + + +# onReauthenticate method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onReauthenticate +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result) + + + + + +

    This callback is triggered when the account is re-authenticated

    +

    For example: when the user is logged in and sign in +from an another provider

    + + + +## Implementation + +```dart +FutureOrResult onReauthenticate(Result result); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md new file mode 100644 index 00000000..b3812fa8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md @@ -0,0 +1,37 @@ + + + +# onRefresh method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onRefresh +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result) + + + + + +

    This callback is triggered when the account is refreshed.

    +

    For example: when the access token is refreshed.

    + + + +## Implementation + +```dart +FutureOrResult onRefresh(Result result); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md new file mode 100644 index 00000000..3f0ccf94 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md @@ -0,0 +1,38 @@ + + + +# onSignInFromCache method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onSignInFromCache +([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) + + + + + +

    This callback is triggered when the user is automaticcaly logged in from +the cache.

    +

    For example: when the user is sign in from the Firebase cache.

    + + + +## Implementation + +```dart +FutureOrResult onSignInFromCache(SessionWrapper wrapper); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md new file mode 100644 index 00000000..930d66b7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md @@ -0,0 +1,37 @@ + + + +# onSignOut method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<void> onSignOut +() + + + + + +

    This callback is triggered when the user is logged out.

    +

    For example: when the user clicks on the logout button.

    + + + +## Implementation + +```dart +FutureOrResult onSignOut(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md new file mode 100644 index 00000000..b2eeb9c5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md @@ -0,0 +1,53 @@ + + + +# reauthenticate method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reauthenticate +() + + + + + +

    Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in.

    +

    Throws a ReauthenticateFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOr reauthenticate() async => CustomRoutine( + routine: authenticationRepository.reauthenticate, + attachedLogic: onReauthenticate, + onError: addError, + onSuccess: (result, data) => authenticationRepository.addSession( + SessionWrapper( + event: ReauthenticatedEvent(account: result), + session: Session( + account: result, + data: data, + ), + ), + ), + ).call(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/refresh.md new file mode 100644 index 00000000..be643224 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/refresh.md @@ -0,0 +1,49 @@ + + + +# refresh method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> refresh +() + + + + + +

    Refreshes the current user, if signed in.

    + + + +## Implementation + +```dart +FutureOr refresh() async => CustomRoutine( + routine: authenticationRepository.refresh, + attachedLogic: onRefresh, + onError: addError, + onSuccess: (result, data) => authenticationRepository.addSession( + SessionWrapper( + event: RefreshedEvent(account: result), + session: Session( + account: result, + data: data, + ), + ), + ), + ).call(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/signOut.md new file mode 100644 index 00000000..f2634117 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/signOut.md @@ -0,0 +1,43 @@ + + + +# signOut method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signOut +() + + + + + +

    Signs out the current user. +It also clears the cache and the associated data.

    + + + +## Implementation + +```dart +FutureOr signOut() async => CustomRoutine( + routine: authenticationRepository.signOut, + attachedLogic: (routineResult) => onSignOut(), + onError: addError, + onSuccess: (result, data) => authenticationRepository + .addSession(SessionWrapper(event: const SignedOutEvent())), + ).call(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface-class.md new file mode 100644 index 00000000..36c265c0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface-class.md @@ -0,0 +1,159 @@ + + + +# AuthenticationFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Base exception used in Wyatt Authentication

    + + + + +**Implemented types** + +- [Exception](https://api.flutter.dev/flutter/dart-core/Exception-class.html) + + +**Implementers** + +- [ApplyActionCodeFailureInterface](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md) +- [ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md) +- [DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md) +- [FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md) +- [ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface-class.md) +- [ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md) +- [RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface-class.md) +- [SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md) +- [SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md) +- [SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md) +- [SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md) +- [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) +- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) +- [SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md) +- [SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md) +- [SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md) +- [SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md) +- [SignInWithTwitterFailureInterface](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md) +- [SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface-class.md) +- [SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md) +- [UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md) +- [UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md) +- [VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md) + + + + + +## Constructors + +[AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg) + + + +[AuthenticationFailureInterface.fromCode](../wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / write_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-only_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / write_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md new file mode 100644 index 00000000..96605d88 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# AuthenticationFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthenticationFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +AuthenticationFailureInterface.fromCode(this.code) + : msg = 'An unknown error occurred.'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md new file mode 100644 index 00000000..b64683e8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md @@ -0,0 +1,30 @@ + + + +# AuthenticationFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthenticationFailureInterface([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg) + + + + + +## Implementation + +```dart +AuthenticationFailureInterface(this.code, this.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/code.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/code.md new file mode 100644 index 00000000..7d6e8996 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/code.md @@ -0,0 +1,33 @@ + + + +# code property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) code + +_read / write_ + + + + + + +## Implementation + +```dart +String code; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/message.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/message.md new file mode 100644 index 00000000..fed51258 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/message.md @@ -0,0 +1,40 @@ + + + +# message property + + + + + *[](https://dart.dev/null-safety)* + + + + + +**Annotations** + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) message + + + + + + + + +## Implementation + +```dart +@override +String get message => msg; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md new file mode 100644 index 00000000..820911a4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md @@ -0,0 +1,33 @@ + + + +# msg property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg + +_read / write_ + + + + + + +## Implementation + +```dart +String msg; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md new file mode 100644 index 00000000..adf014b9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md @@ -0,0 +1,53 @@ + + + +# toString method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString +() + +_inherited_ + + + +

    A string representation of this object.

    +

    Some classes have a default textual representation, +often paired with a static parse function (like int.parse). +These classes will provide the textual representation as +their string representation.

    +

    Other classes have no meaningful textual representation +that a program will care about. +Such classes will typically override toString to provide +useful information when inspecting the object, +mainly for debugging or logging.

    + + + +## Implementation + +```dart +@override +String toString() { + if (message.isNotNullOrEmpty) { + return '$runtimeType: $message'; + } else { + return '$runtimeType: An exception occured'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md new file mode 100644 index 00000000..39635ba2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md @@ -0,0 +1,251 @@ + + + +# AuthenticationFirebaseDataSourceImpl<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> +- AuthenticationFirebaseDataSourceImpl + + + + + + + + +## Constructors + +[AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md) ({[FirebaseAuth](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/FirebaseAuth-class.html)? firebaseAuth, [GoogleSignIn](https://pub.dev/documentation/google_sign_in/5.4.2/google_sign_in/GoogleSignIn-class.html)? googleSignIn}) + + + + +## Properties + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [addSession](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void + + + +Add a new authentication event. +_override_ + + + +##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Confirms the password reset with the provided newPassword and code. +_override_ + + + +##### [delete](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Delete account. +_override_ + + + +##### [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. +_inherited_ + + + +##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in. +_override_ + + + +##### [refresh](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Refreshes the current user, if signed in. +_override_ + + + +##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Sends verification email to the account email. +_override_ + + + +##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Sends a password reset email to the provided email. +_override_ + + + +##### [sessionStream](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> + + + +Authentication state change event stream. +_override_ + + + +##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Sign in anonymously. +_override_ + + + +##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Signs in with the provided email and password. +_override_ + + + +##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Starts the Sign In with Google Flow. +_override_ + + + +##### [signOut](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Signs out the current user. +It also clears the cache and the associated data. +_override_ + + + +##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Creates a new user with the provided email and password. +_override_ + + + +##### [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. +_inherited_ + + + +##### [updateEmail](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Update or add email. +_override_ + + + +##### [updatePassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Update or add password. +_override_ + + + +##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> + + + +Verify password reset code. +_override_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md new file mode 100644 index 00000000..d6364dcf --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md @@ -0,0 +1,40 @@ + + + +# AuthenticationFirebaseDataSourceImpl<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthenticationFirebaseDataSourceImpl<Data>({[FirebaseAuth](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/FirebaseAuth-class.html)? firebaseAuth, [GoogleSignIn](https://pub.dev/documentation/google_sign_in/5.4.2/google_sign_in/GoogleSignIn-class.html)? googleSignIn}) + + + + + +## Implementation + +```dart +AuthenticationFirebaseDataSourceImpl({ + FirebaseAuth? firebaseAuth, + GoogleSignIn? googleSignIn, +}) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance, + _googleSignIn = googleSignIn ?? GoogleSignIn() { + _latestCredentials = BehaviorSubject(); + _sessionStream = BehaviorSubject(); + + // Check for account in memory (persistence) + _checkForCachedAccount(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md new file mode 100644 index 00000000..adb9c34d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md @@ -0,0 +1,40 @@ + + + +# addSession method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +void addSession +([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) + +_override_ + + + +

    Add a new authentication event.

    + + + +## Implementation + +```dart +@override +void addSession(SessionWrapper wrapper) { + _sessionStream.add(wrapper); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md new file mode 100644 index 00000000..5be2ed73 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md @@ -0,0 +1,53 @@ + + + +# confirmPasswordReset method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> confirmPasswordReset +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) + +_override_ + + + +

    Confirms the password reset with the provided newPassword and code.

    +

    Throws a ConfirmPasswordResetFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +Future confirmPasswordReset({ + required String code, + required String newPassword, +}) async { + try { + await _firebaseAuth.confirmPasswordReset( + code: code, + newPassword: newPassword, + ); + } on FirebaseAuthException catch (e) { + throw ConfirmPasswordResetFailureFirebase.fromCode(e.code); + } catch (_) { + throw ConfirmPasswordResetFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md new file mode 100644 index 00000000..64729914 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md @@ -0,0 +1,48 @@ + + + +# delete method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> delete +() + +_override_ + + + +

    Delete account.

    +

    Throws a DeleteAccountFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +Future delete() async { + try { + await _firebaseAuth.currentUser!.delete(); + } on FirebaseAuthException catch (e) { + throw DeleteAccountFailureFirebase.fromCode(e.code); + } catch (_) { + throw DeleteAccountFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md new file mode 100644 index 00000000..244efea5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md @@ -0,0 +1,61 @@ + + + +# reauthenticate method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate +() + +_override_ + + + +

    Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in.

    +

    Throws a ReauthenticateFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +Future reauthenticate() async { + final latestCreds = + await _latestCredentials.stream.asBroadcastStream().last; + try { + if (latestCreds?.credential != null) { + await _firebaseAuth.currentUser + ?.reauthenticateWithCredential(latestCreds!.credential!); + } else { + throw Exception(); // Get caught just after. + } + + final account = AccountModel.fromFirebaseUser(_firebaseAuth.currentUser); + + return account; + } on FirebaseAuthException catch (e) { + throw ReauthenticateFailureFirebase.fromCode(e.code); + } catch (_) { + throw ReauthenticateFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md new file mode 100644 index 00000000..323f75a1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md @@ -0,0 +1,52 @@ + + + +# refresh method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh +() + +_override_ + + + +

    Refreshes the current user, if signed in.

    + + + +## Implementation + +```dart +@override +Future refresh() async { + try { + final jwt = await _firebaseAuth.currentUser?.getIdToken(true); + final account = AccountModel.fromFirebaseUser( + _firebaseAuth.currentUser, + accessToken: jwt, + ); + + return account; + } on FirebaseAuthException catch (e) { + throw RefreshFailureFirebase.fromCode(e.code); + } catch (_) { + throw RefreshFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md new file mode 100644 index 00000000..36e3bde4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md @@ -0,0 +1,47 @@ + + + +# sendEmailVerification method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendEmailVerification +() + +_override_ + + + +

    Sends verification email to the account email.

    +

    Throws a SendEmailVerificationFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +Future sendEmailVerification() async { + try { + await _firebaseAuth.currentUser!.sendEmailVerification(); + } on FirebaseAuthException catch (e) { + throw SendEmailVerificationFailureFirebase.fromCode(e.code); + } catch (_) { + throw SendEmailVerificationFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md new file mode 100644 index 00000000..44ab9cd1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md @@ -0,0 +1,47 @@ + + + +# sendPasswordResetEmail method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendPasswordResetEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + +_override_ + + + +

    Sends a password reset email to the provided email.

    +

    Throws a SendPasswordResetEmailFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +Future sendPasswordResetEmail({required String email}) async { + try { + await _firebaseAuth.sendPasswordResetEmail(email: email); + } on FirebaseAuthException catch (e) { + throw SendPasswordResetEmailFailureFirebase.fromCode(e.code); + } catch (_) { + throw SendPasswordResetEmailFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md new file mode 100644 index 00000000..d2bd33ab --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md @@ -0,0 +1,39 @@ + + + +# sessionStream method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream +() + +_override_ + + + +

    Authentication state change event stream.

    + + + +## Implementation + +```dart +@override +Stream> sessionStream() => + _sessionStream.stream.asBroadcastStream(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md new file mode 100644 index 00000000..80bef88a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md @@ -0,0 +1,54 @@ + + + +# signInAnonymously method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously +() + +_override_ + + + +

    Sign in anonymously.

    +

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +Future signInAnonymously() async { + try { + final userCredential = await _firebaseAuth.signInAnonymously(); + + return _addToStream( + userCredential, + (account) => SignedInEvent( + account: account, + ), + ); + } on FirebaseAuthException catch (e) { + throw SignInAnonymouslyFailureFirebase.fromCode(e.code); + } catch (_) { + throw SignInAnonymouslyFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md new file mode 100644 index 00000000..0303cc78 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md @@ -0,0 +1,61 @@ + + + +# signInWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + +_override_ + + + +

    Signs in with the provided email and password.

    +

    Throws a SignInWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +Future signInWithEmailAndPassword({ + required String email, + required String password, +}) async { + try { + final userCredential = await _firebaseAuth.signInWithEmailAndPassword( + email: email, + password: password, + ); + + return _addToStream( + userCredential, + (account) => SignedInEvent( + account: account, + ), + ); + } on FirebaseAuthException catch (e) { + throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code); + } catch (_) { + throw SignInWithEmailAndPasswordFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md new file mode 100644 index 00000000..a8e00d8f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md @@ -0,0 +1,68 @@ + + + +# signInWithGoogle method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle +() + +_override_ + + + +

    Starts the Sign In with Google Flow.

    +

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +Future signInWithGoogle() async { + try { + // Trigger the authentication flow + final GoogleSignInAccount? googleUser = await _googleSignIn.signIn(); + + // Obtain the auth details from the request + final GoogleSignInAuthentication? googleAuth = + await googleUser?.authentication; + + // Create a new credential + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth?.accessToken, + idToken: googleAuth?.idToken, + ); + + final userCredential = + await _firebaseAuth.signInWithCredential(credential); + + return _addToStream( + userCredential, + (account) => SignedInEvent( + account: account, + ), + ); + } on FirebaseAuthException catch (e) { + throw SignInWithGoogleFailureFirebase.fromCode(e.code); + } catch (_) { + throw SignInWithGoogleFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md new file mode 100644 index 00000000..8e648e71 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md @@ -0,0 +1,46 @@ + + + +# signOut method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> signOut +() + +_override_ + + + +

    Signs out the current user. +It also clears the cache and the associated data.

    + + + +## Implementation + +```dart +@override +Future signOut() async { + try { + _latestCredentials.add(null); + await _firebaseAuth.signOut(); + } catch (_) { + throw SignOutFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md new file mode 100644 index 00000000..4c81f5e2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md @@ -0,0 +1,62 @@ + + + +# signUpWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + +_override_ + + + +

    Creates a new user with the provided email and password.

    +

    Returns the newly created user's unique identifier.

    +

    Throws a SignUpWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +Future signUpWithEmailAndPassword({ + required String email, + required String password, +}) async { + try { + final userCredential = await _firebaseAuth.createUserWithEmailAndPassword( + email: email, + password: password, + ); + + return _addToStream( + userCredential, + (account) => SignedUpEvent( + account: account, + ), + ); + } on FirebaseAuthException catch (e) { + throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code); + } catch (_) { + throw SignUpWithEmailAndPasswordFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md new file mode 100644 index 00000000..11399787 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md @@ -0,0 +1,55 @@ + + + +# updateEmail method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + +_override_ + + + +

    Update or add email.

    +

    Throws a UpdateEmailFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +Future updateEmail({required String email}) async { + try { + await _firebaseAuth.currentUser!.updateEmail(email); + final jwt = await _firebaseAuth.currentUser!.getIdToken(true); + final account = AccountModel.fromFirebaseUser( + _firebaseAuth.currentUser, + accessToken: jwt, + ); + + return account; + } on FirebaseAuthException catch (e) { + throw UpdateEmailFailureFirebase.fromCode(e.code); + } catch (_) { + throw UpdateEmailFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md new file mode 100644 index 00000000..be85ed32 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md @@ -0,0 +1,55 @@ + + + +# updatePassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + +_override_ + + + +

    Update or add password.

    +

    Throws a UpdatePasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +Future updatePassword({required String password}) async { + try { + await _firebaseAuth.currentUser!.updatePassword(password); + final jwt = await _firebaseAuth.currentUser!.getIdToken(true); + final account = AccountModel.fromFirebaseUser( + _firebaseAuth.currentUser, + accessToken: jwt, + ); + + return account; + } on FirebaseAuthException catch (e) { + throw UpdatePasswordFailureFirebase.fromCode(e.code); + } catch (_) { + throw UpdatePasswordFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md new file mode 100644 index 00000000..887564d5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md @@ -0,0 +1,48 @@ + + + +# verifyPasswordResetCode method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) + +_override_ + + + +

    Verify password reset code.

    +

    Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +Future verifyPasswordResetCode({required String code}) async { + try { + final email = await _firebaseAuth.verifyPasswordResetCode(code); + return email.isNotNullOrEmpty; + } on FirebaseAuthException catch (e) { + throw VerifyPasswordResetCodeFailureFirebase.fromCode(e.code); + } catch (_) { + throw VerifyPasswordResetCodeFailureFirebase(); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md new file mode 100644 index 00000000..29bfc2f7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md @@ -0,0 +1,247 @@ + + + +# AuthenticationRemoteDataSource<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Is responsible for abstracting the provenance of the data.

    + + + + + + +**Implementers** + +- [AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md) + + + + + +## Constructors + +[AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md) () + + + + +## Properties + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [addSession](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void + + + + + + + + +##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + + + + + + +##### [delete](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + + + + + + +##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic + + + +Invoked when a non-existent method or property is accessed. +_inherited_ + + + +##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [refresh](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + + + + + + +##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + + + + + + +##### [sessionStream](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> + + + + + + + + +##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [signOut](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + + + + + + +##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + +##### [updateEmail](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [updatePassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + + + + + + +##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> + + + + + + + + + + +## Operators + +##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +The equality operator. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md new file mode 100644 index 00000000..9552fade --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md @@ -0,0 +1,25 @@ + + + +# AuthenticationRemoteDataSource<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthenticationRemoteDataSource<Data>() + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md new file mode 100644 index 00000000..f1567da2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md @@ -0,0 +1,35 @@ + + + +# addSession method + + + + + *[](https://dart.dev/null-safety)* + + + + +void addSession +([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) + + + + + + + + +## Implementation + +```dart +void addSession(SessionWrapper wrapper); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md new file mode 100644 index 00000000..785714a8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md @@ -0,0 +1,38 @@ + + + +# confirmPasswordReset method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> confirmPasswordReset +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) + + + + + + + + +## Implementation + +```dart +Future confirmPasswordReset({ + required String code, + required String newPassword, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md new file mode 100644 index 00000000..aad9ff7b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md @@ -0,0 +1,35 @@ + + + +# delete method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> delete +() + + + + + + + + +## Implementation + +```dart +Future delete(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md new file mode 100644 index 00000000..7f369a4c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md @@ -0,0 +1,35 @@ + + + +# reauthenticate method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate +() + + + + + + + + +## Implementation + +```dart +Future reauthenticate(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md new file mode 100644 index 00000000..104a6bc0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md @@ -0,0 +1,35 @@ + + + +# refresh method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh +() + + + + + + + + +## Implementation + +```dart +Future refresh(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md new file mode 100644 index 00000000..8ee8fe82 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md @@ -0,0 +1,35 @@ + + + +# sendEmailVerification method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendEmailVerification +() + + + + + + + + +## Implementation + +```dart +Future sendEmailVerification(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md new file mode 100644 index 00000000..86a6aae2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md @@ -0,0 +1,35 @@ + + + +# sendPasswordResetEmail method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendPasswordResetEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + + + + + + + + +## Implementation + +```dart +Future sendPasswordResetEmail({required String email}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md new file mode 100644 index 00000000..9d8739aa --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md @@ -0,0 +1,35 @@ + + + +# sessionStream method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream +() + + + + + + + + +## Implementation + +```dart +Stream> sessionStream(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md new file mode 100644 index 00000000..ac7985b1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md @@ -0,0 +1,35 @@ + + + +# signInAnonymously method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously +() + + + + + + + + +## Implementation + +```dart +Future signInAnonymously(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md new file mode 100644 index 00000000..394754c5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md @@ -0,0 +1,38 @@ + + + +# signInWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + + + + + + + + +## Implementation + +```dart +Future signInWithEmailAndPassword({ + required String email, + required String password, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md new file mode 100644 index 00000000..4713504f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md @@ -0,0 +1,35 @@ + + + +# signInWithGoogle method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle +() + + + + + + + + +## Implementation + +```dart +Future signInWithGoogle(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md new file mode 100644 index 00000000..f650758c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md @@ -0,0 +1,35 @@ + + + +# signOut method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> signOut +() + + + + + + + + +## Implementation + +```dart +Future signOut(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md new file mode 100644 index 00000000..6d55af4c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md @@ -0,0 +1,38 @@ + + + +# signUpWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + + + + + + + + +## Implementation + +```dart +Future signUpWithEmailAndPassword({ + required String email, + required String password, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md new file mode 100644 index 00000000..07110bcb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md @@ -0,0 +1,35 @@ + + + +# updateEmail method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + + + + + + + + +## Implementation + +```dart +Future updateEmail({required String email}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md new file mode 100644 index 00000000..043a101f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md @@ -0,0 +1,35 @@ + + + +# updatePassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + + + + + + + + +## Implementation + +```dart +Future updatePassword({required String password}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md new file mode 100644 index 00000000..bee09e13 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md @@ -0,0 +1,35 @@ + + + +# verifyPasswordResetCode method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) + + + + + + + + +## Implementation + +```dart +Future verifyPasswordResetCode({required String code}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository-class.md new file mode 100644 index 00000000..80cf4ff5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository-class.md @@ -0,0 +1,258 @@ + + + +# AuthenticationRepository<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + + + + + + + +**Implementers** + +- [AuthenticationRepositoryImpl](../wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md) + + + + + +## Constructors + +[AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md) () + + + + +## Properties + +##### [formRepository](../wyatt_authentication_bloc/AuthenticationRepository/formRepository.md) → FormRepository + + + +Form repository used in different authentication cubits/blocs +_read-only_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [addSession](../wyatt_authentication_bloc/AuthenticationRepository/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void + + + +Add a new authentication event. + + + + +##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) FutureOrResult<void> + + + +Confirms the password reset with the provided newPassword and code. + + + + +##### [delete](../wyatt_authentication_bloc/AuthenticationRepository/delete.md)() FutureOrResult<void> + + + +Delete account. + + + + +##### [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. +_inherited_ + + + +##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in. + + + + +##### [refresh](../wyatt_authentication_bloc/AuthenticationRepository/refresh.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Refreshes the current user, if signed in. + + + + +##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md)() FutureOrResult<void> + + + +Sends verification email to the account email. + + + + +##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<void> + + + +Sends a password reset email to the provided email. + + + + +##### [sessionStream](../wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> + + + +Authentication state change event stream. + + + + +##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Sign in anonymously. + + + + +##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Signs in with the provided email and password. + + + + +##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Starts the Sign In with Google Flow. + + + + +##### [signOut](../wyatt_authentication_bloc/AuthenticationRepository/signOut.md)() FutureOrResult<void> + + + +Signs out the current user. +It also clears the cache and the associated data. + + + + +##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Creates a new user with the provided email and password. + + + + +##### [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. +_inherited_ + + + +##### [updateEmail](../wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Update or add email. + + + + +##### [updatePassword](../wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Update or add password. + + + + +##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> + + + +Verify password reset code. + + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md new file mode 100644 index 00000000..da6e6d1d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md @@ -0,0 +1,25 @@ + + + +# AuthenticationRepository<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthenticationRepository<Data>() + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/addSession.md new file mode 100644 index 00000000..dd5755bd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/addSession.md @@ -0,0 +1,36 @@ + + + +# addSession method + + + + + *[](https://dart.dev/null-safety)* + + + + +void addSession +([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) + + + + + +

    Add a new authentication event.

    + + + +## Implementation + +```dart +void addSession(SessionWrapper wrapper); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md new file mode 100644 index 00000000..43531c88 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md @@ -0,0 +1,40 @@ + + + +# confirmPasswordReset method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<void> confirmPasswordReset +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) + + + + + +

    Confirms the password reset with the provided newPassword and code.

    +

    Throws a ConfirmPasswordResetFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult confirmPasswordReset({ + required String code, + required String newPassword, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/delete.md new file mode 100644 index 00000000..05b49493 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/delete.md @@ -0,0 +1,38 @@ + + + +# delete method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<void> delete +() + + + + + +

    Delete account.

    +

    Throws a DeleteAccountFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult delete(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/formRepository.md new file mode 100644 index 00000000..0bded545 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/formRepository.md @@ -0,0 +1,37 @@ + + + +# formRepository property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormRepository formRepository + + + + + +

    Form repository used in different authentication cubits/blocs

    + + + +## Implementation + +```dart +FormRepository get formRepository; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md new file mode 100644 index 00000000..809974fe --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md @@ -0,0 +1,40 @@ + + + +# reauthenticate method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate +() + + + + + +

    Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in.

    +

    Throws a ReauthenticateFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult reauthenticate(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/refresh.md new file mode 100644 index 00000000..5f3413e3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/refresh.md @@ -0,0 +1,36 @@ + + + +# refresh method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh +() + + + + + +

    Refreshes the current user, if signed in.

    + + + +## Implementation + +```dart +FutureOrResult refresh(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md new file mode 100644 index 00000000..184e510c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md @@ -0,0 +1,37 @@ + + + +# sendEmailVerification method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<void> sendEmailVerification +() + + + + + +

    Sends verification email to the account email.

    +

    Throws a SendEmailVerificationFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult sendEmailVerification(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md new file mode 100644 index 00000000..5778307e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md @@ -0,0 +1,37 @@ + + + +# sendPasswordResetEmail method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<void> sendPasswordResetEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + + + + + +

    Sends a password reset email to the provided email.

    +

    Throws a SendPasswordResetEmailFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult sendPasswordResetEmail({required String email}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md new file mode 100644 index 00000000..d911cb8d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md @@ -0,0 +1,36 @@ + + + +# sessionStream method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream +() + + + + + +

    Authentication state change event stream.

    + + + +## Implementation + +```dart +Stream> sessionStream(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md new file mode 100644 index 00000000..03d3f774 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md @@ -0,0 +1,37 @@ + + + +# signInAnonymously method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously +() + + + + + +

    Sign in anonymously.

    +

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult signInAnonymously(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md new file mode 100644 index 00000000..5ae7989f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md @@ -0,0 +1,41 @@ + + + +# signInWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + + + + + +

    Signs in with the provided email and password.

    +

    Throws a SignInWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult signInWithEmailAndPassword({ + required String email, + required String password, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md new file mode 100644 index 00000000..18a8989b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md @@ -0,0 +1,37 @@ + + + +# signInWithGoogle method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle +() + + + + + +

    Starts the Sign In with Google Flow.

    +

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult signInWithGoogle(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signOut.md new file mode 100644 index 00000000..7dad6c4b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signOut.md @@ -0,0 +1,37 @@ + + + +# signOut method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<void> signOut +() + + + + + +

    Signs out the current user. +It also clears the cache and the associated data.

    + + + +## Implementation + +```dart +FutureOrResult signOut(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md new file mode 100644 index 00000000..7a99a749 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md @@ -0,0 +1,42 @@ + + + +# signUpWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + + + + + +

    Creates a new user with the provided email and password.

    +

    Returns the newly created user's unique identifier.

    +

    Throws a SignUpWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult signUpWithEmailAndPassword({ + required String email, + required String password, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md new file mode 100644 index 00000000..e324d7ad --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md @@ -0,0 +1,40 @@ + + + +# updateEmail method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + + + + + +

    Update or add email.

    +

    Throws a UpdateEmailFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult updateEmail({ + required String email, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md new file mode 100644 index 00000000..ac90a4a9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md @@ -0,0 +1,40 @@ + + + +# updatePassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + + + + + +

    Update or add password.

    +

    Throws a UpdatePasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult updatePassword({ + required String password, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md new file mode 100644 index 00000000..73463137 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md @@ -0,0 +1,37 @@ + + + +# verifyPasswordResetCode method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) + + + + + +

    Verify password reset code.

    +

    Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOrResult verifyPasswordResetCode({required String code}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md new file mode 100644 index 00000000..5ec57c81 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md @@ -0,0 +1,269 @@ + + + +# AuthenticationRepositoryImpl<Data extends Object> class + + + + + + + *[](https://dart.dev/null-safety)* + + + + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> +- AuthenticationRepositoryImpl + + + + + + + + +## Constructors + +[AuthenticationRepositoryImpl](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md) ({required [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> authenticationRemoteDataSource, FormRepository? formRepository, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraSignUpInputs, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraEditAccountInputs, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customEmailValidator, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customPasswordValidator}) + + + + +## Properties + +##### [authenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md) → [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> + + + + +_final_ + + + +##### [formRepository](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md) → FormRepository + + + +Form repository used in different authentication cubits/blocs +_read-onlyoverride_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [addSession](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void + + + +Add a new authentication event. +_override_ + + + +##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) FutureOrResult<void> + + + +Confirms the password reset with the provided newPassword and code. +_override_ + + + +##### [delete](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md)() FutureOrResult<void> + + + +Delete account. +_override_ + + + +##### [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. +_inherited_ + + + +##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in. +_override_ + + + +##### [refresh](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Refreshes the current user, if signed in. +_override_ + + + +##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md)() FutureOrResult<void> + + + +Sends verification email to the account email. +_override_ + + + +##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<void> + + + +Sends a password reset email to the provided email. +_override_ + + + +##### [sessionStream](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> + + + +Authentication state change event stream. +_override_ + + + +##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Sign in anonymously. +_override_ + + + +##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Signs in with the provided email and password. +_override_ + + + +##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Starts the Sign In with Google Flow. +_override_ + + + +##### [signOut](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md)() FutureOrResult<void> + + + +Signs out the current user. +It also clears the cache and the associated data. +_override_ + + + +##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Creates a new user with the provided email and password. +_override_ + + + +##### [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. +_inherited_ + + + +##### [updateEmail](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Update or add email. +_override_ + + + +##### [updatePassword](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> + + + +Update or add password. +_override_ + + + +##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> + + + +Verify password reset code. +_override_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md new file mode 100644 index 00000000..5fd00e8a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md @@ -0,0 +1,69 @@ + + + +# AuthenticationRepositoryImpl<Data extends Object> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +AuthenticationRepositoryImpl<Data extends Object>({required [AuthenticationRemoteDataSource](../../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> authenticationRemoteDataSource, FormRepository? formRepository, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraSignUpInputs, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraEditAccountInputs, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customEmailValidator, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customPasswordValidator}) + + + + + +## Implementation + +```dart +AuthenticationRepositoryImpl({ + required this.authenticationRemoteDataSource, + FormRepository? formRepository, + // ignore: strict_raw_type + List? extraSignUpInputs, + // ignore: strict_raw_type + List? extraEditAccountInputs, + FormInputValidator? customEmailValidator, + FormInputValidator? customPasswordValidator, +}) { + _formRepository = formRepository ?? FormRepositoryImpl(); + + if (formRepository != null) { + return; + } + _formRepository + ..registerForm( + Forms.buildSignUpForm( + customEmailValidator, + customPasswordValidator, + extraSignUpInputs, + ), + ) + ..registerForm( + Forms.buildSignInForm( + customEmailValidator, + customPasswordValidator, + ), + ) + ..registerForm( + Forms.buildPasswordResetForm(customEmailValidator), + ) + ..registerForm( + Forms.buildEditAccountForm( + customEmailValidator, + customPasswordValidator, + extraEditAccountInputs, + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md new file mode 100644 index 00000000..24fac35a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md @@ -0,0 +1,39 @@ + + + +# addSession method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +void addSession +([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) + +_override_ + + + +

    Add a new authentication event.

    + + + +## Implementation + +```dart +@override +void addSession(SessionWrapper wrapper) => + authenticationRemoteDataSource.addSession(wrapper); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md new file mode 100644 index 00000000..c5a64a53 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md @@ -0,0 +1,33 @@ + + + +# authenticationRemoteDataSource property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationRemoteDataSource](../../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> authenticationRemoteDataSource + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationRemoteDataSource authenticationRemoteDataSource; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md new file mode 100644 index 00000000..1d7641ae --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md @@ -0,0 +1,51 @@ + + + +# confirmPasswordReset method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<void> confirmPasswordReset +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) + +_override_ + + + +

    Confirms the password reset with the provided newPassword and code.

    +

    Throws a ConfirmPasswordResetFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult confirmPasswordReset({ + required String code, + required String newPassword, +}) => + Result.tryCatchAsync( + () async { + await authenticationRemoteDataSource.confirmPasswordReset( + code: code, + newPassword: newPassword, + ); + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md new file mode 100644 index 00000000..2275ccde --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md @@ -0,0 +1,44 @@ + + + +# delete method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<void> delete +() + +_override_ + + + +

    Delete account.

    +

    Throws a DeleteAccountFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult delete() => + Result.tryCatchAsync( + () async => authenticationRemoteDataSource.delete(), + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md new file mode 100644 index 00000000..d38908fe --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md @@ -0,0 +1,41 @@ + + + +# formRepository property + + + + + *[](https://dart.dev/null-safety)* + + + + + +**Annotations** + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) +FormRepository formRepository + +_override_ + + + +

    Form repository used in different authentication cubits/blocs

    + + + +## Implementation + +```dart +@override +FormRepository get formRepository => _formRepository; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md new file mode 100644 index 00000000..251168fb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md @@ -0,0 +1,49 @@ + + + +# reauthenticate method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate +() + +_override_ + + + +

    Some security-sensitive actions—such as deleting an account, +setting a primary email address, and changing a password—require that +the user has recently signed in.

    +

    Throws a ReauthenticateFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult reauthenticate() => + Result.tryCatchAsync( + () async { + final account = await authenticationRemoteDataSource.reauthenticate(); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md new file mode 100644 index 00000000..744850b4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md @@ -0,0 +1,45 @@ + + + +# refresh method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh +() + +_override_ + + + +

    Refreshes the current user, if signed in.

    + + + +## Implementation + +```dart +@override +FutureOrResult refresh() => + Result.tryCatchAsync( + () async { + final account = await authenticationRemoteDataSource.refresh(); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md new file mode 100644 index 00000000..3b70fe5d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md @@ -0,0 +1,45 @@ + + + +# sendEmailVerification method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<void> sendEmailVerification +() + +_override_ + + + +

    Sends verification email to the account email.

    +

    Throws a SendEmailVerificationFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult sendEmailVerification() => + Result.tryCatchAsync( + () async { + await authenticationRemoteDataSource.sendEmailVerification(); + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md new file mode 100644 index 00000000..df9cbe89 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md @@ -0,0 +1,47 @@ + + + +# sendPasswordResetEmail method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<void> sendPasswordResetEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + +_override_ + + + +

    Sends a password reset email to the provided email.

    +

    Throws a SendPasswordResetEmailFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult sendPasswordResetEmail({required String email}) => + Result.tryCatchAsync( + () async { + await authenticationRemoteDataSource.sendPasswordResetEmail( + email: email, + ); + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md new file mode 100644 index 00000000..33cab460 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md @@ -0,0 +1,39 @@ + + + +# sessionStream method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream +() + +_override_ + + + +

    Authentication state change event stream.

    + + + +## Implementation + +```dart +@override +Stream> sessionStream() => + authenticationRemoteDataSource.sessionStream(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md new file mode 100644 index 00000000..8dfc8cea --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md @@ -0,0 +1,47 @@ + + + +# signInAnonymously method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously +() + +_override_ + + + +

    Sign in anonymously.

    +

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult signInAnonymously() => + Result.tryCatchAsync( + () async { + final account = + await authenticationRemoteDataSource.signInAnonymously(); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md new file mode 100644 index 00000000..a42a7bab --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md @@ -0,0 +1,54 @@ + + + +# signInWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + +_override_ + + + +

    Signs in with the provided email and password.

    +

    Throws a SignInWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult signInWithEmailAndPassword({ + required String email, + required String password, +}) => + Result.tryCatchAsync( + () async { + final account = + await authenticationRemoteDataSource.signInWithEmailAndPassword( + email: email, + password: password, + ); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md new file mode 100644 index 00000000..e6e5095d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md @@ -0,0 +1,47 @@ + + + +# signInWithGoogle method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle +() + +_override_ + + + +

    Starts the Sign In with Google Flow.

    +

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult signInWithGoogle() => + Result.tryCatchAsync( + () async { + final account = + await authenticationRemoteDataSource.signInWithGoogle(); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md new file mode 100644 index 00000000..5b83c76a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md @@ -0,0 +1,45 @@ + + + +# signOut method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<void> signOut +() + +_override_ + + + +

    Signs out the current user. +It also clears the cache and the associated data.

    + + + +## Implementation + +```dart +@override +FutureOrResult signOut() => + Result.tryCatchAsync( + () async { + await authenticationRemoteDataSource.signOut(); + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md new file mode 100644 index 00000000..5a0ce347 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md @@ -0,0 +1,55 @@ + + + +# signUpWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + +_override_ + + + +

    Creates a new user with the provided email and password.

    +

    Returns the newly created user's unique identifier.

    +

    Throws a SignUpWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult signUpWithEmailAndPassword({ + required String email, + required String password, +}) => + Result.tryCatchAsync( + () async { + final account = + await authenticationRemoteDataSource.signUpWithEmailAndPassword( + email: email, + password: password, + ); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md new file mode 100644 index 00000000..89647f63 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md @@ -0,0 +1,48 @@ + + + +# updateEmail method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) + +_override_ + + + +

    Update or add email.

    +

    Throws a UpdateEmailFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult updateEmail({required String email}) => + Result.tryCatchAsync( + () async { + final account = + await authenticationRemoteDataSource.updateEmail(email: email); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md new file mode 100644 index 00000000..3e839532 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md @@ -0,0 +1,49 @@ + + + +# updatePassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) + +_override_ + + + +

    Update or add password.

    +

    Throws a UpdatePasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult updatePassword({required String password}) => + Result.tryCatchAsync( + () async { + final account = await authenticationRemoteDataSource.updatePassword( + password: password, + ); + return account; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md new file mode 100644 index 00000000..6a2eae13 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md @@ -0,0 +1,47 @@ + + + +# verifyPasswordResetCode method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode +({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) + +_override_ + + + +

    Verify password reset code.

    +

    Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +@override +FutureOrResult verifyPasswordResetCode({required String code}) => + Result.tryCatchAsync( + () async { + final response = await authenticationRemoteDataSource + .verifyPasswordResetCode(code: code); + return response; + }, + (error) => error, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState-class.md new file mode 100644 index 00000000..8b0c36ea --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState-class.md @@ -0,0 +1,150 @@ + + + +# AuthenticationState<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + + + + +**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) +- AuthenticationState + + + + + + + + +## Constructors + +[AuthenticationState.authenticated](../wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md) ([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> sessionWrapper) + + _const_ + +[AuthenticationState.unauthenticated](../wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md) () + + _const_ + +[AuthenticationState.unknown](../wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md) () + + _const_ + + +## Properties + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/AuthenticationState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [status](../wyatt_authentication_bloc/AuthenticationState/status.md) → [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) + + + + +_final_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationState/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyoverride_ + + + +##### [wrapper](../wyatt_authentication_bloc/AuthenticationState/wrapper.md) → [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? + + + + +_final_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md new file mode 100644 index 00000000..d9f91abf --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md @@ -0,0 +1,34 @@ + + + +# AuthenticationState<Data>.authenticated constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +AuthenticationState<Data>.authenticated([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> sessionWrapper) + + + + + +## Implementation + +```dart +const AuthenticationState.authenticated(SessionWrapper sessionWrapper) + : this._( + AuthenticationStatus.authenticated, + sessionWrapper, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md new file mode 100644 index 00000000..e2bddab6 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md @@ -0,0 +1,31 @@ + + + +# AuthenticationState<Data>.unauthenticated constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +AuthenticationState<Data>.unauthenticated() + + + + + +## Implementation + +```dart +const AuthenticationState.unauthenticated() + : this._(AuthenticationStatus.unauthenticated, null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md new file mode 100644 index 00000000..09ff10d9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md @@ -0,0 +1,31 @@ + + + +# AuthenticationState<Data>.unknown constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +AuthenticationState<Data>.unknown() + + + + + +## Implementation + +```dart +const AuthenticationState.unknown() + : this._(AuthenticationStatus.unknown, null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/props.md new file mode 100644 index 00000000..908ab81c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [status, wrapper]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/status.md new file mode 100644 index 00000000..40efc5ec --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/status.md @@ -0,0 +1,33 @@ + + + +# status property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationStatus](../../wyatt_authentication_bloc/AuthenticationStatus.md) status + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationStatus status; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/stringify.md new file mode 100644 index 00000000..d226dc33 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/stringify.md @@ -0,0 +1,47 @@ + + + +# stringify property + + + + + *[](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 + +_override_ + + + +

    If set to true, the toString method will be overridden to output +this instance's props.

    +

    A global default value for stringify can be set using +EquatableConfig.stringify.

    +

    If this instance's stringify is set to null, the value of +EquatableConfig.stringify will be used instead. This defaults to +false.

    + + + +## Implementation + +```dart +@override +bool? get stringify => true; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/wrapper.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/wrapper.md new file mode 100644 index 00000000..cab7f3c8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/wrapper.md @@ -0,0 +1,33 @@ + + + +# wrapper property + + + + + *[](https://dart.dev/null-safety)* + + + +[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? wrapper + +_final_ + + + + + + +## Implementation + +```dart +final SessionWrapper? wrapper; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus.md new file mode 100644 index 00000000..2e76c5aa --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus.md @@ -0,0 +1,151 @@ + + + +# AuthenticationStatus enum + + + + + *[](https://dart.dev/null-safety)* + + + +

    Different authentication status

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [Enum](https://api.flutter.dev/flutter/dart-core/Enum-class.html) +- AuthenticationStatus + + + + + + +## Constructors + +[AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md) () + + _const_ + + +## Values + +##### [unknown](../wyatt_authentication_bloc/AuthenticationStatus.md) const [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) + + + +

    At the application launch.

    + + + + +##### [authenticated](../wyatt_authentication_bloc/AuthenticationStatus.md) const [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) + + + +

    When the user is logged

    + + + + +##### [unauthenticated](../wyatt_authentication_bloc/AuthenticationStatus.md) const [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) + + + +

    When the user is not logged

    + + + + + +## Properties + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [index](https://api.flutter.dev/flutter/dart-core/Enum/index.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +A numeric identifier for the enumerated value. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + +## Constants + +##### [values](../wyatt_authentication_bloc/AuthenticationStatus/values-constant.md) const [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md)> + + + +A constant List of the values in this enum, in order of their declaration. + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md new file mode 100644 index 00000000..be2e4631 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md @@ -0,0 +1,25 @@ + + + +# AuthenticationStatus constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +AuthenticationStatus() + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/values-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/values-constant.md new file mode 100644 index 00000000..9639a71a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/values-constant.md @@ -0,0 +1,29 @@ + + + +# values constant + + + + + *[](https://dart.dev/null-safety)* + + + +[List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[AuthenticationStatus](../../wyatt_authentication_bloc/AuthenticationStatus.md)> const values + + + + + +

    A constant List of the values in this enum, in order of their declaration.

    + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit-class.md new file mode 100644 index 00000000..a1d6b8f8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit-class.md @@ -0,0 +1,261 @@ + + + +# BaseEditAccountCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Abstract edit account cubit useful for implementing a cubit with fine +granularity by adding only the required mixins.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> +- BaseEditAccountCubit + + + +**Implementers** + +- [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md) + + + + + +## Constructors + +[BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_final_ + + + +##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-only_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository + + + + +_read-only_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md new file mode 100644 index 00000000..8f85be67 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md @@ -0,0 +1,37 @@ + + + +# BaseEditAccountCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +BaseEditAccountCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +BaseEditAccountCubit({ + required this.authenticationRepository, +}) : super( + EditAccountState( + form: authenticationRepository.formRepository + .accessForm(AuthFormName.signInForm), + ), + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md new file mode 100644 index 00000000..32cdfa2a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md @@ -0,0 +1,33 @@ + + + +# authenticationRepository property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationRepository authenticationRepository; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md new file mode 100644 index 00000000..1748061e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md @@ -0,0 +1,53 @@ + + + +# dataChanged<Value> method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged +<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) + + + + + + + + +## Implementation + +```dart +@override +FutureOr dataChanged( + String key, + FormInputValidator dirtyValue, +) { + final form = formRepository.accessForm(formName).clone(); + + try { + form.updateValidator(key, dirtyValue); + formRepository.updateForm(form); + } catch (e) { + rethrow; + } + + emit( + EditAccountState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formName.md new file mode 100644 index 00000000..3196e650 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formName.md @@ -0,0 +1,40 @@ + + + +# formName property + + + + + *[](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) formName + + + + + + + + +## Implementation + +```dart +@override +String get formName => AuthFormName.signInForm; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md new file mode 100644 index 00000000..db8665dd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md @@ -0,0 +1,36 @@ + + + +# formRepository property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormRepository formRepository + + + + + + + + +## Implementation + +```dart +FormRepository get formRepository => authenticationRepository.formRepository; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/reset.md new file mode 100644 index 00000000..5344b5c4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/reset.md @@ -0,0 +1,43 @@ + + + +# reset method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr reset() { + final form = state.form.reset(); + formRepository.updateForm(form); + emit( + EditAccountState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/submit.md new file mode 100644 index 00000000..4ae4a062 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/submit.md @@ -0,0 +1,48 @@ + + + +# submit method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr submit() async { + final WyattForm form = formRepository.accessForm(formName); + const error = '`submit()` is not implemented for BaseEditAccountCubit, ' + 'please use `updateEmail()` or `updatePassword()`.'; + emit( + EditAccountState( + form: form, + errorMessage: error, + status: FormStatus.submissionFailure, + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/update.md new file mode 100644 index 00000000..f0bb65a1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/update.md @@ -0,0 +1,48 @@ + + + +# update method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update +(WyattForm form, {SetOperation operation = SetOperation.replace}) + + + + + + + + +## Implementation + +```dart +@override +FutureOr update( + WyattForm form, { + SetOperation operation = SetOperation.replace, +}) { + final WyattForm current = formRepository.accessForm(formName).clone(); + final WyattForm newForm = operation.operation.call(current, form); + formRepository.updateForm(newForm); + + emit( + EditAccountState(form: newForm, status: newForm.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/validate.md new file mode 100644 index 00000000..73e17324 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/validate.md @@ -0,0 +1,42 @@ + + + +# validate method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr validate() { + final WyattForm form = formRepository.accessForm(formName); + emit( + EditAccountState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit-class.md new file mode 100644 index 00000000..d56382ff --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit-class.md @@ -0,0 +1,261 @@ + + + +# BaseSignInCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Abstract sign in cubit useful for implementing a cubit with fine +granularity by adding only the required mixins.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> +- BaseSignInCubit + + + +**Implementers** + +- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) + + + + + +## Constructors + +[BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_final_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-only_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository + + + + +_read-only_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md new file mode 100644 index 00000000..11cb730f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md @@ -0,0 +1,37 @@ + + + +# BaseSignInCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +BaseSignInCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +BaseSignInCubit({ + required this.authenticationRepository, +}) : super( + SignInState( + form: authenticationRepository.formRepository + .accessForm(AuthFormName.signInForm), + ), + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md new file mode 100644 index 00000000..32cdfa2a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md @@ -0,0 +1,33 @@ + + + +# authenticationRepository property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationRepository authenticationRepository; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md new file mode 100644 index 00000000..2c85a80b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md @@ -0,0 +1,53 @@ + + + +# dataChanged<Value> method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged +<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) + + + + + + + + +## Implementation + +```dart +@override +FutureOr dataChanged( + String key, + FormInputValidator dirtyValue, +) { + final form = formRepository.accessForm(formName).clone(); + + try { + form.updateValidator(key, dirtyValue); + formRepository.updateForm(form); + } catch (e) { + rethrow; + } + + emit( + SignInState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formName.md new file mode 100644 index 00000000..3196e650 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formName.md @@ -0,0 +1,40 @@ + + + +# formName property + + + + + *[](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) formName + + + + + + + + +## Implementation + +```dart +@override +String get formName => AuthFormName.signInForm; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formRepository.md new file mode 100644 index 00000000..db8665dd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formRepository.md @@ -0,0 +1,36 @@ + + + +# formRepository property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormRepository formRepository + + + + + + + + +## Implementation + +```dart +FormRepository get formRepository => authenticationRepository.formRepository; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/reset.md new file mode 100644 index 00000000..5d78a829 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/reset.md @@ -0,0 +1,43 @@ + + + +# reset method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr reset() { + final form = state.form.reset(); + formRepository.updateForm(form); + emit( + SignInState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/submit.md new file mode 100644 index 00000000..69de04c2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/submit.md @@ -0,0 +1,48 @@ + + + +# submit method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr submit() async { + final WyattForm form = formRepository.accessForm(formName); + const error = '`submit()` is not implemented for BaseSignInCubit, ' + 'please use `signUpWithEmailAndPassword()`.'; + emit( + SignInState( + form: form, + errorMessage: error, + status: FormStatus.submissionFailure, + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/update.md new file mode 100644 index 00000000..d37c336c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/update.md @@ -0,0 +1,48 @@ + + + +# update method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update +(WyattForm form, {SetOperation operation = SetOperation.replace}) + + + + + + + + +## Implementation + +```dart +@override +FutureOr update( + WyattForm form, { + SetOperation operation = SetOperation.replace, +}) { + final WyattForm current = formRepository.accessForm(formName).clone(); + final WyattForm newForm = operation.operation.call(current, form); + formRepository.updateForm(newForm); + + emit( + SignInState(form: newForm, status: newForm.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/validate.md new file mode 100644 index 00000000..8dbc20d1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/validate.md @@ -0,0 +1,42 @@ + + + +# validate method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr validate() { + final WyattForm form = formRepository.accessForm(formName); + emit( + SignInState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit-class.md new file mode 100644 index 00000000..4bf08947 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit-class.md @@ -0,0 +1,261 @@ + + + +# BaseSignUpCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Abstract sign up cubit useful for implementing a cubit with fine +granularity by adding only the required mixins.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> +- BaseSignUpCubit + + + +**Implementers** + +- [SignUpCubit](../wyatt_authentication_bloc/SignUpCubit-class.md) + + + + + +## Constructors + +[BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_final_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignUpCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-only_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md) → FormRepository + + + + +_read-only_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/BaseSignUpCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [submit](../wyatt_authentication_bloc/BaseSignUpCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignUpCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [validate](../wyatt_authentication_bloc/BaseSignUpCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md new file mode 100644 index 00000000..00958987 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md @@ -0,0 +1,37 @@ + + + +# BaseSignUpCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +BaseSignUpCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +BaseSignUpCubit({ + required this.authenticationRepository, +}) : super( + SignUpState( + form: authenticationRepository.formRepository + .accessForm(AuthFormName.signUpForm), + ), + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md new file mode 100644 index 00000000..32cdfa2a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md @@ -0,0 +1,33 @@ + + + +# authenticationRepository property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationRepository authenticationRepository; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md new file mode 100644 index 00000000..8583e9da --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md @@ -0,0 +1,53 @@ + + + +# dataChanged<Value> method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged +<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) + + + + + + + + +## Implementation + +```dart +@override +FutureOr dataChanged( + String key, + FormInputValidator dirtyValue, +) { + final form = formRepository.accessForm(formName).clone(); + + try { + form.updateValidator(key, dirtyValue); + formRepository.updateForm(form); + } catch (e) { + rethrow; + } + + emit( + SignUpState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formName.md new file mode 100644 index 00000000..f79689dd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formName.md @@ -0,0 +1,40 @@ + + + +# formName property + + + + + *[](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) formName + + + + + + + + +## Implementation + +```dart +@override +String get formName => AuthFormName.signUpForm; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md new file mode 100644 index 00000000..db8665dd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md @@ -0,0 +1,36 @@ + + + +# formRepository property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormRepository formRepository + + + + + + + + +## Implementation + +```dart +FormRepository get formRepository => authenticationRepository.formRepository; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/reset.md new file mode 100644 index 00000000..621867ee --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/reset.md @@ -0,0 +1,43 @@ + + + +# reset method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr reset() { + final form = state.form.reset(); + formRepository.updateForm(form); + emit( + SignUpState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/submit.md new file mode 100644 index 00000000..b9699be7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/submit.md @@ -0,0 +1,49 @@ + + + +# submit method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr submit() async { + final WyattForm form = formRepository.accessForm(formName); + const error = '`submit()` is not implemented for BaseSignUpCubit, ' + 'please use `signUpWithEmailAndPassword()`.'; + emit( + SignUpState( + form: form, + errorMessage: error, + status: FormStatus.submissionFailure, + ), + ); + throw UnimplementedError(error); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/update.md new file mode 100644 index 00000000..9cd644a4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/update.md @@ -0,0 +1,51 @@ + + + +# update method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update +(WyattForm form, {SetOperation operation = SetOperation.replace}) + + + + + + + + +## Implementation + +```dart +@override +FutureOr update( + WyattForm form, { + SetOperation operation = SetOperation.replace, +}) { + final WyattForm current = formRepository.accessForm(formName).clone(); + final WyattForm newForm = operation.operation.call(current, form); + formRepository.updateForm(newForm); + + emit( + SignUpState( + form: newForm, + status: newForm.validate(), + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/validate.md new file mode 100644 index 00000000..1eeceb04 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/validate.md @@ -0,0 +1,42 @@ + + + +# validate method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr validate() { + final WyattForm form = formRepository.accessForm(formName); + emit( + SignUpState(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension.md new file mode 100644 index 00000000..6ee49aa0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension.md @@ -0,0 +1,76 @@ + + + +# BuildContextExtension extension +on [BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) + + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Extension that helps to quickly access useful resources like wrapper, +session, account or data.

    + + + + + + +## Methods + +##### [account](../wyatt_authentication_bloc/BuildContextExtension/account.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() [Account](../wyatt_authentication_bloc/Account-class.md)? + + + +Returns account + + + + +##### [data](../wyatt_authentication_bloc/BuildContextExtension/data.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() Data? + + + +Returns associated data + + + + +##### [session](../wyatt_authentication_bloc/BuildContextExtension/session.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() [Session](../wyatt_authentication_bloc/Session-class.md)<Data>? + + + +Returns session + + + + +##### [wrapper](../wyatt_authentication_bloc/BuildContextExtension/wrapper.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? + + + +Returns session wrapper + + + + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/account.md new file mode 100644 index 00000000..d0f51a1f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/account.md @@ -0,0 +1,37 @@ + + + +# account<T extends AuthenticationCubit<Data>, Data> method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Account](../../wyatt_authentication_bloc/Account-class.md)? account +<T extends AuthenticationCubit<Data>, Data>() + + + + + +

    Returns account

    + + + +## Implementation + +```dart +Account? account, Data>() => + watch().currentSession()?.session?.account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/data.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/data.md new file mode 100644 index 00000000..1958e209 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/data.md @@ -0,0 +1,37 @@ + + + +# data<T extends AuthenticationCubit<Data>, Data> method + + + + + *[](https://dart.dev/null-safety)* + + + + +Data? data +<T extends AuthenticationCubit<Data>, Data>() + + + + + +

    Returns associated data

    + + + +## Implementation + +```dart +Data? data, Data>() => + watch().currentSession()?.session?.data; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/session.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/session.md new file mode 100644 index 00000000..2d5d16b1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/session.md @@ -0,0 +1,37 @@ + + + +# session<T extends AuthenticationCubit<Data>, Data> method + + + + + *[](https://dart.dev/null-safety)* + + + + +[Session](../../wyatt_authentication_bloc/Session-class.md)<Data>? session +<T extends AuthenticationCubit<Data>, Data>() + + + + + +

    Returns session

    + + + +## Implementation + +```dart +Session? session, Data>() => + watch().currentSession()?.session; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/wrapper.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/wrapper.md new file mode 100644 index 00000000..edeb2c9e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/wrapper.md @@ -0,0 +1,37 @@ + + + +# wrapper<T extends AuthenticationCubit<Data>, Data> method + + + + + *[](https://dart.dev/null-safety)* + + + + +[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? wrapper +<T extends AuthenticationCubit<Data>, Data>() + + + + + +

    Returns session wrapper

    + + + +## Implementation + +```dart +SessionWrapper? wrapper, Data>() => + watch().currentSession(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md new file mode 100644 index 00000000..a9608f3c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# ConfirmPasswordResetFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password reset process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md) +- ConfirmPasswordResetFailureFirebase + + + + + + + + +## Constructors + +[ConfirmPasswordResetFailureFirebase](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.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]) + + + +[ConfirmPasswordResetFailureFirebase.fromCode](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md new file mode 100644 index 00000000..4d51aa2d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# ConfirmPasswordResetFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ConfirmPasswordResetFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +ConfirmPasswordResetFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md new file mode 100644 index 00000000..97e8c31a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# ConfirmPasswordResetFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ConfirmPasswordResetFailureFirebase([[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 +ConfirmPasswordResetFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md new file mode 100644 index 00000000..29578d9c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# ConfirmPasswordResetFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password reset process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- ConfirmPasswordResetFailureInterface + + + +**Implementers** + +- [ConfirmPasswordResetFailureFirebase](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md) + + + + + +## Constructors + +[ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.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 during the password reset process if a failure occurs. + +[ConfirmPasswordResetFailureInterface.fromCode](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the password reset process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md new file mode 100644 index 00000000..c0177f60 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# ConfirmPasswordResetFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ConfirmPasswordResetFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the password reset process if a failure occurs.

    + + + +## Implementation + +```dart +ConfirmPasswordResetFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md new file mode 100644 index 00000000..585e23fc --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md @@ -0,0 +1,31 @@ + + + +# ConfirmPasswordResetFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ConfirmPasswordResetFailureInterface([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 during the password reset process if a failure occurs.

    + + + +## Implementation + +```dart +ConfirmPasswordResetFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine-class.md new file mode 100644 index 00000000..8d140161 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine-class.md @@ -0,0 +1,139 @@ + + + +# CustomRoutine<R, Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Calls on each cubit action of this package.

    +

    Useful to register custom logic on pre-implemented logic.

    + + + + +## Constructors + +[CustomRoutine](../wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md) ({required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> routine(), required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> attachedLogic(Result<R, AppException> routineResult), required void onError(AppException exception), required void onSuccess(R result, Data? data)}) + + _const_ + + +## Properties + +##### [attachedLogic](../wyatt_authentication_bloc/CustomRoutine/attachedLogic.md) → [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> Function(Result<R, AppException> routineResult) + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [onError](../wyatt_authentication_bloc/CustomRoutine/onError.md) → void Function(AppException exception) + + + + +_final_ + + + +##### [onSuccess](../wyatt_authentication_bloc/CustomRoutine/onSuccess.md) → void Function(R result, Data? data) + + + + +_final_ + + + +##### [routine](../wyatt_authentication_bloc/CustomRoutine/routine.md) → [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> Function() + + + + +_final_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [call](../wyatt_authentication_bloc/CustomRoutine/call.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic + + + +Invoked when a non-existent method or property is accessed. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md new file mode 100644 index 00000000..4e771554 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md @@ -0,0 +1,35 @@ + + + +# CustomRoutine<R, Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +CustomRoutine<R, Data>({required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> routine(), required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> attachedLogic(Result<R, AppException> routineResult), required void onError(AppException exception), required void onSuccess(R result, Data? data)}) + + + + + +## Implementation + +```dart +const CustomRoutine({ + required this.routine, + required this.attachedLogic, + required this.onError, + required this.onSuccess, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/attachedLogic.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/attachedLogic.md new file mode 100644 index 00000000..0486eb86 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/attachedLogic.md @@ -0,0 +1,35 @@ + + + +# attachedLogic property + + + + + *[](https://dart.dev/null-safety)* + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> Function(Result<R, AppException> routineResult) attachedLogic + +_final_ + + + + + + +## Implementation + +```dart +final FutureOr> Function( + Result routineResult, +) attachedLogic; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/call.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/call.md new file mode 100644 index 00000000..a03b3b8b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/call.md @@ -0,0 +1,55 @@ + + + +# call method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> call +() + + + + + + + + +## Implementation + +```dart +FutureOr call() async { + final result = await routine.call(); + + // Call custom logic + final customRoutineResult = await attachedLogic.call(result); + + // Check for errors + if (result.isErr) { + onError.call(result.err!); + + return; + } + if (customRoutineResult.isErr) { + onError.call(customRoutineResult.err!); + + return; + } + + // If no error + return onSuccess.call(result.ok as R, customRoutineResult.ok); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onError.md new file mode 100644 index 00000000..540b3834 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onError.md @@ -0,0 +1,33 @@ + + + +# onError property + + + + + *[](https://dart.dev/null-safety)* + + + +void Function(AppException exception) onError + +_final_ + + + + + + +## Implementation + +```dart +final void Function(AppException exception) onError; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onSuccess.md new file mode 100644 index 00000000..0232c8c7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onSuccess.md @@ -0,0 +1,33 @@ + + + +# onSuccess property + + + + + *[](https://dart.dev/null-safety)* + + + +void Function(R result, Data? data) onSuccess + +_final_ + + + + + + +## Implementation + +```dart +final void Function(R result, Data? data) onSuccess; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/routine.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/routine.md new file mode 100644 index 00000000..9359edea --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/routine.md @@ -0,0 +1,33 @@ + + + +# routine property + + + + + *[](https://dart.dev/null-safety)* + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> Function() routine + +_final_ + + + + + + +## Implementation + +```dart +final FutureOr> Function() routine; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md new file mode 100644 index 00000000..b7283c93 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# DeleteAccountFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the account deletion if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md) +- DeleteAccountFailureFirebase + + + + + + + + +## Constructors + +[DeleteAccountFailureFirebase](../wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.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]) + + + +[DeleteAccountFailureFirebase.fromCode](../wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md new file mode 100644 index 00000000..8c43e144 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md @@ -0,0 +1,39 @@ + + + +# DeleteAccountFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +DeleteAccountFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +DeleteAccountFailureFirebase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md new file mode 100644 index 00000000..e9be7130 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# DeleteAccountFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +DeleteAccountFailureFirebase([[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 +DeleteAccountFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md new file mode 100644 index 00000000..78a6a6f7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# DeleteAccountFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the account deletion if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- DeleteAccountFailureInterface + + + +**Implementers** + +- [DeleteAccountFailureFirebase](../wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md) + + + + + +## Constructors + +[DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.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) + + + +[DeleteAccountFailureInterface.fromCode](../wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md new file mode 100644 index 00000000..7e18dc37 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md @@ -0,0 +1,30 @@ + + + +# DeleteAccountFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +DeleteAccountFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +DeleteAccountFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md new file mode 100644 index 00000000..09759d9d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md @@ -0,0 +1,30 @@ + + + +# DeleteAccountFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +DeleteAccountFailureInterface([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 +DeleteAccountFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent-class.md new file mode 100644 index 00000000..9ada8b22 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent-class.md @@ -0,0 +1,126 @@ + + + +# DeletedEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user deleted his account.

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- DeletedEvent + + + + + + + + +## Constructors + +[DeletedEvent](../wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md) () + + _const_ + + +## Properties + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md new file mode 100644 index 00000000..3d031272 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md @@ -0,0 +1,30 @@ + + + +# DeletedEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +DeletedEvent() + + + + + +## Implementation + +```dart +const DeletedEvent(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit-class.md new file mode 100644 index 00000000..34e20299 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit-class.md @@ -0,0 +1,335 @@ + + + +# EditAccountCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Fully featured edit account cubit.

    +

    Sufficient in most cases. (Where fine granularity is not required.)

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> +- [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> +- EditAccountCubit + + +**Mixed in types** + +- [UpdateEmail](../wyatt_authentication_bloc/UpdateEmail-mixin.md)<Data> +- [UpdatePassword](../wyatt_authentication_bloc/UpdatePassword-mixin.md)<Data> + + + + + + +## Constructors + +[EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emailChanged](../wyatt_authentication_bloc/UpdateEmail/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + +_inherited_ + + + +##### [emailCustomChanged](../wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as emailChanged but with a custom Validator. +_inherited_ + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onEmailUpdated](../wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when user updates his email +_override_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onPasswordUpdated](../wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user edits his password. +_override_ + + + +##### [passwordChanged](../wyatt_authentication_bloc/UpdatePassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + +_inherited_ + + + +##### [passwordCustomChanged](../wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as passwordChanged but with a custom Validator. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [updateEmail](../wyatt_authentication_bloc/UpdateEmail/updateEmail.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Update or add email. +_inherited_ + + + +##### [updatePassword](../wyatt_authentication_bloc/UpdatePassword/updatePassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Update or add password. +_inherited_ + + + +##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md new file mode 100644 index 00000000..801c095c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md @@ -0,0 +1,30 @@ + + + +# EditAccountCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +EditAccountCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +EditAccountCubit({required super.authenticationRepository}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md new file mode 100644 index 00000000..bc18c4b1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md @@ -0,0 +1,42 @@ + + + +# onEmailUpdated method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<Data?> onEmailUpdated +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + +_override_ + + + +

    This callback is triggered when user updates his email

    + + + +## Implementation + +```dart +@override +FutureOrResult onEmailUpdated( + Result result, + WyattForm form, +) => + const Ok(null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md new file mode 100644 index 00000000..c506f486 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md @@ -0,0 +1,42 @@ + + + +# onPasswordUpdated method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<Data?> onPasswordUpdated +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + +_override_ + + + +

    This callback is triggered when a user edits his password.

    + + + +## Implementation + +```dart +@override +FutureOrResult onPasswordUpdated( + Result result, + WyattForm form, +) => + const Ok(null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener-class.md new file mode 100644 index 00000000..a6da474c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener-class.md @@ -0,0 +1,236 @@ + + + +# EditAccountListener<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Widget that listens and builds a child based on the state of +the edit account cubit

    + + + +**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) +- EditAccountListener + + + + + + + + +## Constructors + +[EditAccountListener](../wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + _const_ + + +## Properties + +##### [child](../wyatt_authentication_bloc/EditAccountListener/child.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) + + + + +_final_ + + + +##### [customBuilder](../wyatt_authentication_bloc/EditAccountListener/customBuilder.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state)?) + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? + + + +Controls how one widget replaces another widget in the tree. +_finalinherited_ + + + +##### [onError](../wyatt_authentication_bloc/EditAccountListener/onError.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) + + + + +_final_ + + + +##### [onProgress](../wyatt_authentication_bloc/EditAccountListener/onProgress.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) + + + + +_final_ + + + +##### [onSuccess](../wyatt_authentication_bloc/EditAccountListener/onSuccess.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) + + + + +_final_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [build](../wyatt_authentication_bloc/EditAccountListener/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. +_override_ + + + +##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) + + + +Creates a StatelessElement to manage this widget's location in the tree. +_inherited_ + + + +##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> + + + +Returns a list of DiagnosticsNode objects describing this node's +children. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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 DiagnosticsNode.toStringDeep. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md new file mode 100644 index 00000000..ec51cd1d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md @@ -0,0 +1,37 @@ + + + +# EditAccountListener<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +EditAccountListener<Data>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../../wyatt_authentication_bloc/EditAccountState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + + + + +## Implementation + +```dart +const EditAccountListener({ + required this.child, + this.onProgress, + this.onSuccess, + this.onError, + this.customBuilder, + super.key, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/build.md new file mode 100644 index 00000000..03d55600 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/build.md @@ -0,0 +1,92 @@ + + + +# build method + + + + + *[](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) + +_override_ + + + +

    Describes the part of the user interface represented by this widget.

    +

    The framework calls this method when this widget is inserted into the tree +in a given BuildContext and when the dependencies of this widget change +(e.g., an InheritedWidget 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.

    +

    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 Widget.canUpdate.

    +

    Typically implementations return a newly created constellation of widgets +that are configured with information from this widget's constructor and +from the given BuildContext.

    +

    The given BuildContext 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 BuildContext +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.

    +

    The implementation of this method must only depend on:

    + +

    If a widget's build method is to depend on anything else, use a +StatefulWidget instead.

    +

    See also:

    +
      +
    • StatelessWidget, which contains the discussion on performance considerations.
    • +
    + + + +## Implementation + +```dart +@override +Widget build(BuildContext context) => + BlocListener, EditAccountState>( + listener: (context, state) { + if (customBuilder != null) { + return customBuilder!(context, state); + } + + if (onSuccess != null && + state.status == FormStatus.submissionSuccess) { + return onSuccess!(context); + } + if (onProgress != null && + state.status == FormStatus.submissionInProgress) { + return onProgress!(context); + } + if (onError != null && + (state.status == FormStatus.submissionCanceled || + state.status == FormStatus.submissionFailure)) { + return onError!(context, state.status, state.errorMessage); + } + }, + child: child, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/child.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/child.md new file mode 100644 index 00000000..53bc3682 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/child.md @@ -0,0 +1,33 @@ + + + +# child property + + + + + *[](https://dart.dev/null-safety)* + + + +[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child + +_final_ + + + + + + +## Implementation + +```dart +final Widget child; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/customBuilder.md new file mode 100644 index 00000000..a8d52a8d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/customBuilder.md @@ -0,0 +1,34 @@ + + + +# customBuilder property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../../wyatt_authentication_bloc/EditAccountState-class.md) state)?) customBuilder + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context, EditAccountState state)? + customBuilder; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onError.md new file mode 100644 index 00000000..ed94a98f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onError.md @@ -0,0 +1,37 @@ + + + +# onError property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) onError + +_final_ + + + + + + +## Implementation + +```dart +final void Function( + BuildContext context, + FormStatus status, + String? errorMessage, +)? onError; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onProgress.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onProgress.md new file mode 100644 index 00000000..4a30ed71 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onProgress.md @@ -0,0 +1,33 @@ + + + +# onProgress property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onProgress + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context)? onProgress; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onSuccess.md new file mode 100644 index 00000000..4d942f63 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onSuccess.md @@ -0,0 +1,33 @@ + + + +# onSuccess property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onSuccess + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context)? onSuccess; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState-class.md new file mode 100644 index 00000000..9c7250d8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState-class.md @@ -0,0 +1,179 @@ + + + +# EditAccountState class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Edit account cubit state to manage the form.

    + + + +**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) +- EditAccountState + + + + + + + + +## Constructors + +[EditAccountState](../wyatt_authentication_bloc/EditAccountState/EditAccountState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + _const_ + + +## Properties + +##### [email](../wyatt_authentication_bloc/EditAccountState/email.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> + + + + +_read-only_ + + + +##### [errorMessage](../wyatt_authentication_bloc/EditAccountState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Optional error message. +_finalinherited_ + + + +##### [form](../wyatt_authentication_bloc/EditAccountState/form.md) → WyattForm + + + +FormData with all inputs, and associated metadata. +_finalinherited_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [password](../wyatt_authentication_bloc/EditAccountState/password.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> + + + + +_read-only_ + + + +##### [props](../wyatt_authentication_bloc/EditAccountState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-only_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [status](../wyatt_authentication_bloc/EditAccountState/status.md) → FormStatus + + + +Global status of a form. +_finalinherited_ + + + +##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## Methods + +##### [copyWith](../wyatt_authentication_bloc/EditAccountState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) + + + + + + + + +##### [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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/EditAccountState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_override_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/EditAccountState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/EditAccountState.md new file mode 100644 index 00000000..b8145411 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/EditAccountState.md @@ -0,0 +1,34 @@ + + + +# EditAccountState constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +EditAccountState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + +## Implementation + +```dart +const EditAccountState({ + required super.form, + super.status = FormStatus.pure, + super.errorMessage, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/copyWith.md new file mode 100644 index 00000000..aed8958b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/copyWith.md @@ -0,0 +1,44 @@ + + + +# copyWith method + + + + + *[](https://dart.dev/null-safety)* + + + + +[EditAccountState](../../wyatt_authentication_bloc/EditAccountState-class.md) copyWith +({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + + + + +## Implementation + +```dart +EditAccountState copyWith({ + WyattForm? form, + FormStatus? status, + String? errorMessage, +}) => + EditAccountState( + form: form ?? this.form, + status: status ?? this.status, + errorMessage: errorMessage ?? this.errorMessage, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/email.md new file mode 100644 index 00000000..1ded8043 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/email.md @@ -0,0 +1,37 @@ + + + +# email property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> email + + + + + + + + +## Implementation + +```dart +FormInputValidator get email => + form.validatorOf(AuthFormField.email); +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/errorMessage.md new file mode 100644 index 00000000..d0856deb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/errorMessage.md @@ -0,0 +1,34 @@ + + + +# errorMessage property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage + +_finalinherited_ + + + +

    Optional error message.

    + + + +## Implementation + +```dart +final String? errorMessage; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/form.md new file mode 100644 index 00000000..d3f2da76 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/form.md @@ -0,0 +1,34 @@ + + + +# form property + + + + + *[](https://dart.dev/null-safety)* + + + +WyattForm form + +_finalinherited_ + + + +

    FormData with all inputs, and associated metadata.

    + + + +## Implementation + +```dart +final WyattForm form; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/password.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/password.md new file mode 100644 index 00000000..77938106 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/password.md @@ -0,0 +1,37 @@ + + + +# password property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> password + + + + + + + + +## Implementation + +```dart +FormInputValidator get password => + form.validatorOf(AuthFormField.password); +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/props.md new file mode 100644 index 00000000..eab8d26c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> props + + + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [email, password, status]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/status.md new file mode 100644 index 00000000..644a9f10 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/status.md @@ -0,0 +1,34 @@ + + + +# status property + + + + + *[](https://dart.dev/null-safety)* + + + +FormStatus status + +_finalinherited_ + + + +

    Global status of a form.

    + + + +## Implementation + +```dart +final FormStatus status; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/toString.md new file mode 100644 index 00000000..3a837f4e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/toString.md @@ -0,0 +1,48 @@ + + + +# toString method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString +() + +_override_ + + + +

    A string representation of this object.

    +

    Some classes have a default textual representation, +often paired with a static parse function (like int.parse). +These classes will provide the textual representation as +their string representation.

    +

    Other classes have no meaningful textual representation +that a program will care about. +Such classes will typically override toString to provide +useful information when inspecting the object, +mainly for debugging or logging.

    + + + +## Implementation + +```dart +@override +String toString() => 'EditAccountState(status: ${status.name} ' + '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder-class.md new file mode 100644 index 00000000..5692d1ab --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder-class.md @@ -0,0 +1,225 @@ + + + +# EmailVerificationBuilder<Extra> class + + + + + + + *[](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) +- EmailVerificationBuilder + + + + + + + + +## Constructors + +[EmailVerificationBuilder](../wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) verified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) notVerified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage), [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md))?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + _const_ + + +## Properties + +##### [customBuilder](../wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md) → ([Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md))?) + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? + + + +Controls how one widget replaces another widget in the tree. +_finalinherited_ + + + +##### [notVerified](../wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) + + + + +_final_ + + + +##### [onError](../wyatt_authentication_bloc/EmailVerificationBuilder/onError.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage) + + + + +_final_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [verified](../wyatt_authentication_bloc/EmailVerificationBuilder/verified.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) + + + + +_final_ + + + + + +## Methods + +##### [build](../wyatt_authentication_bloc/EmailVerificationBuilder/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. +_override_ + + + +##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) + + + +Creates a StatelessElement to manage this widget's location in the tree. +_inherited_ + + + +##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> + + + +Returns a list of DiagnosticsNode objects describing this node's +children. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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 DiagnosticsNode.toStringDeep. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md new file mode 100644 index 00000000..02f74876 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md @@ -0,0 +1,36 @@ + + + +# EmailVerificationBuilder<Extra> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +EmailVerificationBuilder<Extra>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) verified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) notVerified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage), [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EmailVerificationState](../../wyatt_authentication_bloc/EmailVerificationState-class.md))?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + + + + +## Implementation + +```dart +const EmailVerificationBuilder({ + required this.verified, + required this.notVerified, + required this.onError, + this.customBuilder, + super.key, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/build.md new file mode 100644 index 00000000..6eaf5649 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/build.md @@ -0,0 +1,91 @@ + + + +# build method + + + + + *[](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) + +_override_ + + + +

    Describes the part of the user interface represented by this widget.

    +

    The framework calls this method when this widget is inserted into the tree +in a given BuildContext and when the dependencies of this widget change +(e.g., an InheritedWidget 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.

    +

    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 Widget.canUpdate.

    +

    Typically implementations return a newly created constellation of widgets +that are configured with information from this widget's constructor and +from the given BuildContext.

    +

    The given BuildContext 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 BuildContext +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.

    +

    The implementation of this method must only depend on:

    + +

    If a widget's build method is to depend on anything else, use a +StatefulWidget instead.

    +

    See also:

    +
      +
    • StatelessWidget, which contains the discussion on performance considerations.
    • +
    + + + +## Implementation + +```dart +@override +Widget build(BuildContext context) => + BlocBuilder, EmailVerificationState>( + builder: (context, state) { + if (customBuilder != null) { + return customBuilder!(context, state); + } + + if (state.status.isSubmissionFailure || + state.status.isSubmissionCanceled) { + return onError( + context, + state.status, + state.errorMessage, + ); + } + + if (state.isVerified) { + return verified(context); + } + return notVerified(context); + }, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md new file mode 100644 index 00000000..1b238503 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md @@ -0,0 +1,34 @@ + + + +# customBuilder property + + + + + *[](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, [EmailVerificationState](../../wyatt_authentication_bloc/EmailVerificationState-class.md))?) customBuilder + +_final_ + + + + + + +## Implementation + +```dart +final Widget Function(BuildContext context, EmailVerificationState)? + customBuilder; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md new file mode 100644 index 00000000..fb67f5a1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md @@ -0,0 +1,33 @@ + + + +# notVerified property + + + + + *[](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) notVerified + +_final_ + + + + + + +## Implementation + +```dart +final Widget Function(BuildContext context) notVerified; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/onError.md new file mode 100644 index 00000000..caa029d2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/onError.md @@ -0,0 +1,37 @@ + + + +# onError property + + + + + *[](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, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage) onError + +_final_ + + + + + + +## Implementation + +```dart +final Widget Function( + BuildContext context, + FormStatus status, + String? errorMessage, +) onError; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/verified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/verified.md new file mode 100644 index 00000000..05f99c91 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/verified.md @@ -0,0 +1,33 @@ + + + +# verified property + + + + + *[](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) verified + +_final_ + + + + + + +## Implementation + +```dart +final Widget Function(BuildContext context) verified; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit-class.md new file mode 100644 index 00000000..f582d49e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit-class.md @@ -0,0 +1,211 @@ + + + +# EmailVerificationCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> +- EmailVerificationCubit + + + + + + + + +## Constructors + +[EmailVerificationCubit](../wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [checkEmailVerification](../wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [sendEmailVerification](../wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md new file mode 100644 index 00000000..4dc46616 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md @@ -0,0 +1,32 @@ + + + +# EmailVerificationCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +EmailVerificationCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +EmailVerificationCubit({ + required this.authenticationRepository, +}) : super(const EmailVerificationState()); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md new file mode 100644 index 00000000..32cdfa2a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md @@ -0,0 +1,33 @@ + + + +# authenticationRepository property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationRepository authenticationRepository; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md new file mode 100644 index 00000000..7b602aac --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md @@ -0,0 +1,65 @@ + + + +# checkEmailVerification method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> checkEmailVerification +() + + + + + + + + +## Implementation + +```dart +FutureOr checkEmailVerification() async { + emit(state.copyWith(status: FormStatus.submissionInProgress)); + + final refresh = await authenticationRepository.refresh(); + if (refresh.isErr) { + final refreshError = refresh.err!; + emit( + EmailVerificationState( + errorMessage: refreshError.message, + status: FormStatus.submissionFailure, + ), + ); + return; + } + + final wrapper = await authenticationRepository.sessionStream().last; + final currentAccount = wrapper.session?.account; + if (currentAccount != null) { + emit( + state.copyWith( + isVerified: currentAccount.emailVerified, + status: FormStatus.submissionSuccess, + ), + ); + } else { + const EmailVerificationState( + errorMessage: 'No current session', + status: FormStatus.submissionFailure, + ); + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md new file mode 100644 index 00000000..5d9d58e5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md @@ -0,0 +1,47 @@ + + + +# sendEmailVerification method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> sendEmailVerification +() + + + + + + + + +## Implementation + +```dart +FutureOr sendEmailVerification() async { + emit(state.copyWith(status: FormStatus.submissionInProgress)); + final response = await authenticationRepository.sendEmailVerification(); + emit( + response.fold( + (value) => state.copyWith(status: FormStatus.submissionSuccess), + (error) => state.copyWith( + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState-class.md new file mode 100644 index 00000000..a1a99c58 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState-class.md @@ -0,0 +1,160 @@ + + + +# EmailVerificationState class + + + + + + + *[](https://dart.dev/null-safety)* + + + + + + +**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) +- EmailVerificationState + + + + + + + + +## Constructors + +[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md) ({[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isVerified = false, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + _const_ + + +## Properties + +##### [errorMessage](../wyatt_authentication_bloc/EmailVerificationState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isVerified](../wyatt_authentication_bloc/EmailVerificationState/isVerified.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + + +_final_ + + + +##### [props](../wyatt_authentication_bloc/EmailVerificationState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [status](../wyatt_authentication_bloc/EmailVerificationState/status.md) → FormStatus + + + + +_final_ + + + +##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## Methods + +##### [copyWith](../wyatt_authentication_bloc/EmailVerificationState/copyWith.md)({FormStatus? status, [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isVerified, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) + + + + + + + + +##### [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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/EmailVerificationState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_override_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md new file mode 100644 index 00000000..2b2eec71 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md @@ -0,0 +1,34 @@ + + + +# EmailVerificationState constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +EmailVerificationState({[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isVerified = false, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + +## Implementation + +```dart +const EmailVerificationState({ + this.isVerified = false, + this.status = FormStatus.pure, + this.errorMessage, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/copyWith.md new file mode 100644 index 00000000..3828f71a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/copyWith.md @@ -0,0 +1,44 @@ + + + +# copyWith method + + + + + *[](https://dart.dev/null-safety)* + + + + +[EmailVerificationState](../../wyatt_authentication_bloc/EmailVerificationState-class.md) copyWith +({FormStatus? status, [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isVerified, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + + + + +## Implementation + +```dart +EmailVerificationState copyWith({ + FormStatus? status, + bool? isVerified, + String? errorMessage, +}) => + EmailVerificationState( + status: status ?? this.status, + isVerified: isVerified ?? this.isVerified, + errorMessage: errorMessage ?? this.errorMessage, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/errorMessage.md new file mode 100644 index 00000000..4f0a5b7f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/errorMessage.md @@ -0,0 +1,33 @@ + + + +# errorMessage property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage + +_final_ + + + + + + +## Implementation + +```dart +final String? errorMessage; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/isVerified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/isVerified.md new file mode 100644 index 00000000..5fe39d63 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/isVerified.md @@ -0,0 +1,33 @@ + + + +# isVerified property + + + + + *[](https://dart.dev/null-safety)* + + + +[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isVerified + +_final_ + + + + + + +## Implementation + +```dart +final bool isVerified; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/props.md new file mode 100644 index 00000000..60e41027 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [status, isVerified, errorMessage]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/status.md new file mode 100644 index 00000000..5623cccf --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/status.md @@ -0,0 +1,33 @@ + + + +# status property + + + + + *[](https://dart.dev/null-safety)* + + + +FormStatus status + +_final_ + + + + + + +## Implementation + +```dart +final FormStatus status; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/toString.md new file mode 100644 index 00000000..3fec7549 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/toString.md @@ -0,0 +1,49 @@ + + + +# toString method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString +() + +_override_ + + + +

    A string representation of this object.

    +

    Some classes have a default textual representation, +often paired with a static parse function (like int.parse). +These classes will provide the textual representation as +their string representation.

    +

    Other classes have no meaningful textual representation +that a program will care about. +Such classes will typically override toString to provide +useful information when inspecting the object, +mainly for debugging or logging.

    + + + +## Implementation + +```dart +@override +String toString() => 'EmailVerificationState(status: ${status.name} ' + '${(errorMessage != null) ? " [$errorMessage]" : ""}, ' + 'isVerified: $isVerified)'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md new file mode 100644 index 00000000..a97181ca --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# FetchSignInMethodsForEmailFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the fetch sign in methods if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md) +- FetchSignInMethodsForEmailFailureFirebase + + + + + + + + +## Constructors + +[FetchSignInMethodsForEmailFailureFirebase](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.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]) + + + +[FetchSignInMethodsForEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md new file mode 100644 index 00000000..3cf4d6c5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md @@ -0,0 +1,40 @@ + + + +# FetchSignInMethodsForEmailFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +FetchSignInMethodsForEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +FetchSignInMethodsForEmailFailureFirebase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'The email address is badly formatted.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md new file mode 100644 index 00000000..4a74506c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# FetchSignInMethodsForEmailFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +FetchSignInMethodsForEmailFailureFirebase([[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 +FetchSignInMethodsForEmailFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md new file mode 100644 index 00000000..5986c599 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# FetchSignInMethodsForEmailFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the fetch sign in methods if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- FetchSignInMethodsForEmailFailureInterface + + + +**Implementers** + +- [FetchSignInMethodsForEmailFailureFirebase](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md) + + + + + +## Constructors + +[FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.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 during the fetch sign in methods if a failure occurs. + +[FetchSignInMethodsForEmailFailureInterface.fromCode](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the fetch sign in methods if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md new file mode 100644 index 00000000..846ff49a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md @@ -0,0 +1,32 @@ + + + +# FetchSignInMethodsForEmailFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +FetchSignInMethodsForEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the fetch sign in methods if a failure occurs.

    + + + +## Implementation + +```dart +FetchSignInMethodsForEmailFailureInterface.fromCode(super.code) + : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md new file mode 100644 index 00000000..b38af41e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md @@ -0,0 +1,31 @@ + + + +# FetchSignInMethodsForEmailFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +FetchSignInMethodsForEmailFailureInterface([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 during the fetch sign in methods if a failure occurs.

    + + + +## Implementation + +```dart +FetchSignInMethodsForEmailFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md new file mode 100644 index 00000000..60876e96 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# ModelParsingFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the model parsing process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface-class.md) +- ModelParsingFailureFirebase + + + + + + + + +## Constructors + +[ModelParsingFailureFirebase](../wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.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]) + + + +[ModelParsingFailureFirebase.fromCode](../wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md new file mode 100644 index 00000000..0e9ae35c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# ModelParsingFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ModelParsingFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +ModelParsingFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md new file mode 100644 index 00000000..51b77521 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# ModelParsingFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ModelParsingFailureFirebase([[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 +ModelParsingFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface-class.md new file mode 100644 index 00000000..d8e2dead --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# ModelParsingFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the model parsing process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- ModelParsingFailureInterface + + + +**Implementers** + +- [ModelParsingFailureFirebase](../wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md) + + + + + +## Constructors + +[ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.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) + + + +[ModelParsingFailureInterface.fromCode](../wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md new file mode 100644 index 00000000..055991cb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md @@ -0,0 +1,30 @@ + + + +# ModelParsingFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ModelParsingFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +ModelParsingFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md new file mode 100644 index 00000000..473c347a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md @@ -0,0 +1,30 @@ + + + +# ModelParsingFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ModelParsingFailureInterface([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 +ModelParsingFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit-class.md new file mode 100644 index 00000000..350b635e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit-class.md @@ -0,0 +1,275 @@ + + + +# PasswordResetCubit<Extra> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Cubit that allows user to reset his password

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> +- PasswordResetCubit + + + + + + + + +## Constructors + +[PasswordResetCubit](../wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> + + + + +_final_ + + + +##### [formName](../wyatt_authentication_bloc/PasswordResetCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-only_ + + + +##### [formRepository](../wyatt_authentication_bloc/PasswordResetCubit/formRepository.md) → FormRepository + + + + +_read-only_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [emailChanged](../wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + + + + + +##### [emailCustomChanged](../wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as emailChanged but with a custom Validator. + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/PasswordResetCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [submit](../wyatt_authentication_bloc/PasswordResetCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Sends a password reset email to the user + + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/PasswordResetCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + +##### [validate](../wyatt_authentication_bloc/PasswordResetCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + + + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md new file mode 100644 index 00000000..71d64822 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md @@ -0,0 +1,37 @@ + + + +# PasswordResetCubit<Extra> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +PasswordResetCubit<Extra>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> authenticationRepository}) + + + + + +## Implementation + +```dart +PasswordResetCubit({ + required this.authenticationRepository, +}) : super( + PasswordResetState( + form: authenticationRepository.formRepository + .accessForm(AuthFormName.passwordResetForm), + ), + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md new file mode 100644 index 00000000..1662ceda --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md @@ -0,0 +1,33 @@ + + + +# authenticationRepository property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> authenticationRepository + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationRepository authenticationRepository; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md new file mode 100644 index 00000000..c62e9718 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md @@ -0,0 +1,53 @@ + + + +# dataChanged<Value> method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged +<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) + + + + + + + + +## Implementation + +```dart +@override +FutureOr dataChanged( + String key, + FormInputValidator dirtyValue, +) { + final form = formRepository.accessForm(formName).clone(); + + try { + form.updateValidator(key, dirtyValue); + formRepository.updateForm(form); + } catch (e) { + rethrow; + } + + emit( + state.copyWith(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md new file mode 100644 index 00000000..85e7cc16 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md @@ -0,0 +1,47 @@ + + + +# emailChanged method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailChanged +([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) + + + + + + + + +## Implementation + +```dart +void emailChanged(String value) { + final emailValidatorType = formRepository + .accessForm(formName) + .validatorOf(AuthFormField.email) + .runtimeType; + assert( + emailValidatorType == Email, + 'Use emailCustomChanged(...) with validator $emailValidatorType', + ); + + final Email email = Email.dirty(value); + dataChanged(AuthFormField.email, email); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md new file mode 100644 index 00000000..fa9c4c14 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md @@ -0,0 +1,42 @@ + + + +# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailCustomChanged +<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) + + + + + +

    Same as emailChanged but with a custom Validator.

    +

    Sort of short hand for dataChanged.

    + + + +## Implementation + +```dart +void emailCustomChanged< + Validator extends FormInputValidator>( + Validator validator, +) { + dataChanged(AuthFormField.email, validator); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formName.md new file mode 100644 index 00000000..0e18d674 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formName.md @@ -0,0 +1,40 @@ + + + +# formName property + + + + + *[](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) formName + + + + + + + + +## Implementation + +```dart +@override +String get formName => AuthFormName.passwordResetForm; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formRepository.md new file mode 100644 index 00000000..db8665dd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formRepository.md @@ -0,0 +1,36 @@ + + + +# formRepository property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormRepository formRepository + + + + + + + + +## Implementation + +```dart +FormRepository get formRepository => authenticationRepository.formRepository; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/reset.md new file mode 100644 index 00000000..199755fa --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/reset.md @@ -0,0 +1,43 @@ + + + +# reset method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr reset() { + final form = state.form.reset(); + formRepository.updateForm(form); + emit( + state.copyWith(form: form, status: form.validate()), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/submit.md new file mode 100644 index 00000000..31bfedc7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/submit.md @@ -0,0 +1,70 @@ + + + +# submit method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit +() + + + + + +

    Sends a password reset email to the user

    + + + +## Implementation + +```dart +@override +FutureOr submit() async { + if (!state.status.isValidated) { + return; + } + + emit(state.copyWith(status: FormStatus.submissionInProgress)); + + final form = formRepository.accessForm(formName); + final email = form.valueOf(AuthFormField.email); + + if (email.isNullOrEmpty) { + emit( + state.copyWith( + errorMessage: 'An error occured while retrieving data from the form.', + status: FormStatus.submissionFailure, + ), + ); + } + + final response = await authenticationRepository.sendPasswordResetEmail( + email: email!, + ); + + emit( + response.fold( + (value) => state.copyWith(status: FormStatus.submissionSuccess), + (error) => state.copyWith( + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/update.md new file mode 100644 index 00000000..23388fad --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/update.md @@ -0,0 +1,51 @@ + + + +# update method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update +(WyattForm form, {SetOperation operation = SetOperation.replace}) + + + + + + + + +## Implementation + +```dart +@override +FutureOr update( + WyattForm form, { + SetOperation operation = SetOperation.replace, +}) { + final WyattForm current = formRepository.accessForm(formName).clone(); + final WyattForm newForm = operation.operation.call(current, form); + formRepository.updateForm(newForm); + + emit( + state.copyWith( + form: newForm, + status: newForm.validate(), + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/validate.md new file mode 100644 index 00000000..5a8e5519 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/validate.md @@ -0,0 +1,43 @@ + + + +# validate method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate +() + + + + + + + + +## Implementation + +```dart +@override +FutureOr validate() { + emit( + state.copyWith( + status: formRepository.accessForm(formName).validate(), + ), + ); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState-class.md new file mode 100644 index 00000000..757a9170 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState-class.md @@ -0,0 +1,169 @@ + + + +# PasswordResetState class + + + + + + + *[](https://dart.dev/null-safety)* + + + + + + +**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) +- PasswordResetState + + + + + + + + +## Constructors + +[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + _const_ + + +## Properties + +##### [email](../wyatt_authentication_bloc/PasswordResetState/email.md) → Email + + + + +_read-only_ + + + +##### [errorMessage](../wyatt_authentication_bloc/PasswordResetState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Optional error message. +_finalinherited_ + + + +##### [form](../wyatt_authentication_bloc/PasswordResetState/form.md) → WyattForm + + + +FormData with all inputs, and associated metadata. +_finalinherited_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/PasswordResetState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-only_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [status](../wyatt_authentication_bloc/PasswordResetState/status.md) → FormStatus + + + +Global status of a form. +_finalinherited_ + + + +##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## Methods + +##### [copyWith](../wyatt_authentication_bloc/PasswordResetState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) + + + + + + + + +##### [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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/PasswordResetState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_override_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md new file mode 100644 index 00000000..c6d8f5cf --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md @@ -0,0 +1,34 @@ + + + +# PasswordResetState constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +PasswordResetState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + +## Implementation + +```dart +const PasswordResetState({ + required super.form, + super.status = FormStatus.pure, + super.errorMessage, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/copyWith.md new file mode 100644 index 00000000..60199cc6 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/copyWith.md @@ -0,0 +1,44 @@ + + + +# copyWith method + + + + + *[](https://dart.dev/null-safety)* + + + + +[PasswordResetState](../../wyatt_authentication_bloc/PasswordResetState-class.md) copyWith +({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + + + + +## Implementation + +```dart +PasswordResetState copyWith({ + WyattForm? form, + FormStatus? status, + String? errorMessage, +}) => + PasswordResetState( + form: form ?? this.form, + status: status ?? this.status, + errorMessage: errorMessage ?? this.errorMessage, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/email.md new file mode 100644 index 00000000..0e3a2fc7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/email.md @@ -0,0 +1,36 @@ + + + +# email property + + + + + *[](https://dart.dev/null-safety)* + + + + + +Email email + + + + + + + + +## Implementation + +```dart +Email get email => form.validatorOf(AuthFormField.email); +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/errorMessage.md new file mode 100644 index 00000000..d0856deb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/errorMessage.md @@ -0,0 +1,34 @@ + + + +# errorMessage property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage + +_finalinherited_ + + + +

    Optional error message.

    + + + +## Implementation + +```dart +final String? errorMessage; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/form.md new file mode 100644 index 00000000..d3f2da76 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/form.md @@ -0,0 +1,34 @@ + + + +# form property + + + + + *[](https://dart.dev/null-safety)* + + + +WyattForm form + +_finalinherited_ + + + +

    FormData with all inputs, and associated metadata.

    + + + +## Implementation + +```dart +final WyattForm form; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/props.md new file mode 100644 index 00000000..4665a84e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> props + + + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [email, status]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/status.md new file mode 100644 index 00000000..644a9f10 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/status.md @@ -0,0 +1,34 @@ + + + +# status property + + + + + *[](https://dart.dev/null-safety)* + + + +FormStatus status + +_finalinherited_ + + + +

    Global status of a form.

    + + + +## Implementation + +```dart +final FormStatus status; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/toString.md new file mode 100644 index 00000000..d40bc441 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/toString.md @@ -0,0 +1,48 @@ + + + +# toString method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString +() + +_override_ + + + +

    A string representation of this object.

    +

    Some classes have a default textual representation, +often paired with a static parse function (like int.parse). +These classes will provide the textual representation as +their string representation.

    +

    Other classes have no meaningful textual representation +that a program will care about. +Such classes will typically override toString to provide +useful information when inspecting the object, +mainly for debugging or logging.

    + + + +## Implementation + +```dart +@override +String toString() => 'PasswordResetState(status: ${status.name} ' + '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md new file mode 100644 index 00000000..527e46f4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# ReauthenticateFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the reauthentication process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md) +- ReauthenticateFailureFirebase + + + + + + + + +## Constructors + +[ReauthenticateFailureFirebase](../wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.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]) + + + +[ReauthenticateFailureFirebase.fromCode](../wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md new file mode 100644 index 00000000..6ad6eccc --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md @@ -0,0 +1,57 @@ + + + +# ReauthenticateFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ReauthenticateFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +ReauthenticateFailureFirebase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'user-mismatch': + msg = 'Given credential does not correspond to the user.'; + break; + case 'user-not-found': + msg = 'User is not found, please create an account.'; + break; + case 'invalid-credential': + msg = 'The credential received is malformed or has expired.'; + break; + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + case 'invalid-verification-code': + msg = 'The credential verification code received is invalid.'; + break; + case 'invalid-verification-id': + msg = 'The credential verification ID received is invalid.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md new file mode 100644 index 00000000..e386d710 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# ReauthenticateFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ReauthenticateFailureFirebase([[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 +ReauthenticateFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md new file mode 100644 index 00000000..7c36e2c0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# ReauthenticateFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the reauthentication process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- ReauthenticateFailureInterface + + + +**Implementers** + +- [ReauthenticateFailureFirebase](../wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md) + + + + + +## Constructors + +[ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.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) + + + +[ReauthenticateFailureInterface.fromCode](../wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md new file mode 100644 index 00000000..c8d73b99 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md @@ -0,0 +1,30 @@ + + + +# ReauthenticateFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ReauthenticateFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +ReauthenticateFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md new file mode 100644 index 00000000..511d8024 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md @@ -0,0 +1,30 @@ + + + +# ReauthenticateFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +ReauthenticateFailureInterface([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 +ReauthenticateFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent-class.md new file mode 100644 index 00000000..1184c6f3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent-class.md @@ -0,0 +1,137 @@ + + + +# ReauthenticatedEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user re-authenticates (from the logged in state to the +logged in state with a different and fresh access +token and a different login time)

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- ReauthenticatedEvent + + + + + + + + +## Constructors + +[ReauthenticatedEvent](../wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) + + _const_ + + +## Properties + +##### [account](../wyatt_authentication_bloc/ReauthenticatedEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/ReauthenticatedEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md new file mode 100644 index 00000000..3b8ba4c3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md @@ -0,0 +1,30 @@ + + + +# ReauthenticatedEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +ReauthenticatedEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) + + + + + +## Implementation + +```dart +const ReauthenticatedEvent({required this.account}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/account.md new file mode 100644 index 00000000..671e197e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/account.md @@ -0,0 +1,33 @@ + + + +# account property + + + + + *[](https://dart.dev/null-safety)* + + + +[Account](../../wyatt_authentication_bloc/Account-class.md) account + +_final_ + + + + + + +## Implementation + +```dart +final Account account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/props.md new file mode 100644 index 00000000..fbde09d1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [account]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase-class.md new file mode 100644 index 00000000..32cdc623 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# RefreshFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the refresh process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface-class.md) +- RefreshFailureFirebase + + + + + + + + +## Constructors + +[RefreshFailureFirebase](../wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.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]) + + + +[RefreshFailureFirebase.fromCode](../wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md new file mode 100644 index 00000000..4b2cce16 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# RefreshFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +RefreshFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +RefreshFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md new file mode 100644 index 00000000..4ac4faee --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# RefreshFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +RefreshFailureFirebase([[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 +RefreshFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface-class.md new file mode 100644 index 00000000..f485f140 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# RefreshFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the refresh process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- RefreshFailureInterface + + + +**Implementers** + +- [RefreshFailureFirebase](../wyatt_authentication_bloc/RefreshFailureFirebase-class.md) + + + + + +## Constructors + +[RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.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 during the refresh process if a failure occurs. + +[RefreshFailureInterface.fromCode](../wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the refresh process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md new file mode 100644 index 00000000..33b4dace --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# RefreshFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +RefreshFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the refresh process if a failure occurs.

    + + + +## Implementation + +```dart +RefreshFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md new file mode 100644 index 00000000..a958f830 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md @@ -0,0 +1,31 @@ + + + +# RefreshFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +RefreshFailureInterface([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 during the refresh process if a failure occurs.

    + + + +## Implementation + +```dart +RefreshFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent-class.md new file mode 100644 index 00000000..bdca95f0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent-class.md @@ -0,0 +1,136 @@ + + + +# RefreshedEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user access token is refreshed (from the logged in state to the +logged in state with a different access token)

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- RefreshedEvent + + + + + + + + +## Constructors + +[RefreshedEvent](../wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) + + _const_ + + +## Properties + +##### [account](../wyatt_authentication_bloc/RefreshedEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/RefreshedEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md new file mode 100644 index 00000000..7317339e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md @@ -0,0 +1,30 @@ + + + +# RefreshedEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +RefreshedEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) + + + + + +## Implementation + +```dart +const RefreshedEvent({required this.account}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/account.md new file mode 100644 index 00000000..671e197e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/account.md @@ -0,0 +1,33 @@ + + + +# account property + + + + + *[](https://dart.dev/null-safety)* + + + +[Account](../../wyatt_authentication_bloc/Account-class.md) account + +_final_ + + + + + + +## Implementation + +```dart +final Account account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/props.md new file mode 100644 index 00000000..fbde09d1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [account]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md new file mode 100644 index 00000000..813d225c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SendEmailVerificationFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the email verification process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md) +- SendEmailVerificationFailureFirebase + + + + + + + + +## Constructors + +[SendEmailVerificationFailureFirebase](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.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]) + + + +[SendEmailVerificationFailureFirebase.fromCode](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md new file mode 100644 index 00000000..51531fd7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SendEmailVerificationFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendEmailVerificationFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SendEmailVerificationFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md new file mode 100644 index 00000000..e1f740ba --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SendEmailVerificationFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendEmailVerificationFailureFirebase([[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 +SendEmailVerificationFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md new file mode 100644 index 00000000..42fff498 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SendEmailVerificationFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the email verification process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SendEmailVerificationFailureInterface + + + +**Implementers** + +- [SendEmailVerificationFailureFirebase](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md) + + + + + +## Constructors + +[SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.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 during the email verification process if a failure occurs. + +[SendEmailVerificationFailureInterface.fromCode](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the email verification process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md new file mode 100644 index 00000000..26acc0c1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SendEmailVerificationFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendEmailVerificationFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the email verification process if a failure occurs.

    + + + +## Implementation + +```dart +SendEmailVerificationFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md new file mode 100644 index 00000000..aeda1679 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SendEmailVerificationFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendEmailVerificationFailureInterface([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 during the email verification process if a failure occurs.

    + + + +## Implementation + +```dart +SendEmailVerificationFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md new file mode 100644 index 00000000..55b4b215 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SendPasswordResetEmailFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password reset process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md) +- SendPasswordResetEmailFailureFirebase + + + + + + + + +## Constructors + +[SendPasswordResetEmailFailureFirebase](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.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]) + + + +[SendPasswordResetEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md new file mode 100644 index 00000000..7b002359 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SendPasswordResetEmailFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendPasswordResetEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SendPasswordResetEmailFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md new file mode 100644 index 00000000..e2fdbeab --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SendPasswordResetEmailFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendPasswordResetEmailFailureFirebase([[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 +SendPasswordResetEmailFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md new file mode 100644 index 00000000..6473ac89 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SendPasswordResetEmailFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password reset process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SendPasswordResetEmailFailureInterface + + + +**Implementers** + +- [SendPasswordResetEmailFailureFirebase](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md) + + + + + +## Constructors + +[SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.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 during the password reset process if a failure occurs. + +[SendPasswordResetEmailFailureInterface.fromCode](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the password reset process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md new file mode 100644 index 00000000..039bd78b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md @@ -0,0 +1,32 @@ + + + +# SendPasswordResetEmailFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendPasswordResetEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the password reset process if a failure occurs.

    + + + +## Implementation + +```dart +SendPasswordResetEmailFailureInterface.fromCode(super.code) + : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md new file mode 100644 index 00000000..cec0a974 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SendPasswordResetEmailFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendPasswordResetEmailFailureInterface([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 during the password reset process if a failure occurs.

    + + + +## Implementation + +```dart +SendPasswordResetEmailFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md new file mode 100644 index 00000000..b487ad39 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SendSignInLinkEmailFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in link process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md) +- SendSignInLinkEmailFailureFirebase + + + + + + + + +## Constructors + +[SendSignInLinkEmailFailureFirebase](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.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]) + + + +[SendSignInLinkEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md new file mode 100644 index 00000000..11ea5805 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SendSignInLinkEmailFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendSignInLinkEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SendSignInLinkEmailFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md new file mode 100644 index 00000000..27c3a9b9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SendSignInLinkEmailFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendSignInLinkEmailFailureFirebase([[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 +SendSignInLinkEmailFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md new file mode 100644 index 00000000..b1887411 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SendSignInLinkEmailFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in link process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SendSignInLinkEmailFailureInterface + + + +**Implementers** + +- [SendSignInLinkEmailFailureFirebase](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md) + + + + + +## Constructors + +[SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.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 during the sign in link process if a failure occurs. + +[SendSignInLinkEmailFailureInterface.fromCode](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in link process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md new file mode 100644 index 00000000..6e8ab76a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SendSignInLinkEmailFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendSignInLinkEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in link process if a failure occurs.

    + + + +## Implementation + +```dart +SendSignInLinkEmailFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md new file mode 100644 index 00000000..eba02b41 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SendSignInLinkEmailFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SendSignInLinkEmailFailureInterface([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 during the sign in link process if a failure occurs.

    + + + +## Implementation + +```dart +SendSignInLinkEmailFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session-class.md new file mode 100644 index 00000000..29cc3040 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session-class.md @@ -0,0 +1,144 @@ + + + +# Session<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    The Session object is used to transport and propagate +the connected user Account and personalized Data in the application.

    + + + +**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) +- Session + + + + + + + + +## Constructors + +[Session](../wyatt_authentication_bloc/Session/Session.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account, Data? data}) + + _const_ + + +## Properties + +##### [account](../wyatt_authentication_bloc/Session/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) + + + + +_final_ + + + +##### [data](../wyatt_authentication_bloc/Session/data.md) → Data? + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/Session/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/Session/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyoverride_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/Session.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/Session.md new file mode 100644 index 00000000..f8c9a635 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/Session.md @@ -0,0 +1,33 @@ + + + +# Session<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +Session<Data>({required [Account](../../wyatt_authentication_bloc/Account-class.md) account, Data? data}) + + + + + +## Implementation + +```dart +const Session({ + required this.account, + this.data, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/account.md new file mode 100644 index 00000000..671e197e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/account.md @@ -0,0 +1,33 @@ + + + +# account property + + + + + *[](https://dart.dev/null-safety)* + + + +[Account](../../wyatt_authentication_bloc/Account-class.md) account + +_final_ + + + + + + +## Implementation + +```dart +final Account account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/data.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/data.md new file mode 100644 index 00000000..b95c07e1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/data.md @@ -0,0 +1,33 @@ + + + +# data property + + + + + *[](https://dart.dev/null-safety)* + + + +Data? data + +_final_ + + + + + + +## Implementation + +```dart +final Data? data; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/props.md new file mode 100644 index 00000000..5246eb8f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [account, data]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/stringify.md new file mode 100644 index 00000000..c2fc4fca --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/stringify.md @@ -0,0 +1,47 @@ + + + +# stringify property + + + + + *[](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 + +_override_ + + + +

    If set to true, the toString method will be overridden to output +this instance's props.

    +

    A global default value for stringify can be set using +EquatableConfig.stringify.

    +

    If this instance's stringify is set to null, the value of +EquatableConfig.stringify will be used instead. This defaults to +false.

    + + + +## Implementation + +```dart +@override +bool? get stringify => true; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper-class.md new file mode 100644 index 00000000..dd0d4a9d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper-class.md @@ -0,0 +1,144 @@ + + + +# SessionWrapper<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Contains the AuthenticationChangeEvent initiating the state +change and the current Session.

    + + + +**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) +- SessionWrapper + + + + + + + + +## Constructors + +[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md) ({required [AuthenticationChangeEvent](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) event, [Session](../wyatt_authentication_bloc/Session-class.md)<Data>? session}) + + _const_ + + +## Properties + +##### [event](../wyatt_authentication_bloc/SessionWrapper/event.md) → [AuthenticationChangeEvent](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/SessionWrapper/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [session](../wyatt_authentication_bloc/SessionWrapper/session.md) → [Session](../wyatt_authentication_bloc/Session-class.md)<Data>? + + + + +_final_ + + + +##### [stringify](../wyatt_authentication_bloc/SessionWrapper/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyoverride_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md new file mode 100644 index 00000000..d26a9969 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md @@ -0,0 +1,33 @@ + + + +# SessionWrapper<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SessionWrapper<Data>({required [AuthenticationChangeEvent](../../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) event, [Session](../../wyatt_authentication_bloc/Session-class.md)<Data>? session}) + + + + + +## Implementation + +```dart +const SessionWrapper({ + required this.event, + this.session, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/event.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/event.md new file mode 100644 index 00000000..a1e5da09 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/event.md @@ -0,0 +1,33 @@ + + + +# event property + + + + + *[](https://dart.dev/null-safety)* + + + +[AuthenticationChangeEvent](../../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) event + +_final_ + + + + + + +## Implementation + +```dart +final AuthenticationChangeEvent event; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/props.md new file mode 100644 index 00000000..318648ca --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [event, session]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/session.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/session.md new file mode 100644 index 00000000..a713c2af --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/session.md @@ -0,0 +1,33 @@ + + + +# session property + + + + + *[](https://dart.dev/null-safety)* + + + +[Session](../../wyatt_authentication_bloc/Session-class.md)<Data>? session + +_final_ + + + + + + +## Implementation + +```dart +final Session? session; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/stringify.md new file mode 100644 index 00000000..4fe942de --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/stringify.md @@ -0,0 +1,47 @@ + + + +# stringify property + + + + + *[](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 + +_override_ + + + +

    If set to true, the toString method will be overridden to output +this instance's props.

    +

    A global default value for stringify can be set using +EquatableConfig.stringify.

    +

    If this instance's stringify is set to null, the value of +EquatableConfig.stringify will be used instead. This defaults to +false.

    + + + +## Implementation + +```dart +@override +bool get stringify => true; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously-mixin.md new file mode 100644 index 00000000..3dd086b7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously-mixin.md @@ -0,0 +1,269 @@ + + + +# SignInAnonymously<Data> mixin + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Sign in mixin.

    +

    Allows the user to sign in anonymously

    +

    Gives access to the signInAnonymously method and +onSignInAnonymously callback.

    + + +**Superclass Constraints** + +- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> + + + + +**Mixin Applications** + +- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onSignInAnonymously](../wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user signs in anonymously. + + + + +##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [signInAnonymously](../wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Sign in anonymously. + + + + +##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md new file mode 100644 index 00000000..fa83d0b9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md @@ -0,0 +1,39 @@ + + + +# onSignInAnonymously method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onSignInAnonymously +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + + + + + +

    This callback is triggered when a user signs in anonymously.

    + + + +## Implementation + +```dart +FutureOrResult onSignInAnonymously( + Result result, + WyattForm form, +); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md new file mode 100644 index 00000000..0c21eeb5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md @@ -0,0 +1,79 @@ + + + +# signInAnonymously method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signInAnonymously +() + + + + + +

    Sign in anonymously.

    +

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOr signInAnonymously() async { + if (state.status.isSubmissionInProgress) { + return; + } + + final form = formRepository.accessForm(formName); + emit(SignInState(form: form, status: FormStatus.submissionInProgress)); + + return CustomRoutine( + routine: authenticationRepository.signInAnonymously, + attachedLogic: (routineResult) => onSignInAnonymously( + routineResult, + form, + ), + onError: (error) { + emit( + SignInState( + form: form, + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ); + addError(error); + }, + onSuccess: (account, data) { + authenticationRepository.addSession( + SessionWrapper( + event: SignedInEvent(account: account), + session: Session( + account: account, + data: data, + ), + ), + ); + emit( + SignInState( + form: form, + status: FormStatus.submissionSuccess, + ), + ); + }, + ).call(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md new file mode 100644 index 00000000..23458a20 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SignInAnonymouslyFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md) +- SignInAnonymouslyFailureFirebase + + + + + + + + +## Constructors + +[SignInAnonymouslyFailureFirebase](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.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]) + + + +[SignInAnonymouslyFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md new file mode 100644 index 00000000..7edb701d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md @@ -0,0 +1,40 @@ + + + +# SignInAnonymouslyFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInAnonymouslyFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInAnonymouslyFailureFirebase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md new file mode 100644 index 00000000..3125f39a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SignInAnonymouslyFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInAnonymouslyFailureFirebase([[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 +SignInAnonymouslyFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md new file mode 100644 index 00000000..df9dd187 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignInAnonymouslyFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInAnonymouslyFailureInterface + + + +**Implementers** + +- [SignInAnonymouslyFailureFirebase](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md) + + + + + +## Constructors + +[SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.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 during the sign in process if a failure occurs. + +[SignInAnonymouslyFailureInterface.fromCode](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md new file mode 100644 index 00000000..13e4bd31 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignInAnonymouslyFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInAnonymouslyFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInAnonymouslyFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md new file mode 100644 index 00000000..54eeaeb0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInAnonymouslyFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInAnonymouslyFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInAnonymouslyFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit-class.md new file mode 100644 index 00000000..638a83a7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit-class.md @@ -0,0 +1,354 @@ + + + +# SignInCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Fully featured sign in cubit.

    +

    Sufficient in most cases. (Where fine granularity is not required.)

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> +- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> +- SignInCubit + + +**Mixed in types** + +- [SignInAnonymously](../wyatt_authentication_bloc/SignInAnonymously-mixin.md)<Data> +- [SignInWithEmailPassword](../wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md)<Data> +- [SignInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle-mixin.md)<Data> + + + + + + +## Constructors + +[SignInCubit](../wyatt_authentication_bloc/SignInCubit/SignInCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emailChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + +_inherited_ + + + +##### [emailCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as emailChanged but with a custom Validator. +_inherited_ + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onSignInAnonymously](../wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user signs in anonymously. +_override_ + + + +##### [onSignInWithEmailAndPassword](../wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user signs in with email and password. +_override_ + + + +##### [onSignInWithGoogle](../wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user signs in with google. +_override_ + + + +##### [passwordChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + +_inherited_ + + + +##### [passwordCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as passwordChanged but with a custom Validator. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [signInAnonymously](../wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Sign in anonymously. +_inherited_ + + + +##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Signs in with the provided email and password. +_inherited_ + + + +##### [signInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Starts the Sign In with Google Flow. +_inherited_ + + + +##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/SignInCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/SignInCubit.md new file mode 100644 index 00000000..f2a52155 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/SignInCubit.md @@ -0,0 +1,30 @@ + + + +# SignInCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +SignInCubit({required super.authenticationRepository}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md new file mode 100644 index 00000000..034b1e38 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md @@ -0,0 +1,42 @@ + + + +# onSignInAnonymously method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<Data?> onSignInAnonymously +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + +_override_ + + + +

    This callback is triggered when a user signs in anonymously.

    + + + +## Implementation + +```dart +@override +FutureOrResult onSignInAnonymously( + Result result, + WyattForm form, +) => + const Ok(null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md new file mode 100644 index 00000000..53132dae --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md @@ -0,0 +1,42 @@ + + + +# onSignInWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<Data?> onSignInWithEmailAndPassword +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + +_override_ + + + +

    This callback is triggered when a user signs in with email and password.

    + + + +## Implementation + +```dart +@override +FutureOrResult onSignInWithEmailAndPassword( + Result result, + WyattForm form, +) => + const Ok(null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md new file mode 100644 index 00000000..19904a99 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md @@ -0,0 +1,42 @@ + + + +# onSignInWithGoogle method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<Data?> onSignInWithGoogle +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + +_override_ + + + +

    This callback is triggered when a user signs in with google.

    + + + +## Implementation + +```dart +@override +FutureOrResult onSignInWithGoogle( + Result result, + WyattForm form, +) => + const Ok(null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener-class.md new file mode 100644 index 00000000..f048a063 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener-class.md @@ -0,0 +1,236 @@ + + + +# SignInListener<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Widget that listens and builds a child based on the state of +the sign in cubit

    + + + +**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) +- SignInListener + + + + + + + + +## Constructors + +[SignInListener](../wyatt_authentication_bloc/SignInListener/SignInListener.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../wyatt_authentication_bloc/SignInState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + _const_ + + +## Properties + +##### [child](../wyatt_authentication_bloc/SignInListener/child.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) + + + + +_final_ + + + +##### [customBuilder](../wyatt_authentication_bloc/SignInListener/customBuilder.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../wyatt_authentication_bloc/SignInState-class.md) state)?) + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? + + + +Controls how one widget replaces another widget in the tree. +_finalinherited_ + + + +##### [onError](../wyatt_authentication_bloc/SignInListener/onError.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) + + + + +_final_ + + + +##### [onProgress](../wyatt_authentication_bloc/SignInListener/onProgress.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) + + + + +_final_ + + + +##### [onSuccess](../wyatt_authentication_bloc/SignInListener/onSuccess.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) + + + + +_final_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [build](../wyatt_authentication_bloc/SignInListener/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. +_override_ + + + +##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) + + + +Creates a StatelessElement to manage this widget's location in the tree. +_inherited_ + + + +##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> + + + +Returns a list of DiagnosticsNode objects describing this node's +children. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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 DiagnosticsNode.toStringDeep. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/SignInListener.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/SignInListener.md new file mode 100644 index 00000000..a9cfeea1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/SignInListener.md @@ -0,0 +1,37 @@ + + + +# SignInListener<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignInListener<Data>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../../wyatt_authentication_bloc/SignInState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + + + + +## Implementation + +```dart +const SignInListener({ + required this.child, + this.onProgress, + this.onSuccess, + this.onError, + this.customBuilder, + super.key, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/build.md new file mode 100644 index 00000000..d6783753 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/build.md @@ -0,0 +1,92 @@ + + + +# build method + + + + + *[](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) + +_override_ + + + +

    Describes the part of the user interface represented by this widget.

    +

    The framework calls this method when this widget is inserted into the tree +in a given BuildContext and when the dependencies of this widget change +(e.g., an InheritedWidget 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.

    +

    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 Widget.canUpdate.

    +

    Typically implementations return a newly created constellation of widgets +that are configured with information from this widget's constructor and +from the given BuildContext.

    +

    The given BuildContext 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 BuildContext +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.

    +

    The implementation of this method must only depend on:

    + +

    If a widget's build method is to depend on anything else, use a +StatefulWidget instead.

    +

    See also:

    +
      +
    • StatelessWidget, which contains the discussion on performance considerations.
    • +
    + + + +## Implementation + +```dart +@override +Widget build(BuildContext context) => + BlocListener, SignInState>( + listener: (context, state) { + if (customBuilder != null) { + return customBuilder!(context, state); + } + + if (onSuccess != null && + state.status == FormStatus.submissionSuccess) { + return onSuccess!(context); + } + if (onProgress != null && + state.status == FormStatus.submissionInProgress) { + return onProgress!(context); + } + if (onError != null && + (state.status == FormStatus.submissionCanceled || + state.status == FormStatus.submissionFailure)) { + return onError!(context, state.status, state.errorMessage); + } + }, + child: child, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/child.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/child.md new file mode 100644 index 00000000..53bc3682 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/child.md @@ -0,0 +1,33 @@ + + + +# child property + + + + + *[](https://dart.dev/null-safety)* + + + +[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child + +_final_ + + + + + + +## Implementation + +```dart +final Widget child; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/customBuilder.md new file mode 100644 index 00000000..132cb4c3 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/customBuilder.md @@ -0,0 +1,33 @@ + + + +# customBuilder property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../../wyatt_authentication_bloc/SignInState-class.md) state)?) customBuilder + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context, SignInState state)? customBuilder; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onError.md new file mode 100644 index 00000000..ed94a98f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onError.md @@ -0,0 +1,37 @@ + + + +# onError property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) onError + +_final_ + + + + + + +## Implementation + +```dart +final void Function( + BuildContext context, + FormStatus status, + String? errorMessage, +)? onError; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onProgress.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onProgress.md new file mode 100644 index 00000000..4a30ed71 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onProgress.md @@ -0,0 +1,33 @@ + + + +# onProgress property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onProgress + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context)? onProgress; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onSuccess.md new file mode 100644 index 00000000..4d942f63 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onSuccess.md @@ -0,0 +1,33 @@ + + + +# onSuccess property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onSuccess + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context)? onSuccess; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState-class.md new file mode 100644 index 00000000..efb514c4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState-class.md @@ -0,0 +1,179 @@ + + + +# SignInState class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Sign in cubit state to manage the form.

    + + + +**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) +- SignInState + + + + + + + + +## Constructors + +[SignInState](../wyatt_authentication_bloc/SignInState/SignInState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + _const_ + + +## Properties + +##### [email](../wyatt_authentication_bloc/SignInState/email.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> + + + + +_read-only_ + + + +##### [errorMessage](../wyatt_authentication_bloc/SignInState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Optional error message. +_finalinherited_ + + + +##### [form](../wyatt_authentication_bloc/SignInState/form.md) → WyattForm + + + +FormData with all inputs, and associated metadata. +_finalinherited_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [password](../wyatt_authentication_bloc/SignInState/password.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> + + + + +_read-only_ + + + +##### [props](../wyatt_authentication_bloc/SignInState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-only_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [status](../wyatt_authentication_bloc/SignInState/status.md) → FormStatus + + + +Global status of a form. +_finalinherited_ + + + +##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## Methods + +##### [copyWith](../wyatt_authentication_bloc/SignInState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [SignInState](../wyatt_authentication_bloc/SignInState-class.md) + + + + + + + + +##### [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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/SignInState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_override_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/SignInState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/SignInState.md new file mode 100644 index 00000000..648fe926 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/SignInState.md @@ -0,0 +1,34 @@ + + + +# SignInState constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignInState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + +## Implementation + +```dart +const SignInState({ + required super.form, + super.status = FormStatus.pure, + super.errorMessage, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/copyWith.md new file mode 100644 index 00000000..e6b06fe5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/copyWith.md @@ -0,0 +1,44 @@ + + + +# copyWith method + + + + + *[](https://dart.dev/null-safety)* + + + + +[SignInState](../../wyatt_authentication_bloc/SignInState-class.md) copyWith +({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + + + + +## Implementation + +```dart +SignInState copyWith({ + WyattForm? form, + FormStatus? status, + String? errorMessage, +}) => + SignInState( + form: form ?? this.form, + status: status ?? this.status, + errorMessage: errorMessage ?? this.errorMessage, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/email.md new file mode 100644 index 00000000..1ded8043 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/email.md @@ -0,0 +1,37 @@ + + + +# email property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> email + + + + + + + + +## Implementation + +```dart +FormInputValidator get email => + form.validatorOf(AuthFormField.email); +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/errorMessage.md new file mode 100644 index 00000000..d0856deb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/errorMessage.md @@ -0,0 +1,34 @@ + + + +# errorMessage property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage + +_finalinherited_ + + + +

    Optional error message.

    + + + +## Implementation + +```dart +final String? errorMessage; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/form.md new file mode 100644 index 00000000..d3f2da76 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/form.md @@ -0,0 +1,34 @@ + + + +# form property + + + + + *[](https://dart.dev/null-safety)* + + + +WyattForm form + +_finalinherited_ + + + +

    FormData with all inputs, and associated metadata.

    + + + +## Implementation + +```dart +final WyattForm form; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/password.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/password.md new file mode 100644 index 00000000..77938106 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/password.md @@ -0,0 +1,37 @@ + + + +# password property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> password + + + + + + + + +## Implementation + +```dart +FormInputValidator get password => + form.validatorOf(AuthFormField.password); +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/props.md new file mode 100644 index 00000000..eab8d26c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> props + + + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [email, password, status]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/status.md new file mode 100644 index 00000000..644a9f10 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/status.md @@ -0,0 +1,34 @@ + + + +# status property + + + + + *[](https://dart.dev/null-safety)* + + + +FormStatus status + +_finalinherited_ + + + +

    Global status of a form.

    + + + +## Implementation + +```dart +final FormStatus status; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/toString.md new file mode 100644 index 00000000..01225d4e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/toString.md @@ -0,0 +1,48 @@ + + + +# toString method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString +() + +_override_ + + + +

    A string representation of this object.

    +

    Some classes have a default textual representation, +often paired with a static parse function (like int.parse). +These classes will provide the textual representation as +their string representation.

    +

    Other classes have no meaningful textual representation +that a program will care about. +Such classes will typically override toString to provide +useful information when inspecting the object, +mainly for debugging or logging.

    + + + +## Implementation + +```dart +@override +String toString() => 'SignInState(status: ${status.name} ' + '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md new file mode 100644 index 00000000..a188c284 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md @@ -0,0 +1,141 @@ + + + +# SignInWithAppleFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) +- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) +- SignInWithAppleFailureFirebase + +**Implemented types** + +- [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) + + + + + + + +## Constructors + +[SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.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]) + + + +[SignInWithAppleFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md new file mode 100644 index 00000000..c07fe58b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SignInWithAppleFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithAppleFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInWithAppleFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md new file mode 100644 index 00000000..4aa51024 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md @@ -0,0 +1,30 @@ + + + +# SignInWithAppleFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithAppleFailureFirebase([[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 +SignInWithAppleFailureFirebase([super.code, super.msg]); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md new file mode 100644 index 00000000..7b1837ba --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md @@ -0,0 +1,140 @@ + + + +# SignInWithAppleFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInWithAppleFailureInterface + + + +**Implementers** + +- [SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md) +- [SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md) + + + + + +## Constructors + +[SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.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 during the sign in process if a failure occurs. + +[SignInWithAppleFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md new file mode 100644 index 00000000..6786f6d9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignInWithAppleFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithAppleFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithAppleFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md new file mode 100644 index 00000000..6994d8b8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInWithAppleFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithAppleFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithAppleFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md new file mode 100644 index 00000000..f9e120f8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md @@ -0,0 +1,143 @@ + + + +# SignInWithCredentialFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) +- SignInWithCredentialFailureFirebase + + + +**Implementers** + +- [SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md) +- [SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md) +- [SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md) +- [SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md) + + + + + +## Constructors + +[SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.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]) + + + +[SignInWithCredentialFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md new file mode 100644 index 00000000..d2b1deb1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md @@ -0,0 +1,61 @@ + + + +# SignInWithCredentialFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithCredentialFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInWithCredentialFailureFirebase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'account-exists-with-different-credential': + msg = 'Account exists with different credentials.'; + break; + case 'invalid-credential': + msg = 'The credential received is malformed or has expired.'; + break; + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + 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; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + case 'invalid-verification-code': + msg = 'The credential verification code received is invalid.'; + break; + case 'invalid-verification-id': + msg = 'The credential verification ID received is invalid.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md new file mode 100644 index 00000000..66f66bb9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SignInWithCredentialFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithCredentialFailureFirebase([[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 +SignInWithCredentialFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md new file mode 100644 index 00000000..08473e12 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignInWithCredentialFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInWithCredentialFailureInterface + + + +**Implementers** + +- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) + + + + + +## Constructors + +[SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.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 during the sign in process if a failure occurs. + +[SignInWithCredentialFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md new file mode 100644 index 00000000..14c794db --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignInWithCredentialFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithCredentialFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithCredentialFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md new file mode 100644 index 00000000..4030c6cd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInWithCredentialFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithCredentialFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithCredentialFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md new file mode 100644 index 00000000..5a28b107 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SignInWithEmailAndPasswordFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md) +- SignInWithEmailAndPasswordFailureFirebase + + + + + + + + +## Constructors + +[SignInWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.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]) + + + +[SignInWithEmailAndPasswordFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md new file mode 100644 index 00000000..5b9663d4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md @@ -0,0 +1,49 @@ + + + +# SignInWithEmailAndPasswordFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailAndPasswordFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInWithEmailAndPasswordFailureFirebase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + 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; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md new file mode 100644 index 00000000..42ec7079 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SignInWithEmailAndPasswordFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailAndPasswordFailureFirebase([[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 +SignInWithEmailAndPasswordFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md new file mode 100644 index 00000000..acdf3cf0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignInWithEmailAndPasswordFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInWithEmailAndPasswordFailureInterface + + + +**Implementers** + +- [SignInWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md) + + + + + +## Constructors + +[SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.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 during the sign in process if a failure occurs. + +[SignInWithEmailAndPasswordFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md new file mode 100644 index 00000000..735df785 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md @@ -0,0 +1,32 @@ + + + +# SignInWithEmailAndPasswordFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailAndPasswordFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithEmailAndPasswordFailureInterface.fromCode(super.code) + : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md new file mode 100644 index 00000000..fff1afd8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInWithEmailAndPasswordFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailAndPasswordFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithEmailAndPasswordFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md new file mode 100644 index 00000000..e2360fe9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SignInWithEmailLinkFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md) +- SignInWithEmailLinkFailureFirebase + + + + + + + + +## Constructors + +[SignInWithEmailLinkFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.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]) + + + +[SignInWithEmailLinkFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md new file mode 100644 index 00000000..a8ccdec9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md @@ -0,0 +1,46 @@ + + + +# SignInWithEmailLinkFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailLinkFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInWithEmailLinkFailureFirebase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'expired-action-code': + msg = 'Action code has expired.'; + break; + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'user-disabled': + msg = 'This user has been disabled. Please contact support for help.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md new file mode 100644 index 00000000..456995ec --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SignInWithEmailLinkFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailLinkFailureFirebase([[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 +SignInWithEmailLinkFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md new file mode 100644 index 00000000..e087037b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignInWithEmailLinkFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInWithEmailLinkFailureInterface + + + +**Implementers** + +- [SignInWithEmailLinkFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md) + + + + + +## Constructors + +[SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.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 during the sign in process if a failure occurs. + +[SignInWithEmailLinkFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md new file mode 100644 index 00000000..3d4531a9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignInWithEmailLinkFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailLinkFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithEmailLinkFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md new file mode 100644 index 00000000..73f298cb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInWithEmailLinkFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithEmailLinkFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithEmailLinkFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md new file mode 100644 index 00000000..78cf1a73 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md @@ -0,0 +1,305 @@ + + + +# SignInWithEmailPassword<Data> mixin + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Sign in mixin.

    +

    Allows the user to sign in with email and password

    +

    Gives access to the signInWithEmailAndPassword method and +onSignInWithEmailAndPassword callback.

    + + +**Superclass Constraints** + +- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> + + + + +**Mixin Applications** + +- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emailChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + + + + + +##### [emailCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as emailChanged but with a custom Validator. + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onSignInWithEmailAndPassword](../wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user signs in with email and password. + + + + +##### [passwordChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + + + + + +##### [passwordCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as passwordChanged but with a custom Validator. + + + + +##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Signs in with the provided email and password. + + + + +##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md new file mode 100644 index 00000000..85e7cc16 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md @@ -0,0 +1,47 @@ + + + +# emailChanged method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailChanged +([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) + + + + + + + + +## Implementation + +```dart +void emailChanged(String value) { + final emailValidatorType = formRepository + .accessForm(formName) + .validatorOf(AuthFormField.email) + .runtimeType; + assert( + emailValidatorType == Email, + 'Use emailCustomChanged(...) with validator $emailValidatorType', + ); + + final Email email = Email.dirty(value); + dataChanged(AuthFormField.email, email); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md new file mode 100644 index 00000000..fcb48b24 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md @@ -0,0 +1,42 @@ + + + +# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailCustomChanged +<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) + + + + + +

    Same as emailChanged but with a custom Validator.

    +

    Sort of short hand for dataChanged.

    + + + +## Implementation + +```dart +void emailCustomChanged< + Validator extends FormInputValidator>( + Validator validator, +) { + dataChanged(AuthFormField.email, validator); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md new file mode 100644 index 00000000..0a35342a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md @@ -0,0 +1,39 @@ + + + +# onSignInWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onSignInWithEmailAndPassword +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + + + + + +

    This callback is triggered when a user signs in with email and password.

    + + + +## Implementation + +```dart +FutureOrResult onSignInWithEmailAndPassword( + Result result, + WyattForm form, +); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md new file mode 100644 index 00000000..8db9fda0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md @@ -0,0 +1,46 @@ + + + +# passwordChanged method + + + + + *[](https://dart.dev/null-safety)* + + + + +void passwordChanged +([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) + + + + + + + + +## Implementation + +```dart +void passwordChanged(String value) { + final passwordValidatorType = formRepository + .accessForm(formName) + .validatorOf(AuthFormField.password) + .runtimeType; + assert( + passwordValidatorType == Password, + 'Use passwordCustomChanged(...) with validator $passwordValidatorType', + ); + final Password password = Password.dirty(value); + dataChanged(AuthFormField.password, password); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md new file mode 100644 index 00000000..cca9b5ad --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md @@ -0,0 +1,42 @@ + + + +# passwordCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method + + + + + *[](https://dart.dev/null-safety)* + + + + +void passwordCustomChanged +<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) + + + + + +

    Same as passwordChanged but with a custom Validator.

    +

    Sort of short hand for dataChanged.

    + + + +## Implementation + +```dart +void passwordCustomChanged< + Validator extends FormInputValidator>( + Validator validator, +) { + dataChanged(AuthFormField.password, validator); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md new file mode 100644 index 00000000..808606f8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md @@ -0,0 +1,105 @@ + + + +# signInWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signInWithEmailAndPassword +() + + + + + +

    Signs in with the provided email and password.

    +

    Throws a SignInWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOr signInWithEmailAndPassword() async { + if (state.status.isSubmissionInProgress) { + return; + } + + if (!state.status.isValidated) { + return; + } + + final form = formRepository.accessForm(formName); + emit( + SignInState( + form: form, + status: FormStatus.submissionInProgress, + ), + ); + + final email = form.valueOf(AuthFormField.email); + final password = form.valueOf(AuthFormField.password); + + if (email.isNullOrEmpty || password.isNullOrEmpty) { + emit( + SignInState( + form: form, + errorMessage: 'An error occured while retrieving data from the form.', + status: FormStatus.submissionFailure, + ), + ); + } + + return CustomRoutine( + routine: () => authenticationRepository.signInWithEmailAndPassword( + email: email!, + password: password!, + ), + attachedLogic: (routineResult) => onSignInWithEmailAndPassword( + routineResult, + form, + ), + onError: (error) { + emit( + SignInState( + form: form, + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ); + addError(error); + }, + onSuccess: (account, data) { + authenticationRepository.addSession( + SessionWrapper( + event: SignedInEvent(account: account), + session: Session( + account: account, + data: data, + ), + ), + ); + emit( + SignInState( + form: form, + status: FormStatus.submissionSuccess, + ), + ); + }, + ).call(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md new file mode 100644 index 00000000..f1e15f55 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md @@ -0,0 +1,141 @@ + + + +# SignInWithFacebookFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) +- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) +- SignInWithFacebookFailureFirebase + +**Implemented types** + +- [SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md) + + + + + + + +## Constructors + +[SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.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]) + + + +[SignInWithFacebookFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md new file mode 100644 index 00000000..10c11c0b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SignInWithFacebookFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithFacebookFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInWithFacebookFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md new file mode 100644 index 00000000..df7ed863 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md @@ -0,0 +1,30 @@ + + + +# SignInWithFacebookFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithFacebookFailureFirebase([[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 +SignInWithFacebookFailureFirebase([super.code, super.msg]); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md new file mode 100644 index 00000000..c0ad332f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignInWithFacebookFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInWithFacebookFailureInterface + + + +**Implementers** + +- [SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md) + + + + + +## Constructors + +[SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.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 during the sign in process if a failure occurs. + +[SignInWithFacebookFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md new file mode 100644 index 00000000..539c8a5a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignInWithFacebookFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithFacebookFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithFacebookFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md new file mode 100644 index 00000000..abace647 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInWithFacebookFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithFacebookFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithFacebookFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle-mixin.md new file mode 100644 index 00000000..ff62c2b5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle-mixin.md @@ -0,0 +1,269 @@ + + + +# SignInWithGoogle<Data> mixin + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Sign in mixin.

    +

    Allows the user to sign in with google

    +

    Gives access to the signInWithGoogle method and +onSignInWithGoogle callback.

    + + +**Superclass Constraints** + +- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> + + + + +**Mixin Applications** + +- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onSignInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user signs in with google. + + + + +##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [signInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Starts the Sign In with Google Flow. + + + + +##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md new file mode 100644 index 00000000..2f91ea65 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md @@ -0,0 +1,39 @@ + + + +# onSignInWithGoogle method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onSignInWithGoogle +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + + + + + +

    This callback is triggered when a user signs in with google.

    + + + +## Implementation + +```dart +FutureOrResult onSignInWithGoogle( + Result result, + WyattForm form, +); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md new file mode 100644 index 00000000..5f6d2741 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md @@ -0,0 +1,78 @@ + + + +# signInWithGoogle method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signInWithGoogle +() + + + + + +

    Starts the Sign In with Google Flow.

    +

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    + + + +## Implementation + +```dart +FutureOr signInWithGoogle() async { + if (state.status.isSubmissionInProgress) { + return; + } + final form = formRepository.accessForm(formName); + emit(SignInState(form: form, status: FormStatus.submissionInProgress)); + + return CustomRoutine( + routine: authenticationRepository.signInWithGoogle, + attachedLogic: (routineResult) => onSignInWithGoogle( + routineResult, + form, + ), + onError: (error) { + emit( + SignInState( + form: form, + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ); + addError(error); + }, + onSuccess: (account, data) { + authenticationRepository.addSession( + SessionWrapper( + event: SignedInEvent(account: account), + session: Session( + account: account, + data: data, + ), + ), + ); + emit( + SignInState( + form: form, + status: FormStatus.submissionSuccess, + ), + ); + }, + ).call(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md new file mode 100644 index 00000000..91cf6845 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md @@ -0,0 +1,141 @@ + + + +# SignInWithGoogleFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) +- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) +- SignInWithGoogleFailureFirebase + +**Implemented types** + +- [SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md) + + + + + + + +## Constructors + +[SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.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]) + + + +[SignInWithGoogleFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md new file mode 100644 index 00000000..c189a40e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SignInWithGoogleFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithGoogleFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInWithGoogleFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md new file mode 100644 index 00000000..2a67c09d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md @@ -0,0 +1,30 @@ + + + +# SignInWithGoogleFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithGoogleFailureFirebase([[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 +SignInWithGoogleFailureFirebase([super.code, super.msg]); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md new file mode 100644 index 00000000..0712ff53 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignInWithGoogleFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInWithGoogleFailureInterface + + + +**Implementers** + +- [SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md) + + + + + +## Constructors + +[SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.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 during the sign in process if a failure occurs. + +[SignInWithGoogleFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md new file mode 100644 index 00000000..16441dda --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignInWithGoogleFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithGoogleFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithGoogleFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md new file mode 100644 index 00000000..9337f2db --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInWithGoogleFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithGoogleFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithGoogleFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md new file mode 100644 index 00000000..5aeb8957 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md @@ -0,0 +1,141 @@ + + + +# SignInWithTwitterFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) +- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) +- SignInWithTwitterFailureFirebase + +**Implemented types** + +- [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) + + + + + + + +## Constructors + +[SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.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]) + + + +[SignInWithTwitterFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md new file mode 100644 index 00000000..ce958339 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SignInWithTwitterFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithTwitterFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignInWithTwitterFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md new file mode 100644 index 00000000..8d824501 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md @@ -0,0 +1,30 @@ + + + +# SignInWithTwitterFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithTwitterFailureFirebase([[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 +SignInWithTwitterFailureFirebase([super.code, super.msg]); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md new file mode 100644 index 00000000..3fbd2788 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md @@ -0,0 +1,136 @@ + + + +# SignInWithTwitterFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign in process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignInWithTwitterFailureInterface + + + + + + + + +## Constructors + +[SignInWithTwitterFailureInterface](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.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 during the sign in process if a failure occurs. + +[SignInWithTwitterFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign in process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md new file mode 100644 index 00000000..9d541237 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignInWithTwitterFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithTwitterFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithTwitterFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md new file mode 100644 index 00000000..14919bef --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignInWithTwitterFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignInWithTwitterFailureInterface([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 during the sign in process if a failure occurs.

    + + + +## Implementation + +```dart +SignInWithTwitterFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase-class.md new file mode 100644 index 00000000..3421331f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SignOutFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign out process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface-class.md) +- SignOutFailureFirebase + + + + + + + + +## Constructors + +[SignOutFailureFirebase](../wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.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]) + + + +[SignOutFailureFirebase.fromCode](../wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md new file mode 100644 index 00000000..6cf59631 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md @@ -0,0 +1,30 @@ + + + +# SignOutFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignOutFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignOutFailureFirebase.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md new file mode 100644 index 00000000..c6fc7d7a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SignOutFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignOutFailureFirebase([[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 +SignOutFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface-class.md new file mode 100644 index 00000000..cf527a70 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignOutFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the sign out process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignOutFailureInterface + + + +**Implementers** + +- [SignOutFailureFirebase](../wyatt_authentication_bloc/SignOutFailureFirebase-class.md) + + + + + +## Constructors + +[SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.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 during the sign out process if a failure occurs. + +[SignOutFailureInterface.fromCode](../wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the sign out process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md new file mode 100644 index 00000000..bde9935f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md @@ -0,0 +1,31 @@ + + + +# SignOutFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignOutFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the sign out process if a failure occurs.

    + + + +## Implementation + +```dart +SignOutFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md new file mode 100644 index 00000000..a59596a0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignOutFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignOutFailureInterface([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 during the sign out process if a failure occurs.

    + + + +## Implementation + +```dart +SignOutFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit-class.md new file mode 100644 index 00000000..b8229ff4 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit-class.md @@ -0,0 +1,316 @@ + + + +# SignUpCubit<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Fully featured sign up cubit.

    +

    Sufficient in most cases. (Where fine granularity is not required.)

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> +- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> +- [BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit-class.md)<Data> +- SignUpCubit + + +**Mixed in types** + +- [SignUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md)<Data> + + + + + + +## Constructors + +[SignUpCubit](../wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignUpCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emailChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + +_inherited_ + + + +##### [emailCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as emailChanged but with a custom Validator. +_inherited_ + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onSignUpWithEmailAndPassword](../wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user creates an account. +_override_ + + + +##### [passwordChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + +_inherited_ + + + +##### [passwordCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as passwordChanged but with a custom Validator. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/BaseSignUpCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [signUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Creates a new user with the provided email and password. +_inherited_ + + + +##### [submit](../wyatt_authentication_bloc/BaseSignUpCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignUpCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [validate](../wyatt_authentication_bloc/BaseSignUpCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md new file mode 100644 index 00000000..0306f024 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md @@ -0,0 +1,30 @@ + + + +# SignUpCubit<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignUpCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) + + + + + +## Implementation + +```dart +SignUpCubit({required super.authenticationRepository}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md new file mode 100644 index 00000000..e70dfa91 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md @@ -0,0 +1,43 @@ + + + +# onSignUpWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +FutureOrResult<Data?> onSignUpWithEmailAndPassword +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + +_override_ + + + +

    This callback is triggered when a user creates an account.

    +

    For example: when a user sign up in firebase.

    + + + +## Implementation + +```dart +@override +FutureOrResult onSignUpWithEmailAndPassword( + Result result, + WyattForm form, +) => + const Ok(null); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener-class.md new file mode 100644 index 00000000..ea1477a1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener-class.md @@ -0,0 +1,236 @@ + + + +# SignUpListener<Data> class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Widget that listens and builds a child based on the state of +the sign up cubit

    + + + +**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) +- SignUpListener + + + + + + + + +## Constructors + +[SignUpListener](../wyatt_authentication_bloc/SignUpListener/SignUpListener.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + _const_ + + +## Properties + +##### [child](../wyatt_authentication_bloc/SignUpListener/child.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) + + + + +_final_ + + + +##### [customBuilder](../wyatt_authentication_bloc/SignUpListener/customBuilder.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state)?) + + + + +_final_ + + + +##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? + + + +Controls how one widget replaces another widget in the tree. +_finalinherited_ + + + +##### [onError](../wyatt_authentication_bloc/SignUpListener/onError.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) + + + + +_final_ + + + +##### [onProgress](../wyatt_authentication_bloc/SignUpListener/onProgress.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) + + + + +_final_ + + + +##### [onSuccess](../wyatt_authentication_bloc/SignUpListener/onSuccess.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) + + + + +_final_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## Methods + +##### [build](../wyatt_authentication_bloc/SignUpListener/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. +_override_ + + + +##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) + + + +Creates a StatelessElement to manage this widget's location in the tree. +_inherited_ + + + +##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> + + + +Returns a list of DiagnosticsNode objects describing this node's +children. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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 DiagnosticsNode.toStringDeep. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/SignUpListener.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/SignUpListener.md new file mode 100644 index 00000000..8eb3409d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/SignUpListener.md @@ -0,0 +1,37 @@ + + + +# SignUpListener<Data> constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignUpListener<Data>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../../wyatt_authentication_bloc/SignUpState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) + + + + + +## Implementation + +```dart +const SignUpListener({ + required this.child, + this.onProgress, + this.onSuccess, + this.onError, + this.customBuilder, + super.key, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/build.md new file mode 100644 index 00000000..8843765f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/build.md @@ -0,0 +1,92 @@ + + + +# build method + + + + + *[](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) + +_override_ + + + +

    Describes the part of the user interface represented by this widget.

    +

    The framework calls this method when this widget is inserted into the tree +in a given BuildContext and when the dependencies of this widget change +(e.g., an InheritedWidget 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.

    +

    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 Widget.canUpdate.

    +

    Typically implementations return a newly created constellation of widgets +that are configured with information from this widget's constructor and +from the given BuildContext.

    +

    The given BuildContext 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 BuildContext +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.

    +

    The implementation of this method must only depend on:

    + +

    If a widget's build method is to depend on anything else, use a +StatefulWidget instead.

    +

    See also:

    +
      +
    • StatelessWidget, which contains the discussion on performance considerations.
    • +
    + + + +## Implementation + +```dart +@override +Widget build(BuildContext context) => + BlocListener, SignUpState>( + listener: (context, state) { + if (customBuilder != null) { + return customBuilder!(context, state); + } + + if (onSuccess != null && + state.status == FormStatus.submissionSuccess) { + return onSuccess!(context); + } + if (onProgress != null && + state.status == FormStatus.submissionInProgress) { + return onProgress!(context); + } + if (onError != null && + (state.status == FormStatus.submissionCanceled || + state.status == FormStatus.submissionFailure)) { + return onError!(context, state.status, state.errorMessage); + } + }, + child: child, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/child.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/child.md new file mode 100644 index 00000000..53bc3682 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/child.md @@ -0,0 +1,33 @@ + + + +# child property + + + + + *[](https://dart.dev/null-safety)* + + + +[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child + +_final_ + + + + + + +## Implementation + +```dart +final Widget child; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/customBuilder.md new file mode 100644 index 00000000..e59261e0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/customBuilder.md @@ -0,0 +1,33 @@ + + + +# customBuilder property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../../wyatt_authentication_bloc/SignUpState-class.md) state)?) customBuilder + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context, SignUpState state)? customBuilder; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onError.md new file mode 100644 index 00000000..ed94a98f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onError.md @@ -0,0 +1,37 @@ + + + +# onError property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) onError + +_final_ + + + + + + +## Implementation + +```dart +final void Function( + BuildContext context, + FormStatus status, + String? errorMessage, +)? onError; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onProgress.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onProgress.md new file mode 100644 index 00000000..4a30ed71 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onProgress.md @@ -0,0 +1,33 @@ + + + +# onProgress property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onProgress + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context)? onProgress; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onSuccess.md new file mode 100644 index 00000000..4d942f63 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onSuccess.md @@ -0,0 +1,33 @@ + + + +# onSuccess property + + + + + *[](https://dart.dev/null-safety)* + + + +(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onSuccess + +_final_ + + + + + + +## Implementation + +```dart +final void Function(BuildContext context)? onSuccess; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState-class.md new file mode 100644 index 00000000..d1a945ac --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState-class.md @@ -0,0 +1,179 @@ + + + +# SignUpState class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Sign up cubit state to manage the form.

    + + + +**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) +- SignUpState + + + + + + + + +## Constructors + +[SignUpState](../wyatt_authentication_bloc/SignUpState/SignUpState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + _const_ + + +## Properties + +##### [email](../wyatt_authentication_bloc/SignUpState/email.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> + + + + +_read-only_ + + + +##### [errorMessage](../wyatt_authentication_bloc/SignUpState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? + + + +Optional error message. +_finalinherited_ + + + +##### [form](../wyatt_authentication_bloc/SignUpState/form.md) → WyattForm + + + +FormData with all inputs, and associated metadata. +_finalinherited_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [password](../wyatt_authentication_bloc/SignUpState/password.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> + + + + +_read-only_ + + + +##### [props](../wyatt_authentication_bloc/SignUpState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-only_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [status](../wyatt_authentication_bloc/SignUpState/status.md) → FormStatus + + + +Global status of a form. +_finalinherited_ + + + +##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## Methods + +##### [copyWith](../wyatt_authentication_bloc/SignUpState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) + + + + + + + + +##### [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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/SignUpState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_override_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/SignUpState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/SignUpState.md new file mode 100644 index 00000000..2225e87b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/SignUpState.md @@ -0,0 +1,34 @@ + + + +# SignUpState constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignUpState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + +## Implementation + +```dart +const SignUpState({ + required super.form, + super.status = FormStatus.pure, + super.errorMessage, +}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/copyWith.md new file mode 100644 index 00000000..35561e0b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/copyWith.md @@ -0,0 +1,44 @@ + + + +# copyWith method + + + + + *[](https://dart.dev/null-safety)* + + + + +[SignUpState](../../wyatt_authentication_bloc/SignUpState-class.md) copyWith +({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) + + + + + + + + +## Implementation + +```dart +SignUpState copyWith({ + WyattForm? form, + FormStatus? status, + String? errorMessage, +}) => + SignUpState( + form: form ?? this.form, + status: status ?? this.status, + errorMessage: errorMessage ?? this.errorMessage, + ); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/email.md new file mode 100644 index 00000000..1ded8043 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/email.md @@ -0,0 +1,37 @@ + + + +# email property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> email + + + + + + + + +## Implementation + +```dart +FormInputValidator get email => + form.validatorOf(AuthFormField.email); +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/errorMessage.md new file mode 100644 index 00000000..d0856deb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/errorMessage.md @@ -0,0 +1,34 @@ + + + +# errorMessage property + + + + + *[](https://dart.dev/null-safety)* + + + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage + +_finalinherited_ + + + +

    Optional error message.

    + + + +## Implementation + +```dart +final String? errorMessage; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/form.md new file mode 100644 index 00000000..d3f2da76 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/form.md @@ -0,0 +1,34 @@ + + + +# form property + + + + + *[](https://dart.dev/null-safety)* + + + +WyattForm form + +_finalinherited_ + + + +

    FormData with all inputs, and associated metadata.

    + + + +## Implementation + +```dart +final WyattForm form; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/password.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/password.md new file mode 100644 index 00000000..77938106 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/password.md @@ -0,0 +1,37 @@ + + + +# password property + + + + + *[](https://dart.dev/null-safety)* + + + + + +FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> password + + + + + + + + +## Implementation + +```dart +FormInputValidator get password => + form.validatorOf(AuthFormField.password); +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/props.md new file mode 100644 index 00000000..2b5a46b8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + + + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [email, password, status, form]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/status.md new file mode 100644 index 00000000..644a9f10 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/status.md @@ -0,0 +1,34 @@ + + + +# status property + + + + + *[](https://dart.dev/null-safety)* + + + +FormStatus status + +_finalinherited_ + + + +

    Global status of a form.

    + + + +## Implementation + +```dart +final FormStatus status; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/toString.md new file mode 100644 index 00000000..e53f76d6 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/toString.md @@ -0,0 +1,50 @@ + + + +# toString method + + + + + *[](https://dart.dev/null-safety)* + + + +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) +- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) + +[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString +() + +_override_ + + + +

    A string representation of this object.

    +

    Some classes have a default textual representation, +often paired with a static parse function (like int.parse). +These classes will provide the textual representation as +their string representation.

    +

    Other classes have no meaningful textual representation +that a program will care about. +Such classes will typically override toString to provide +useful information when inspecting the object, +mainly for debugging or logging.

    + + + +## Implementation + +```dart +@override +@override +String toString() => 'SignUpState(status: ${status.name} ' + '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md new file mode 100644 index 00000000..0b725844 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# SignUpWithEmailAndPasswordFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown if during the sign up process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md) +- SignUpWithEmailAndPasswordFailureFirebase + + + + + + + + +## Constructors + +[SignUpWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.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]) + + + +[SignUpWithEmailAndPasswordFailureFirebase.fromCode](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md new file mode 100644 index 00000000..a88070e0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md @@ -0,0 +1,52 @@ + + + +# SignUpWithEmailAndPasswordFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignUpWithEmailAndPasswordFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +SignUpWithEmailAndPasswordFailureFirebase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'The email address is badly formatted.'; + break; + case 'user-disabled': + msg = 'This user has been disabled. Please contact support for help.'; + break; + case 'email-already-in-use': + msg = 'An account already exists for that email.'; + break; + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + break; + case 'weak-password': + msg = 'Please enter a stronger password.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md new file mode 100644 index 00000000..3c589850 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# SignUpWithEmailAndPasswordFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignUpWithEmailAndPasswordFailureFirebase([[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 +SignUpWithEmailAndPasswordFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md new file mode 100644 index 00000000..934c07dd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# SignUpWithEmailAndPasswordFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown if during the sign up process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- SignUpWithEmailAndPasswordFailureInterface + + + +**Implementers** + +- [SignUpWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md) + + + + + +## Constructors + +[SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.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 sign up process if a failure occurs. + +[SignUpWithEmailAndPasswordFailureInterface.fromCode](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown if during the sign up process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md new file mode 100644 index 00000000..4eba5121 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md @@ -0,0 +1,32 @@ + + + +# SignUpWithEmailAndPasswordFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignUpWithEmailAndPasswordFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown if during the sign up process if a failure occurs.

    + + + +## Implementation + +```dart +SignUpWithEmailAndPasswordFailureInterface.fromCode(super.code) + : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md new file mode 100644 index 00000000..105e574d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md @@ -0,0 +1,31 @@ + + + +# SignUpWithEmailAndPasswordFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +SignUpWithEmailAndPasswordFailureInterface([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 sign up process if a failure occurs.

    + + + +## Implementation + +```dart +SignUpWithEmailAndPasswordFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md new file mode 100644 index 00000000..220af3ad --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md @@ -0,0 +1,305 @@ + + + +# SignUpWithEmailPassword<Data> mixin + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Sign up mixin.

    +

    Allows the user to register with an email and a password.

    +

    Gives access to the signUpWithEmailPassword method and +onSignUpWithEmailAndPassword callback.

    + + +**Superclass Constraints** + +- [BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit-class.md)<Data> + + + + +**Mixin Applications** + +- [SignUpCubit](../wyatt_authentication_bloc/SignUpCubit-class.md) + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseSignUpCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emailChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + + + + + +##### [emailCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as emailChanged but with a custom Validator. + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onSignUpWithEmailAndPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user creates an account. + + + + +##### [passwordChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + + + + + +##### [passwordCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as passwordChanged but with a custom Validator. + + + + +##### [reset](../wyatt_authentication_bloc/BaseSignUpCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [signUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Creates a new user with the provided email and password. + + + + +##### [submit](../wyatt_authentication_bloc/BaseSignUpCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseSignUpCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [validate](../wyatt_authentication_bloc/BaseSignUpCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md new file mode 100644 index 00000000..85e7cc16 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md @@ -0,0 +1,47 @@ + + + +# emailChanged method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailChanged +([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) + + + + + + + + +## Implementation + +```dart +void emailChanged(String value) { + final emailValidatorType = formRepository + .accessForm(formName) + .validatorOf(AuthFormField.email) + .runtimeType; + assert( + emailValidatorType == Email, + 'Use emailCustomChanged(...) with validator $emailValidatorType', + ); + + final Email email = Email.dirty(value); + dataChanged(AuthFormField.email, email); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md new file mode 100644 index 00000000..8915ba03 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md @@ -0,0 +1,42 @@ + + + +# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailCustomChanged +<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) + + + + + +

    Same as emailChanged but with a custom Validator.

    +

    Sort of short hand for dataChanged.

    + + + +## Implementation + +```dart +void emailCustomChanged< + Validator extends FormInputValidator>( + Validator validator, +) { + dataChanged(AuthFormField.email, validator); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md new file mode 100644 index 00000000..cd7c1a80 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md @@ -0,0 +1,40 @@ + + + +# onSignUpWithEmailAndPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onSignUpWithEmailAndPassword +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + + + + + +

    This callback is triggered when a user creates an account.

    +

    For example: when a user sign up in firebase.

    + + + +## Implementation + +```dart +FutureOrResult onSignUpWithEmailAndPassword( + Result result, + WyattForm form, +); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md new file mode 100644 index 00000000..8db9fda0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md @@ -0,0 +1,46 @@ + + + +# passwordChanged method + + + + + *[](https://dart.dev/null-safety)* + + + + +void passwordChanged +([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) + + + + + + + + +## Implementation + +```dart +void passwordChanged(String value) { + final passwordValidatorType = formRepository + .accessForm(formName) + .validatorOf(AuthFormField.password) + .runtimeType; + assert( + passwordValidatorType == Password, + 'Use passwordCustomChanged(...) with validator $passwordValidatorType', + ); + final Password password = Password.dirty(value); + dataChanged(AuthFormField.password, password); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md new file mode 100644 index 00000000..5e3b39bd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md @@ -0,0 +1,42 @@ + + + +# passwordCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method + + + + + *[](https://dart.dev/null-safety)* + + + + +void passwordCustomChanged +<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) + + + + + +

    Same as passwordChanged but with a custom Validator.

    +

    Sort of short hand for dataChanged.

    + + + +## Implementation + +```dart +void passwordCustomChanged< + Validator extends FormInputValidator>( + Validator validator, +) { + dataChanged(AuthFormField.password, validator); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md new file mode 100644 index 00000000..0fd593ac --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md @@ -0,0 +1,97 @@ + + + +# signUpWithEmailPassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signUpWithEmailPassword +() + + + + + +

    Creates a new user with the provided email and password.

    +

    Returns the newly created user's unique identifier.

    +

    Throws a SignUpWithEmailAndPasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOr signUpWithEmailPassword() async { + if (!state.status.isValidated) { + return; + } + + final form = formRepository.accessForm(formName); + emit(SignUpState(form: form, status: FormStatus.submissionInProgress)); + + final email = form.valueOf(AuthFormField.email); + final password = form.valueOf(AuthFormField.password); + + if (email.isNullOrEmpty || password.isNullOrEmpty) { + emit( + SignUpState( + form: form, + errorMessage: 'An error occured while retrieving data from the form.', + status: FormStatus.submissionFailure, + ), + ); + } + + return CustomRoutine( + routine: () => authenticationRepository.signUpWithEmailAndPassword( + email: email!, + password: password!, + ), + attachedLogic: (routineResult) => onSignUpWithEmailAndPassword( + routineResult, + form, + ), + onError: (error) { + emit( + SignUpState( + form: form, + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ); + addError(error); + }, + onSuccess: (account, data) { + authenticationRepository.addSession( + SessionWrapper( + event: SignedUpEvent(account: account), + session: Session( + account: account, + data: data, + ), + ), + ); + emit( + SignUpState( + form: form, + status: FormStatus.submissionSuccess, + ), + ); + }, + ).call(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent-class.md new file mode 100644 index 00000000..c3b76749 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent-class.md @@ -0,0 +1,135 @@ + + + +# SignedInEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user authenticates (from not logged in to logged in).

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- SignedInEvent + + + + + + + + +## Constructors + +[SignedInEvent](../wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) + + _const_ + + +## Properties + +##### [account](../wyatt_authentication_bloc/SignedInEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/SignedInEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md new file mode 100644 index 00000000..cdc4ad73 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md @@ -0,0 +1,30 @@ + + + +# SignedInEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignedInEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) + + + + + +## Implementation + +```dart +const SignedInEvent({required this.account}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/account.md new file mode 100644 index 00000000..671e197e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/account.md @@ -0,0 +1,33 @@ + + + +# account property + + + + + *[](https://dart.dev/null-safety)* + + + +[Account](../../wyatt_authentication_bloc/Account-class.md) account + +_final_ + + + + + + +## Implementation + +```dart +final Account account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/props.md new file mode 100644 index 00000000..fbde09d1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [account]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent-class.md new file mode 100644 index 00000000..fd2ab1bb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent-class.md @@ -0,0 +1,135 @@ + + + +# SignedInFromCacheEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user authenticates automatically (from not logged in to logged in).

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- SignedInFromCacheEvent + + + + + + + + +## Constructors + +[SignedInFromCacheEvent](../wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) + + _const_ + + +## Properties + +##### [account](../wyatt_authentication_bloc/SignedInFromCacheEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/SignedInFromCacheEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md new file mode 100644 index 00000000..99d1d86f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md @@ -0,0 +1,30 @@ + + + +# SignedInFromCacheEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignedInFromCacheEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) + + + + + +## Implementation + +```dart +const SignedInFromCacheEvent({required this.account}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/account.md new file mode 100644 index 00000000..671e197e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/account.md @@ -0,0 +1,33 @@ + + + +# account property + + + + + *[](https://dart.dev/null-safety)* + + + +[Account](../../wyatt_authentication_bloc/Account-class.md) account + +_final_ + + + + + + +## Implementation + +```dart +final Account account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/props.md new file mode 100644 index 00000000..fbde09d1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [account]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent-class.md new file mode 100644 index 00000000..0075e9eb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent-class.md @@ -0,0 +1,126 @@ + + + +# SignedOutEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user logs out.

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- SignedOutEvent + + + + + + + + +## Constructors + +[SignedOutEvent](../wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md) () + + _const_ + + +## Properties + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md new file mode 100644 index 00000000..734b4c5d --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md @@ -0,0 +1,30 @@ + + + +# SignedOutEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignedOutEvent() + + + + + +## Implementation + +```dart +const SignedOutEvent(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent-class.md new file mode 100644 index 00000000..c53aeb32 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent-class.md @@ -0,0 +1,135 @@ + + + +# SignedUpEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user creates an account.

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- SignedUpEvent + + + + + + + + +## Constructors + +[SignedUpEvent](../wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) + + _const_ + + +## Properties + +##### [account](../wyatt_authentication_bloc/SignedUpEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/SignedUpEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md new file mode 100644 index 00000000..4a68b5f5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md @@ -0,0 +1,30 @@ + + + +# SignedUpEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +SignedUpEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) + + + + + +## Implementation + +```dart +const SignedUpEvent({required this.account}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/account.md new file mode 100644 index 00000000..671e197e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/account.md @@ -0,0 +1,33 @@ + + + +# account property + + + + + *[](https://dart.dev/null-safety)* + + + +[Account](../../wyatt_authentication_bloc/Account-class.md) account + +_final_ + + + + + + +## Implementation + +```dart +final Account account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/props.md new file mode 100644 index 00000000..fbde09d1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [account]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md new file mode 100644 index 00000000..1b5a7161 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md @@ -0,0 +1,126 @@ + + + +# UnknownAuthenticationEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When a user's login status is unknown.

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- UnknownAuthenticationEvent + + + + + + + + +## Constructors + +[UnknownAuthenticationEvent](../wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md) () + + _const_ + + +## Properties + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md new file mode 100644 index 00000000..6e9d242a --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md @@ -0,0 +1,30 @@ + + + +# UnknownAuthenticationEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +UnknownAuthenticationEvent() + + + + + +## Implementation + +```dart +const UnknownAuthenticationEvent(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail-mixin.md new file mode 100644 index 00000000..0673d44e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail-mixin.md @@ -0,0 +1,287 @@ + + + +# UpdateEmail<Data> mixin + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Edit account mixin.

    +

    Allows the user to edit his email

    +

    Gives access to the updateEmail method and +onEmailUpdated callback.

    + + +**Superclass Constraints** + +- [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> + + + + +**Mixin Applications** + +- [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md) + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emailChanged](../wyatt_authentication_bloc/UpdateEmail/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + + + + + +##### [emailCustomChanged](../wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as emailChanged but with a custom Validator. + + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onEmailUpdated](../wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when user updates his email + + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [updateEmail](../wyatt_authentication_bloc/UpdateEmail/updateEmail.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Update or add email. + + + + +##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailChanged.md new file mode 100644 index 00000000..85e7cc16 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailChanged.md @@ -0,0 +1,47 @@ + + + +# emailChanged method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailChanged +([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) + + + + + + + + +## Implementation + +```dart +void emailChanged(String value) { + final emailValidatorType = formRepository + .accessForm(formName) + .validatorOf(AuthFormField.email) + .runtimeType; + assert( + emailValidatorType == Email, + 'Use emailCustomChanged(...) with validator $emailValidatorType', + ); + + final Email email = Email.dirty(value); + dataChanged(AuthFormField.email, email); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md new file mode 100644 index 00000000..7ec149cb --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md @@ -0,0 +1,42 @@ + + + +# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method + + + + + *[](https://dart.dev/null-safety)* + + + + +void emailCustomChanged +<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) + + + + + +

    Same as emailChanged but with a custom Validator.

    +

    Sort of short hand for dataChanged.

    + + + +## Implementation + +```dart +void emailCustomChanged< + Validator extends FormInputValidator>( + Validator validator, +) { + dataChanged(AuthFormField.email, validator); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md new file mode 100644 index 00000000..7e3757f2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md @@ -0,0 +1,39 @@ + + + +# onEmailUpdated method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onEmailUpdated +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + + + + + +

    This callback is triggered when user updates his email

    + + + +## Implementation + +```dart +FutureOrResult onEmailUpdated( + Result result, + WyattForm form, +); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/updateEmail.md new file mode 100644 index 00000000..7c814f89 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/updateEmail.md @@ -0,0 +1,103 @@ + + + +# updateEmail method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> updateEmail +() + + + + + +

    Update or add email.

    +

    Throws a UpdateEmailFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOr updateEmail() async { + if (state.status.isSubmissionInProgress) { + return; + } + + if (!state.status.isValidated) { + return; + } + + final form = formRepository.accessForm(formName); + emit( + EditAccountState( + form: form, + status: FormStatus.submissionInProgress, + ), + ); + + final email = form.valueOf(AuthFormField.email); + + if (email.isNullOrEmpty) { + emit( + EditAccountState( + form: form, + errorMessage: 'An error occured while retrieving data from the form.', + status: FormStatus.submissionFailure, + ), + ); + } + + return CustomRoutine( + routine: () => authenticationRepository.updateEmail( + email: email!, + ), + attachedLogic: (routineResult) => onEmailUpdated( + routineResult, + form, + ), + onError: (error) { + emit( + EditAccountState( + form: form, + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ); + addError(error); + }, + onSuccess: (account, data) { + authenticationRepository.addSession( + SessionWrapper( + event: UpdatedEvent(account: account), + session: Session( + account: account, + data: data, + ), + ), + ); + emit( + EditAccountState( + form: form, + status: FormStatus.submissionSuccess, + ), + ); + }, + ).call(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md new file mode 100644 index 00000000..aa440929 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# UpdateEmailFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the email modification process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md) +- UpdateEmailFailureFirebase + + + + + + + + +## Constructors + +[UpdateEmailFailureFirebase](../wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.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]) + + + +[UpdateEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md new file mode 100644 index 00000000..d9c01e20 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md @@ -0,0 +1,45 @@ + + + +# UpdateEmailFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdateEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +UpdateEmailFailureFirebase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'email-already-in-use': + msg = 'An account already exists for that email.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md new file mode 100644 index 00000000..7c7e5fe5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# UpdateEmailFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdateEmailFailureFirebase([[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 +UpdateEmailFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md new file mode 100644 index 00000000..29d54938 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# UpdateEmailFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the email modification process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- UpdateEmailFailureInterface + + + +**Implementers** + +- [UpdateEmailFailureFirebase](../wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md) + + + + + +## Constructors + +[UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.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) + + + +[UpdateEmailFailureInterface.fromCode](../wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md new file mode 100644 index 00000000..656a17b9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md @@ -0,0 +1,30 @@ + + + +# UpdateEmailFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdateEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +UpdateEmailFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md new file mode 100644 index 00000000..ffa1fd03 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md @@ -0,0 +1,30 @@ + + + +# UpdateEmailFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdateEmailFailureInterface([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 +UpdateEmailFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword-mixin.md new file mode 100644 index 00000000..cea1271f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword-mixin.md @@ -0,0 +1,287 @@ + + + +# UpdatePassword<Data> mixin + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Edit account mixin.

    +

    Allows the user to edit his password

    +

    Gives access to the updatePassword method and +onPasswordUpdated callback.

    + + +**Superclass Constraints** + +- [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> + + + + +**Mixin Applications** + +- [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md) + + + +## Properties + +##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + +_finalinherited_ + + + +##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository + + + + +_read-onlyinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +Whether the bloc is closed. +_read-onlyinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) + + + +The current state. +_read-onlyinherited_ + + + +##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> + + + +The current stream of states. +_read-onlyinherited_ + + + + + +## Methods + +##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void + + + +Reports an error which triggers onError with an optional StackTrace. +_inherited_ + + + +##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> + + + +Closes the instance. +This method should be called when the instance is no longer needed. +Once close is called, the instance can no longer be used. +_inherited_ + + + +##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void + + + +Updates the state to the provided state. +emit does nothing if the state being emitted +is equal to the current state. +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void + + + +Called whenever a change occurs with the given change. +A change occurs when a new state is emitted. +onChange is called before the state of the cubit is updated. +onChange is a great spot to add logging/analytics for a specific cubit. +_inherited_ + + + +##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void + + + +Called whenever an error occurs and notifies BlocObserver.onError. +_inherited_ + + + +##### [onPasswordUpdated](../wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> + + + +This callback is triggered when a user edits his password. + + + + +##### [passwordChanged](../wyatt_authentication_bloc/UpdatePassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void + + + + + + + + +##### [passwordCustomChanged](../wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void + + + +Same as passwordChanged but with a custom Validator. + + + + +##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [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. +_inherited_ + + + +##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + +##### [updatePassword](../wyatt_authentication_bloc/UpdatePassword/updatePassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + +Update or add password. + + + + +##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> + + + + +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md new file mode 100644 index 00000000..b0354384 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md @@ -0,0 +1,39 @@ + + + +# onPasswordUpdated method + + + + + *[](https://dart.dev/null-safety)* + + + + +FutureOrResult<Data?> onPasswordUpdated +(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) + + + + + +

    This callback is triggered when a user edits his password.

    + + + +## Implementation + +```dart +FutureOrResult onPasswordUpdated( + Result result, + WyattForm form, +); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordChanged.md new file mode 100644 index 00000000..8db9fda0 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordChanged.md @@ -0,0 +1,46 @@ + + + +# passwordChanged method + + + + + *[](https://dart.dev/null-safety)* + + + + +void passwordChanged +([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) + + + + + + + + +## Implementation + +```dart +void passwordChanged(String value) { + final passwordValidatorType = formRepository + .accessForm(formName) + .validatorOf(AuthFormField.password) + .runtimeType; + assert( + passwordValidatorType == Password, + 'Use passwordCustomChanged(...) with validator $passwordValidatorType', + ); + final Password password = Password.dirty(value); + dataChanged(AuthFormField.password, password); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md new file mode 100644 index 00000000..2cb08454 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md @@ -0,0 +1,42 @@ + + + +# passwordCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method + + + + + *[](https://dart.dev/null-safety)* + + + + +void passwordCustomChanged +<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) + + + + + +

    Same as passwordChanged but with a custom Validator.

    +

    Sort of short hand for dataChanged.

    + + + +## Implementation + +```dart +void passwordCustomChanged< + Validator extends FormInputValidator>( + Validator validator, +) { + dataChanged(AuthFormField.password, validator); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/updatePassword.md new file mode 100644 index 00000000..fae26194 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/updatePassword.md @@ -0,0 +1,103 @@ + + + +# updatePassword method + + + + + *[](https://dart.dev/null-safety)* + + + + +[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> updatePassword +() + + + + + +

    Update or add password.

    +

    Throws a UpdatePasswordFailureInterface if +an exception occurs.

    + + + +## Implementation + +```dart +FutureOr updatePassword() async { + if (state.status.isSubmissionInProgress) { + return; + } + + if (!state.status.isValidated) { + return; + } + + final form = formRepository.accessForm(formName); + emit( + EditAccountState( + form: form, + status: FormStatus.submissionInProgress, + ), + ); + + final password = form.valueOf(AuthFormField.password); + + if (password.isNullOrEmpty) { + emit( + EditAccountState( + form: form, + errorMessage: 'An error occured while retrieving data from the form.', + status: FormStatus.submissionFailure, + ), + ); + } + + return CustomRoutine( + routine: () => authenticationRepository.updatePassword( + password: password!, + ), + attachedLogic: (routineResult) => onPasswordUpdated( + routineResult, + form, + ), + onError: (error) { + emit( + EditAccountState( + form: form, + errorMessage: error.message, + status: FormStatus.submissionFailure, + ), + ); + addError(error); + }, + onSuccess: (account, data) { + authenticationRepository.addSession( + SessionWrapper( + event: SignedInEvent(account: account), + session: Session( + account: account, + data: data, + ), + ), + ); + emit( + EditAccountState( + form: form, + status: FormStatus.submissionSuccess, + ), + ); + }, + ).call(); +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md new file mode 100644 index 00000000..75e3bd3b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# UpdatePasswordFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password modification process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md) +- UpdatePasswordFailureFirebase + + + + + + + + +## Constructors + +[UpdatePasswordFailureFirebase](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.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]) + + + +[UpdatePasswordFailureFirebase.fromCode](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md new file mode 100644 index 00000000..1aa2ae7c --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md @@ -0,0 +1,42 @@ + + + +# UpdatePasswordFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdatePasswordFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +UpdatePasswordFailureFirebase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'weak-password': + msg = 'Please enter a stronger password.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } +} +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md new file mode 100644 index 00000000..0f38d6b8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# UpdatePasswordFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdatePasswordFailureFirebase([[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 +UpdatePasswordFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md new file mode 100644 index 00000000..d7a95cd8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# UpdatePasswordFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password modification process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- UpdatePasswordFailureInterface + + + +**Implementers** + +- [UpdatePasswordFailureFirebase](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md) + + + + + +## Constructors + +[UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.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) + + + +[UpdatePasswordFailureInterface.fromCode](../wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md new file mode 100644 index 00000000..d459010f --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md @@ -0,0 +1,30 @@ + + + +# UpdatePasswordFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdatePasswordFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +UpdatePasswordFailureInterface.fromCode(super.code) : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md new file mode 100644 index 00000000..bbba2c50 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md @@ -0,0 +1,30 @@ + + + +# UpdatePasswordFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +UpdatePasswordFailureInterface([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 +UpdatePasswordFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent-class.md new file mode 100644 index 00000000..1097b97b --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent-class.md @@ -0,0 +1,135 @@ + + + +# UpdatedEvent class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    When the user's account has been updated.

    + + + +**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) +- UpdatedEvent + + + + + + + + +## Constructors + +[UpdatedEvent](../wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) + + _const_ + + +## Properties + +##### [account](../wyatt_authentication_bloc/UpdatedEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) + + + + +_final_ + + + +##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [props](../wyatt_authentication_bloc/UpdatedEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. +_read-onlyoverride_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + +##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) + + + +If set to true, the toString method will be overridden to output +this instance's props. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [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. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md new file mode 100644 index 00000000..cb29ebfe --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md @@ -0,0 +1,30 @@ + + + +# UpdatedEvent constructor + + + + + *[](https://dart.dev/null-safety)* + + +const +UpdatedEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) + + + + + +## Implementation + +```dart +const UpdatedEvent({required this.account}); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/account.md new file mode 100644 index 00000000..671e197e --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/account.md @@ -0,0 +1,33 @@ + + + +# account property + + + + + *[](https://dart.dev/null-safety)* + + + +[Account](../../wyatt_authentication_bloc/Account-class.md) account + +_final_ + + + + + + +## Implementation + +```dart +final Account account; +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/props.md new file mode 100644 index 00000000..fbde09d1 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/props.md @@ -0,0 +1,42 @@ + + + +# props property + + + + + *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props + +_override_ + + + +

    The list of properties that will be used to determine whether +two instances are equal.

    + + + +## Implementation + +```dart +@override +List get props => [account]; +``` + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md new file mode 100644 index 00000000..3a40b1bd --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md @@ -0,0 +1,137 @@ + + + +# VerifyPasswordResetCodeFailureFirebase class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password reset process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- [VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md) +- VerifyPasswordResetCodeFailureFirebase + + + + + + + + +## Constructors + +[VerifyPasswordResetCodeFailureFirebase](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.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]) + + + +[VerifyPasswordResetCodeFailureFirebase.fromCode](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md new file mode 100644 index 00000000..7b721f98 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md @@ -0,0 +1,31 @@ + + + +# VerifyPasswordResetCodeFailureFirebase.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +VerifyPasswordResetCodeFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + + + + +## Implementation + +```dart +VerifyPasswordResetCodeFailureFirebase.fromCode(super.code) + : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md new file mode 100644 index 00000000..22f49092 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md @@ -0,0 +1,31 @@ + + + +# VerifyPasswordResetCodeFailureFirebase constructor + + + + + *[](https://dart.dev/null-safety)* + + + +VerifyPasswordResetCodeFailureFirebase([[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 +VerifyPasswordResetCodeFailureFirebase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md new file mode 100644 index 00000000..47e2e9b2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md @@ -0,0 +1,139 @@ + + + +# VerifyPasswordResetCodeFailureInterface class + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    Thrown during the password reset process if a failure occurs.

    + + + +**Inheritance** + +- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) +- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) +- VerifyPasswordResetCodeFailureInterface + + + +**Implementers** + +- [VerifyPasswordResetCodeFailureFirebase](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md) + + + + + +## Constructors + +[VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.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 during the password reset process if a failure occurs. + +[VerifyPasswordResetCodeFailureInterface.fromCode](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + +Thrown during the password reset process if a failure occurs. + + +## Properties + +##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) + + + +The hash code for this object. +_read-onlyinherited_ + + + +##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read-onlyinherited_ + + + +##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + + +_read / writeinherited_ + + + +##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) + + + +A representation of the runtime type of the object. +_read-onlyinherited_ + + + + + +## 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. +_inherited_ + + + +##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) + + + +A string representation of this object. +_inherited_ + + + + + +## 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. +_inherited_ + + + + + + + + + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md new file mode 100644 index 00000000..ed57be88 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md @@ -0,0 +1,32 @@ + + + +# VerifyPasswordResetCodeFailureInterface.fromCode constructor + + + + + *[](https://dart.dev/null-safety)* + + + +VerifyPasswordResetCodeFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) + + +

    Thrown during the password reset process if a failure occurs.

    + + + +## Implementation + +```dart +VerifyPasswordResetCodeFailureInterface.fromCode(super.code) + : super.fromCode(); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md new file mode 100644 index 00000000..e03ad3b7 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md @@ -0,0 +1,31 @@ + + + +# VerifyPasswordResetCodeFailureInterface constructor + + + + + *[](https://dart.dev/null-safety)* + + + +VerifyPasswordResetCodeFailureInterface([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 during the password reset process if a failure occurs.

    + + + +## Implementation + +```dart +VerifyPasswordResetCodeFailureInterface(super.code, super.msg); +``` + + + + + + + diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/wyatt_authentication_bloc-library.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/wyatt_authentication_bloc-library.md new file mode 100644 index 00000000..46d7f563 --- /dev/null +++ b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/wyatt_authentication_bloc-library.md @@ -0,0 +1,727 @@ + + + + +# wyatt_authentication_bloc library + + + + + + + *[](https://dart.dev/null-safety)* + + + +

    An authentication library for BLoC.

    + + +## Classes + +##### [Account](../wyatt_authentication_bloc/Account-class.md) + + + +Represents a user Account in the +various identity provisioning systems. + + +##### [AccountModel](../wyatt_authentication_bloc/AccountModel-class.md) + + + +Account Model to parse Firebase User data + + +##### [AuthenticationBuilder](../wyatt_authentication_bloc/AuthenticationBuilder-class.md)<Data> + + + + + + +##### [AuthenticationChangeEvent](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) + + + +Represents an event initiated by a change in +the user's authentication status. + + +##### [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data> + + + +Abstract authentication cubit class needs to be implemented in application. + + +##### [AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md)<Data> + + + + + + +##### [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> + + + +Is responsible for abstracting the provenance of the data. + + +##### [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> + + + + + + +##### [AuthenticationRepositoryImpl](../wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md)<Data extends [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> + + + + + + +##### [AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data> + + + + + + +##### [AuthFormField](../wyatt_authentication_bloc/AuthFormField-class.md) + + + +Default authentication form fields name + + +##### [AuthFormName](../wyatt_authentication_bloc/AuthFormName-class.md) + + + +Default authentication form name + + +##### [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> + + + +Abstract edit account cubit useful for implementing a cubit with fine +granularity by adding only the required mixins. + + +##### [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> + + + +Abstract sign in cubit useful for implementing a cubit with fine +granularity by adding only the required mixins. + + +##### [BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit-class.md)<Data> + + + +Abstract sign up cubit useful for implementing a cubit with fine +granularity by adding only the required mixins. + + +##### [CustomRoutine](../wyatt_authentication_bloc/CustomRoutine-class.md)<R, Data> + + + +Calls on each cubit action of this package. + + +##### [DeletedEvent](../wyatt_authentication_bloc/DeletedEvent-class.md) + + + +When a user deleted his account. + + +##### [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md)<Data> + + + +Fully featured edit account cubit. + + +##### [EditAccountListener](../wyatt_authentication_bloc/EditAccountListener-class.md)<Data> + + + +Widget that listens and builds a child based on the state of +the edit account cubit + + +##### [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) + + + +Edit account cubit state to manage the form. + + +##### [EmailVerificationBuilder](../wyatt_authentication_bloc/EmailVerificationBuilder-class.md)<Extra> + + + + + + +##### [EmailVerificationCubit](../wyatt_authentication_bloc/EmailVerificationCubit-class.md)<Data> + + + + + + +##### [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) + + + + + + +##### [PasswordResetCubit](../wyatt_authentication_bloc/PasswordResetCubit-class.md)<Extra> + + + +Cubit that allows user to reset his password + + +##### [PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) + + + + + + +##### [ReauthenticatedEvent](../wyatt_authentication_bloc/ReauthenticatedEvent-class.md) + + + +When a user re-authenticates (from the logged in state to the +logged in state with a different and fresh access +token and a different login time) + + +##### [RefreshedEvent](../wyatt_authentication_bloc/RefreshedEvent-class.md) + + + +When a user access token is refreshed (from the logged in state to the +logged in state with a different access token) + + +##### [Session](../wyatt_authentication_bloc/Session-class.md)<Data> + + + +The Session object is used to transport and propagate +the connected user Account and personalized Data in the application. + + +##### [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> + + + +Contains the AuthenticationChangeEvent initiating the state +change and the current Session. + + +##### [SignedInEvent](../wyatt_authentication_bloc/SignedInEvent-class.md) + + + +When a user authenticates (from not logged in to logged in). + + +##### [SignedInFromCacheEvent](../wyatt_authentication_bloc/SignedInFromCacheEvent-class.md) + + + +When a user authenticates automatically (from not logged in to logged in). + + +##### [SignedOutEvent](../wyatt_authentication_bloc/SignedOutEvent-class.md) + + + +When a user logs out. + + +##### [SignedUpEvent](../wyatt_authentication_bloc/SignedUpEvent-class.md) + + + +When a user creates an account. + + +##### [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md)<Data> + + + +Fully featured sign in cubit. + + +##### [SignInListener](../wyatt_authentication_bloc/SignInListener-class.md)<Data> + + + +Widget that listens and builds a child based on the state of +the sign in cubit + + +##### [SignInState](../wyatt_authentication_bloc/SignInState-class.md) + + + +Sign in cubit state to manage the form. + + +##### [SignUpCubit](../wyatt_authentication_bloc/SignUpCubit-class.md)<Data> + + + +Fully featured sign up cubit. + + +##### [SignUpListener](../wyatt_authentication_bloc/SignUpListener-class.md)<Data> + + + +Widget that listens and builds a child based on the state of +the sign up cubit + + +##### [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) + + + +Sign up cubit state to manage the form. + + +##### [UnknownAuthenticationEvent](../wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md) + + + +When a user's login status is unknown. + + +##### [UpdatedEvent](../wyatt_authentication_bloc/UpdatedEvent-class.md) + + + +When the user's account has been updated. + + + +## Mixins + +##### [SignInAnonymously](../wyatt_authentication_bloc/SignInAnonymously-mixin.md)<Data> + + + +Sign in mixin. + + +##### [SignInWithEmailPassword](../wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md)<Data> + + + +Sign in mixin. + + +##### [SignInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle-mixin.md)<Data> + + + +Sign in mixin. + + +##### [SignUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md)<Data> + + + +Sign up mixin. + + +##### [UpdateEmail](../wyatt_authentication_bloc/UpdateEmail-mixin.md)<Data> + + + +Edit account mixin. + + +##### [UpdatePassword](../wyatt_authentication_bloc/UpdatePassword-mixin.md)<Data> + + + +Edit account mixin. + + + +## Extensions + +##### [BuildContextExtension](../wyatt_authentication_bloc/BuildContextExtension.md) + + + +Extension that helps to quickly access useful resources like wrapper, +session, account or data. + + + + + + +## Enums + +##### [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) + + + +Different authentication status + + + + +## Exceptions / Errors + +##### [ApplyActionCodeFailureFirebase](../wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md) + + + +Thrown if during the apply action code process if a failure occurs. + + +##### [ApplyActionCodeFailureInterface](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md) + + + +Thrown if during the apply action code process if a failure occurs. + + +##### [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) + + + +Base exception used in Wyatt Authentication + + +##### [ConfirmPasswordResetFailureFirebase](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md) + + + +Thrown during the password reset process if a failure occurs. + + +##### [ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md) + + + +Thrown during the password reset process if a failure occurs. + + +##### [DeleteAccountFailureFirebase](../wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md) + + + +Thrown during the account deletion if a failure occurs. + + +##### [DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md) + + + +Thrown during the account deletion if a failure occurs. + + +##### [FetchSignInMethodsForEmailFailureFirebase](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md) + + + +Thrown during the fetch sign in methods if a failure occurs. + + +##### [FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md) + + + +Thrown during the fetch sign in methods if a failure occurs. + + +##### [ModelParsingFailureFirebase](../wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md) + + + +Thrown during the model parsing process if a failure occurs. + + +##### [ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface-class.md) + + + +Thrown during the model parsing process if a failure occurs. + + +##### [ReauthenticateFailureFirebase](../wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md) + + + +Thrown during the reauthentication process if a failure occurs. + + +##### [ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md) + + + +Thrown during the reauthentication process if a failure occurs. + + +##### [RefreshFailureFirebase](../wyatt_authentication_bloc/RefreshFailureFirebase-class.md) + + + +Thrown during the refresh process if a failure occurs. + + +##### [RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface-class.md) + + + +Thrown during the refresh process if a failure occurs. + + +##### [SendEmailVerificationFailureFirebase](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md) + + + +Thrown during the email verification process if a failure occurs. + + +##### [SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md) + + + +Thrown during the email verification process if a failure occurs. + + +##### [SendPasswordResetEmailFailureFirebase](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md) + + + +Thrown during the password reset process if a failure occurs. + + +##### [SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md) + + + +Thrown during the password reset process if a failure occurs. + + +##### [SendSignInLinkEmailFailureFirebase](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md) + + + +Thrown during the sign in link process if a failure occurs. + + +##### [SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md) + + + +Thrown during the sign in link process if a failure occurs. + + +##### [SignInAnonymouslyFailureFirebase](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithEmailLinkFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignInWithTwitterFailureInterface](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md) + + + +Thrown during the sign in process if a failure occurs. + + +##### [SignOutFailureFirebase](../wyatt_authentication_bloc/SignOutFailureFirebase-class.md) + + + +Thrown during the sign out process if a failure occurs. + + +##### [SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface-class.md) + + + +Thrown during the sign out process if a failure occurs. + + +##### [SignUpWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md) + + + +Thrown if during the sign up process if a failure occurs. + + +##### [SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md) + + + +Thrown if during the sign up process if a failure occurs. + + +##### [UpdateEmailFailureFirebase](../wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md) + + + +Thrown during the email modification process if a failure occurs. + + +##### [UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md) + + + +Thrown during the email modification process if a failure occurs. + + +##### [UpdatePasswordFailureFirebase](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md) + + + +Thrown during the password modification process if a failure occurs. + + +##### [UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md) + + + +Thrown during the password modification process if a failure occurs. + + +##### [VerifyPasswordResetCodeFailureFirebase](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md) + + + +Thrown during the password reset process if a failure occurs. + + +##### [VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md) + + + +Thrown during the password reset process if a failure occurs. + + + + + + + diff --git a/packages/wyatt_authentication_bloc/example/.gitignore b/packages/wyatt_authentication_bloc/example/.gitignore index 891ead31..6df3a32a 100644 --- a/packages/wyatt_authentication_bloc/example/.gitignore +++ b/packages/wyatt_authentication_bloc/example/.gitignore @@ -22,7 +22,6 @@ migrate_working_dir/ #.vscode/ # Flutter/Dart/Pub related -**/doc/api/ **/ios/Flutter/.last_build_id .dart_tool/ .flutter-plugins -- 2.47.2 From b83275aaf634569b636da22f795ddfea4a39b345 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 8 Feb 2023 13:37:52 +0100 Subject: [PATCH 244/320] feat(authentication): remove session wrapper for AuthenticationSession --- .../authentication/authentication_cubit.dart | 2 +- .../presentation/features/home/home_page.dart | 7 +- .../extensions/build_context_extension.dart | 84 +++++++++++++++---- ...hentication_firebase_data_source_impl.dart | 27 ++++-- .../authentication_repository_impl.dart | 22 +++-- .../authentication_remote_data_source.dart | 10 +-- .../lib/src/domain/entities/auth_session.dart | 60 +++++++++++++ .../authenticated_change_event.dart} | 22 ++--- .../authentication_change_event.dart | 11 +-- .../reauthenticated_event.dart | 13 +-- .../refreshed_event.dart | 11 +-- .../signed_in_event.dart | 9 +- .../signed_in_from_cache_event.dart | 9 +- .../signed_up_event.dart | 9 +- .../updated_event.dart | 9 +- .../lib/src/domain/entities/entities.dart | 3 +- .../src/domain/entities/session_wrapper.dart | 38 --------- .../authentication_repository.dart | 11 ++- .../builder/authentication_builder.dart | 8 +- .../cubit/authentication_cubit.dart | 74 ++++++++-------- .../cubit/authentication_state.dart | 10 +-- .../edit_account/cubit/mixin/edit_email.dart | 9 +- .../cubit/mixin/edit_password.dart | 9 +- .../cubit/email_verification_cubit.dart | 15 ++-- .../cubit/email_verification_state.dart | 9 +- .../cubit/mixin/sign_in_anonymously.dart | 9 +- .../mixin/sign_in_with_email_password.dart | 9 +- .../cubit/mixin/sign_in_with_google.dart | 9 +- .../mixin/sign_up_with_email_password.dart | 9 +- .../authentication_cubit_test.dart | 18 ++-- .../authentication_state_test.dart | 19 ++--- .../email_verification_cubit_test.dart | 17 +++- 32 files changed, 319 insertions(+), 262 deletions(-) create mode 100644 packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart rename packages/wyatt_authentication_bloc/lib/src/domain/entities/{session.dart => authentication_change_event/authenticated_change_event.dart} (61%) delete mode 100644 packages/wyatt_authentication_bloc/lib/src/domain/entities/session_wrapper.dart diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart index 5f03c2f7..ba34a213 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart @@ -37,7 +37,7 @@ class ExampleAuthenticationCubit extends AuthenticationCubit { } @override - FutureOrResult onSignInFromCache(SessionWrapper wrapper) { + FutureOrResult onSignInFromCache(AuthenticationSession session) { print('onSignInFromCache'); return const Ok(1); diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart index dade25b8..463ea902 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/home/home_page.dart @@ -30,8 +30,7 @@ class HomePage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text( - 'Home | ${context.account, int>()?.email}'), + title: Text('Home | ${context.watchAccount()?.email}'), actions: [ IconButton( onPressed: () => @@ -44,8 +43,8 @@ class HomePage extends StatelessWidget { child: ListView( children: [ AuthenticationBuilder( - authenticated: (context, sessionWrapper) => Text( - 'Logged as ${sessionWrapper.session?.account.email} | GeneratedId is ${sessionWrapper.session?.data}'), + authenticated: (context, session) => Text( + 'Logged as ${session.account?.email} | GeneratedId is ${session.data}'), unauthenticated: (context) => const Text('Not logged (unauthenticated)'), unknown: (context) => const Text('Not logged (unknown)'), diff --git a/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart b/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart index c7753da4..83a4867c 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart @@ -17,26 +17,82 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session_wrapper.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/authentication_change_event/authentication_change_event.dart'; import 'package:wyatt_authentication_bloc/src/features/authentication/cubit/authentication_cubit.dart'; /// Extension that helps to quickly access useful resources like wrapper, /// session, account or data. extension BuildContextExtension on BuildContext { - /// Returns session wrapper - SessionWrapper? wrapper, Data>() => - watch().currentSession(); + /// Read session in context from a specific AuthenticationCubit type [T] + AuthenticationSession? + readSessionFrom, Data>() => + read().currentSession(); - /// Returns session - Session? session, Data>() => - watch().currentSession()?.session; + /// Watch session in context from a specific AuthenticationCubit type [T] + AuthenticationSession? + watchSessionFrom, Data>() => + watch().currentSession(); - /// Returns account - Account? account, Data>() => - watch().currentSession()?.session?.account; + /// Read session in context from generic AuthenticationCubit type + AuthenticationSession? readSession() => + read>().currentSession(); - /// Returns associated data - Data? data, Data>() => - watch().currentSession()?.session?.data; + /// Watch session in context from generic AuthenticationCubit type + AuthenticationSession? watchSession() => + watch>().currentSession(); + + /// Read event in context from a specific AuthenticationCubit type [T] + AuthenticationChangeEvent? + readEventFrom, Data>() => + readSessionFrom()?.latestEvent; + + /// Watch event in context from a specific AuthenticationCubit type [T] + AuthenticationChangeEvent? + watchEventFrom, Data>() => + watchSessionFrom()?.latestEvent; + + /// Read event in context from generic AuthenticationCubit type + AuthenticationChangeEvent? readEvent() => + readSession()?.latestEvent; + + /// Watch event in context from generic AuthenticationCubit type + AuthenticationChangeEvent? watchEvent() => + watchSession()?.latestEvent; + + /// Read account in context from a specific AuthenticationCubit type [T] + Account? readAccountFrom, Data>() => + readSessionFrom()?.account; + + /// Watch account in context from a specific AuthenticationCubit type [T] + Account? watchAccountFrom, Data>() => + watchSessionFrom()?.account; + + /// Read account in context from generic AuthenticationCubit type + Account? readAccount() => readSession()?.account; + + /// Watch account in context from generic AuthenticationCubit type + Account? watchAccount() => watchSession()?.account; + + /// Read data in context from a specific AuthenticationCubit type [T] + Data? readDataFrom, Data>() => + readSessionFrom()?.data; + + /// Watch data in context from a specific AuthenticationCubit type [T] + Data? watchDataFrom, Data>() => + watchSessionFrom()?.data; + + /// Read data in context from generic AuthenticationCubit type + Data? readData() => readSession()?.data; + + /// Watch data in context from generic AuthenticationCubit type + Data? watchData() => watchSession()?.data; + + /// Check if user is authenticated from a + /// specific AuthenticationCubit type [T] + bool isAuthenticatedFrom, Data>() => + readEventFrom() is AuthenticatedChangeEvent; + + /// Check if user is authenticated from generic AuthenticationCubit type + bool isAuthenticated() => readEvent() is AuthenticatedChangeEvent; } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index b2c9d4f2..f745e8cf 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -23,8 +23,8 @@ import 'package:wyatt_authentication_bloc/src/core/exceptions/exceptions.dart'; import 'package:wyatt_authentication_bloc/src/data/models/models.dart'; import 'package:wyatt_authentication_bloc/src/domain/data_sources/remote/authentication_remote_data_source.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/authentication_change_event/authentication_change_event.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session_wrapper.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; class AuthenticationFirebaseDataSourceImpl @@ -41,7 +41,7 @@ class AuthenticationFirebaseDataSourceImpl _checkForCachedAccount(); } - late StreamController> _sessionStream; + late StreamController> _sessionStream; late StreamController _latestCredentials; final FirebaseAuth _firebaseAuth; @@ -51,8 +51,11 @@ class AuthenticationFirebaseDataSourceImpl final currentUser = _firebaseAuth.currentUser; if (currentUser == null) { - _sessionStream - .add(const SessionWrapper(event: UnknownAuthenticationEvent())); + _sessionStream.add( + const AuthenticationSession( + latestEvent: UnknownAuthenticationEvent(), + ), + ); return; } @@ -62,7 +65,9 @@ class AuthenticationFirebaseDataSourceImpl accessToken: jwt, ); _sessionStream.add( - SessionWrapper(event: SignedInFromCacheEvent(account: currentAccount)), + AuthenticationSession.fromEvent( + SignedInFromCacheEvent(account: currentAccount), + ), ); return; } @@ -78,19 +83,23 @@ class AuthenticationFirebaseDataSourceImpl return account; } - // Stream related methods =================================================== + // Session related methods =================================================== /// {@macro add_session} @override - void addSession(SessionWrapper wrapper) { - _sessionStream.add(wrapper); + void addSession(AuthenticationSession session) { + _sessionStream.add(session); } /// {@macro session_stream} @override - Stream> sessionStream() => + Stream> sessionStream() => _sessionStream.stream.asBroadcastStream(); + /// {@macro current_session} + @override + Future> currentSession() => sessionStream().last; + // SignUp/SignIn methods ==================================================== /// {@macro signup_pwd} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart index 4d3a3f4e..3b2c8481 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart @@ -18,7 +18,7 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/src/core/utils/forms.dart'; import 'package:wyatt_authentication_bloc/src/domain/data_sources/remote/authentication_remote_data_source.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session_wrapper.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; import 'package:wyatt_authentication_bloc/src/domain/repositories/authentication_repository.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; @@ -73,18 +73,30 @@ class AuthenticationRepositoryImpl @override FormRepository get formRepository => _formRepository; - // Stream related methods =================================================== + // Session related methods =================================================== /// {@macro add_session} @override - void addSession(SessionWrapper wrapper) => - authenticationRemoteDataSource.addSession(wrapper); + void addSession(AuthenticationSession session) => + authenticationRemoteDataSource.addSession(session); /// {@macro session_stream} @override - Stream> sessionStream() => + Stream> sessionStream() => authenticationRemoteDataSource.sessionStream(); + /// {@macro current_session} + @override + FutureOrResult> currentSession() => + Result.tryCatchAsync, AppException, + AppException>( + () async { + final session = await authenticationRemoteDataSource.currentSession(); + return session; + }, + (error) => error, + ); + // SignUp/SignIn methods ==================================================== /// {@macro signup_pwd} diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart index 6bec3426..91cb2550 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart @@ -16,16 +16,16 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session_wrapper.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; /// Is responsible for abstracting the provenance of the data. abstract class AuthenticationRemoteDataSource extends BaseRemoteDataSource { - // Stream related methods =================================================== + // Session related methods =================================================== - void addSession(SessionWrapper wrapper); - - Stream> sessionStream(); + void addSession(AuthenticationSession session); + Stream> sessionStream(); + Future> currentSession(); // SignUp/SignIn methods ==================================================== diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart new file mode 100644 index 00000000..a5a37cf2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart @@ -0,0 +1,60 @@ +// 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 . + +import 'package:equatable/equatable.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; + +/// The [AuthenticationSession] object is used to transport and propagate +/// the last event issued by an authentication state change, a user account +/// if connected, and the associated data. +class AuthenticationSession extends Equatable { + const AuthenticationSession({ + required this.latestEvent, + this.account, + this.data, + }); + + factory AuthenticationSession.fromEvent( + AuthenticationChangeEvent latestEvent, { + Data? data, + }) { + if (latestEvent is AuthenticatedChangeEvent) { + return AuthenticationSession( + latestEvent: latestEvent, + account: latestEvent.account, + data: data, + ); + } + return AuthenticationSession( + latestEvent: latestEvent, + data: data, + ); + } + + final AuthenticationChangeEvent latestEvent; + final Account? account; + final Data? data; + + @override + List get props => [ + latestEvent, + account, + data, + ]; + + @override + bool? get stringify => true; +} diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/session.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authenticated_change_event.dart similarity index 61% rename from packages/wyatt_authentication_bloc/lib/src/domain/entities/session.dart rename to packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authenticated_change_event.dart index 61162ee8..03bb2d50 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/session.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authenticated_change_event.dart @@ -14,23 +14,15 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:equatable/equatable.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; +part of 'authentication_change_event.dart'; + + +/// Represents every event where user is authenticated. +abstract class AuthenticatedChangeEvent extends AuthenticationChangeEvent { + const AuthenticatedChangeEvent({required this.account}); -/// The [Session] object is used to transport and propagate -/// the connected user [Account] and personalized [Data] in the application. -class Session extends Equatable { - const Session({ - required this.account, - this.data, - }); - final Account account; - final Data? data; - - @override - List get props => [account, data]; @override - bool? get stringify => true; + List get props => [account]; } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart index 51d6e511..08312b7c 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart @@ -18,15 +18,16 @@ import 'package:equatable/equatable.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; +part 'authenticated_change_event.dart'; +part 'deleted_event.dart'; +part 'reauthenticated_event.dart'; +part 'refreshed_event.dart'; part 'signed_in_event.dart'; +part 'signed_in_from_cache_event.dart'; part 'signed_out_event.dart'; part 'signed_up_event.dart'; -part 'refreshed_event.dart'; -part 'reauthenticated_event.dart'; -part 'updated_event.dart'; part 'unknown_authentication_event.dart'; -part 'signed_in_from_cache_event.dart'; -part 'deleted_event.dart'; +part 'updated_event.dart'; /// Represents an event initiated by a change in /// the user's authentication status. diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart index 2ad9c96f..4cd8e13c 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart @@ -16,14 +16,9 @@ part of 'authentication_change_event.dart'; -/// When a user re-authenticates (from the logged in state to the -/// logged in state with a different and fresh access +/// When a user re-authenticates (from the logged in state to the +/// logged in state with a different and fresh access /// token and a different login time) -class ReauthenticatedEvent extends AuthenticationChangeEvent { - const ReauthenticatedEvent({required this.account}); - - final Account account; - - @override - List get props => [account]; +class ReauthenticatedEvent extends AuthenticatedChangeEvent { + const ReauthenticatedEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart index ce8651d3..e2971cc4 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart @@ -16,13 +16,8 @@ part of 'authentication_change_event.dart'; -/// When a user access token is refreshed (from the logged in state to the +/// When a user access token is refreshed (from the logged in state to the /// logged in state with a different access token) -class RefreshedEvent extends AuthenticationChangeEvent { - const RefreshedEvent({required this.account}); - - final Account account; - - @override - List get props => [account]; +class RefreshedEvent extends AuthenticatedChangeEvent { + const RefreshedEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart index 22cd6296..8d2fa0e3 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart @@ -17,11 +17,6 @@ part of 'authentication_change_event.dart'; /// When a user authenticates (from not logged in to logged in). -class SignedInEvent extends AuthenticationChangeEvent { - const SignedInEvent({required this.account}); - - final Account account; - - @override - List get props => [account]; +class SignedInEvent extends AuthenticatedChangeEvent { + const SignedInEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart index b32f098a..a4e57dda 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart @@ -17,11 +17,6 @@ part of 'authentication_change_event.dart'; /// When a user authenticates automatically (from not logged in to logged in). -class SignedInFromCacheEvent extends AuthenticationChangeEvent { - const SignedInFromCacheEvent({required this.account}); - - final Account account; - - @override - List get props => [account]; +class SignedInFromCacheEvent extends AuthenticatedChangeEvent { + const SignedInFromCacheEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart index 6683e0fa..903adbf1 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart @@ -17,11 +17,6 @@ part of 'authentication_change_event.dart'; /// When a user creates an account. -class SignedUpEvent extends AuthenticationChangeEvent { - const SignedUpEvent({required this.account}); - - final Account account; - - @override - List get props => [account]; +class SignedUpEvent extends AuthenticatedChangeEvent { + const SignedUpEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart index f64e6c74..117cc725 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart @@ -17,11 +17,6 @@ part of 'authentication_change_event.dart'; /// When the user's account has been updated. -class UpdatedEvent extends AuthenticationChangeEvent { - const UpdatedEvent({required this.account}); - - final Account account; - - @override - List get props => [account]; +class UpdatedEvent extends AuthenticatedChangeEvent { + const UpdatedEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart index a466a036..a1afb54e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/entities.dart @@ -15,6 +15,5 @@ // along with this program. If not, see . export 'account.dart'; +export 'auth_session.dart'; export 'authentication_change_event/authentication_change_event.dart'; -export 'session.dart'; -export 'session_wrapper.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/session_wrapper.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/session_wrapper.dart deleted file mode 100644 index 4fa2b924..00000000 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/session_wrapper.dart +++ /dev/null @@ -1,38 +0,0 @@ -// 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 . - -import 'package:equatable/equatable.dart'; -import 'package:wyatt_architecture/wyatt_architecture.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/authentication_change_event/authentication_change_event.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session.dart'; - -/// Contains the [AuthenticationChangeEvent] initiating the state -/// change and the current [Session]. -class SessionWrapper extends Equatable implements Entity { - const SessionWrapper({ - required this.event, - this.session, - }); - - final AuthenticationChangeEvent event; - final Session? session; - - @override - List get props => [event, session]; - - @override - bool get stringify => true; -} diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart index 1eb6fc25..ab32e322 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart @@ -16,7 +16,7 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session_wrapper.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; abstract class AuthenticationRepository extends BaseRepository { @@ -30,12 +30,17 @@ abstract class AuthenticationRepository extends BaseRepository { /// {@template add_session} /// Add a new authentication event. /// {@endtemplate} - void addSession(SessionWrapper wrapper); + void addSession(AuthenticationSession session); /// {@template session_stream} /// Authentication state change event stream. /// {@endtemplate} - Stream> sessionStream(); + Stream> sessionStream(); + + /// {@template current_session} + /// Latest session issued by the session stream. + /// {@endtemplate} + FutureOrResult> currentSession(); // SignUp/SignIn methods ==================================================== diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart index 19e77c20..3c9f1999 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart @@ -17,7 +17,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_authentication_bloc/src/core/enums/authentication_status.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/session_wrapper.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; import 'package:wyatt_authentication_bloc/src/features/authentication/cubit/authentication_cubit.dart'; class AuthenticationBuilder extends StatelessWidget { @@ -30,7 +30,7 @@ class AuthenticationBuilder extends StatelessWidget { final Widget Function( BuildContext context, - SessionWrapper sessionWrapper, + AuthenticationSession session, ) authenticated; final Widget Function(BuildContext context) unauthenticated; final Widget Function(BuildContext context) unknown; @@ -40,8 +40,8 @@ class AuthenticationBuilder extends StatelessWidget { BlocBuilder, AuthenticationState>( builder: (context, state) { if (state.status == AuthenticationStatus.authenticated) { - if (state.wrapper != null) { - return authenticated(context, state.wrapper!); + if (state.session != null) { + return authenticated(context, state.session!); } else { return unauthenticated(context); } diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart index c90ab44f..e6748680 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart @@ -42,35 +42,31 @@ abstract class AuthenticationCubit } final AuthenticationRepository authenticationRepository; - SessionWrapper? _latestSession; + AuthenticationSession? _latestSession; void _listenForAuthenticationChanges() { - authenticationRepository.sessionStream().asyncMap((wrapper) async { - final event = wrapper.event; + authenticationRepository.sessionStream().asyncMap((session) async { + final event = session.latestEvent; if (event is SignedInFromCacheEvent) { - final customRoutineResult = await onSignInFromCache(wrapper); + final customRoutineResult = await onSignInFromCache(session); if (customRoutineResult.isOk) { final account = event.account; final sessionData = customRoutineResult.ok; - final signedInSession = SessionWrapper( - event: SignedInFromCacheEvent(account: account), - session: Session( - account: account, - data: sessionData, - ), + final signedInSession = AuthenticationSession.fromEvent( + SignedInFromCacheEvent(account: account), + data: sessionData, ); return signedInSession; } } - return wrapper; - }).listen((wrapper) async { - _latestSession = wrapper; - final session = wrapper.session; - if (session != null) { - emit(AuthenticationState.authenticated(wrapper)); + return session; + }).listen((session) async { + _latestSession = session; + if (session.account != null) { + emit(AuthenticationState.authenticated(session)); return; } emit(AuthenticationState.unauthenticated()); @@ -80,19 +76,16 @@ abstract class AuthenticationCubit /// {@macro refresh} FutureOr refresh() async => CustomRoutine( - routine: authenticationRepository.refresh, - attachedLogic: onRefresh, - onError: addError, - onSuccess: (result, data) => authenticationRepository.addSession( - SessionWrapper( - event: RefreshedEvent(account: result), - session: Session( - account: result, + routine: authenticationRepository.refresh, + attachedLogic: onRefresh, + onError: addError, + onSuccess: (result, data) => authenticationRepository.addSession( + AuthenticationSession.fromEvent( + RefreshedEvent(account: result), data: data, ), ), - ), - ).call(); + ).call(); /// {@macro reauthenticate} FutureOr reauthenticate() async => CustomRoutine( @@ -100,12 +93,9 @@ abstract class AuthenticationCubit attachedLogic: onReauthenticate, onError: addError, onSuccess: (result, data) => authenticationRepository.addSession( - SessionWrapper( - event: ReauthenticatedEvent(account: result), - session: Session( - account: result, - data: data, - ), + AuthenticationSession.fromEvent( + ReauthenticatedEvent(account: result), + data: data, ), ), ).call(); @@ -115,8 +105,11 @@ abstract class AuthenticationCubit routine: authenticationRepository.signOut, attachedLogic: (routineResult) => onSignOut(), onError: addError, - onSuccess: (result, data) => authenticationRepository - .addSession(SessionWrapper(event: const SignedOutEvent())), + onSuccess: (result, data) => authenticationRepository.addSession( + const AuthenticationSession( + latestEvent: SignedOutEvent(), + ), + ), ).call(); /// {@macro delete} @@ -124,20 +117,23 @@ abstract class AuthenticationCubit routine: authenticationRepository.delete, attachedLogic: (routineResult) => onDelete(), onError: addError, - onSuccess: (result, data) => authenticationRepository - .addSession(SessionWrapper(event: const DeletedEvent())), + onSuccess: (result, data) => authenticationRepository.addSession( + const AuthenticationSession( + latestEvent: DeletedEvent(), + ), + ), ).call(); - /// Returns latest session wrapper. + /// Returns latest session. /// /// Contains latest event and latest session data (account + extra data) - SessionWrapper? currentSession() => _latestSession; + AuthenticationSession? currentSession() => _latestSession; /// This callback is triggered when the user is automaticcaly logged in from /// the cache. /// /// For example: when the user is sign in from the Firebase cache. - FutureOrResult onSignInFromCache(SessionWrapper wrapper); + FutureOrResult onSignInFromCache(AuthenticationSession session); /// This callback is triggered when the account is refreshed. /// diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart index cf672a4c..1f3a1c72 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart @@ -17,25 +17,25 @@ part of 'authentication_cubit.dart'; class AuthenticationState extends Equatable { - const AuthenticationState._(this.status, this.wrapper); + const AuthenticationState._(this.status, this.session); const AuthenticationState.unauthenticated() : this._(AuthenticationStatus.unauthenticated, null); - const AuthenticationState.authenticated(SessionWrapper sessionWrapper) + const AuthenticationState.authenticated(AuthenticationSession session) : this._( AuthenticationStatus.authenticated, - sessionWrapper, + session, ); const AuthenticationState.unknown() : this._(AuthenticationStatus.unknown, null); final AuthenticationStatus status; - final SessionWrapper? wrapper; + final AuthenticationSession? session; @override - List get props => [status, wrapper]; + List get props => [status, session]; @override bool? get stringify => true; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_email.dart b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_email.dart index 47aecb30..c755838f 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_email.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_email.dart @@ -111,12 +111,9 @@ mixin UpdateEmail on BaseEditAccountCubit { }, onSuccess: (account, data) { authenticationRepository.addSession( - SessionWrapper( - event: UpdatedEvent(account: account), - session: Session( - account: account, - data: data, - ), + AuthenticationSession.fromEvent( + UpdatedEvent(account: account), + data: data, ), ); emit( diff --git a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_password.dart b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_password.dart index 3b270800..31dcb20d 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_password.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/mixin/edit_password.dart @@ -110,12 +110,9 @@ mixin UpdatePassword on BaseEditAccountCubit { }, onSuccess: (account, data) { authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), + AuthenticationSession.fromEvent( + UpdatedEvent(account: account), + data: data, ), ); emit( diff --git a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart index 986b2bc9..56297baa 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart @@ -31,12 +31,13 @@ class EmailVerificationCubit extends Cubit { final AuthenticationRepository authenticationRepository; FutureOr sendEmailVerification() async { - emit(state.copyWith(status: FormStatus.submissionInProgress)); + emit(const EmailVerificationState(status: FormStatus.submissionInProgress)); final response = await authenticationRepository.sendEmailVerification(); emit( response.fold( - (value) => state.copyWith(status: FormStatus.submissionSuccess), - (error) => state.copyWith( + (value) => + const EmailVerificationState(status: FormStatus.submissionSuccess), + (error) => EmailVerificationState( errorMessage: error.message, status: FormStatus.submissionFailure, ), @@ -45,7 +46,7 @@ class EmailVerificationCubit extends Cubit { } FutureOr checkEmailVerification() async { - emit(state.copyWith(status: FormStatus.submissionInProgress)); + emit(const EmailVerificationState(status: FormStatus.submissionInProgress)); final refresh = await authenticationRepository.refresh(); if (refresh.isErr) { @@ -59,11 +60,11 @@ class EmailVerificationCubit extends Cubit { return; } - final wrapper = await authenticationRepository.sessionStream().last; - final currentAccount = wrapper.session?.account; + final session = await authenticationRepository.currentSession(); + final currentAccount = session.ok?.account; if (currentAccount != null) { emit( - state.copyWith( + EmailVerificationState( isVerified: currentAccount.emailVerified, status: FormStatus.submissionSuccess, ), diff --git a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart index c78db5b7..aa12191d 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // @@ -18,16 +17,16 @@ part of 'email_verification_cubit.dart'; class EmailVerificationState extends Equatable { - final FormStatus status; - final bool isVerified; - final String? errorMessage; - const EmailVerificationState({ this.isVerified = false, this.status = FormStatus.pure, this.errorMessage, }); + final FormStatus status; + final bool isVerified; + final String? errorMessage; + EmailVerificationState copyWith({ FormStatus? status, bool? isVerified, diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_anonymously.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_anonymously.dart index 2adf2f2f..fde28872 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_anonymously.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_anonymously.dart @@ -63,12 +63,9 @@ mixin SignInAnonymously on BaseSignInCubit { }, onSuccess: (account, data) { authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), + AuthenticationSession.fromEvent( + SignedInEvent(account: account), + data: data, ), ); emit( diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_email_password.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_email_password.dart index 36e7372b..616cde9b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_email_password.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_email_password.dart @@ -136,12 +136,9 @@ mixin SignInWithEmailPassword on BaseSignInCubit { }, onSuccess: (account, data) { authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), + AuthenticationSession.fromEvent( + SignedInEvent(account: account), + data: data, ), ); emit( diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_google.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_google.dart index 458844fe..1d814d19 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_google.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/mixin/sign_in_with_google.dart @@ -62,12 +62,9 @@ mixin SignInWithGoogle on BaseSignInCubit { }, onSuccess: (account, data) { authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), + AuthenticationSession.fromEvent( + SignedInEvent(account: account), + data: data, ), ); emit( diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/mixin/sign_up_with_email_password.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/mixin/sign_up_with_email_password.dart index 7c2f39f0..80d56b7b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/mixin/sign_up_with_email_password.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/mixin/sign_up_with_email_password.dart @@ -126,12 +126,9 @@ mixin SignUpWithEmailPassword on BaseSignUpCubit { }, onSuccess: (account, data) { authenticationRepository.addSession( - SessionWrapper( - event: SignedUpEvent(account: account), - session: Session( - account: account, - data: data, - ), + AuthenticationSession.fromEvent( + SignedUpEvent(account: account), + data: data, ), ); emit( diff --git a/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart b/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart index af1d17d7..f5c26033 100644 --- a/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart @@ -43,7 +43,9 @@ class TestAuthenticationCubit extends AuthenticationCubit { const Ok(null); @override - FutureOrResult onSignInFromCache(SessionWrapper wrapper) async => + FutureOrResult onSignInFromCache( + AuthenticationSession session, + ) async => const Ok(null); @override @@ -53,9 +55,10 @@ class TestAuthenticationCubit extends AuthenticationCubit { void main() { group('AuthenticationCubit', () { final MockAccount account = MockAccount(); - final SessionWrapper wrapper = SessionWrapper( - event: const UnknownAuthenticationEvent(), - session: Session(account: account, data: 10), + final AuthenticationSession session = AuthenticationSession( + latestEvent: const UnknownAuthenticationEvent(), + account: account, + data: 10, ); late AuthenticationRepository authenticationRepository; @@ -80,14 +83,14 @@ void main() { 'emits authenticated when stream contains session', setUp: () { when(() => authenticationRepository.sessionStream()).thenAnswer( - (_) => Stream.fromIterable([wrapper]), + (_) => Stream.fromIterable([session]), ); }, build: () => TestAuthenticationCubit( authenticationRepository: authenticationRepository, ), seed: () => const AuthenticationState.unknown(), - expect: () => [AuthenticationState.authenticated(wrapper)], + expect: () => [AuthenticationState.authenticated(session)], ); blocTest, AuthenticationState>( @@ -95,7 +98,8 @@ void main() { setUp: () { when(() => authenticationRepository.sessionStream()).thenAnswer( (_) => Stream.fromIterable( - [const SessionWrapper(event: SignedOutEvent())],), + [const AuthenticationSession(latestEvent: SignedOutEvent())], + ), ); }, build: () => TestAuthenticationCubit( diff --git a/packages/wyatt_authentication_bloc/test/authentication/authentication_state_test.dart b/packages/wyatt_authentication_bloc/test/authentication/authentication_state_test.dart index 92bd5258..9566f2f3 100644 --- a/packages/wyatt_authentication_bloc/test/authentication/authentication_state_test.dart +++ b/packages/wyatt_authentication_bloc/test/authentication/authentication_state_test.dart @@ -27,7 +27,7 @@ void main() { const AuthenticationState state = AuthenticationState.unauthenticated(); expect(state.status, AuthenticationStatus.unauthenticated); - expect(state.wrapper, null); + expect(state.session, null); }); }); @@ -36,13 +36,12 @@ void main() { final MockAccount account = MockAccount(); final AuthenticationState state = AuthenticationState.authenticated( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session(account: account), + AuthenticationSession.fromEvent( + SignedInEvent(account: account), ), ); expect(state.status, AuthenticationStatus.authenticated); - expect(state.wrapper?.session?.account, account); + expect(state.session?.account, account); }); }); @@ -52,14 +51,14 @@ void main() { const String extra = 'AwesomeExtraData'; final AuthenticationState state = AuthenticationState.authenticated( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session(account: account, data: extra), + AuthenticationSession.fromEvent( + SignedInEvent(account: account), + data: extra, ), ); expect(state.status, AuthenticationStatus.authenticated); - expect(state.wrapper?.session?.account, account); - expect(state.wrapper?.session?.data, extra); + expect(state.session?.account, account); + expect(state.session?.data, extra); }); }); }); diff --git a/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart b/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart index e1000d56..c6b944c5 100644 --- a/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart @@ -43,13 +43,24 @@ void main() { when(() => authenticationRepository.sessionStream()).thenAnswer( (_) => Stream.fromIterable([ - SessionWrapper( - event: SignedInFromCacheEvent(account: account), - session: Session(account: account, data: 10), + AuthenticationSession.fromEvent( + SignedInFromCacheEvent(account: account), + data: 10, ) ]), ); + when( + () => authenticationRepository.currentSession(), + ).thenAnswer( + (_) async => Ok( + AuthenticationSession.fromEvent( + SignedInFromCacheEvent(account: account), + data: 10, + ), + ), + ); + when( () => authenticationRepository.refresh(), ).thenAnswer((_) async => Ok(account)); -- 2.47.2 From eb4ae834c17321500433bd5e5337c34a8c7c6e1f Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 8 Feb 2023 16:09:26 +0100 Subject: [PATCH 245/320] fix(authentication): make sur access token is available on every steps --- .../sign_in/blocs/sign_in_cubit.dart | 2 +- ...hentication_firebase_data_source_impl.dart | 46 +++++++------------ .../lib/src/data/models/account_model.dart | 12 +++-- 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart index 947295c2..f8ad2ba2 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart @@ -27,7 +27,7 @@ class ExampleSignInCubit extends SignInCubit { @override FutureOrResult onSignInWithEmailAndPassword( Result result, WyattForm form) { - print('onSignInWithEmailAndPassword'); + print('onSignInWithEmailAndPassword: ${result.ok?.accessToken}'); return const Ok(1); } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index f745e8cf..de644d5e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -72,11 +72,15 @@ class AuthenticationFirebaseDataSourceImpl return; } - Account _addToStream( + Future _addToCredentialStream( UserCredential userCredential, - AuthenticationChangeEvent Function(Account account) eventBuilder, - ) { - final account = AccountModel.fromFirebaseUserCredential(userCredential); + ) async { + final currentUser = _firebaseAuth.currentUser; + final jwt = await currentUser?.getIdToken(true); + final account = AccountModel.fromFirebaseUserCredential( + userCredential, + accessToken: jwt, + ); _latestCredentials.add(userCredential); @@ -114,12 +118,7 @@ class AuthenticationFirebaseDataSourceImpl password: password, ); - return _addToStream( - userCredential, - (account) => SignedUpEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code); } catch (_) { @@ -139,12 +138,7 @@ class AuthenticationFirebaseDataSourceImpl password: password, ); - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code); } catch (_) { @@ -158,12 +152,7 @@ class AuthenticationFirebaseDataSourceImpl try { final userCredential = await _firebaseAuth.signInAnonymously(); - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignInAnonymouslyFailureFirebase.fromCode(e.code); } catch (_) { @@ -191,12 +180,7 @@ class AuthenticationFirebaseDataSourceImpl final userCredential = await _firebaseAuth.signInWithCredential(credential); - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); + return _addToCredentialStream(userCredential); } on FirebaseAuthException catch (e) { throw SignInWithGoogleFailureFirebase.fromCode(e.code); } catch (_) { @@ -248,7 +232,11 @@ class AuthenticationFirebaseDataSourceImpl throw Exception(); // Get caught just after. } - final account = AccountModel.fromFirebaseUser(_firebaseAuth.currentUser); + final jwt = await _firebaseAuth.currentUser?.getIdToken(true); + final account = AccountModel.fromFirebaseUser( + _firebaseAuth.currentUser, + accessToken: jwt, + ); return account; } on FirebaseAuthException catch (e) { diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart index c79d54e8..cca70988 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart @@ -21,8 +21,9 @@ import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; /// Account Model to parse Firebase User data class AccountModel extends Account { factory AccountModel.fromFirebaseUserCredential( - UserCredential? userCredential, - ) { + UserCredential? userCredential, { + required String? accessToken, + }) { final user = userCredential?.user; if (user != null) { final providerId = @@ -39,14 +40,17 @@ class AccountModel extends Account { email: user.email, phoneNumber: user.phoneNumber, photoURL: user.photoURL, - accessToken: userCredential?.credential?.accessToken, + accessToken: accessToken, ); } else { throw ModelParsingFailureFirebase('null-user', 'User cannot be null'); } } - factory AccountModel.fromFirebaseUser(User? user, {String? accessToken}) { + factory AccountModel.fromFirebaseUser( + User? user, { + required String? accessToken, + }) { if (user != null) { final providerId = (user.providerData.isEmpty) ? '' : user.providerData.first.providerId; -- 2.47.2 From 5a7930550d44a181e5d47b648cb7e5c7c78cc42c Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 8 Mar 2023 12:55:30 +0100 Subject: [PATCH 246/320] style(authentication): dart format + add some docs --- .../lib/src/core/constants/form_field.dart | 2 ++ .../lib/src/core/constants/form_name.dart | 3 +++ .../src/core/enums/authentication_status.dart | 2 ++ .../core/extensions/build_context_extension.dart | 4 ++-- .../lib/src/core/utils/custom_routine.dart | 16 +++++++++++++--- .../lib/src/core/utils/forms.dart | 5 +++++ .../lib/src/data/models/account_model.dart | 6 ++++++ .../lib/src/domain/entities/account.dart | 5 ++++- .../lib/src/domain/entities/auth_session.dart | 9 +++++++++ .../authenticated_change_event.dart | 5 ++++- .../authentication_change_event.dart | 3 +++ .../deleted_event.dart | 3 +++ .../reauthenticated_event.dart | 3 +++ .../refreshed_event.dart | 3 +++ .../signed_in_event.dart | 3 +++ .../signed_in_from_cache_event.dart | 3 +++ .../signed_out_event.dart | 3 +++ .../signed_up_event.dart | 3 +++ .../unknown_authentication_event.dart | 3 +++ .../updated_event.dart | 3 +++ .../builder/authentication_builder.dart | 9 +++++++++ .../cubit/authentication_state.dart | 10 ++++++++++ .../cubit/base_edit_account_cubit.dart | 5 +++++ .../edit_account/cubit/edit_account_cubit.dart | 3 +++ .../edit_account/cubit/edit_account_state.dart | 7 +++++++ .../listener/edit_account_listener.dart | 13 +++++++++++++ .../builder/email_verification_builder.dart | 11 +++++++++++ .../cubit/email_verification_cubit.dart | 5 +++++ .../cubit/email_verification_state.dart | 9 +++++++++ .../cubit/password_reset_cubit.dart | 5 +++++ .../cubit/password_reset_state.dart | 6 ++++++ .../sign_in/cubit/base_sign_in_cubit.dart | 7 ++++++- .../features/sign_in/cubit/sign_in_cubit.dart | 6 ++++-- .../features/sign_in/cubit/sign_in_state.dart | 7 +++++++ .../sign_in/listener/sign_in_listener.dart | 15 ++++++++++++++- .../sign_up/cubit/base_sign_up_cubit.dart | 7 ++++++- .../features/sign_up/cubit/sign_up_cubit.dart | 5 ++++- .../features/sign_up/cubit/sign_up_state.dart | 8 +++++++- .../sign_up/listener/sign_up_listener.dart | 15 ++++++++++++++- 39 files changed, 225 insertions(+), 15 deletions(-) diff --git a/packages/wyatt_authentication_bloc/lib/src/core/constants/form_field.dart b/packages/wyatt_authentication_bloc/lib/src/core/constants/form_field.dart index bbfc22e8..590e9ae6 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/constants/form_field.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/constants/form_field.dart @@ -18,8 +18,10 @@ abstract class AuthFormField { /// Email field: `wyattEmailField` static const email = 'wyattEmailField'; + /// Password field: `wyattPasswordField` static const password = 'wyattPasswordField'; + /// Confirm Password field: `wyattConfirmPasswordField` static const confirmPassword = 'wyattConfirmPasswordField'; } diff --git a/packages/wyatt_authentication_bloc/lib/src/core/constants/form_name.dart b/packages/wyatt_authentication_bloc/lib/src/core/constants/form_name.dart index 16f58cf0..17281b1e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/constants/form_name.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/constants/form_name.dart @@ -18,10 +18,13 @@ abstract class AuthFormName { /// Sign Up form: `wyattSignUpForm` static const String signUpForm = 'wyattSignUpForm'; + /// Sign In form: `wyattSignInForm` static const String signInForm = 'wyattSignInForm'; + /// Password reset form: `wyattPasswordResetForm` static const String passwordResetForm = 'wyattPasswordResetForm'; + /// Edit account form: `wyattEditAccountForm` static const String editAccountForm = 'wyattEditAccountForm'; } diff --git a/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart b/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart index b88a7407..4a96cc46 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/enums/authentication_status.dart @@ -18,8 +18,10 @@ enum AuthenticationStatus { /// At the application launch. unknown, + /// When the user is logged authenticated, + /// When the user is not logged unauthenticated, } diff --git a/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart b/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart index 83a4867c..d473dace 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/extensions/build_context_extension.dart @@ -21,8 +21,8 @@ import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart' import 'package:wyatt_authentication_bloc/src/domain/entities/authentication_change_event/authentication_change_event.dart'; import 'package:wyatt_authentication_bloc/src/features/authentication/cubit/authentication_cubit.dart'; -/// Extension that helps to quickly access useful resources like wrapper, -/// session, account or data. +/// Extension that helps to quickly access useful resources +/// from the context. extension BuildContextExtension on BuildContext { /// Read session in context from a specific AuthenticationCubit type [T] AuthenticationSession? diff --git a/packages/wyatt_authentication_bloc/lib/src/core/utils/custom_routine.dart b/packages/wyatt_authentication_bloc/lib/src/core/utils/custom_routine.dart index bdd1eb7a..ff58f8df 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/utils/custom_routine.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/utils/custom_routine.dart @@ -20,10 +20,12 @@ import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; -/// Calls on each cubit action of this package. -/// -/// Useful to register custom logic on pre-implemented logic. +/// {@template custom_routine} +/// A custom routine that can be used to call a routine and +/// attach custom logic to it. +/// {@endtemplate} class CustomRoutine { + /// {@macro custom_routine} const CustomRoutine({ required this.routine, required this.attachedLogic, @@ -31,13 +33,21 @@ class CustomRoutine { required this.onSuccess, }); + /// The routine to be called final FutureOr> Function() routine; + + /// The custom logic to be attached to the routine final FutureOr> Function( Result routineResult, ) attachedLogic; + + /// The callback to be called when an error occurs final void Function(AppException exception) onError; + + /// The callback to be called when no error occurs final void Function(R result, Data? data) onSuccess; + /// Calls the routine and calls the custom attached logic FutureOr call() async { final result = await routine.call(); diff --git a/packages/wyatt_authentication_bloc/lib/src/core/utils/forms.dart b/packages/wyatt_authentication_bloc/lib/src/core/utils/forms.dart index f8f8bf17..ec95768b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/utils/forms.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/utils/forms.dart @@ -17,7 +17,9 @@ import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; +/// This class contains all the forms used in the authentication process. abstract class Forms { + /// Builds a sign in form. static WyattForm buildSignInForm( FormInputValidator? customEmailValidator, FormInputValidator? customPasswordValidator, @@ -36,6 +38,7 @@ abstract class Forms { name: AuthFormName.signInForm, ); + /// Builds a sign up form. static WyattForm buildSignUpForm( FormInputValidator? customEmailValidator, FormInputValidator? customPasswordValidator, @@ -57,6 +60,7 @@ abstract class Forms { name: AuthFormName.signUpForm, ); + /// Builds a password reset form. static WyattForm buildPasswordResetForm( FormInputValidator? customEmailValidator, ) => @@ -70,6 +74,7 @@ abstract class Forms { name: AuthFormName.passwordResetForm, ); + /// Builds an edit account form. static WyattForm buildEditAccountForm( FormInputValidator? customEmailValidator, FormInputValidator? customPasswordValidator, diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart index cca70988..ebc29f93 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart @@ -18,8 +18,11 @@ import 'package:firebase_auth/firebase_auth.dart'; import 'package:wyatt_authentication_bloc/src/core/exceptions/exceptions.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; +/// {@template account_model} /// Account Model to parse Firebase User data +/// {@endtemplate} class AccountModel extends Account { + /// {@macro account_model} factory AccountModel.fromFirebaseUserCredential( UserCredential? userCredential, { required String? accessToken, @@ -47,6 +50,7 @@ class AccountModel extends Account { } } + /// {@macro account_model} factory AccountModel.fromFirebaseUser( User? user, { required String? accessToken, @@ -72,6 +76,7 @@ class AccountModel extends Account { throw ModelParsingFailureFirebase('null-user', 'User cannot be null'); } } + const AccountModel._({ required this.user, required super.id, @@ -87,6 +92,7 @@ class AccountModel extends Account { super.accessToken, }); + /// The Firebase User final User? user; @override diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/account.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/account.dart index ee6cd353..c0186496 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/account.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/account.dart @@ -17,9 +17,12 @@ import 'package:equatable/equatable.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; -/// Represents a user [Account] in the +/// {@template account} +/// Represents a user [Account] in the /// various identity provisioning systems. +/// {@endtemplate} class Account extends Equatable implements Entity { + /// {@macro account} const Account({ required this.id, required this.isAnonymous, diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart index a5a37cf2..bdcbff74 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/auth_session.dart @@ -17,16 +17,20 @@ import 'package:equatable/equatable.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; +/// {@template authentication_session} /// The [AuthenticationSession] object is used to transport and propagate /// the last event issued by an authentication state change, a user account /// if connected, and the associated data. +/// {@endtemplate} class AuthenticationSession extends Equatable { + /// {@macro authentication_session} const AuthenticationSession({ required this.latestEvent, this.account, this.data, }); + /// Creates a new [AuthenticationSession] from an [AuthenticationChangeEvent]. factory AuthenticationSession.fromEvent( AuthenticationChangeEvent latestEvent, { Data? data, @@ -44,8 +48,13 @@ class AuthenticationSession extends Equatable { ); } + /// The last event issued by an authentication state change. final AuthenticationChangeEvent latestEvent; + + /// The user account if connected. final Account? account; + + /// The associated data. final Data? data; @override diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authenticated_change_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authenticated_change_event.dart index 03bb2d50..fb9487dd 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authenticated_change_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authenticated_change_event.dart @@ -16,11 +16,14 @@ part of 'authentication_change_event.dart'; - +/// {@template authenticated_change_event} /// Represents every event where user is authenticated. +/// {@endtemplate} abstract class AuthenticatedChangeEvent extends AuthenticationChangeEvent { + /// {@macro authenticated_change_event} const AuthenticatedChangeEvent({required this.account}); + /// The user's account. final Account account; @override diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart index 08312b7c..b32b68b4 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/authentication_change_event.dart @@ -29,9 +29,12 @@ part 'signed_up_event.dart'; part 'unknown_authentication_event.dart'; part 'updated_event.dart'; +/// {@template authentication_change_event} /// Represents an event initiated by a change in /// the user's authentication status. +/// {@endtemplate} abstract class AuthenticationChangeEvent extends Equatable implements Entity { + /// {@macro authentication_change_event} const AuthenticationChangeEvent(); @override diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/deleted_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/deleted_event.dart index 2eff8187..0ab52ae9 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/deleted_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/deleted_event.dart @@ -16,7 +16,10 @@ part of 'authentication_change_event.dart'; +/// {@template deleted_event} /// When a user deleted his account. +/// {@endtemplate} class DeletedEvent extends AuthenticationChangeEvent { + /// {@macro deleted_event} const DeletedEvent(); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart index 4cd8e13c..fa7e066a 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/reauthenticated_event.dart @@ -16,9 +16,12 @@ part of 'authentication_change_event.dart'; +/// {@template reauthenticated_event} /// When a user re-authenticates (from the logged in state to the /// logged in state with a different and fresh access /// token and a different login time) +/// {@endtemplate} class ReauthenticatedEvent extends AuthenticatedChangeEvent { + /// {@macro reauthenticated_event} const ReauthenticatedEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart index e2971cc4..f765c3cc 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/refreshed_event.dart @@ -16,8 +16,11 @@ part of 'authentication_change_event.dart'; +/// {@template refreshed_event} /// When a user access token is refreshed (from the logged in state to the /// logged in state with a different access token) +/// {@endtemplate} class RefreshedEvent extends AuthenticatedChangeEvent { + /// {@macro refreshed_event} const RefreshedEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart index 8d2fa0e3..17b2ae3e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_event.dart @@ -16,7 +16,10 @@ part of 'authentication_change_event.dart'; +/// {@template signed_in_event} /// When a user authenticates (from not logged in to logged in). +/// {@endtemplate} class SignedInEvent extends AuthenticatedChangeEvent { + /// {@macro signed_in_event} const SignedInEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart index a4e57dda..01bf868d 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_in_from_cache_event.dart @@ -16,7 +16,10 @@ part of 'authentication_change_event.dart'; +/// {@template signed_in_from_cache_event} /// When a user authenticates automatically (from not logged in to logged in). +/// {@endtemplate} class SignedInFromCacheEvent extends AuthenticatedChangeEvent { + /// {@macro signed_in_from_cache_event} const SignedInFromCacheEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_out_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_out_event.dart index e7579097..dc4ea4cd 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_out_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_out_event.dart @@ -16,7 +16,10 @@ part of 'authentication_change_event.dart'; +/// {@template signed_out_event} /// When a user logs out. +/// {@endtemplate} class SignedOutEvent extends AuthenticationChangeEvent { + /// {@macro signed_out_event} const SignedOutEvent(); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart index 903adbf1..f95f7e5e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/signed_up_event.dart @@ -16,7 +16,10 @@ part of 'authentication_change_event.dart'; +/// {@template signed_up_event} /// When a user creates an account. +/// {@endtemplate} class SignedUpEvent extends AuthenticatedChangeEvent { + /// {@macro signed_up_event} const SignedUpEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/unknown_authentication_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/unknown_authentication_event.dart index 93c56dec..287b53a0 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/unknown_authentication_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/unknown_authentication_event.dart @@ -16,7 +16,10 @@ part of 'authentication_change_event.dart'; +/// {@template unknown_authentication_event} /// When a user's login status is unknown. +/// {@endtemplate} class UnknownAuthenticationEvent extends AuthenticationChangeEvent { + /// {@macro unknown_authentication_event} const UnknownAuthenticationEvent(); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart index 117cc725..2178a56e 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/entities/authentication_change_event/updated_event.dart @@ -16,7 +16,10 @@ part of 'authentication_change_event.dart'; +/// {@template updated_event} /// When the user's account has been updated. +/// {@endtemplate} class UpdatedEvent extends AuthenticatedChangeEvent { + /// {@macro updated_event} const UpdatedEvent({required super.account}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart index 3c9f1999..46eb0a57 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/builder/authentication_builder.dart @@ -20,7 +20,11 @@ import 'package:wyatt_authentication_bloc/src/core/enums/authentication_status.d import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; import 'package:wyatt_authentication_bloc/src/features/authentication/cubit/authentication_cubit.dart'; +/// {@template authentication_builder} +/// A widget that builds itself based on the current authentication state. +/// {@endtemplate} class AuthenticationBuilder extends StatelessWidget { + /// {@macro authentication_builder} const AuthenticationBuilder({ required this.authenticated, required this.unauthenticated, @@ -28,11 +32,16 @@ class AuthenticationBuilder extends StatelessWidget { super.key, }); + /// Widget to show when the user is authenticated. final Widget Function( BuildContext context, AuthenticationSession session, ) authenticated; + + /// Widget to show when the user is unauthenticated. final Widget Function(BuildContext context) unauthenticated; + + /// Widget to show when the authentication status is unknown. final Widget Function(BuildContext context) unknown; @override diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart index 1f3a1c72..8a51d674 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_state.dart @@ -16,22 +16,32 @@ part of 'authentication_cubit.dart'; +/// {@template authentication_status} +/// The status of the authentication cubit. +/// {@endtemplate} class AuthenticationState extends Equatable { + /// {@macro authentication_status} const AuthenticationState._(this.status, this.session); + /// The user is not authenticated. const AuthenticationState.unauthenticated() : this._(AuthenticationStatus.unauthenticated, null); + /// The user is authenticated. const AuthenticationState.authenticated(AuthenticationSession session) : this._( AuthenticationStatus.authenticated, session, ); + /// The user's authentication status is unknown. const AuthenticationState.unknown() : this._(AuthenticationStatus.unknown, null); + /// The status of the authentication cubit. final AuthenticationStatus status; + + /// The session of the authentication cubit. final AuthenticationSession? session; @override diff --git a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/base_edit_account_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/base_edit_account_cubit.dart index 3d6ba12d..119e16fd 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/base_edit_account_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/base_edit_account_cubit.dart @@ -16,10 +16,13 @@ part of 'edit_account_cubit.dart'; +/// {@template edit_account_cubit} /// Abstract edit account cubit useful for implementing a cubit with fine /// granularity by adding only the required mixins. +/// {@endtemplate} abstract class BaseEditAccountCubit extends FormDataCubit { + /// {@macro edit_account_cubit} BaseEditAccountCubit({ required this.authenticationRepository, }) : super( @@ -28,6 +31,8 @@ abstract class BaseEditAccountCubit .accessForm(AuthFormName.signInForm), ), ); + + /// The authentication repository. final AuthenticationRepository authenticationRepository; FormRepository get formRepository => authenticationRepository.formRepository; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_cubit.dart index b3fcc2b2..abc378cc 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_cubit.dart @@ -28,11 +28,14 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'base_edit_account_cubit.dart'; part 'edit_account_state.dart'; +/// {@template edit_account_cubit} /// Fully featured edit account cubit. /// /// Sufficient in most cases. (Where fine granularity is not required.) +/// {@endtemplate} class EditAccountCubit extends BaseEditAccountCubit with UpdateEmail, UpdatePassword { + /// {@macro edit_account_cubit} EditAccountCubit({required super.authenticationRepository}); @override diff --git a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_state.dart index 0c8fbfba..d7dd5032 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/cubit/edit_account_state.dart @@ -16,15 +16,22 @@ part of 'edit_account_cubit.dart'; +/// {@template edit_account_state} /// Edit account cubit state to manage the form. +/// {@endtemplate} class EditAccountState extends FormDataState { + /// {@macro edit_account_state} const EditAccountState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + + /// Email validator of the form FormInputValidator get email => form.validatorOf(AuthFormField.email); + + /// Password validator of the form FormInputValidator get password => form.validatorOf(AuthFormField.password); diff --git a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/listener/edit_account_listener.dart b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/listener/edit_account_listener.dart index 62134eb5..9adcb5ec 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/edit_account/listener/edit_account_listener.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/edit_account/listener/edit_account_listener.dart @@ -19,9 +19,12 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_authentication_bloc/src/features/edit_account/cubit/edit_account_cubit.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; +/// {@template edit_account_listener} /// Widget that listens and builds a child based on the state of /// the edit account cubit +/// {@endtemplate} class EditAccountListener extends StatelessWidget { + /// {@macro edit_account_listener} const EditAccountListener({ required this.child, this.onProgress, @@ -31,15 +34,25 @@ class EditAccountListener extends StatelessWidget { super.key, }); + /// Callback to show when the edit account is in progress final void Function(BuildContext context)? onProgress; + + /// Callback to show when the edit account is successful final void Function(BuildContext context)? onSuccess; + + /// Callback to show when the edit account is unsuccessful final void Function( BuildContext context, FormStatus status, String? errorMessage, )? onError; + + /// Custom builder to show when the edit account is in progress, successful, + /// or unsuccessful final void Function(BuildContext context, EditAccountState state)? customBuilder; + + /// Child of the widget final Widget child; @override diff --git a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/builder/email_verification_builder.dart b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/builder/email_verification_builder.dart index 0de3bdf3..c030260d 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/builder/email_verification_builder.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/builder/email_verification_builder.dart @@ -19,7 +19,11 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_authentication_bloc/src/features/email_verification/cubit/email_verification_cubit.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; +/// {@template email_verification_builder} +/// A widget that builds itself based on the latest [EmailVerificationState]. +/// {@endtemplate} class EmailVerificationBuilder extends StatelessWidget { + /// {@macro email_verification_builder} const EmailVerificationBuilder({ required this.verified, required this.notVerified, @@ -28,14 +32,21 @@ class EmailVerificationBuilder extends StatelessWidget { super.key, }); + /// Widget to show when the email is verified final Widget Function(BuildContext context) verified; + + /// Widget to show when the email is not verified final Widget Function(BuildContext context) notVerified; + + /// Widget to show when the email verification is unsuccessful final Widget Function( BuildContext context, FormStatus status, String? errorMessage, ) onError; + /// Custom builder to show when the email is verified, not verified, or + /// unsuccessful final Widget Function(BuildContext context, EmailVerificationState)? customBuilder; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart index 56297baa..92227e52 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_cubit.dart @@ -23,11 +23,16 @@ import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; part 'email_verification_state.dart'; +/// {@template email_verification_cubit} +/// Cubit for sending email verification. +/// {@endtemplate} class EmailVerificationCubit extends Cubit { + /// {@macro email_verification_cubit} EmailVerificationCubit({ required this.authenticationRepository, }) : super(const EmailVerificationState()); + /// The [AuthenticationRepository] used to send email verification. final AuthenticationRepository authenticationRepository; FutureOr sendEmailVerification() async { diff --git a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart index aa12191d..22ac24c7 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/email_verification/cubit/email_verification_state.dart @@ -16,15 +16,24 @@ part of 'email_verification_cubit.dart'; +/// {@template email_verification_state} +/// The state of the [EmailVerificationCubit]. +/// {@endtemplate} class EmailVerificationState extends Equatable { + /// {@macro email_verification_state} const EmailVerificationState({ this.isVerified = false, this.status = FormStatus.pure, this.errorMessage, }); + /// The status of the form. final FormStatus status; + + /// Whether the email is verified. final bool isVerified; + + /// The error message if any. final String? errorMessage; EmailVerificationState copyWith({ diff --git a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart index c8624fc6..969528e3 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_cubit.dart @@ -24,8 +24,11 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'password_reset_state.dart'; +/// {@template password_reset_cubit} /// Cubit that allows user to reset his password +/// {@endtemplate} class PasswordResetCubit extends FormDataCubit { + /// {@macro password_reset_cubit} PasswordResetCubit({ required this.authenticationRepository, }) : super( @@ -34,6 +37,8 @@ class PasswordResetCubit extends FormDataCubit { .accessForm(AuthFormName.passwordResetForm), ), ); + + /// The repository that handles the authentication final AuthenticationRepository authenticationRepository; FormRepository get formRepository => authenticationRepository.formRepository; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart index cace663f..eafbf6b6 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/password_reset/cubit/password_reset_state.dart @@ -16,12 +16,18 @@ part of 'password_reset_cubit.dart'; +/// {@template password_reset_state} +/// The state of the [PasswordResetCubit]. +/// {@endtemplate} class PasswordResetState extends FormDataState { + /// {@macro password_reset_state} const PasswordResetState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + + /// The email validator of the form. Email get email => form.validatorOf(AuthFormField.email); PasswordResetState copyWith({ diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/base_sign_in_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/base_sign_in_cubit.dart index bc55b6a8..3d59bee5 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/base_sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/base_sign_in_cubit.dart @@ -16,9 +16,12 @@ part of 'sign_in_cubit.dart'; -/// Abstract sign in cubit useful for implementing a cubit with fine +/// {@template sign_in_cubit} +/// Abstract sign in cubit useful for implementing a cubit with fine /// granularity by adding only the required mixins. +/// {@endtemplate} abstract class BaseSignInCubit extends FormDataCubit { + /// {@macro sign_in_cubit} BaseSignInCubit({ required this.authenticationRepository, }) : super( @@ -27,6 +30,8 @@ abstract class BaseSignInCubit extends FormDataCubit { .accessForm(AuthFormName.signInForm), ), ); + + /// The authentication repository. final AuthenticationRepository authenticationRepository; FormRepository get formRepository => authenticationRepository.formRepository; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart index f1f3ccd5..fbde339c 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_cubit.dart @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . - import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; @@ -31,14 +30,17 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'base_sign_in_cubit.dart'; part 'sign_in_state.dart'; +/// {@template sign_in_cubit} /// Fully featured sign in cubit. -/// +/// /// Sufficient in most cases. (Where fine granularity is not required.) +/// {@endtemplate} class SignInCubit extends BaseSignInCubit with SignInAnonymously, SignInWithEmailPassword, SignInWithGoogle { + /// {@macro sign_in_cubit} SignInCubit({required super.authenticationRepository}); @override diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart index acb975b5..39ed623f 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/cubit/sign_in_state.dart @@ -16,15 +16,22 @@ part of 'sign_in_cubit.dart'; +/// {@template sign_in_state} /// Sign in cubit state to manage the form. +/// {@endtemplate} class SignInState extends FormDataState { + /// {@macro sign_in_state} const SignInState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + + /// Email validator of the form FormInputValidator get email => form.validatorOf(AuthFormField.email); + + /// Password validator of the form FormInputValidator get password => form.validatorOf(AuthFormField.password); diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/listener/sign_in_listener.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/listener/sign_in_listener.dart index cc66ac36..2d55fe16 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_in/listener/sign_in_listener.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_in/listener/sign_in_listener.dart @@ -19,9 +19,12 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_authentication_bloc/src/features/sign_in/sign_in.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; -/// Widget that listens and builds a child based on the state of +/// {@template sign_in_listener} +/// Widget that listens and builds a child based on the state of /// the sign in cubit +/// {@endtemplate} class SignInListener extends StatelessWidget { + /// {@macro sign_in_listener} const SignInListener({ required this.child, this.onProgress, @@ -31,14 +34,24 @@ class SignInListener extends StatelessWidget { super.key, }); + /// Callback to show when the sign in is in progress final void Function(BuildContext context)? onProgress; + + /// Callback to show when the sign in is successful final void Function(BuildContext context)? onSuccess; + + /// Callback to show when the sign in is unsuccessful final void Function( BuildContext context, FormStatus status, String? errorMessage, )? onError; + + /// Custom builder to show when the sign in is in progress, successful, or + /// unsuccessful final void Function(BuildContext context, SignInState state)? customBuilder; + + /// Child of the widget final Widget child; @override diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/base_sign_up_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/base_sign_up_cubit.dart index 42747ce3..3691f4c5 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/base_sign_up_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/base_sign_up_cubit.dart @@ -16,9 +16,12 @@ part of 'sign_up_cubit.dart'; -/// Abstract sign up cubit useful for implementing a cubit with fine +/// {@template base_sign_up_cubit} +/// Abstract sign up cubit useful for implementing a cubit with fine /// granularity by adding only the required mixins. +/// {@endtemplate} abstract class BaseSignUpCubit extends FormDataCubit { + /// {@macro base_sign_up_cubit} BaseSignUpCubit({ required this.authenticationRepository, }) : super( @@ -27,6 +30,8 @@ abstract class BaseSignUpCubit extends FormDataCubit { .accessForm(AuthFormName.signUpForm), ), ); + + /// The authentication repository. final AuthenticationRepository authenticationRepository; FormRepository get formRepository => authenticationRepository.formRepository; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart index 75c285cf..09a76667 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_cubit.dart @@ -28,11 +28,14 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'base_sign_up_cubit.dart'; part 'sign_up_state.dart'; +/// {@template sign_up_cubit} /// Fully featured sign up cubit. -/// +/// /// Sufficient in most cases. (Where fine granularity is not required.) +/// {@endtemplate} class SignUpCubit extends BaseSignUpCubit with SignUpWithEmailPassword { + /// {@macro sign_up_cubit} SignUpCubit({required super.authenticationRepository}); @override diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart index a66a3693..ac04efd5 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/cubit/sign_up_state.dart @@ -16,15 +16,22 @@ part of 'sign_up_cubit.dart'; +/// {@template sign_up_state} /// Sign up cubit state to manage the form. +/// {@endtemplate} class SignUpState extends FormDataState { + /// {@macro sign_up_state} const SignUpState({ required super.form, super.status = FormStatus.pure, super.errorMessage, }); + + /// Email validator of the form FormInputValidator get email => form.validatorOf(AuthFormField.email); + + /// Password validator of the form FormInputValidator get password => form.validatorOf(AuthFormField.password); @@ -42,7 +49,6 @@ class SignUpState extends FormDataState { @override List get props => [email, password, status, form]; - @override @override String toString() => 'SignUpState(status: ${status.name} ' '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; diff --git a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/listener/sign_up_listener.dart b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/listener/sign_up_listener.dart index 1493df64..b4e5ad39 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/sign_up/listener/sign_up_listener.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/sign_up/listener/sign_up_listener.dart @@ -19,9 +19,12 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_authentication_bloc/src/features/sign_up/cubit/sign_up_cubit.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; -/// Widget that listens and builds a child based on the state of +/// {@template sign_up_listener} +/// Widget that listens and builds a child based on the state of /// the sign up cubit +/// {@endtemplate} class SignUpListener extends StatelessWidget { + /// {@macro sign_up_listener} const SignUpListener({ required this.child, this.onProgress, @@ -31,14 +34,24 @@ class SignUpListener extends StatelessWidget { super.key, }); + /// Callback to show when the sign up is in progress final void Function(BuildContext context)? onProgress; + + /// Callback to show when the sign up is successful final void Function(BuildContext context)? onSuccess; + + /// Callback to show when the sign up is unsuccessful final void Function( BuildContext context, FormStatus status, String? errorMessage, )? onError; + + /// Custom builder to show when the sign up is in progress, successful, or + /// unsuccessful final void Function(BuildContext context, SignUpState state)? customBuilder; + + /// Child of the widget final Widget child; @override -- 2.47.2 From d53e7b80da619fb844e6213bc70ba71ba112ccab Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 8 Mar 2023 12:57:24 +0100 Subject: [PATCH 247/320] refactor(authentication)!: split data sources (cache, session, external) --- .../src/data/data_sources/data_sources.dart | 3 +- ...ation_firebase_cache_data_source_impl.dart | 56 +++++++++++++++++++ ...thentication_session_data_source_impl.dart | 45 +++++++++++++++ .../src/data/data_sources/local/local.dart | 18 ++++++ ...hentication_firebase_data_source_impl.dart | 53 ++---------------- .../src/data/data_sources/remote/remote.dart | 17 ++++++ .../authentication_repository_impl.dart | 54 +++++++++++++++--- .../src/domain/data_sources/data_sources.dart | 3 +- .../authentication_cache_data_source.dart | 40 +++++++++++++ .../authentication_session_data_source.dart | 36 ++++++++++++ .../src/domain/data_sources/local/local.dart | 18 ++++++ .../authentication_remote_data_source.dart | 40 ++++++++++--- .../domain/data_sources/remote/remote.dart | 17 ++++++ .../authentication_repository.dart | 14 ++++- .../cubit/authentication_cubit.dart | 26 ++++++++- 15 files changed, 371 insertions(+), 69 deletions(-) create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_session_data_source_impl.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_cache_data_source.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_session_data_source.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/local.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/remote.dart diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/data_sources.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/data_sources.dart index 65cebddf..843f681b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/data_sources.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/data_sources.dart @@ -14,4 +14,5 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'remote/authentication_firebase_data_source_impl.dart'; +export 'local/local.dart'; +export 'remote/remote.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart new file mode 100644 index 00000000..910887c2 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart @@ -0,0 +1,56 @@ +// 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 . + +import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_cache_data_source.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; + +/// {@template authentication_firebase_cache_data_source_impl} +/// A data source that manages the cache strategy. +/// This implementation uses Firebase. +/// {@endtemplate} +class AuthenticationFirebaseCacheDataSourceImpl + extends AuthenticationCacheDataSource { + /// {@macro authentication_firebase_cache_data_source_impl} + AuthenticationFirebaseCacheDataSourceImpl({ + FirebaseAuth? firebaseAuth, + }) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance; + + final FirebaseAuth _firebaseAuth; + + // Already done by Firebase + @override + Future cacheAccount(Account account) => Future.value(); + + @override + Future getCachedAccount() async { + final currentUser = _firebaseAuth.currentUser; + if (currentUser == null) { + return null; + } + + final jwt = await currentUser.getIdToken(true); + final currentAccount = AccountModel.fromFirebaseUser( + currentUser, + accessToken: jwt, + ); + + return currentAccount; + } + + // Already done by Firebase + @override + Future removeCachedAccount() => Future.value(); +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_session_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_session_data_source_impl.dart new file mode 100644 index 00000000..1287d889 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_session_data_source_impl.dart @@ -0,0 +1,45 @@ +// 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 . + +import 'dart:async'; + +import 'package:rxdart/subjects.dart'; +import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_session_data_source.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; + +/// {@template authentication_session_data_source_impl} +/// A data source that manages the current session. +/// {@endtemplate} +class AuthenticationSessionDataSourceImpl + extends AuthenticationSessionDataSource { + /// {@macro authentication_session_data_source_impl} + AuthenticationSessionDataSourceImpl(); + + final StreamController> _sessionStream = + BehaviorSubject(); + + @override + void addSession(AuthenticationSession session) { + _sessionStream.add(session); + } + + @override + Future> currentSession() => sessionStream().last; + + @override + Stream> sessionStream() => + _sessionStream.stream.asBroadcastStream(); +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart new file mode 100644 index 00000000..ba60b5e6 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart @@ -0,0 +1,18 @@ +// 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 . + +export 'authentication_firebase_cache_data_source_impl.dart'; +export 'authentication_session_data_source_impl.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart index de644d5e..f2552b87 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_firebase_data_source_impl.dart @@ -23,55 +23,27 @@ import 'package:wyatt_authentication_bloc/src/core/exceptions/exceptions.dart'; import 'package:wyatt_authentication_bloc/src/data/models/models.dart'; import 'package:wyatt_authentication_bloc/src/domain/data_sources/remote/authentication_remote_data_source.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/authentication_change_event/authentication_change_event.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; +/// {@template authentication_firebase_data_source_impl} +/// Implementation of [AuthenticationRemoteDataSource] using Firebase. +/// {@endtemplate} class AuthenticationFirebaseDataSourceImpl extends AuthenticationRemoteDataSource { + /// {@macro authentication_firebase_data_source_impl} AuthenticationFirebaseDataSourceImpl({ FirebaseAuth? firebaseAuth, GoogleSignIn? googleSignIn, }) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance, _googleSignIn = googleSignIn ?? GoogleSignIn() { _latestCredentials = BehaviorSubject(); - _sessionStream = BehaviorSubject(); - - // Check for account in memory (persistence) - _checkForCachedAccount(); } - late StreamController> _sessionStream; late StreamController _latestCredentials; final FirebaseAuth _firebaseAuth; final GoogleSignIn _googleSignIn; - Future _checkForCachedAccount() async { - final currentUser = _firebaseAuth.currentUser; - - if (currentUser == null) { - _sessionStream.add( - const AuthenticationSession( - latestEvent: UnknownAuthenticationEvent(), - ), - ); - return; - } - - final jwt = await currentUser.getIdToken(true); - final currentAccount = AccountModel.fromFirebaseUser( - currentUser, - accessToken: jwt, - ); - _sessionStream.add( - AuthenticationSession.fromEvent( - SignedInFromCacheEvent(account: currentAccount), - ), - ); - return; - } - Future _addToCredentialStream( UserCredential userCredential, ) async { @@ -87,23 +59,6 @@ class AuthenticationFirebaseDataSourceImpl return account; } - // Session related methods =================================================== - - /// {@macro add_session} - @override - void addSession(AuthenticationSession session) { - _sessionStream.add(session); - } - - /// {@macro session_stream} - @override - Stream> sessionStream() => - _sessionStream.stream.asBroadcastStream(); - - /// {@macro current_session} - @override - Future> currentSession() => sessionStream().last; - // SignUp/SignIn methods ==================================================== /// {@macro signup_pwd} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart new file mode 100644 index 00000000..5a8c8679 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart @@ -0,0 +1,17 @@ +// 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 . + +export 'authentication_firebase_data_source_impl.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart index 3b2c8481..652cca7a 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart @@ -16,17 +16,22 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/src/core/utils/forms.dart'; -import 'package:wyatt_authentication_bloc/src/domain/data_sources/remote/authentication_remote_data_source.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; -import 'package:wyatt_authentication_bloc/src/domain/repositories/authentication_repository.dart'; +import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_cache_data_source.dart'; +import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_session_data_source.dart'; +import 'package:wyatt_authentication_bloc/src/domain/domain.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; +/// {@template authentication_repository_impl} +/// The default implementation of [AuthenticationRepository]. +/// {@endtemplate} class AuthenticationRepositoryImpl extends AuthenticationRepository { + /// {@macro authentication_repository_impl} AuthenticationRepositoryImpl({ required this.authenticationRemoteDataSource, + required this.authenticationCacheDataSource, + required this.authenticationSessionDataSource, FormRepository? formRepository, // ignore: strict_raw_type List? extraSignUpInputs, @@ -66,24 +71,57 @@ class AuthenticationRepositoryImpl ); } + /// The remote data source used to perform the authentication process. final AuthenticationRemoteDataSource authenticationRemoteDataSource; + + /// The cache data source used to cache the current account. + final AuthenticationCacheDataSource authenticationCacheDataSource; + + /// The session data source used to manage the current session. + final AuthenticationSessionDataSource authenticationSessionDataSource; + late FormRepository _formRepository; /// {@macro form_repo} @override FormRepository get formRepository => _formRepository; + // Cache related methods ==================================================== + + /// {@macro check_cache_account} + @override + Future checkForCachedAccount() async { + final cachedAccount = + await authenticationCacheDataSource.getCachedAccount(); + + if (cachedAccount == null) { + addSession( + const AuthenticationSession( + latestEvent: UnknownAuthenticationEvent(), + ), + ); + return; + } + + addSession( + AuthenticationSession.fromEvent( + SignedInFromCacheEvent(account: cachedAccount), + ), + ); + return; + } + // Session related methods =================================================== /// {@macro add_session} @override void addSession(AuthenticationSession session) => - authenticationRemoteDataSource.addSession(session); + authenticationSessionDataSource.addSession(session); /// {@macro session_stream} @override Stream> sessionStream() => - authenticationRemoteDataSource.sessionStream(); + authenticationSessionDataSource.sessionStream(); /// {@macro current_session} @override @@ -91,7 +129,9 @@ class AuthenticationRepositoryImpl Result.tryCatchAsync, AppException, AppException>( () async { - final session = await authenticationRemoteDataSource.currentSession(); + final session = + await authenticationSessionDataSource.currentSession(); + return session; }, (error) => error, diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/data_sources.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/data_sources.dart index 4a8f3011..843f681b 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/data_sources.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/data_sources.dart @@ -14,4 +14,5 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'remote/authentication_remote_data_source.dart'; +export 'local/local.dart'; +export 'remote/remote.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_cache_data_source.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_cache_data_source.dart new file mode 100644 index 00000000..911ec217 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_cache_data_source.dart @@ -0,0 +1,40 @@ +// 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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; + +/// {@template authentication_cache_data_source} +/// A data source that manages the cache strategy. +/// {@endtemplate} +abstract class AuthenticationCacheDataSource extends BaseLocalDataSource { + /// {@macro authentication_cache_data_source} + const AuthenticationCacheDataSource(); + + /// Returns the cached account if it exists. + Future getCachedAccount(); + + /// Adds the current account to the cache. + /// + /// If an account is already cached, it will be replaced. + Future cacheAccount(Account account); + + /// Removes the current account from the cache. + /// + /// The cache will be empty after this operation. + /// If no account is cached, nothing will happen. + Future removeCachedAccount(); +} diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_session_data_source.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_session_data_source.dart new file mode 100644 index 00000000..c24d859a --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/authentication_session_data_source.dart @@ -0,0 +1,36 @@ +// 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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; + +/// {@template authentication_session_data_source} +/// A data source that manages the current session. +/// {@endtemplate} +abstract class AuthenticationSessionDataSource + extends BaseLocalDataSource { + /// {@macro authentication_session_data_source} + const AuthenticationSessionDataSource(); + + /// Adds a new session to the data source. + void addSession(AuthenticationSession session); + + /// Returns a stream of sessions. + Stream> sessionStream(); + + /// Returns the current session. + Future> currentSession(); +} diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/local.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/local.dart new file mode 100644 index 00000000..739d4717 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/local/local.dart @@ -0,0 +1,18 @@ +// 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 . + +export 'authentication_cache_data_source.dart'; +export 'authentication_session_data_source.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart index 91cb2550..8d9afab5 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/authentication_remote_data_source.dart @@ -16,49 +16,71 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; -import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; -/// Is responsible for abstracting the provenance of the data. +/// {@template authentication_remote_data_source} +/// A remote data source for authentication. +/// It is responsible for all the external communication with the authentication +/// providers. +/// {@endtemplate} abstract class AuthenticationRemoteDataSource extends BaseRemoteDataSource { - // Session related methods =================================================== - - void addSession(AuthenticationSession session); - Stream> sessionStream(); - Future> currentSession(); + /// {@macro authentication_remote_data_source} + const AuthenticationRemoteDataSource(); // SignUp/SignIn methods ==================================================== + /// Sign up with email and password. Future signUpWithEmailAndPassword({ required String email, required String password, }); + /// Sign in with email and password. Future signInWithEmailAndPassword({ required String email, required String password, }); + + /// Sign in anonymously. Future signInAnonymously(); + + /// Sign in with Google. Future signInWithGoogle(); + /// Sign out. Future signOut(); // Account management methods =============================================== - - // Future linkCurrentUserWith(AuthenticationProvider anotherProvider); + + /// Refresh the current account. Future refresh(); + + /// Reauthenticate the current account. Future reauthenticate(); + + /// Update the current account's email. Future updateEmail({required String email}); + + /// Update the current account's password. Future updatePassword({required String password}); + + /// Delete the current account. Future delete(); // Email related stuff ====================================================== + /// Send an email verification. Future sendEmailVerification(); + + /// Send a password reset email. Future sendPasswordResetEmail({required String email}); + + /// Confirm password reset. Future confirmPasswordReset({ required String code, required String newPassword, }); + + /// Verify password reset code. Future verifyPasswordResetCode({required String code}); } diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/remote.dart b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/remote.dart new file mode 100644 index 00000000..7d684507 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/domain/data_sources/remote/remote.dart @@ -0,0 +1,17 @@ +// 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 . + +export 'authentication_remote_data_source.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart index ab32e322..a4f8769c 100644 --- a/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart +++ b/packages/wyatt_authentication_bloc/lib/src/domain/repositories/authentication_repository.dart @@ -19,13 +19,25 @@ import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart'; import 'package:wyatt_authentication_bloc/src/domain/entities/auth_session.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; +/// {@template auth_repo} +/// Authentication repository interface. +/// {@endtemplate} abstract class AuthenticationRepository extends BaseRepository { /// {@template form_repo} /// Form repository used in different authentication cubits/blocs /// {@endtemplate} FormRepository get formRepository; - // Stream related methods =================================================== + // Cache related methods ==================================================== + + /// {@template check_cache_account} + /// Checks if there is a cached account. + /// And if there is, it will sign in the user automatically by + /// emitting an event. + /// {@endtemplate} + Future checkForCachedAccount(); + + // Session related methods =================================================== /// {@template add_session} /// Add a new authentication event. diff --git a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart index e6748680..e5abf6ec 100644 --- a/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart +++ b/packages/wyatt_authentication_bloc/lib/src/features/authentication/cubit/authentication_cubit.dart @@ -27,27 +27,45 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; part 'authentication_state.dart'; +/// {@template authentication_cubit} /// Abstract authentication cubit class needs to be implemented in application. /// /// This cubit is in charge of managing the global authentication state of /// the application. /// /// Its here you can override every callbacks and add your custom logic. +/// {@endtemplate} abstract class AuthenticationCubit extends Cubit> { + /// {@macro authentication_cubit} AuthenticationCubit({ required this.authenticationRepository, }) : super(const AuthenticationState.unknown()) { - _listenForAuthenticationChanges(); + _init(); } + + /// The authentication repository. final AuthenticationRepository authenticationRepository; + /// The latest session. AuthenticationSession? _latestSession; + /// Method that is called when the cubit is initialized. + Future _init() async { + /// Setup listeners. + _listenForAuthenticationChanges(); + + /// Check if there is a cached account. + await authenticationRepository.checkForCachedAccount(); + } + void _listenForAuthenticationChanges() { authenticationRepository.sessionStream().asyncMap((session) async { final event = session.latestEvent; + + /// If the session is signed in from cache. if (event is SignedInFromCacheEvent) { + /// Call the custom routine. final customRoutineResult = await onSignInFromCache(session); if (customRoutineResult.isOk) { @@ -64,12 +82,18 @@ abstract class AuthenticationCubit } return session; }).listen((session) async { + /// Save the latest session. _latestSession = session; + + /// If there is an account: emit authenticated state. if (session.account != null) { emit(AuthenticationState.authenticated(session)); return; } + + /// If there is no account: emit unauthenticated state. emit(AuthenticationState.unauthenticated()); + return; }); } -- 2.47.2 From 4d872edc4e83184189de23c0c3ca6c6bbee0b047 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 8 Mar 2023 12:57:56 +0100 Subject: [PATCH 248/320] docs(authentication): update example with multiple data sources --- .../example/README.md | 18 +---- .../example/ios/Podfile.lock | 16 ++-- .../ios/Runner.xcodeproj/project.pbxproj | 4 + .../ios/Runner/GoogleService-Info.plist | 38 ++++++++++ .../example/lib/bootstrap.dart | 9 --- .../lib/core/dependency_injection/get_it.dart | 73 +++++++++++++++++-- .../example/lib/core/enums/dev_mode.dart | 44 +++++++++++ .../example/lib/core/flavors/flavor.dart | 72 ++++++++++++++++++ .../example/lib/firebase_options.dart | 6 +- .../example/lib/main.dart | 8 +- ...in_firebase.dart => main_development.dart} | 8 +- .../lib/presentation/features/app/app.dart | 3 + .../presentation/features/sub/sub_page.dart | 3 +- 13 files changed, 261 insertions(+), 41 deletions(-) create mode 100644 packages/wyatt_authentication_bloc/example/ios/Runner/GoogleService-Info.plist create mode 100644 packages/wyatt_authentication_bloc/example/lib/core/enums/dev_mode.dart create mode 100644 packages/wyatt_authentication_bloc/example/lib/core/flavors/flavor.dart rename packages/wyatt_authentication_bloc/example/lib/{main_firebase.dart => main_development.dart} (82%) diff --git a/packages/wyatt_authentication_bloc/example/README.md b/packages/wyatt_authentication_bloc/example/README.md index 139e82ee..df389404 100644 --- a/packages/wyatt_authentication_bloc/example/README.md +++ b/packages/wyatt_authentication_bloc/example/README.md @@ -1,16 +1,6 @@ # example_router -A new Flutter project. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +```sh +firebase emulators:start --only auth +flutter run --target lib/main_development.dart --dart-define="dev_mode=emulator" +``` diff --git a/packages/wyatt_authentication_bloc/example/ios/Podfile.lock b/packages/wyatt_authentication_bloc/example/ios/Podfile.lock index bc6894a5..4e5cbe34 100644 --- a/packages/wyatt_authentication_bloc/example/ios/Podfile.lock +++ b/packages/wyatt_authentication_bloc/example/ios/Podfile.lock @@ -10,11 +10,11 @@ PODS: - FirebaseAuth (~> 10.3.0) - Firebase/CoreOnly (10.3.0): - FirebaseCore (= 10.3.0) - - firebase_auth (4.2.0): + - firebase_auth (4.2.9): - Firebase/Auth (= 10.3.0) - firebase_core - Flutter - - firebase_core (2.4.0): + - firebase_core (2.7.0): - Firebase/CoreOnly (= 10.3.0) - Flutter - FirebaseAuth (10.3.0): @@ -29,6 +29,8 @@ PODS: - FirebaseCoreInternal (10.3.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - Flutter (1.0.0) + - flutter_secure_storage (6.0.0): + - Flutter - google_sign_in_ios (0.0.1): - Flutter - GoogleSignIn (~> 6.2) @@ -61,6 +63,7 @@ DEPENDENCIES: - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - Flutter (from `Flutter`) + - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`) SPEC REPOS: @@ -83,19 +86,22 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/firebase_core/ios" Flutter: :path: Flutter + flutter_secure_storage: + :path: ".symlinks/plugins/flutter_secure_storage/ios" google_sign_in_ios: :path: ".symlinks/plugins/google_sign_in_ios/ios" SPEC CHECKSUMS: AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add Firebase: f92fc551ead69c94168d36c2b26188263860acd9 - firebase_auth: 579a0dc15451491cc83fccaa5102296635f24938 - firebase_core: 6f2f753e316765799d88568232ed59e300ff53db + firebase_auth: 4e8c693e848ed13b263de2d702d55fa82ed04a79 + firebase_core: 128d8c43c3a453a4a67463314fc3761bedff860b FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6 FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a FirebaseCoreInternal: 29b76f784d607df8b2a1259d73c3f04f1210137b Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - google_sign_in_ios: 4f85eb9f937450765c8573bb85fd8cd6a5af675c + flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be + google_sign_in_ios: 1256ff9d941db546373826966720b0c24804bcdd GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95 GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd diff --git a/packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.pbxproj b/packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.pbxproj index 85497888..eda3ed8b 100644 --- a/packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 44F5B6790A35D9BA26574F6B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F6E17622FCECE9BFC2543397 /* GoogleService-Info.plist */; }; 69F3BBCD5DEB05A456F6B74F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0A061B2E527F311149C3581 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -46,6 +47,7 @@ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; B0A061B2E527F311149C3581 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F0D7945BAE0BEA457137ED73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + F6E17622FCECE9BFC2543397 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; F9340E3A859C31E59380BD0F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -91,6 +93,7 @@ 97C146EF1CF9000F007C117D /* Products */, 66B357379C2757D2844F12BB /* Pods */, BC1E25CE0DADDF7B7201CCF8 /* Frameworks */, + F6E17622FCECE9BFC2543397 /* GoogleService-Info.plist */, ); sourceTree = ""; }; @@ -192,6 +195,7 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + 44F5B6790A35D9BA26574F6B /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/packages/wyatt_authentication_bloc/example/ios/Runner/GoogleService-Info.plist b/packages/wyatt_authentication_bloc/example/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..ac60a458 --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9 + ANDROID_CLIENT_ID + 136771801992-n2pq8oqutvrqj58e05hbavvc7n1jdfjb.apps.googleusercontent.com + API_KEY + AIzaSyCDbbhjbFrQwLXuIANdJzjkDk8uOETnn7w + GCM_SENDER_ID + 136771801992 + PLIST_VERSION + 1 + BUNDLE_ID + com.example.exampleRouter + PROJECT_ID + tchat-beta + STORAGE_BUCKET + tchat-beta.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:136771801992:ios:bcdca68d2b7d227097203d + DATABASE_URL + https://tchat-beta.firebaseio.com + + \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart index 05ee6358..948e01fd 100644 --- a/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart +++ b/packages/wyatt_authentication_bloc/example/lib/bootstrap.dart @@ -18,11 +18,8 @@ import 'dart:async'; import 'package:example_router/core/dependency_injection/get_it.dart'; import 'package:example_router/core/utils/app_bloc_observer.dart'; -import 'package:example_router/firebase_options.dart'; -import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; class MockSettings { static MockSettings? _instance; @@ -70,12 +67,6 @@ Future bootstrap(FutureOr Function() builder) async { debugPrint(details.toString()); }; - if (MockSettings.isDisable()) { - await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, - ); - await FirebaseAuth.instance.useAuthEmulator('localhost', 9099); - } await GetItInitializer.init(); runApp(await builder()); diff --git a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart index 1490523f..a4833f56 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart @@ -14,20 +14,81 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:async'; + +import 'package:example_router/core/enums/dev_mode.dart'; +import 'package:example_router/core/flavors/flavor.dart'; import 'package:example_router/firebase_options.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:get_it/get_it.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; final getIt = GetIt.I; +/// Service and Data Source locator abstract class GetItInitializer { - static Future init() async { - getIt.registerLazySingleton>( - () => AuthenticationFirebaseDataSourceImpl( - firebaseAuth: FirebaseAuth.instance, - googleSignIn: - GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)), + static FutureOr _initCommon() async { + // Initialize common sources/services + getIt.registerLazySingleton>( + () => AuthenticationSessionDataSourceImpl(), ); + } + + static FutureOr _initEmulator() async { + // Initialize emulator sources/services + final firebaseAuth = FirebaseAuth.instance; + await firebaseAuth.useAuthEmulator('localhost', 9099); + getIt + ..registerLazySingleton>( + () => AuthenticationFirebaseDataSourceImpl( + firebaseAuth: firebaseAuth, + googleSignIn: + GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)), + ) + ..registerLazySingleton>( + () => AuthenticationFirebaseCacheDataSourceImpl( + firebaseAuth: firebaseAuth, + ), + ); + } + + static FutureOr _initFirebase() async { + // Initialize firebase sources/services. + getIt + ..registerLazySingleton>( + () => AuthenticationFirebaseDataSourceImpl( + firebaseAuth: FirebaseAuth.instance, + googleSignIn: + GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)), + ) + ..registerLazySingleton>( + () => AuthenticationFirebaseCacheDataSourceImpl( + firebaseAuth: FirebaseAuth.instance, + ), + ); + } + + static FutureOr _initRest() async { + // Initialize rest api sources/services + } + + static FutureOr init() async { + await _initCommon(); + final flavor = Flavor.get(); + + if (flavor.devMode == DevMode.rest) { + await _initRest(); + } else if (flavor.devMode == DevMode.emulator) { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + await _initEmulator(); + } else { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + await _initFirebase(); + } await getIt.allReady(); } diff --git a/packages/wyatt_authentication_bloc/example/lib/core/enums/dev_mode.dart b/packages/wyatt_authentication_bloc/example/lib/core/enums/dev_mode.dart new file mode 100644 index 00000000..5c99b7f8 --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/core/enums/dev_mode.dart @@ -0,0 +1,44 @@ +// 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 . + +enum DevMode { + /// Mocked values + mock, + + /// Real values from REST API + rest, + + /// Emulated values with Firebase Emulator + emulator, + + /// Real values from Firebase + real; + + @override + String toString() => name; + + /// Tries to parse String and returns mode. Fallback is returned if there + /// is an error during parsing. + static DevMode fromString(String? mode, {DevMode fallback = DevMode.mock}) { + for (final m in values) { + if (m.name == mode) { + return m; + } + } + + return fallback; + } +} diff --git a/packages/wyatt_authentication_bloc/example/lib/core/flavors/flavor.dart b/packages/wyatt_authentication_bloc/example/lib/core/flavors/flavor.dart new file mode 100644 index 00000000..9fef201a --- /dev/null +++ b/packages/wyatt_authentication_bloc/example/lib/core/flavors/flavor.dart @@ -0,0 +1,72 @@ +// 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 . + +import 'package:example_router/core/enums/dev_mode.dart'; +import 'package:flutter/material.dart'; + +abstract class Flavor { + Flavor._({ + this.banner, + this.bannerColor = Colors.red, + this.devMode, + }) { + _instance = this; + } + + static Flavor? _instance; + + final String? banner; + final Color bannerColor; + final DevMode? devMode; + + /// Returns [Flavor] instance. + static Flavor get() { + if (_instance == null) { + throw Exception('Flavor not initialized!'); + } + + return _instance!; + } + + @override + String toString() => runtimeType.toString().replaceAll('Flavor', ''); +} + +class DevelopmentFlavor extends Flavor { + factory DevelopmentFlavor() { + const modeString = String.fromEnvironment('dev_mode', defaultValue: 'mock'); + final mode = DevMode.fromString(modeString); + + return DevelopmentFlavor._(devMode: mode); + } + DevelopmentFlavor._({ + required super.devMode, + }) : super._( + banner: 'Dev', + ); +} + +class StagingFlavor extends Flavor { + StagingFlavor() + : super._( + banner: 'Staging', + bannerColor: Colors.green, + ); +} + +class ProductionFlavor extends Flavor { + ProductionFlavor() : super._(); +} diff --git a/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart b/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart index dcf7c17e..0725ddb4 100644 --- a/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart +++ b/packages/wyatt_authentication_bloc/example/lib/firebase_options.dart @@ -65,8 +65,10 @@ class DefaultFirebaseOptions { projectId: 'tchat-beta', databaseURL: 'https://tchat-beta.firebaseio.com', storageBucket: 'tchat-beta.appspot.com', - androidClientId: '136771801992-n2pq8oqutvrqj58e05hbavvc7n1jdfjb.apps.googleusercontent.com', - iosClientId: '136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9.apps.googleusercontent.com', + androidClientId: + '136771801992-n2pq8oqutvrqj58e05hbavvc7n1jdfjb.apps.googleusercontent.com', + iosClientId: + '136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9.apps.googleusercontent.com', iosBundleId: 'com.example.exampleRouter', ); } diff --git a/packages/wyatt_authentication_bloc/example/lib/main.dart b/packages/wyatt_authentication_bloc/example/lib/main.dart index a7967932..a8d69968 100644 --- a/packages/wyatt_authentication_bloc/example/lib/main.dart +++ b/packages/wyatt_authentication_bloc/example/lib/main.dart @@ -15,9 +15,13 @@ // along with this program. If not, see . import 'package:example_router/bootstrap.dart'; +import 'package:example_router/core/flavors/flavor.dart'; import 'package:example_router/presentation/features/app/app.dart'; -void main() { - MockSettings.enable(); +void main(List args) { + // Define environment + ProductionFlavor(); + + // Initialize environment and variables bootstrap(App.new); } diff --git a/packages/wyatt_authentication_bloc/example/lib/main_firebase.dart b/packages/wyatt_authentication_bloc/example/lib/main_development.dart similarity index 82% rename from packages/wyatt_authentication_bloc/example/lib/main_firebase.dart rename to packages/wyatt_authentication_bloc/example/lib/main_development.dart index 62ee35ec..9025e30f 100644 --- a/packages/wyatt_authentication_bloc/example/lib/main_firebase.dart +++ b/packages/wyatt_authentication_bloc/example/lib/main_development.dart @@ -15,9 +15,13 @@ // along with this program. If not, see . import 'package:example_router/bootstrap.dart'; +import 'package:example_router/core/flavors/flavor.dart'; import 'package:example_router/presentation/features/app/app.dart'; -void main() { - MockSettings.disable(); +void main(List args) { + // Define environment + DevelopmentFlavor(); + + // Initialize environment and variables bootstrap(App.new); } diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart index 5285f63d..51b038d9 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/app/app.dart @@ -34,6 +34,9 @@ class App extends StatelessWidget { AuthenticationRepositoryImpl( authenticationRemoteDataSource: getIt>(), + authenticationSessionDataSource: + getIt>(), + authenticationCacheDataSource: getIt>(), customPasswordValidator: const CustomPassword.pure(), extraSignUpInputs: [ FormInput( diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart index 9c0f4ece..f56df50b 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/sub/sub_page.dart @@ -45,7 +45,8 @@ class SubPage extends StatelessWidget { children: [ const Text('Another page'), ElevatedButton( - onPressed: () => context.read>().delete(), + onPressed: () => + context.read>().delete(), child: const Text('Delete account'), ), ], -- 2.47.2 From 1d3e487d6b3472be57b4d6ecfbea0007d9b85fb9 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 10 Mar 2023 15:07:49 +0100 Subject: [PATCH 249/320] feat(authentication): add mock + local storage --- .../lib/src/core/constants/storage.dart | 22 + .../lib/src/core/exceptions/exceptions.dart | 2 + .../src/core/exceptions/exceptions_base.dart | 382 +++++++++++++++++ .../src/core/exceptions/exceptions_mock.dart | 390 ++++++++++++++++++ ...secure_storage_cache_data_source_impl.dart | 75 ++++ .../src/data/data_sources/local/local.dart | 1 + .../authentication_base_data_source.dart | 106 +++++ .../authentication_mock_data_source_impl.dart | 201 +++++++++ .../src/data/data_sources/remote/remote.dart | 2 + .../lib/src/data/models/account_model.dart | 24 ++ .../authentication_repository_impl.dart | 24 +- .../wyatt_authentication_bloc/pubspec.yaml | 2 + 12 files changed, 1228 insertions(+), 3 deletions(-) create mode 100644 packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_base.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_secure_storage_cache_data_source_impl.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_base_data_source.dart create mode 100644 packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart diff --git a/packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart b/packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart new file mode 100644 index 00000000..e3875066 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart @@ -0,0 +1,22 @@ +// 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 . + +abstract class AuthStorage { + static const String refreshToken = 'wyattRefreshToken'; + static const String accessToken = 'wyattAccessToken'; + static const String email = 'wyattEmail'; + static const String id = 'wyattId'; +} diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart index e10faebe..0fb036f7 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions.dart @@ -16,7 +16,9 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; +part 'exceptions_base.dart'; part 'exceptions_firebase.dart'; +part 'exceptions_mock.dart'; /// Base exception used in Wyatt Authentication abstract class AuthenticationFailureInterface extends AppException diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_base.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_base.dart new file mode 100644 index 00000000..cd994be5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_base.dart @@ -0,0 +1,382 @@ +// 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 . + +part of 'exceptions.dart'; + +/// {@macro apply_action_code_failure} +class ApplyActionCodeFailureBase extends ApplyActionCodeFailureInterface { + ApplyActionCodeFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + ApplyActionCodeFailureBase.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.'; + } + } +} + +/// {@macro sign_up_with_email_and_password_failure} +class SignUpWithEmailAndPasswordFailureBase + extends SignUpWithEmailAndPasswordFailureInterface { + SignUpWithEmailAndPasswordFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignUpWithEmailAndPasswordFailureBase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'The email address is badly formatted.'; + break; + case 'user-disabled': + msg = 'This user has been disabled. Please contact support for help.'; + break; + case 'email-already-in-use': + msg = 'An account already exists for that email.'; + break; + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + break; + case 'weak-password': + msg = 'Please enter a stronger password.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro fetch_sign_in_methods_failure} +class FetchSignInMethodsForEmailFailureBase + extends FetchSignInMethodsForEmailFailureInterface { + FetchSignInMethodsForEmailFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + FetchSignInMethodsForEmailFailureBase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'The email address is badly formatted.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_anonymously_failure} +class SignInAnonymouslyFailureBase extends SignInAnonymouslyFailureInterface { + SignInAnonymouslyFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInAnonymouslyFailureBase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_with_credential_failure} +class SignInWithCredentialFailureBase + extends SignInWithCredentialFailureInterface { + SignInWithCredentialFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInWithCredentialFailureBase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'account-exists-with-different-credential': + msg = 'Account exists with different credentials.'; + break; + case 'invalid-credential': + msg = 'The credential received is malformed or has expired.'; + break; + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + 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; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + case 'invalid-verification-code': + msg = 'The credential verification code received is invalid.'; + break; + case 'invalid-verification-id': + msg = 'The credential verification ID received is invalid.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_with_google_failure} +class SignInWithGoogleFailureBase extends SignInWithCredentialFailureBase + implements SignInWithGoogleFailureInterface { + SignInWithGoogleFailureBase([super.code, super.msg]); + SignInWithGoogleFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_facebook_failure} +class SignInWithFacebookFailureBase extends SignInWithCredentialFailureBase + implements SignInWithFacebookFailureInterface { + SignInWithFacebookFailureBase([super.code, super.msg]); + SignInWithFacebookFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_apple_failure} +class SignInWithAppleFailureBase extends SignInWithCredentialFailureBase + implements SignInWithAppleFailureInterface { + SignInWithAppleFailureBase([super.code, super.msg]); + SignInWithAppleFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_twitter_failure} +class SignInWithTwitterFailureBase extends SignInWithCredentialFailureBase + implements SignInWithAppleFailureInterface { + SignInWithTwitterFailureBase([super.code, super.msg]); + SignInWithTwitterFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_email_link_failure} +class SignInWithEmailLinkFailureBase + extends SignInWithEmailLinkFailureInterface { + SignInWithEmailLinkFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInWithEmailLinkFailureBase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'expired-action-code': + msg = 'Action code has expired.'; + break; + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'user-disabled': + msg = 'This user has been disabled. Please contact support for help.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_with_email_and_password_failure} +class SignInWithEmailAndPasswordFailureBase + extends SignInWithEmailAndPasswordFailureInterface { + SignInWithEmailAndPasswordFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInWithEmailAndPasswordFailureBase.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + 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; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro send_email_verification_failure} +class SendEmailVerificationFailureBase + extends SendEmailVerificationFailureInterface { + SendEmailVerificationFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + SendEmailVerificationFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro send_password_reset_email_failure} +class SendPasswordResetEmailFailureBase + extends SendPasswordResetEmailFailureInterface { + SendPasswordResetEmailFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SendPasswordResetEmailFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro send_sign_in_link_email_failure} +class SendSignInLinkEmailFailureBase + extends SendSignInLinkEmailFailureInterface { + SendSignInLinkEmailFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + SendSignInLinkEmailFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro confirm_password_reset_failure} +class ConfirmPasswordResetFailureBase + extends ConfirmPasswordResetFailureInterface { + ConfirmPasswordResetFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + ConfirmPasswordResetFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro verify_password_reset_code_failure} +class VerifyPasswordResetCodeFailureBase + extends VerifyPasswordResetCodeFailureInterface { + VerifyPasswordResetCodeFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + VerifyPasswordResetCodeFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro refresh_failure} +class RefreshFailureBase extends RefreshFailureInterface { + RefreshFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + RefreshFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_out_failure} +class SignOutFailureBase extends SignOutFailureInterface { + SignOutFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + SignOutFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro reauthenticate_failure} +class ReauthenticateFailureBase extends ReauthenticateFailureInterface { + ReauthenticateFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + ReauthenticateFailureBase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'user-mismatch': + msg = 'Given credential does not correspond to the user.'; + break; + case 'user-not-found': + msg = 'User is not found, please create an account.'; + break; + case 'invalid-credential': + msg = 'The credential received is malformed or has expired.'; + break; + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + case 'invalid-verification-code': + msg = 'The credential verification code received is invalid.'; + break; + case 'invalid-verification-id': + msg = 'The credential verification ID received is invalid.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro update_email_failure} +class UpdateEmailFailureBase extends UpdateEmailFailureInterface { + UpdateEmailFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + UpdateEmailFailureBase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'email-already-in-use': + msg = 'An account already exists for that email.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro update_password_failure} +class UpdatePasswordFailureBase extends UpdatePasswordFailureInterface { + UpdatePasswordFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + UpdatePasswordFailureBase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'weak-password': + msg = 'Please enter a stronger password.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro model_parsing_failure} +class ModelParsingFailureBase extends ModelParsingFailureInterface { + ModelParsingFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + ModelParsingFailureBase.fromCode(super.code) : super.fromCode(); +} + +/// {@macro delete_account_failure} +class DeleteAccountFailureBase extends DeleteAccountFailureInterface { + DeleteAccountFailureBase([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + DeleteAccountFailureBase.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart new file mode 100644 index 00000000..ad8b6826 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart @@ -0,0 +1,390 @@ +// 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 . + +part of 'exceptions.dart'; + +/// {@macro apply_action_code_failure} +class ApplyActionCodeFailureMock extends ApplyActionCodeFailureInterface { + ApplyActionCodeFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + ApplyActionCodeFailureMock.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.'; + } + } +} + +/// {@macro sign_up_with_email_and_password_failure} +class SignUpWithEmailAndPasswordFailureMock + extends SignUpWithEmailAndPasswordFailureInterface { + SignUpWithEmailAndPasswordFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignUpWithEmailAndPasswordFailureMock.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'The email address is badly formatted.'; + break; + case 'user-disabled': + msg = 'This user has been disabled. Please contact support for help.'; + break; + case 'email-already-in-use': + msg = 'An account already exists for that email.'; + break; + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + break; + case 'weak-password': + msg = 'Please enter a stronger password.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro fetch_sign_in_methods_failure} +class FetchSignInMethodsForEmailFailureMock + extends FetchSignInMethodsForEmailFailureInterface { + FetchSignInMethodsForEmailFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + FetchSignInMethodsForEmailFailureMock.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'The email address is badly formatted.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_anonymously_failure} +class SignInAnonymouslyFailureMock + extends SignInAnonymouslyFailureInterface { + SignInAnonymouslyFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInAnonymouslyFailureMock.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_with_credential_failure} +class SignInWithCredentialFailureMock + extends SignInWithCredentialFailureInterface { + SignInWithCredentialFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInWithCredentialFailureMock.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'account-exists-with-different-credential': + msg = 'Account exists with different credentials.'; + break; + case 'invalid-credential': + msg = 'The credential received is malformed or has expired.'; + break; + case 'operation-not-allowed': + msg = 'Operation is not allowed. Please contact support.'; + 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; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + case 'invalid-verification-code': + msg = 'The credential verification code received is invalid.'; + break; + case 'invalid-verification-id': + msg = 'The credential verification ID received is invalid.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_with_google_failure} +class SignInWithGoogleFailureMock + extends SignInWithCredentialFailureMock + implements SignInWithGoogleFailureInterface { + SignInWithGoogleFailureMock([super.code, super.msg]); + SignInWithGoogleFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_facebook_failure} +class SignInWithFacebookFailureMock + extends SignInWithCredentialFailureMock + implements SignInWithFacebookFailureInterface { + SignInWithFacebookFailureMock([super.code, super.msg]); + SignInWithFacebookFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_apple_failure} +class SignInWithAppleFailureMock extends SignInWithCredentialFailureMock + implements SignInWithAppleFailureInterface { + SignInWithAppleFailureMock([super.code, super.msg]); + SignInWithAppleFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_twitter_failure} +class SignInWithTwitterFailureMock + extends SignInWithCredentialFailureMock + implements SignInWithAppleFailureInterface { + SignInWithTwitterFailureMock([super.code, super.msg]); + SignInWithTwitterFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_in_with_email_link_failure} +class SignInWithEmailLinkFailureMock + extends SignInWithEmailLinkFailureInterface { + SignInWithEmailLinkFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInWithEmailLinkFailureMock.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'expired-action-code': + msg = 'Action code has expired.'; + break; + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'user-disabled': + msg = 'This user has been disabled. Please contact support for help.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro sign_in_with_email_and_password_failure} +class SignInWithEmailAndPasswordFailureMock + extends SignInWithEmailAndPasswordFailureInterface { + SignInWithEmailAndPasswordFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SignInWithEmailAndPasswordFailureMock.fromCode(String code) + : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + 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; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro send_email_verification_failure} +class SendEmailVerificationFailureMock + extends SendEmailVerificationFailureInterface { + SendEmailVerificationFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + SendEmailVerificationFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro send_password_reset_email_failure} +class SendPasswordResetEmailFailureMock + extends SendPasswordResetEmailFailureInterface { + SendPasswordResetEmailFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + SendPasswordResetEmailFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro send_sign_in_link_email_failure} +class SendSignInLinkEmailFailureMock + extends SendSignInLinkEmailFailureInterface { + SendSignInLinkEmailFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + SendSignInLinkEmailFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro confirm_password_reset_failure} +class ConfirmPasswordResetFailureMock + extends ConfirmPasswordResetFailureInterface { + ConfirmPasswordResetFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + ConfirmPasswordResetFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro verify_password_reset_code_failure} +class VerifyPasswordResetCodeFailureMock + extends VerifyPasswordResetCodeFailureInterface { + VerifyPasswordResetCodeFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + VerifyPasswordResetCodeFailureMock.fromCode(super.code) + : super.fromCode(); +} + +/// {@macro refresh_failure} +class RefreshFailureMock extends RefreshFailureInterface { + RefreshFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + RefreshFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro sign_out_failure} +class SignOutFailureMock extends SignOutFailureInterface { + SignOutFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + SignOutFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro reauthenticate_failure} +class ReauthenticateFailureMock extends ReauthenticateFailureInterface { + ReauthenticateFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + ReauthenticateFailureMock.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'user-mismatch': + msg = 'Given credential does not correspond to the user.'; + break; + case 'user-not-found': + msg = 'User is not found, please create an account.'; + break; + case 'invalid-credential': + msg = 'The credential received is malformed or has expired.'; + break; + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'wrong-password': + msg = 'Incorrect password, please try again.'; + break; + case 'invalid-verification-code': + msg = 'The credential verification code received is invalid.'; + break; + case 'invalid-verification-id': + msg = 'The credential verification ID received is invalid.'; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro update_email_failure} +class UpdateEmailFailureMock extends UpdateEmailFailureInterface { + UpdateEmailFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + UpdateEmailFailureMock.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'invalid-email': + msg = 'Email is not valid or badly formatted.'; + break; + case 'email-already-in-use': + msg = 'An account already exists for that email.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro update_password_failure} +class UpdatePasswordFailureMock extends UpdatePasswordFailureInterface { + UpdatePasswordFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + UpdatePasswordFailureMock.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'weak-password': + msg = 'Please enter a stronger password.'; + break; + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} + +/// {@macro model_parsing_failure} +class ModelParsingFailureMock extends ModelParsingFailureInterface { + ModelParsingFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + ModelParsingFailureMock.fromCode(super.code) : super.fromCode(); +} + +/// {@macro delete_account_failure} +class DeleteAccountFailureMock extends DeleteAccountFailureInterface { + DeleteAccountFailureMock([String? code, String? msg]) + : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); + + DeleteAccountFailureMock.fromCode(String code) : super.fromCode(code) { + switch (code) { + case 'requires-recent-login': + msg = "User's last sign-in time does not meet the security threshold."; + break; + default: + this.code = 'unknown'; + msg = 'An unknown error occurred.'; + } + } +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_secure_storage_cache_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_secure_storage_cache_data_source_impl.dart new file mode 100644 index 00000000..a59f3383 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_secure_storage_cache_data_source_impl.dart @@ -0,0 +1,75 @@ +// 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 . + +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:wyatt_authentication_bloc/src/core/constants/storage.dart'; +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; + +/// {@template authentication_secure_storage_cache_data_source_impl} +/// A data source that manages the cache strategy. +/// This implementation uses Secure Storage. +/// {@endtemplate} +class AuthenticationSecureStorageCacheDataSourceImpl + extends AuthenticationCacheDataSource { + /// {@macro authentication_secure_storage_cache_data_source_impl} + const AuthenticationSecureStorageCacheDataSourceImpl({ + FlutterSecureStorage? secureStorage, + }) : _secureStorage = secureStorage ?? const FlutterSecureStorage(); + + final FlutterSecureStorage _secureStorage; + + @override + Future cacheAccount(Account account) async { + await _secureStorage.write( + key: AuthStorage.id, + value: account.id, + ); + await _secureStorage.write( + key: AuthStorage.email, + value: account.email, + ); + await _secureStorage.write( + key: AuthStorage.accessToken, + value: account.accessToken, + ); + } + + @override + Future getCachedAccount() async { + final id = await _secureStorage.read(key: AuthStorage.id); + final email = await _secureStorage.read(key: AuthStorage.email); + final accessToken = await _secureStorage.read(key: AuthStorage.accessToken); + + if (id == null || email == null || accessToken == null) { + return null; + } + + final currentAccount = AccountModel.fromSecureStorage( + id: id, + email: email, + accessToken: accessToken, + ); + + return currentAccount; + } + + @override + Future removeCachedAccount() async { + await _secureStorage.delete(key: AuthStorage.id); + await _secureStorage.delete(key: AuthStorage.email); + await _secureStorage.delete(key: AuthStorage.accessToken); + } +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart index ba60b5e6..b9bf04e1 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/local.dart @@ -15,4 +15,5 @@ // along with this program. If not, see . export 'authentication_firebase_cache_data_source_impl.dart'; +export 'authentication_secure_storage_cache_data_source_impl.dart'; export 'authentication_session_data_source_impl.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_base_data_source.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_base_data_source.dart new file mode 100644 index 00000000..bbdd8dd9 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_base_data_source.dart @@ -0,0 +1,106 @@ +// 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 . + +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; + +/// {@template authentication_base_data_source} +/// Base class for custom [AuthenticationRemoteDataSource] implementations. +/// It implements all methods as throwing [UnimplementedError]s. +/// {@endtemplate} +class AuthenticationBaseDataSource + extends AuthenticationRemoteDataSource { + /// {@macro authentication_base_data_source} + const AuthenticationBaseDataSource(); + + @override + Future confirmPasswordReset({ + required String code, + required String newPassword, + }) { + throw UnimplementedError(); + } + + @override + Future delete() { + throw UnimplementedError(); + } + + @override + Future reauthenticate() { + throw UnimplementedError(); + } + + @override + Future refresh() { + throw UnimplementedError(); + } + + @override + Future sendEmailVerification() { + throw UnimplementedError(); + } + + @override + Future sendPasswordResetEmail({required String email}) { + throw UnimplementedError(); + } + + @override + Future signInAnonymously() { + throw UnimplementedError(); + } + + @override + Future signInWithEmailAndPassword({ + required String email, + required String password, + }) { + throw UnimplementedError(); + } + + @override + Future signInWithGoogle() { + throw UnimplementedError(); + } + + @override + Future signOut() { + throw UnimplementedError(); + } + + @override + Future signUpWithEmailAndPassword({ + required String email, + required String password, + }) { + throw UnimplementedError(); + } + + @override + Future updateEmail({required String email}) { + throw UnimplementedError(); + } + + @override + Future updatePassword({required String password}) { + throw UnimplementedError(); + } + + @override + Future verifyPasswordResetCode({required String code}) { + throw UnimplementedError(); + } +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart new file mode 100644 index 00000000..ff876dd5 --- /dev/null +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/authentication_mock_data_source_impl.dart @@ -0,0 +1,201 @@ +// 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 . + +import 'dart:math'; + +import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; +import 'package:wyatt_type_utils/wyatt_type_utils.dart'; + +/// {@template authentication_mock_data_source_impl} +/// Implementation of [AuthenticationRemoteDataSource] using Mocks. +/// {@endtemplate} +class AuthenticationMockDataSourceImpl + extends AuthenticationRemoteDataSource { + /// {@macro authentication_mock_data_source_impl} + AuthenticationMockDataSourceImpl({ + this.mockData = const { + 'test@test.fr': Pair('test12', '1'), + 'alice@test.fr': Pair('alice12', '2'), + 'bob@test.fr': Pair('bob1234', '3'), + }, + this.accessToken = 'mock_access_token', + }); + + /// Mock data. + /// Format: > + final Map> mockData; + + /// Current user. + Account? _currentUser; + + /// Access token. + final String accessToken; + + /// A random delay to simulate network latency. + Future _randomDelay() async { + await Future.delayed( + Duration(milliseconds: Random().nextInt(400) + 200), + ); + return; + } + + // SignUp/SignIn methods ==================================================== + + /// {@macro signup_pwd} + @override + Future signUpWithEmailAndPassword({ + required String email, + required String password, + }) async { + await _randomDelay(); + mockData[email] = Pair(password, '4'); + + return _currentUser = Account( + id: '4', + isAnonymous: false, + emailVerified: false, + providerId: 'mock', + email: email, + accessToken: accessToken, + ); + } + + /// {@macro signin_pwd} + @override + Future signInWithEmailAndPassword({ + required String email, + required String password, + }) async { + await _randomDelay(); + final pair = mockData[email]; + + if (pair == null || pair.left != password) { + throw SignInWithEmailAndPasswordFailureMock(); + } + + return _currentUser = Account( + id: pair.right!, + isAnonymous: false, + emailVerified: true, + providerId: 'mock', + email: email, + accessToken: accessToken, + ); + } + + /// {@macro signin_anom} + @override + Future signInAnonymously() async { + await _randomDelay(); + return _currentUser = Account( + id: '5', + isAnonymous: true, + emailVerified: false, + providerId: 'mock', + accessToken: accessToken, + ); + } + + /// {@macro signin_google} + @override + Future signInWithGoogle() async { + await _randomDelay(); + return _currentUser = Account( + id: '6', + isAnonymous: false, + emailVerified: true, + providerId: 'google.com', + email: 'mock@gmail.com', + accessToken: accessToken, + ); + } + + /// {@macro signout} + @override + Future signOut() async { + await _randomDelay(); + _currentUser = null; + } + + // Account management methods =============================================== + + /// {@macro refresh} + @override + Future refresh() async { + await _randomDelay(); + if (_currentUser == null) { + throw RefreshFailureMock(); + } + return _currentUser!; + } + + /// {@macro reauthenticate} + @override + Future reauthenticate() async { + await _randomDelay(); + if (_currentUser == null) { + throw ReauthenticateFailureMock(); + } + return _currentUser!; + } + + /// {@macro update_email} + @override + Future updateEmail({required String email}) async { + throw UnimplementedError(); + } + + /// {@macro update_password} + @override + Future updatePassword({required String password}) async { + throw UnimplementedError(); + } + + /// {@macro delete} + @override + Future delete() async { + throw UnimplementedError(); + } + + // Email related stuff ====================================================== + + /// {@macro send_email_verification} + @override + Future sendEmailVerification() async { + throw UnimplementedError(); + } + + /// {@macro send_password_reset_email} + @override + Future sendPasswordResetEmail({required String email}) async { + throw UnimplementedError(); + } + + /// {@macro confirm_password_reset} + @override + Future confirmPasswordReset({ + required String code, + required String newPassword, + }) async { + throw UnimplementedError(); + } + + /// {@macro verify_password_reset_code} + @override + Future verifyPasswordResetCode({required String code}) async { + throw UnimplementedError(); + } +} diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart index 5a8c8679..e76b675f 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/remote/remote.dart @@ -14,4 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export 'authentication_base_data_source.dart'; export 'authentication_firebase_data_source_impl.dart'; +export 'authentication_mock_data_source_impl.dart'; diff --git a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart index ebc29f93..683dd500 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/models/account_model.dart @@ -77,6 +77,30 @@ class AccountModel extends Account { } } + /// {@macro account_model} + factory AccountModel.fromSecureStorage({ + required String? id, + required String? email, + required String? accessToken, + }) { + if (id != null && email != null && accessToken != null) { + return AccountModel._( + user: null, + id: id, + emailVerified: false, + isAnonymous: false, + providerId: '', + email: email, + accessToken: accessToken, + ); + } else { + throw Exception( + 'null-id-email-access-token' + 'id, email, and accessToken cannot be null', + ); + } + } + const AccountModel._({ required this.user, required super.id, diff --git a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart index 652cca7a..9b8bc99a 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/repositories/authentication_repository_impl.dart @@ -16,8 +16,6 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/src/core/utils/forms.dart'; -import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_cache_data_source.dart'; -import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_session_data_source.dart'; import 'package:wyatt_authentication_bloc/src/domain/domain.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; @@ -152,6 +150,8 @@ class AuthenticationRepositoryImpl email: email, password: password, ); + // Cache the account + await authenticationCacheDataSource.cacheAccount(account); return account; }, (error) => error, @@ -170,6 +170,8 @@ class AuthenticationRepositoryImpl email: email, password: password, ); + // Cache the account + await authenticationCacheDataSource.cacheAccount(account); return account; }, (error) => error, @@ -194,6 +196,8 @@ class AuthenticationRepositoryImpl () async { final account = await authenticationRemoteDataSource.signInWithGoogle(); + // Cache the account + await authenticationCacheDataSource.cacheAccount(account); return account; }, (error) => error, @@ -205,6 +209,8 @@ class AuthenticationRepositoryImpl Result.tryCatchAsync( () async { await authenticationRemoteDataSource.signOut(); + // Remove the cached account + await authenticationCacheDataSource.removeCachedAccount(); }, (error) => error, ); @@ -217,6 +223,8 @@ class AuthenticationRepositoryImpl Result.tryCatchAsync( () async { final account = await authenticationRemoteDataSource.refresh(); + // Cache the account + await authenticationCacheDataSource.cacheAccount(account); return account; }, (error) => error, @@ -228,6 +236,8 @@ class AuthenticationRepositoryImpl Result.tryCatchAsync( () async { final account = await authenticationRemoteDataSource.reauthenticate(); + // Cache the account + await authenticationCacheDataSource.cacheAccount(account); return account; }, (error) => error, @@ -240,6 +250,8 @@ class AuthenticationRepositoryImpl () async { final account = await authenticationRemoteDataSource.updateEmail(email: email); + // Cache the account + await authenticationCacheDataSource.cacheAccount(account); return account; }, (error) => error, @@ -253,6 +265,8 @@ class AuthenticationRepositoryImpl final account = await authenticationRemoteDataSource.updatePassword( password: password, ); + // Cache the account + await authenticationCacheDataSource.cacheAccount(account); return account; }, (error) => error, @@ -262,7 +276,11 @@ class AuthenticationRepositoryImpl @override FutureOrResult delete() => Result.tryCatchAsync( - () async => authenticationRemoteDataSource.delete(), + () async { + await authenticationRemoteDataSource.delete(); + // Remove the cached account + await authenticationCacheDataSource.removeCachedAccount(); + }, (error) => error, ); diff --git a/packages/wyatt_authentication_bloc/pubspec.yaml b/packages/wyatt_authentication_bloc/pubspec.yaml index a97dba05..429aa524 100644 --- a/packages/wyatt_authentication_bloc/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/pubspec.yaml @@ -29,6 +29,8 @@ dependencies: wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ version: ^0.0.4 + flutter_secure_storage: ^8.0.0 + http: ^0.13.5 dev_dependencies: flutter_test: { sdk: flutter } -- 2.47.2 From a5cc20d05aa68758bea186b9b9de57cdad301a56 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 15:08:45 +0200 Subject: [PATCH 250/320] feat(i18n): change gitignore for symbolic link --- .gitignore | 468 ++++++++++++++++++++++++++++++--- packages/wyatt_i18n/.gitignore | 8 +- 2 files changed, 428 insertions(+), 48 deletions(-) mode change 100644 => 120000 packages/wyatt_i18n/.gitignore diff --git a/.gitignore b/.gitignore index a0057b37..f9b92095 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,47 @@ # File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig +# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,android,androidstudio,dart,fastlane,firebase,flutter,java,jetbrains+all,kotlin,objective-c,swift,xcode +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,macos,android,androidstudio,dart,fastlane,firebase,flutter,java,jetbrains+all,kotlin,objective-c,swift,xcode -# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,dart,flutter,linux,windows -# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,macos,dart,flutter,linux,windows +### Android ### +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof + +### Android Patch ### +gen-external-apklibs + +# Replacement of .externalNativeBuild directories introduced +# with Android Studio 3.5. ### Dart ### # See https://www.dartlang.org/guides/libraries/private-files @@ -9,7 +49,6 @@ # Files and directories created by pub .dart_tool/ .packages -build/ # If you're building an application, you may want to check-in your pubspec.lock pubspec.lock @@ -18,9 +57,9 @@ pubspec.lock # Avoid committing generated Javascript files: *.dart.js -*.info.json # Produced by the --dump-info flag. -*.js # When generated by dart2js. Don't specify *.js if your - # project includes source files written in JavaScript. +*.info.json # Produced by the --dump-info flag. +*.js # When generated by dart2js. Don't specify *.js if your +# project includes source files written in JavaScript. *.js_ *.js.deps *.js.map @@ -32,14 +71,47 @@ pubspec.lock # dotenv environment variables file .env +### fastlane ### +# fastlane - A streamlined workflow tool for Cocoa deployment +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +# fastlane specific +**/fastlane/report.xml + +# deliver temporary files +**/fastlane/Preview.html + +# snapshot generated screenshots +**/fastlane/screenshots + +# scan temporary files +**/fastlane/test_output + +# Fastlane.swift runner binary +**/fastlane/FastlaneRunner + +### Firebase ### +.idea +**/node_modules/* +**/.firebaserc + +### Firebase Patch ### +.runtimeconfig.json +.firebase/ + ### Flutter ### # Flutter/Dart/Pub related -.fvm/ +**/doc/api/ +.fvm/flutter_sdk .pub-cache/ .pub/ coverage/ lib/generated_plugin_registrant.dart -# For library packages, don’t commit the pubspec.lock file. +# For library packages, don't commit the pubspec.lock file. # Regenerating the pubspec.lock file lets you test your package against the latest compatible versions of its dependencies. # See https://dart.dev/guides/libraries/private-files#pubspeclock #pubspec.lock @@ -90,20 +162,131 @@ lib/generated_plugin_registrant.dart !**/ios/**/default.perspectivev3 !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -### Linux ### -*~ +### Java ### +# Compiled class file +*.class -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* +# Log file -# KDE directory preferences -.directory +# BlueJ files +*.ctxt -# Linux trash folder which might appear on any partition or disk -.Trash-* +# Mobile Tools for Java (J2ME) +.mtj.tmp/ -# .nfs files are created when an open file is removed but is still being accessed -.nfs* +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### JetBrains+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### JetBrains+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +!.idea/codeStyles +!.idea/runConfigurations + +### Kotlin ### +# Compiled class file + +# Log file + +# BlueJ files + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml ### macOS ### # General @@ -114,7 +297,6 @@ lib/generated_plugin_registrant.dart # Icon must end with two \r Icon - # Thumbnails ._* @@ -138,6 +320,116 @@ Temporary Items # iCloud generated files *.icloud +### Objective-C ### +# Xcode +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +### Objective-C Patch ### + +### Swift ### +# Xcode +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + ### VisualStudioCode ### .vscode/* !.vscode/settings.json @@ -157,35 +449,129 @@ Temporary Items .history .ionide -# Support for Project snippet scope +### Xcode ### -### Windows ### -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db +## Xcode 8 and earlier -# Dump file -*.stackdump +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcodeproj/project.xcworkspace/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno +**/xcshareddata/WorkspaceSettings.xcsettings -# Folder config file -[Dd]esktop.ini +### AndroidStudio ### +# Covers files to be ignored for android development using Android Studio. -# Recycle Bin used on file shares -$RECYCLE.BIN/ +# Built application files +*.ap_ +*.aab -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp +# Files for the ART/Dalvik VM +*.dex -# Windows shortcuts -*.lnk +# Java class files -# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,dart,flutter,linux,windows +# Generated files +bin/ +gen/ + +# Gradle files +.gradle + +# Signing files +.signing/ + +# Local configuration file (sdk path, etc) + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files + +# Android Studio +/*/build/ +/*/local.properties +/*/out +/*/*/build +/*/*/production +.navigation/ +*.ipr +*~ +*.swp + +# Keystore files + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Android Patch + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# NDK +obj/ + +# IntelliJ IDEA +/out/ + +# User-specific configurations +.idea/caches/ +.idea/libraries/ +.idea/shelf/ +.idea/workspace.xml +.idea/tasks.xml +.idea/.name +.idea/compiler.xml +.idea/copyright/profiles_settings.xml +.idea/encodings.xml +.idea/misc.xml +.idea/modules.xml +.idea/scopes/scope_settings.xml +.idea/dictionaries +.idea/vcs.xml +.idea/jsLibraryMappings.xml +.idea/datasources.xml +.idea/dataSources.ids +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml +.idea/assetWizardSettings.xml +.idea/gradle.xml +.idea/jarRepositories.xml +.idea/navEditor.xml + +# Legacy Eclipse project files +.classpath +.project +.cproject +.settings/ + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml) + +## Plugin-specific files: + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Mongo Explorer plugin +.idea/mongoSettings.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) + +### AndroidStudio Patch ### + +!/gradle/wrapper/gradle-wrapper.jar + +# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,android,androidstudio,dart,fastlane,firebase,flutter,java,jetbrains+all,kotlin,objective-c,swift,xcode # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) diff --git a/packages/wyatt_i18n/.gitignore b/packages/wyatt_i18n/.gitignore deleted file mode 100644 index 3cceda55..00000000 --- a/packages/wyatt_i18n/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# https://dart.dev/guides/libraries/private-files -# Created by `dart pub` -.dart_tool/ - -# Avoid committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_i18n/.gitignore b/packages/wyatt_i18n/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_i18n/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file -- 2.47.2 From 6f585cf7ee3962f6d63ac89d62e0d18d819a82a2 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 15:36:03 +0200 Subject: [PATCH 251/320] chore: add scripts to clean license, authors --- AUTHORS | 4 +- packages/wyatt_analysis/.gitignore | 11 +- packages/wyatt_analysis/AUTHORS | 8 +- packages/wyatt_analysis/LICENSE | 675 +---------------- packages/wyatt_architecture/.gitignore | 134 +--- packages/wyatt_architecture/AUTHORS | 9 +- packages/wyatt_architecture/LICENSE | 675 +---------------- packages/wyatt_authentication_bloc/.gitignore | 31 +- packages/wyatt_authentication_bloc/AUTHORS | 8 +- packages/wyatt_authentication_bloc/LICENSE | 675 +---------------- packages/wyatt_bloc_helper/.gitignore | 11 +- packages/wyatt_bloc_helper/AUTHORS | 9 +- packages/wyatt_bloc_helper/LICENSE | 675 +---------------- packages/wyatt_bloc_layout/.gitignore | 134 +--- packages/wyatt_bloc_layout/AUTHORS | 9 +- packages/wyatt_bloc_layout/LICENSE | 675 +---------------- .../.gitignore | 8 +- .../AUTHORS | 1 + .../LICENSE | 1 + .../wyatt_component_copy_with_gen/.gitignore | 8 +- .../wyatt_component_copy_with_gen/AUTHORS | 1 + .../wyatt_component_copy_with_gen/LICENSE | 1 + packages/wyatt_crud_bloc/.gitignore | 134 +--- packages/wyatt_crud_bloc/AUTHORS | 1 + packages/wyatt_crud_bloc/LICENSE | 675 +---------------- .../.gitignore | 1 + .../wyatt_deferred_widget_annotation/AUTHORS | 1 + .../wyatt_deferred_widget_annotation/LICENSE | 1 + packages/wyatt_deferred_widget_gen/.gitignore | 1 + packages/wyatt_deferred_widget_gen/AUTHORS | 1 + packages/wyatt_deferred_widget_gen/LICENSE | 1 + packages/wyatt_form_bloc/.gitignore | 11 +- packages/wyatt_form_bloc/AUTHORS | 8 +- packages/wyatt_form_bloc/LICENSE | 693 +----------------- packages/wyatt_http_client/.gitignore | 11 +- packages/wyatt_http_client/AUTHORS | 8 +- packages/wyatt_http_client/LICENSE | 675 +---------------- packages/wyatt_i18n/AUTHORS | 8 +- packages/wyatt_i18n/LICENSE | 675 +---------------- packages/wyatt_notification_bloc/.gitignore | 11 +- packages/wyatt_notification_bloc/AUTHORS | 1 + packages/wyatt_notification_bloc/LICENSE | 1 + packages/wyatt_type_utils/.gitignore | 134 +--- packages/wyatt_type_utils/AUTHORS | 9 +- packages/wyatt_type_utils/LICENSE | 675 +---------------- packages/wyatt_ui_components/.gitignore | 134 +--- packages/wyatt_ui_components/AUTHORS | 9 +- packages/wyatt_ui_components/LICENSE | 675 +---------------- packages/wyatt_ui_kit/.gitignore | 8 +- packages/wyatt_ui_kit/AUTHORS | 1 + packages/wyatt_ui_kit/LICENSE | 1 + packages/wyatt_ui_layout/.gitignore | 134 +--- packages/wyatt_ui_layout/AUTHORS | 9 +- packages/wyatt_ui_layout/LICENSE | 675 +---------------- scripts/clean_gitignore.sh | 44 ++ scripts/symbolic_links.sh | 52 ++ 56 files changed, 151 insertions(+), 9090 deletions(-) mode change 100644 => 120000 packages/wyatt_analysis/.gitignore mode change 100644 => 120000 packages/wyatt_analysis/AUTHORS mode change 100644 => 120000 packages/wyatt_analysis/LICENSE mode change 100644 => 120000 packages/wyatt_architecture/.gitignore mode change 100644 => 120000 packages/wyatt_architecture/AUTHORS mode change 100644 => 120000 packages/wyatt_architecture/LICENSE mode change 100644 => 120000 packages/wyatt_authentication_bloc/.gitignore mode change 100644 => 120000 packages/wyatt_authentication_bloc/AUTHORS mode change 100644 => 120000 packages/wyatt_authentication_bloc/LICENSE mode change 100644 => 120000 packages/wyatt_bloc_helper/.gitignore mode change 100644 => 120000 packages/wyatt_bloc_helper/AUTHORS mode change 100644 => 120000 packages/wyatt_bloc_helper/LICENSE mode change 100644 => 120000 packages/wyatt_bloc_layout/.gitignore mode change 100644 => 120000 packages/wyatt_bloc_layout/AUTHORS mode change 100644 => 120000 packages/wyatt_bloc_layout/LICENSE mode change 100644 => 120000 packages/wyatt_component_copy_with_extension/.gitignore create mode 120000 packages/wyatt_component_copy_with_extension/AUTHORS create mode 120000 packages/wyatt_component_copy_with_extension/LICENSE mode change 100644 => 120000 packages/wyatt_component_copy_with_gen/.gitignore create mode 120000 packages/wyatt_component_copy_with_gen/AUTHORS create mode 120000 packages/wyatt_component_copy_with_gen/LICENSE mode change 100644 => 120000 packages/wyatt_crud_bloc/.gitignore create mode 120000 packages/wyatt_crud_bloc/AUTHORS mode change 100644 => 120000 packages/wyatt_crud_bloc/LICENSE create mode 120000 packages/wyatt_deferred_widget_annotation/.gitignore create mode 120000 packages/wyatt_deferred_widget_annotation/AUTHORS create mode 120000 packages/wyatt_deferred_widget_annotation/LICENSE create mode 120000 packages/wyatt_deferred_widget_gen/.gitignore create mode 120000 packages/wyatt_deferred_widget_gen/AUTHORS create mode 120000 packages/wyatt_deferred_widget_gen/LICENSE mode change 100644 => 120000 packages/wyatt_form_bloc/.gitignore mode change 100644 => 120000 packages/wyatt_form_bloc/AUTHORS mode change 100644 => 120000 packages/wyatt_form_bloc/LICENSE mode change 100644 => 120000 packages/wyatt_http_client/.gitignore mode change 100644 => 120000 packages/wyatt_http_client/AUTHORS mode change 100644 => 120000 packages/wyatt_http_client/LICENSE mode change 100644 => 120000 packages/wyatt_i18n/AUTHORS mode change 100644 => 120000 packages/wyatt_i18n/LICENSE mode change 100644 => 120000 packages/wyatt_notification_bloc/.gitignore create mode 120000 packages/wyatt_notification_bloc/AUTHORS create mode 120000 packages/wyatt_notification_bloc/LICENSE mode change 100644 => 120000 packages/wyatt_type_utils/.gitignore mode change 100644 => 120000 packages/wyatt_type_utils/AUTHORS mode change 100644 => 120000 packages/wyatt_type_utils/LICENSE mode change 100644 => 120000 packages/wyatt_ui_components/.gitignore mode change 100644 => 120000 packages/wyatt_ui_components/AUTHORS mode change 100644 => 120000 packages/wyatt_ui_components/LICENSE mode change 100644 => 120000 packages/wyatt_ui_kit/.gitignore create mode 120000 packages/wyatt_ui_kit/AUTHORS create mode 120000 packages/wyatt_ui_kit/LICENSE mode change 100644 => 120000 packages/wyatt_ui_layout/.gitignore mode change 100644 => 120000 packages/wyatt_ui_layout/AUTHORS mode change 100644 => 120000 packages/wyatt_ui_layout/LICENSE create mode 100755 scripts/clean_gitignore.sh create mode 100755 scripts/symbolic_links.sh diff --git a/AUTHORS b/AUTHORS index f9506138..a1c2a78d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -4,5 +4,5 @@ # Name/Organization Wyatt Group S.A.S -Hugo Pointcheval -Malo Léon \ No newline at end of file +Hugo Pointcheval +Malo Léon diff --git a/packages/wyatt_analysis/.gitignore b/packages/wyatt_analysis/.gitignore deleted file mode 100644 index 65c34dc8..00000000 --- a/packages/wyatt_analysis/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Files and directories created by pub. -.dart_tool/ -.packages - -# Conventional directory for build outputs. -build/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_analysis/.gitignore b/packages/wyatt_analysis/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_analysis/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_analysis/AUTHORS b/packages/wyatt_analysis/AUTHORS deleted file mode 100644 index b6d7d765..00000000 --- a/packages/wyatt_analysis/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_analysis/AUTHORS b/packages/wyatt_analysis/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_analysis/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_analysis/LICENSE b/packages/wyatt_analysis/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_analysis/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_analysis/LICENSE b/packages/wyatt_analysis/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_analysis/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_architecture/.gitignore b/packages/wyatt_architecture/.gitignore deleted file mode 100644 index e38f9b0c..00000000 --- a/packages/wyatt_architecture/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/* - -# Visual Studio Code related -.classpath -.project -.settings/ -.vscode/* -!.vscode/settings.json -!.vscode/extensions.json - -# Flutter repo-specific -/bin/cache/ -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/docs/doc/ -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds -.fvm/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -**/android/.idea/ -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/.last_build_id -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Coverage -coverage/ - -# Submodules -!pubspec.lock -packages/**/pubspec.lock - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Exceptions to the above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock -!.vscode/extensions.json -!.vscode/launch.json -!.idea/codeStyles/ -!.idea/dictionaries/ -!.idea/runConfigurations/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_architecture/.gitignore b/packages/wyatt_architecture/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_architecture/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_architecture/AUTHORS b/packages/wyatt_architecture/AUTHORS deleted file mode 100644 index f9506138..00000000 --- a/packages/wyatt_architecture/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval -Malo Léon \ No newline at end of file diff --git a/packages/wyatt_architecture/AUTHORS b/packages/wyatt_architecture/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_architecture/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_architecture/LICENSE b/packages/wyatt_architecture/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_architecture/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_architecture/LICENSE b/packages/wyatt_architecture/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_architecture/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/.gitignore b/packages/wyatt_authentication_bloc/.gitignore deleted file mode 100644 index 0f643f51..00000000 --- a/packages/wyatt_authentication_bloc/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -.dart_tool/ -.packages -build/ -.flutter-plugins* -coverage/ \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/.gitignore b/packages/wyatt_authentication_bloc/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_authentication_bloc/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/AUTHORS b/packages/wyatt_authentication_bloc/AUTHORS deleted file mode 100644 index b6d7d765..00000000 --- a/packages/wyatt_authentication_bloc/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/AUTHORS b/packages/wyatt_authentication_bloc/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_authentication_bloc/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/LICENSE b/packages/wyatt_authentication_bloc/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_authentication_bloc/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/LICENSE b/packages/wyatt_authentication_bloc/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_authentication_bloc/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_bloc_helper/.gitignore b/packages/wyatt_bloc_helper/.gitignore deleted file mode 100644 index 65c34dc8..00000000 --- a/packages/wyatt_bloc_helper/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Files and directories created by pub. -.dart_tool/ -.packages - -# Conventional directory for build outputs. -build/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_bloc_helper/.gitignore b/packages/wyatt_bloc_helper/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_bloc_helper/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_bloc_helper/AUTHORS b/packages/wyatt_bloc_helper/AUTHORS deleted file mode 100644 index 2a0b50f7..00000000 --- a/packages/wyatt_bloc_helper/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Malo Léon -Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_bloc_helper/AUTHORS b/packages/wyatt_bloc_helper/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_bloc_helper/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_bloc_helper/LICENSE b/packages/wyatt_bloc_helper/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_bloc_helper/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_bloc_helper/LICENSE b/packages/wyatt_bloc_helper/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_bloc_helper/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/.gitignore b/packages/wyatt_bloc_layout/.gitignore deleted file mode 100644 index e38f9b0c..00000000 --- a/packages/wyatt_bloc_layout/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/* - -# Visual Studio Code related -.classpath -.project -.settings/ -.vscode/* -!.vscode/settings.json -!.vscode/extensions.json - -# Flutter repo-specific -/bin/cache/ -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/docs/doc/ -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds -.fvm/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -**/android/.idea/ -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/.last_build_id -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Coverage -coverage/ - -# Submodules -!pubspec.lock -packages/**/pubspec.lock - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Exceptions to the above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock -!.vscode/extensions.json -!.vscode/launch.json -!.idea/codeStyles/ -!.idea/dictionaries/ -!.idea/runConfigurations/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_bloc_layout/.gitignore b/packages/wyatt_bloc_layout/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_bloc_layout/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/AUTHORS b/packages/wyatt_bloc_layout/AUTHORS deleted file mode 100644 index f9506138..00000000 --- a/packages/wyatt_bloc_layout/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval -Malo Léon \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/AUTHORS b/packages/wyatt_bloc_layout/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_bloc_layout/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/LICENSE b/packages/wyatt_bloc_layout/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_bloc_layout/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/LICENSE b/packages/wyatt_bloc_layout/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_bloc_layout/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/.gitignore b/packages/wyatt_component_copy_with_extension/.gitignore deleted file mode 100644 index 3cceda55..00000000 --- a/packages/wyatt_component_copy_with_extension/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# https://dart.dev/guides/libraries/private-files -# Created by `dart pub` -.dart_tool/ - -# Avoid committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_component_copy_with_extension/.gitignore b/packages/wyatt_component_copy_with_extension/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/AUTHORS b/packages/wyatt_component_copy_with_extension/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/LICENSE b/packages/wyatt_component_copy_with_extension/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_gen/.gitignore b/packages/wyatt_component_copy_with_gen/.gitignore deleted file mode 100644 index 3cceda55..00000000 --- a/packages/wyatt_component_copy_with_gen/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# https://dart.dev/guides/libraries/private-files -# Created by `dart pub` -.dart_tool/ - -# Avoid committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_component_copy_with_gen/.gitignore b/packages/wyatt_component_copy_with_gen/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_gen/AUTHORS b/packages/wyatt_component_copy_with_gen/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_gen/LICENSE b/packages/wyatt_component_copy_with_gen/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/.gitignore b/packages/wyatt_crud_bloc/.gitignore deleted file mode 100644 index e38f9b0c..00000000 --- a/packages/wyatt_crud_bloc/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/* - -# Visual Studio Code related -.classpath -.project -.settings/ -.vscode/* -!.vscode/settings.json -!.vscode/extensions.json - -# Flutter repo-specific -/bin/cache/ -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/docs/doc/ -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds -.fvm/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -**/android/.idea/ -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/.last_build_id -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Coverage -coverage/ - -# Submodules -!pubspec.lock -packages/**/pubspec.lock - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Exceptions to the above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock -!.vscode/extensions.json -!.vscode/launch.json -!.idea/codeStyles/ -!.idea/dictionaries/ -!.idea/runConfigurations/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_crud_bloc/.gitignore b/packages/wyatt_crud_bloc/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_crud_bloc/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/AUTHORS b/packages/wyatt_crud_bloc/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_crud_bloc/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/LICENSE b/packages/wyatt_crud_bloc/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_crud_bloc/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/LICENSE b/packages/wyatt_crud_bloc/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_crud_bloc/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_annotation/.gitignore b/packages/wyatt_deferred_widget_annotation/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_deferred_widget_annotation/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_annotation/AUTHORS b/packages/wyatt_deferred_widget_annotation/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_deferred_widget_annotation/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_annotation/LICENSE b/packages/wyatt_deferred_widget_annotation/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_deferred_widget_annotation/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_gen/.gitignore b/packages/wyatt_deferred_widget_gen/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_deferred_widget_gen/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_gen/AUTHORS b/packages/wyatt_deferred_widget_gen/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_deferred_widget_gen/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_gen/LICENSE b/packages/wyatt_deferred_widget_gen/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_deferred_widget_gen/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_form_bloc/.gitignore b/packages/wyatt_form_bloc/.gitignore deleted file mode 100644 index 65c34dc8..00000000 --- a/packages/wyatt_form_bloc/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Files and directories created by pub. -.dart_tool/ -.packages - -# Conventional directory for build outputs. -build/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_form_bloc/.gitignore b/packages/wyatt_form_bloc/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_form_bloc/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_form_bloc/AUTHORS b/packages/wyatt_form_bloc/AUTHORS deleted file mode 100644 index b6d7d765..00000000 --- a/packages/wyatt_form_bloc/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_form_bloc/AUTHORS b/packages/wyatt_form_bloc/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_form_bloc/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_form_bloc/LICENSE b/packages/wyatt_form_bloc/LICENSE deleted file mode 100644 index 3b2646b3..00000000 --- a/packages/wyatt_form_bloc/LICENSE +++ /dev/null @@ -1,692 +0,0 @@ - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_form_bloc/LICENSE b/packages/wyatt_form_bloc/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_form_bloc/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_http_client/.gitignore b/packages/wyatt_http_client/.gitignore deleted file mode 100644 index 65c34dc8..00000000 --- a/packages/wyatt_http_client/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Files and directories created by pub. -.dart_tool/ -.packages - -# Conventional directory for build outputs. -build/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_http_client/.gitignore b/packages/wyatt_http_client/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_http_client/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_http_client/AUTHORS b/packages/wyatt_http_client/AUTHORS deleted file mode 100644 index b6d7d765..00000000 --- a/packages/wyatt_http_client/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_http_client/AUTHORS b/packages/wyatt_http_client/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_http_client/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_http_client/LICENSE b/packages/wyatt_http_client/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_http_client/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_http_client/LICENSE b/packages/wyatt_http_client/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_http_client/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_i18n/AUTHORS b/packages/wyatt_i18n/AUTHORS deleted file mode 100644 index 8a49779b..00000000 --- a/packages/wyatt_i18n/AUTHORS +++ /dev/null @@ -1,7 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval \ No newline at end of file diff --git a/packages/wyatt_i18n/AUTHORS b/packages/wyatt_i18n/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_i18n/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_i18n/LICENSE b/packages/wyatt_i18n/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_i18n/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_i18n/LICENSE b/packages/wyatt_i18n/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_i18n/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_notification_bloc/.gitignore b/packages/wyatt_notification_bloc/.gitignore deleted file mode 100644 index 65c34dc8..00000000 --- a/packages/wyatt_notification_bloc/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Files and directories created by pub. -.dart_tool/ -.packages - -# Conventional directory for build outputs. -build/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_notification_bloc/.gitignore b/packages/wyatt_notification_bloc/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_notification_bloc/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_notification_bloc/AUTHORS b/packages/wyatt_notification_bloc/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_notification_bloc/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_notification_bloc/LICENSE b/packages/wyatt_notification_bloc/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_notification_bloc/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_type_utils/.gitignore b/packages/wyatt_type_utils/.gitignore deleted file mode 100644 index e38f9b0c..00000000 --- a/packages/wyatt_type_utils/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/* - -# Visual Studio Code related -.classpath -.project -.settings/ -.vscode/* -!.vscode/settings.json -!.vscode/extensions.json - -# Flutter repo-specific -/bin/cache/ -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/docs/doc/ -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds -.fvm/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -**/android/.idea/ -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/.last_build_id -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Coverage -coverage/ - -# Submodules -!pubspec.lock -packages/**/pubspec.lock - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Exceptions to the above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock -!.vscode/extensions.json -!.vscode/launch.json -!.idea/codeStyles/ -!.idea/dictionaries/ -!.idea/runConfigurations/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_type_utils/.gitignore b/packages/wyatt_type_utils/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_type_utils/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_type_utils/AUTHORS b/packages/wyatt_type_utils/AUTHORS deleted file mode 100644 index f9506138..00000000 --- a/packages/wyatt_type_utils/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval -Malo Léon \ No newline at end of file diff --git a/packages/wyatt_type_utils/AUTHORS b/packages/wyatt_type_utils/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_type_utils/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_type_utils/LICENSE b/packages/wyatt_type_utils/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_type_utils/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_type_utils/LICENSE b/packages/wyatt_type_utils/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_type_utils/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_ui_components/.gitignore b/packages/wyatt_ui_components/.gitignore deleted file mode 100644 index e38f9b0c..00000000 --- a/packages/wyatt_ui_components/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/* - -# Visual Studio Code related -.classpath -.project -.settings/ -.vscode/* -!.vscode/settings.json -!.vscode/extensions.json - -# Flutter repo-specific -/bin/cache/ -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/docs/doc/ -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds -.fvm/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -**/android/.idea/ -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/.last_build_id -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Coverage -coverage/ - -# Submodules -!pubspec.lock -packages/**/pubspec.lock - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Exceptions to the above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock -!.vscode/extensions.json -!.vscode/launch.json -!.idea/codeStyles/ -!.idea/dictionaries/ -!.idea/runConfigurations/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_ui_components/.gitignore b/packages/wyatt_ui_components/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_ui_components/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_ui_components/AUTHORS b/packages/wyatt_ui_components/AUTHORS deleted file mode 100644 index f9506138..00000000 --- a/packages/wyatt_ui_components/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval -Malo Léon \ No newline at end of file diff --git a/packages/wyatt_ui_components/AUTHORS b/packages/wyatt_ui_components/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_ui_components/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_ui_components/LICENSE b/packages/wyatt_ui_components/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_ui_components/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_ui_components/LICENSE b/packages/wyatt_ui_components/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_ui_components/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_ui_kit/.gitignore b/packages/wyatt_ui_kit/.gitignore deleted file mode 100644 index 3cceda55..00000000 --- a/packages/wyatt_ui_kit/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# https://dart.dev/guides/libraries/private-files -# Created by `dart pub` -.dart_tool/ - -# Avoid committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_ui_kit/.gitignore b/packages/wyatt_ui_kit/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_ui_kit/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_ui_kit/AUTHORS b/packages/wyatt_ui_kit/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_ui_kit/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_ui_kit/LICENSE b/packages/wyatt_ui_kit/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_ui_kit/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/wyatt_ui_layout/.gitignore b/packages/wyatt_ui_layout/.gitignore deleted file mode 100644 index e38f9b0c..00000000 --- a/packages/wyatt_ui_layout/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/* - -# Visual Studio Code related -.classpath -.project -.settings/ -.vscode/* -!.vscode/settings.json -!.vscode/extensions.json - -# Flutter repo-specific -/bin/cache/ -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/docs/doc/ -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds -.fvm/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -**/android/.idea/ -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/.last_build_id -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Coverage -coverage/ - -# Submodules -!pubspec.lock -packages/**/pubspec.lock - -# Web related -lib/generated_plugin_registrant.dart - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Exceptions to the above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock -!.vscode/extensions.json -!.vscode/launch.json -!.idea/codeStyles/ -!.idea/dictionaries/ -!.idea/runConfigurations/ - -# Omit committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock diff --git a/packages/wyatt_ui_layout/.gitignore b/packages/wyatt_ui_layout/.gitignore new file mode 120000 index 00000000..6ef08f9d --- /dev/null +++ b/packages/wyatt_ui_layout/.gitignore @@ -0,0 +1 @@ +../../.gitignore \ No newline at end of file diff --git a/packages/wyatt_ui_layout/AUTHORS b/packages/wyatt_ui_layout/AUTHORS deleted file mode 100644 index f9506138..00000000 --- a/packages/wyatt_ui_layout/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to this project. Names should be added to the list like so: -# -# Name/Organization - -Wyatt Group S.A.S -Hugo Pointcheval -Malo Léon \ No newline at end of file diff --git a/packages/wyatt_ui_layout/AUTHORS b/packages/wyatt_ui_layout/AUTHORS new file mode 120000 index 00000000..f04b7e8a --- /dev/null +++ b/packages/wyatt_ui_layout/AUTHORS @@ -0,0 +1 @@ +../../AUTHORS \ No newline at end of file diff --git a/packages/wyatt_ui_layout/LICENSE b/packages/wyatt_ui_layout/LICENSE deleted file mode 100644 index e72bfdda..00000000 --- a/packages/wyatt_ui_layout/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 - (at your option) 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/packages/wyatt_ui_layout/LICENSE b/packages/wyatt_ui_layout/LICENSE new file mode 120000 index 00000000..30cff740 --- /dev/null +++ b/packages/wyatt_ui_layout/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/scripts/clean_gitignore.sh b/scripts/clean_gitignore.sh new file mode 100755 index 00000000..ad546849 --- /dev/null +++ b/scripts/clean_gitignore.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +# 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 . + +# Script that iterates through each package in the packages directory and +# removes .gitignore, AUTHORS, and LICENSE files if they exist. + +# Current directory +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# Path to the packages directory +PACKAGES_DIR="$DIR/../packages" + +# Iterate through each package in the packages directory +for package in "$PACKAGES_DIR"/*; do + # Remove .gitignore file if it exists + if [ -f "$package/.gitignore" ]; then + rm "$package/.gitignore" + fi + + # Remove AUTHORS file if it exists + if [ -f "$package/AUTHORS" ]; then + rm "$package/AUTHORS" + fi + + # Remove LICENSE file if it exists + if [ -f "$package/LICENSE" ]; then + rm "$package/LICENSE" + fi +done diff --git a/scripts/symbolic_links.sh b/scripts/symbolic_links.sh new file mode 100755 index 00000000..f00ac7da --- /dev/null +++ b/scripts/symbolic_links.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# 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 . + +# Script that iterates through each package in the packages directory and +# creates a symbolic link to the main .gitignore file, AUTHORS, and LICENSE +# files if they do not already exist. + +# Current directory +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# Path to the packages directory +PACKAGES_DIR="$DIR/../packages" + +# Iterate through each package in the packages directory +for package in "$PACKAGES_DIR"/*; do + # Go to the package directory + cd "$package" + + # Create symbolic link to the main .gitignore file if it does not already + # exist + if [ ! -f .gitignore ]; then + ln -s ../../.gitignore .gitignore + fi + + # Create symbolic link to the main AUTHORS file if it does not already + # exist + + if [ ! -f AUTHORS ]; then + ln -s ../../AUTHORS AUTHORS + fi + + # Create symbolic link to the main LICENSE file if it does not already + # exist + if [ ! -f LICENSE ]; then + ln -s ../../LICENSE LICENSE + fi +done -- 2.47.2 From 973eefa7bca1b39aed1000513ea4567ed83f539d Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 16:09:13 +0200 Subject: [PATCH 252/320] docs: update readme --- README.md | 176 +++++++++++++++++++++++++++++---------------- doc/work_flow.puml | 15 ---- doc/workflow.svg | 25 ------- 3 files changed, 114 insertions(+), 102 deletions(-) delete mode 100644 doc/work_flow.puml delete mode 100644 doc/workflow.svg diff --git a/README.md b/README.md index 410ef3c4..e8ed43f5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

    - - - +

    Wyatt Packages

    - - Style: Wyatt Analysis - - - Maintained with Melos - + Style: Wyatt Analysis + Maintained with Melos

    --- @@ -38,12 +32,40 @@ --- + + + + +- [About](#about) +- [Contribution](#contribution) + - [Prerequisite](#prerequisite) + - [Create a new package](#create-a-new-package) + - [Naming](#naming) + - [Create issues](#create-issues) + - [Branches](#branches) + - [Commits](#commits) + - [Before pushing](#before-pushing) + - [Merge your work](#merge-your-work) + - [Update version.](#update-version) + - [Publish your package](#publish-your-package) + - [Badging](#badging) +- [Usage](#usage) +- [Simple work flow diagramm](#simple-work-flow-diagramm) +- [Status](#status) +- [License](#license) + + + +--- + ## About Here is a set of [Flutter plugins](https://flutter.io/platform-plugins/) that enhance your applications. [Flutter](https://flutter.dev) is Google's UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop using a single codebase. It is used by developers and organizations worldwide and is free and open-source. +Those packages are developed by [Wyatt Studio](https://wyatt-studio.fr) and are available exclusively on this repository. + --- ## Contribution @@ -77,9 +99,9 @@ dart pub global activate mason_cli brew install lcov ``` -- genhtml. Used to convert coverage data into html pages. +* genhtml. Used to convert coverage data into html pages. -After installation of all these packages, the project can be bootstrapped using the command `melos bs`. +After installation of all these packages, the project can be bootstrapped using the command `melos bs` . ### Create a new package @@ -87,9 +109,11 @@ Create a new package in `packages/` folder. To create a new package in the packages/ folder, run the following command in the terminal: ```shell -mason make wyatt_package --package_name wyatt_ --description A new Wyatt package --flutter_only false +mason make wyatt_package_template --package_name --description A new Wyatt package --flutter false ``` +> Browse our [bricks](https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-bricks) for more information. + The variable in the above command is important and must be clear and understandable. After creating the package, bootstrap the project with the `melos bs` command. @@ -101,70 +125,63 @@ It have to be clear and intelligible. 1. You must use underscores in the name. 2. You must use the wyatt prefix for the package name. -3. You must name the example with a specific name. -For example, if the name is "CRUD BLOC," the following naming conventions should be used: +For example, if the name is `CRUD BLOC` the following naming conventions should be used: -1. name: crud_bloc -2. package name: wyatt_crud_bloc -3. example name: crud_bloc_example +1. package name: `wyatt_crud_bloc` +2. example name: `example` ### Create issues -Create an issue for each specific feature or task you want to work on and label it correctly using the following format: +Create an issue for each specific feature or task you want to work on and label it correctly using the following labels: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/labels. -``` -Type(scope): issue. -``` - -For example, on notification bloc package : - -- `Feature(notification_bloc): add firebase messaging data source.` -- `Test(notification_bloc): add test for pushwoosh datasource.` +For example, if you want to work on the `i18n` package, you should create an issue with the `i18n` label. ### Branches -The master branch is protected and cannot be pushed to directly. Please create a separate branch for each feature or task, with a name that corresponds to the related issue. The branch name should follow this format: +The `master` branch is protected and cannot be pushed to directly. Please create a separate branch for each feature or task, with a name that corresponds to the related issue. The branch name should follow this format: -`type(scope):issue` + `scope/type/short-name` -Example : -For the issue: - -- `Feature(notification_bloc): add firebase messaging data source.` - -The related branch should be named: - -- `notification_bloc/feat/add_firebase_messaging_data_source` +For example, if you are working on the `i18n` package and you want to add a new feature, you should create a branch named `i18n/feat/add-new-feature` . ### Commits See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -tl;dr : `type(scope): description #issue`. +tldr : `type(scope): description #issue` . + Here allowed values: -- **feat** for a new feature for the user, not a new feature for build script. Such commit will trigger a release bumping a MINOR version. -- **fix** for a bug fix for the user, not a fix to a build script. Such commit will trigger a release bumping a PATCH version. -- **perf** for performance improvements. Such commit will trigger a release bumping a PATCH version. -- **docs** for changes to the documentation. -- **style** for formatting changes, missing semicolons, etc. -- **refactor** for refactoring production code, e.g. renaming a variable. -- **test** for adding missing tests, refactoring tests; no production code change. -- **build** for updating build configuration, development tools or other changes irrelevant to the user. +* **build** for updating build configuration, development tools or other changes irrelevant to the user. +* **ci** for changes to our CI configuration files and scripts. +* **docs** for changes to documentation. +* **feat** for a new feature for the user, not a new feature for build script. Such commit will trigger a release bumping a MINOR version. +* **fix** for a bug fix for the user, not a fix to a build script. Such commit will trigger a release bumping a PATCH version. +* **perf** for performance improvements. Such commit will trigger a release bumping a PATCH version. +* **refactor** for refactoring production code, e.g. renaming a variable. +* **style** for formatting changes, missing semicolons, etc. +* **test** for adding missing tests, refactoring tests; no production code change. +* **chore** for updating grunt tasks etc; no production code change. + +> Check `.pre-commit-config.yaml` and [pre-commit](https://pre-commit.com/) for more information about commit hooks. Some examples : -- `feat(auth): add AWS support. (#31)` = add a feature in authentication_bloc package, linked to the 31st issue. -- `docs: update readme.` = update **this** readme file. -- `fix(crud)!: fix bug in awesome() function. (#32)` = fix a bug, `!` is important and indicate `BREAKING CHANGES` linked with the 32nd issue. +* `feat(auth): add AWS support. (#31)` = add a feature in authentication_bloc package, linked to the 31st issue. +* `docs: update readme.` = update **this** readme file. +* `fix(crud)!: fix bug in awesome() function. (closes #32)` = fix a bug, `!` is important and indicate `BREAKING CHANGES` linked with the 32nd issue. -When you have completed your development work and are ready to resolve the related issue, you can close it via your commit message by including (close #issue_number). For example: +When you have completed your development work and are ready to resolve the related issue, you can close it via your commit message by including (closes #issue_number). For example: ```shell -feat(auth): add AWS support. (close #31) +feat(auth): add AWS support. (closes #31) ``` +> You can use `close` , `closes` , `closed` , `fix` , `fixes` , `fixed` , `resolve` , `resolves` or `resolved` . + +#### Before pushing + ```shell melos run test:all # this will run all tests in this project melos run gen-coverage # this will generate coverage report @@ -176,19 +193,19 @@ melos run publish # this will publish packages Please note that the issue will only be closed after it has been merged into the master branch. Before closing the issue, it is important to verify that all tests have been run and that coverage has been updated. -#### Merge your work +### Merge your work When you have completed your work and closed the related issue, it's possible that some changes may have been made to the master branch in the meantime. To maintain a clean Git history, it's recommended to rebase before creating a change request (pull request). Two situations : -- You haven't created a branch yet and have made local commits: +* You haven't created a branch yet and have made local commits: ```shell git pull --rebase ``` -- You are already working on a branch: +* You are already working on a branch: ```shell git rebase -i master @@ -198,7 +215,7 @@ It's recommended to use the `--fixup` option during the interactive rebase to ke Once you have rebased, you can create a pull request, receive the necessary approvals, and then merge your work. And with that, you're done! 🎉 -#### Update version. +### Update version. When your work has been merged into the master branch, it's time to update the package version. To update only your specific package, use the --scope option. For example, after merging changes into the `wyatt_notification_bloc` package, you can run the following command: @@ -214,22 +231,24 @@ You can then verify that all packages and their tests are working correctly by r melos run test:all ``` -#### Publish your package +### Publish your package -If package is ready for procution, publish it runnig : +If package is ready for production, publish it by running the following command : ```shell melos publish --scope"*package*" ``` -#### Badging +### Badging In the package `readme.md` file, please specify the supported SDK: ![SDK: Dart & Flutter](https://img.shields.io/badge/SDK-Dart%20%7C%20Flutter-blue?style=flat-square) ```markdown + ![SDK: Dart & Flutter](https://img.shields.io/badge/SDK-Dart%20%7C%20Flutter-blue?style=flat-square) + ``` or @@ -237,7 +256,9 @@ or ![SDK: Dart](https://img.shields.io/badge/SDK-Dart-blue?style=flat-square) ```markdown + ![SDK: Dart](https://img.shields.io/badge/SDK-Dart-blue?style=flat-square) + ``` --- @@ -251,11 +272,20 @@ dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.0.0 + ref: wyatt_analysis-v2.4.1 path: packages/wyatt_analysis ``` -Here you can change `package name` and `package version`. +or the hosted version : + +```yaml +dependencies: + wyatt_analysis: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + version: 2.4.1 +``` + +Here you can change `package name` and `package version` . --- @@ -263,10 +293,32 @@ Here you can change `package name` and `package version`. To sum up, here a simple work flow diagramm. -![Dev Wokflow](doc/workflow.svg) +```plantuml +@startuml Simple Developpment Workflow +start +:Create an issue; +:Create branch related to the issue; +repeat :Commit related to the issue; +repeat while (feature is done) +:Update coverage; +:Close issue via last commit; +:Rebase from `master`; +:Create pull request; +:Merge branches; +:Update version; +:Publish package; +stop +@enduml +``` ## Status ![Status: Experimental](https://img.shields.io/badge/Status-WIP-red?style=flat-square) This repository is maintained by Wyatt Studio but work is in progress. + +## License + +[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](http://www.gnu.org/licenses/gpl-3.0) + +Thoses packages are licensed under the GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details. diff --git a/doc/work_flow.puml b/doc/work_flow.puml deleted file mode 100644 index 5e6e983d..00000000 --- a/doc/work_flow.puml +++ /dev/null @@ -1,15 +0,0 @@ -@startuml Simple Developpment Workflow -start -:Create an issue; -:Create branch related to the issue; -repeat :Commit related to the issue; -repeat while (feature is done) -:Update coverage; -:Close issue via last commit; -:Rebase from `master`; -:Create pull request; -:Merge branches; -:Update version; -:Publish package; -stop -@enduml \ No newline at end of file diff --git a/doc/workflow.svg b/doc/workflow.svg deleted file mode 100644 index c8443191..00000000 --- a/doc/workflow.svg +++ /dev/null @@ -1,25 +0,0 @@ -Create an issueCreate branch related to the issueCommit related to the issuefeature is doneUpdate coverageClose issue via last commitRebase from `master`Create pull requestMerge branchesUpdate versionPublish package \ No newline at end of file -- 2.47.2 From 9f260b8d0bc56161fb0cac63effc1c07d2946b45 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 16:23:44 +0200 Subject: [PATCH 253/320] ci: add pubignore for each package --- .pubignore | 5 +++++ packages/wyatt_architecture/.pubignore | 1 + packages/wyatt_bloc_helper/.pubignore | 1 + packages/wyatt_bloc_layout/.pubignore | 1 + packages/wyatt_component_copy_with_extension/.pubignore | 1 + packages/wyatt_component_copy_with_gen/.pubignore | 1 + packages/wyatt_deferred_widget_annotation/.pubignore | 1 + packages/wyatt_deferred_widget_gen/.pubignore | 1 + packages/wyatt_http_client/.pubignore | 1 + packages/wyatt_i18n/.pubignore | 1 + packages/wyatt_notification_bloc/.pubignore | 1 + packages/wyatt_type_utils/.pubignore | 1 + packages/wyatt_ui_components/.pubignore | 1 + packages/wyatt_ui_kit/.pubignore | 1 + packages/wyatt_ui_layout/.pubignore | 1 + scripts/clean_gitignore.sh | 5 +++++ scripts/symbolic_links.sh | 6 ++++++ 17 files changed, 30 insertions(+) create mode 100644 .pubignore create mode 120000 packages/wyatt_architecture/.pubignore create mode 120000 packages/wyatt_bloc_helper/.pubignore create mode 120000 packages/wyatt_bloc_layout/.pubignore create mode 120000 packages/wyatt_component_copy_with_extension/.pubignore create mode 120000 packages/wyatt_component_copy_with_gen/.pubignore create mode 120000 packages/wyatt_deferred_widget_annotation/.pubignore create mode 120000 packages/wyatt_deferred_widget_gen/.pubignore create mode 120000 packages/wyatt_http_client/.pubignore create mode 120000 packages/wyatt_i18n/.pubignore create mode 120000 packages/wyatt_notification_bloc/.pubignore create mode 120000 packages/wyatt_type_utils/.pubignore create mode 120000 packages/wyatt_ui_components/.pubignore create mode 120000 packages/wyatt_ui_kit/.pubignore create mode 120000 packages/wyatt_ui_layout/.pubignore diff --git a/.pubignore b/.pubignore new file mode 100644 index 00000000..43c82d3c --- /dev/null +++ b/.pubignore @@ -0,0 +1,5 @@ +new_version.sh +.latest_version +.vscode/ +example/ +models/ diff --git a/packages/wyatt_architecture/.pubignore b/packages/wyatt_architecture/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_architecture/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_bloc_helper/.pubignore b/packages/wyatt_bloc_helper/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_bloc_helper/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/.pubignore b/packages/wyatt_bloc_layout/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_bloc_layout/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_extension/.pubignore b/packages/wyatt_component_copy_with_extension/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_component_copy_with_gen/.pubignore b/packages/wyatt_component_copy_with_gen/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_annotation/.pubignore b/packages/wyatt_deferred_widget_annotation/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_deferred_widget_annotation/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_deferred_widget_gen/.pubignore b/packages/wyatt_deferred_widget_gen/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_deferred_widget_gen/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_http_client/.pubignore b/packages/wyatt_http_client/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_http_client/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_i18n/.pubignore b/packages/wyatt_i18n/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_i18n/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_notification_bloc/.pubignore b/packages/wyatt_notification_bloc/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_notification_bloc/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_type_utils/.pubignore b/packages/wyatt_type_utils/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_type_utils/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_ui_components/.pubignore b/packages/wyatt_ui_components/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_ui_components/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_ui_kit/.pubignore b/packages/wyatt_ui_kit/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_ui_kit/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_ui_layout/.pubignore b/packages/wyatt_ui_layout/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_ui_layout/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/scripts/clean_gitignore.sh b/scripts/clean_gitignore.sh index ad546849..74e5e289 100755 --- a/scripts/clean_gitignore.sh +++ b/scripts/clean_gitignore.sh @@ -32,6 +32,11 @@ for package in "$PACKAGES_DIR"/*; do rm "$package/.gitignore" fi + # Remove .pubignore file if it exists + if [ -f "$package/.pubignore" ]; then + rm "$package/.pubignore" + fi + # Remove AUTHORS file if it exists if [ -f "$package/AUTHORS" ]; then rm "$package/AUTHORS" diff --git a/scripts/symbolic_links.sh b/scripts/symbolic_links.sh index f00ac7da..1d2b6e59 100755 --- a/scripts/symbolic_links.sh +++ b/scripts/symbolic_links.sh @@ -37,6 +37,12 @@ for package in "$PACKAGES_DIR"/*; do ln -s ../../.gitignore .gitignore fi + # Create symbolic link to the main .pubignore file if it does not already + # exist + if [ ! -f .pubignore ]; then + ln -s ../../.pubignore .pubignore + fi + # Create symbolic link to the main AUTHORS file if it does not already # exist -- 2.47.2 From 84b17382c1dffd4fed5a4f3e79bd6abc13f84f82 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 16:24:11 +0200 Subject: [PATCH 254/320] docs(architecture): update readme --- packages/wyatt_architecture/README.md | 31 +++++++++++---------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/packages/wyatt_architecture/README.md b/packages/wyatt_architecture/README.md index 871b2e08..a40b40c3 100644 --- a/packages/wyatt_architecture/README.md +++ b/packages/wyatt_architecture/README.md @@ -1,5 +1,5 @@ - - # Dart - Wyatt Type Utils

    - - Style: Wyatt Analysis - + Style: Wyatt Analysis SDK: Dart & Flutter

    -Type Utils for Dart & Flutter. +Either, Option and other useful types and extensions for Dart (and Flutter). ## Option\ @@ -62,8 +58,8 @@ print('`rand` contains 10 ? => ${rand.contains(10)}'); *E.g. null reference exception or index out of bounds are not related to domain - they rather indicate a defect.* Either is defined as a generic type with two branches -- success with **T** -- failure with **E** +* success with **T** +* failure with **E** It can appear in two forms, where it contains an object of **Ok**, or where it contains an object of **Err**. It cannot appear in both states at once, or in none of them. Therefore, if one possesses an **Result** instance, it either contains a successfully produced result, or contains an error object. @@ -95,20 +91,20 @@ print(myList); // prints '[42, 16]' This package also provides extensions for Dart types. -- Object - - isNull - - isNotNull - - log -- Iterable - - isNullOrEmpty - - isNotNullOrEmpty - - For bytes iterables +* Object + + isNull + + isNotNull + + log +* Iterable + + isNullOrEmpty + + isNotNullOrEmpty + + For bytes iterables - toTypedList - toStr -- String - - isNullOrEmpty - - isNotNullOrEmpty - - toBytes +* String + + isNullOrEmpty + + isNotNullOrEmpty + + toBytes String 🔁 Uint8List works with encoding: @@ -118,27 +114,27 @@ final Uint8List bytes = myString.toBytes(from : Encoding.utf16); print(bytes.toStr(to : Encoding.utf16)); // prints 'abc' ``` -- DateTime - - fromSecondsSinceEpoch - - secondsSinceEpoch - - timestamp - - tomorrow - - yesterday - - today - - add/sub/set - - nextDay - - previousDay - - nextMonth - - previousMonth - - nextYear - - previousYear - - nextWeek - - previousWeek - - isFuture - - isPast - - isLeapYear - - format - - operators +* DateTime + + fromSecondsSinceEpoch + + secondsSinceEpoch + + timestamp + + tomorrow + + yesterday + + today + + add/sub/set + + nextDay + + previousDay + + nextMonth + + previousMonth + + nextYear + + previousYear + + nextWeek + + previousWeek + + isFuture + + isPast + + isLeapYear + + format + + operators The date formatter works with `String` formatter: diff --git a/packages/wyatt_type_utils/lib/src/either/option.dart b/packages/wyatt_type_utils/lib/src/either/option.dart index d97ed2ac..3502984f 100644 --- a/packages/wyatt_type_utils/lib/src/either/option.dart +++ b/packages/wyatt_type_utils/lib/src/either/option.dart @@ -171,8 +171,11 @@ abstract class Option extends _EitherBase { } } +/// {@template value} +/// Contains the non-null value of the [Option]. +/// {@endtemplate} class Value extends Option with _Left { - /// {@macro ok} + /// {@macro value} const Value(this.value) : super._(); final T value; @@ -236,8 +239,11 @@ class Value extends Option with _Left { _EitherBase _or(_EitherBase res) => this as _EitherBase; } +/// {@template none} +/// Contains no value. +/// {@endtemplate} class None extends Option with _Right { - /// {@macro ok} + /// {@macro none} const None() : super._(); @override diff --git a/packages/wyatt_type_utils/lib/src/extensions/encoding.dart b/packages/wyatt_type_utils/lib/src/extensions/encoding.dart index 4a6fb8f7..5289d5f0 100644 --- a/packages/wyatt_type_utils/lib/src/extensions/encoding.dart +++ b/packages/wyatt_type_utils/lib/src/extensions/encoding.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines different text encoding types. enum Encoding { utf8, utf16, diff --git a/packages/wyatt_type_utils/pubspec.yaml b/packages/wyatt_type_utils/pubspec.yaml index c74145af..94d5faf7 100644 --- a/packages/wyatt_type_utils/pubspec.yaml +++ b/packages/wyatt_type_utils/pubspec.yaml @@ -1,16 +1,16 @@ name: wyatt_type_utils -description: Either, Option and other useful types. +description: Either, Option and other useful types and extensions. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_type_utils version: 0.0.4 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: - sdk: '>=2.17.0 <3.0.0' + sdk: ">=2.17.0 <3.0.0" dev_dependencies: test: ^1.22.0 - + wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 \ No newline at end of file + version: ^2.4.1 -- 2.47.2 From e5e05500173d75cd4bcd97da558ee8139c16bd56 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 16:46:44 +0200 Subject: [PATCH 256/320] docs(arch): add documentation --- packages/wyatt_architecture/README.md | 2 +- .../repositories/photo_repository_impl.dart | 8 +++---- .../photos/add_photo_to_favorites.dart | 2 +- .../check_if_photo_is_in_favorites.dart | 2 +- .../domain/usecases/photos/display_photo.dart | 2 +- .../domain/usecases/photos/open_album.dart | 2 +- .../photos/remove_photo_from_favorites.dart | 2 +- .../usecases/photos/retrieve_all_albums.dart | 2 +- .../lib/src/core/exceptions/exceptions.dart | 21 +++++++++++++--- .../domain/data_sources/base_data_source.dart | 5 ++++ .../local/base_local_data_source.dart | 5 ++++ .../remote/base_remote_data_source.dart | 5 ++++ .../lib/src/domain/entities/entity.dart | 4 ++++ .../domain/repositories/base_repository.dart | 4 ++++ .../lib/src/domain/usecases/no_param.dart | 5 ++++ .../lib/src/domain/usecases/observers.dart | 7 +++--- .../lib/src/domain/usecases/usecase.dart | 24 +++++++++++++++++-- .../lib/wyatt_architecture.dart | 2 +- packages/wyatt_architecture/pubspec.yaml | 16 +++++-------- 19 files changed, 90 insertions(+), 30 deletions(-) diff --git a/packages/wyatt_architecture/README.md b/packages/wyatt_architecture/README.md index a40b40c3..263ab0e2 100644 --- a/packages/wyatt_architecture/README.md +++ b/packages/wyatt_architecture/README.md @@ -23,7 +23,7 @@ SDK: Flutter

    -The Wyatt Architecture for Flutter. +The Wyatt Architecture for Flutter. Contains useful classes to help you to create a clean architecture following the Wyatt Architecture. (core, data, domain, presentation). ## Features diff --git a/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart b/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart index d7a5aaf3..274502f1 100644 --- a/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart +++ b/packages/wyatt_architecture/example/lib/data/repositories/photo_repository_impl.dart @@ -36,7 +36,7 @@ class PhotoRepositoryImpl extends PhotoRepository { @override FutureOrResult addPhotoToFavorites(Photo photo) => Result.tryCatchAsync( () => _favoriteLocalDataSource.addPhotoToFavorites(photo), - (error) => ClientException('Cannot add photo to favorites.'), + (error) => const ClientException('Cannot add photo to favorites.'), ); @override @@ -63,14 +63,14 @@ class PhotoRepositoryImpl extends PhotoRepository { FutureOrResult> getAllAlbums({int? start, int? limit}) => Result.tryCatchAsync( () => _albumRemoteDataSource.getAllAlbums(start: start, limit: limit), - (error) => ServerException('Cannot retrieve all albums.'), + (error) => const ServerException('Cannot retrieve all albums.'), ); @override FutureOrResult> getAllPhotos({int? start, int? limit}) async => Result.tryCatchAsync( () => _photoRemoteDataSource.getAllPhotos(start: start, limit: limit), - (error) => ServerException('Cannot retrieve all photos.'), + (error) => const ServerException('Cannot retrieve all photos.'), ); @override @@ -88,7 +88,7 @@ class PhotoRepositoryImpl extends PhotoRepository { } return Ok(response); } catch (_) { - return Err( + return const Err( ClientException('Cannot retrieve all photos from favorites.'), ); } diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart index 769ae81d..ef8a0ec9 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/add_photo_to_favorites.dart @@ -33,7 +33,7 @@ class AddPhotoToFavorites extends AsyncUseCase> { @override FutureOr onStart(Photo? params) { if (params == null) { - throw ClientException('Photo cannot be null'); + throw const ClientException('Photo cannot be null'); } } } diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart index 7ff464ce..f0dcfa5c 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/check_if_photo_is_in_favorites.dart @@ -30,7 +30,7 @@ class CheckIfPhotoIsInFavorites extends AsyncUseCase { @override FutureOr onStart(int? params) { if (params == null) { - throw ClientException('id cannot be null'); + throw const ClientException('id cannot be null'); } } } diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart index 36076c70..79a06b8a 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/display_photo.dart @@ -33,7 +33,7 @@ class DisplayPhoto extends AsyncUseCase { @override FutureOr onStart(int? params) { if (params == null) { - throw ClientException('id cannot be null'); + throw const ClientException('id cannot be null'); } } } diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart index 8badf689..358e86a2 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/open_album.dart @@ -39,7 +39,7 @@ class OpenAlbum extends AsyncUseCase> { @override FutureOr onStart(QueryParameters? params) { if (params == null) { - throw ClientException('params cannot be null'); + throw const ClientException('params cannot be null'); } } } diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart index 737c59a1..e73206b3 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/remove_photo_from_favorites.dart @@ -33,7 +33,7 @@ class RemovePhotoFromFavorites extends AsyncUseCase> { @override FutureOr onStart(int? params) { if (params == null) { - throw ClientException('id cannot be null'); + throw const ClientException('id cannot be null'); } } } diff --git a/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart b/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart index 0fc6a757..e88f8a12 100644 --- a/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart +++ b/packages/wyatt_architecture/example/lib/domain/usecases/photos/retrieve_all_albums.dart @@ -37,7 +37,7 @@ class RetrieveAllAlbums extends AsyncUseCase> { @override FutureOr onStart(QueryParameters? params) { if (params == null) { - throw ClientException('params cannot be null'); + throw const ClientException('params cannot be null'); } } } diff --git a/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart index 3fb15944..e1fa8e9a 100644 --- a/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart +++ b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart @@ -16,8 +16,13 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; +/// {@template app_exception} +/// [AppException] is a base class for all exceptions in the wyatt architecture. +/// {@endtemplate} abstract class AppException implements Exception { - AppException([this.message]); + /// {@macro app_exception} + const AppException([this.message]); + final String? message; @override @@ -30,10 +35,20 @@ abstract class AppException implements Exception { } } +/// {@template client_exception} +/// [ClientException] is a base class for all client exceptions in the wyatt +/// architecture. +/// {@endtemplate} class ClientException extends AppException { - ClientException([super.message]); + /// {@macro client_exception} + const ClientException([super.message]); } +/// {@template server_exception} +/// [ServerException] is a base class for all server exceptions in the wyatt +/// architecture. +/// {@endtemplate} class ServerException extends AppException { - ServerException([super.message]); + /// {@macro server_exception} + const ServerException([super.message]); } diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart index 5dc243db..f5002603 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/base_data_source.dart @@ -14,6 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// {@template base_data_source} +/// [BaseDataSource] is a base class for all data sources in the wyatt +/// architecture. +/// {@endtemplate} abstract class BaseDataSource { + /// {@macro base_data_source} const BaseDataSource(); } diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart index 1d7c134c..b091a13f 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/local/base_local_data_source.dart @@ -16,6 +16,11 @@ import 'package:wyatt_architecture/src/domain/data_sources/base_data_source.dart'; +/// {@template base_local_data_source} +/// [BaseLocalDataSource] is a base class for all local data sources in the +/// wyatt architecture. +/// {@endtemplate} abstract class BaseLocalDataSource extends BaseDataSource { + /// {@macro base_local_data_source} const BaseLocalDataSource(); } diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart index a4a72999..8ed880c4 100644 --- a/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/base_remote_data_source.dart @@ -16,6 +16,11 @@ import 'package:wyatt_architecture/src/domain/data_sources/base_data_source.dart'; +/// {@template base_remote_data_source} +/// [BaseRemoteDataSource] is a base class for all remote data sources in the +/// wyatt architecture. +/// {@endtemplate} abstract class BaseRemoteDataSource extends BaseDataSource { + /// {@macro base_remote_data_source} const BaseRemoteDataSource(); } diff --git a/packages/wyatt_architecture/lib/src/domain/entities/entity.dart b/packages/wyatt_architecture/lib/src/domain/entities/entity.dart index fd988950..41a8ca17 100644 --- a/packages/wyatt_architecture/lib/src/domain/entities/entity.dart +++ b/packages/wyatt_architecture/lib/src/domain/entities/entity.dart @@ -14,6 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// {@template entity} +/// [Entity] is a base class for all entities in the domain layer. +/// {@endtemplate} abstract class Entity { + /// {@macro entity} const Entity(); } diff --git a/packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart b/packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart index 4a08a0db..a7e26b12 100644 --- a/packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart +++ b/packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart @@ -14,6 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// {@template base_repository} +/// [BaseRepository] is a base class for all repositories in the domain layer. +/// {@endtemplate} abstract class BaseRepository { + /// {@macro base_repository} const BaseRepository(); } diff --git a/packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart b/packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart index 7452af67..4509bd59 100644 --- a/packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart +++ b/packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart @@ -16,6 +16,11 @@ import 'package:wyatt_architecture/src/domain/entities/entity.dart'; +/// {@template no_param} +/// [NoParam] is a class that is used when a use case does not require any +/// parameters. +/// {@endtemplate} class NoParam extends Entity { + /// {@macro no_param} const NoParam(); } diff --git a/packages/wyatt_architecture/lib/src/domain/usecases/observers.dart b/packages/wyatt_architecture/lib/src/domain/usecases/observers.dart index 370546fe..a1925577 100644 --- a/packages/wyatt_architecture/lib/src/domain/usecases/observers.dart +++ b/packages/wyatt_architecture/lib/src/domain/usecases/observers.dart @@ -21,16 +21,17 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; /// Usecase observers mixin Observer { /// Called before usecase is runned. - /// Usefull to check the preconditions + /// Useful to check the preconditions FutureOr onStart(Parameters? params) {} /// Called when error occures during main scenario - /// Usefull to run alternative scenario + /// Useful to run alternative scenario FutureOr onError(AppException? error) {} } /// Specific observer for classic usecase mixin AsyncObserver { + /// Called when usecase is completed FutureOr onComplete(ReturnType? data) {} } @@ -39,6 +40,6 @@ mixin StreamObserver { /// Replaces the data event handler of this subscription. void onDone() {} - /// Replaces the done event handler of this subscription. + /// Replaces the done event handler of this subscription. void onData(ReturnType? data) {} } diff --git a/packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart b/packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart index c406535d..75c4c905 100644 --- a/packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart +++ b/packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart @@ -23,8 +23,13 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart'; typedef FutureOrResult = FutureOr>; typedef StreamResult = Stream>; -/// Abstract class of a use case +/// {@template base_usecase} +/// Abstract class of any use case. +/// {@endtemplate} abstract class BaseUseCase { + /// {@macro base_usecase} + const BaseUseCase(); + /// Run use case scenarios ReturnType call(Parameters parameters); @@ -33,11 +38,16 @@ abstract class BaseUseCase { ReturnType execute(Parameters params); } +/// {@template usecase} /// Abstract class of a use case that deals specifically /// with the response and its state. +/// {@endtemplate} abstract class UseCase extends BaseUseCase> with Observer { + /// {@macro usecase} + const UseCase(); + FutureOr _onSuccess(ReturnType data); /// Supports the result of the main scenario and integrates @@ -59,17 +69,27 @@ abstract class UseCase } } -/// Abtstract classic usecase. +/// {@template async_usecase} +/// Abtstract classic usecase bases on futures +/// {@endtemplate} abstract class AsyncUseCase extends UseCase with AsyncObserver { + /// {@macro async_usecase} + const AsyncUseCase(); + @override FutureOr _onSuccess(ReturnType data) => onComplete(data); } +/// {@template stream_usecase} /// Abstract specific usecase bases on streams +/// {@endtemplate} abstract class StreamUseCase extends UseCase> with StreamObserver { + /// {@macro stream_usecase} + const StreamUseCase(); + @override FutureOr _onSuccess(Stream data) { data.listen( diff --git a/packages/wyatt_architecture/lib/wyatt_architecture.dart b/packages/wyatt_architecture/lib/wyatt_architecture.dart index 54c20e0d..f07613aa 100644 --- a/packages/wyatt_architecture/lib/wyatt_architecture.dart +++ b/packages/wyatt_architecture/lib/wyatt_architecture.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -/// Architecture +/// Wyatt Architecture for Flutter library wyatt_architecture; export 'src/src.dart'; diff --git a/packages/wyatt_architecture/pubspec.yaml b/packages/wyatt_architecture/pubspec.yaml index cac59f5f..dafcc4eb 100644 --- a/packages/wyatt_architecture/pubspec.yaml +++ b/packages/wyatt_architecture/pubspec.yaml @@ -1,27 +1,23 @@ name: wyatt_architecture -description: A new Wyatt package +description: Wyatt Architecture contains useful classes to help you to create a clean architecture following the Wyatt Architecture principles. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_architecture version: 0.1.0+1 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: - sdk: '>=2.17.0 <3.0.0' + sdk: ">=2.17.0 <3.0.0" dependencies: - - flutter: - sdk: flutter + flutter: { sdk: flutter } wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^0.0.4 dev_dependencies: - - flutter_test: - sdk: flutter - + flutter_test: { sdk: flutter } + wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 \ No newline at end of file + version: ^2.4.1 -- 2.47.2 From 41add204f3fc04612e9ee0b5ac85fd683a596bc4 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 20:17:25 +0200 Subject: [PATCH 257/320] docs: change some documentation --- README.md | 6 ++++-- packages/wyatt_analysis/README.md | 2 +- packages/wyatt_architecture/README.md | 4 ++-- packages/wyatt_type_utils/README.md | 10 +++++++++- packages/wyatt_type_utils/lib/src/src.dart | 6 +----- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e8ed43f5..8b78891e 100644 --- a/README.md +++ b/README.md @@ -253,14 +253,16 @@ In the package `readme.md` file, please specify the supported SDK: or -![SDK: Dart](https://img.shields.io/badge/SDK-Dart-blue?style=flat-square) +![SDK: Flutter](https://img.shields.io/badge/SDK-Flutter-blue?style=flat-square) ```markdown -![SDK: Dart](https://img.shields.io/badge/SDK-Dart-blue?style=flat-square) +![SDK: Flutter](https://img.shields.io/badge/SDK-Flutter-blue?style=flat-square) ``` +> Some packages requires Flutter, so please specify it. + --- ## Usage diff --git a/packages/wyatt_analysis/README.md b/packages/wyatt_analysis/README.md index 28b5244d..95d85e02 100644 --- a/packages/wyatt_analysis/README.md +++ b/packages/wyatt_analysis/README.md @@ -20,7 +20,7 @@ ![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.4.1.yaml**. +This package provides lint rules for Dart and Flutter which are used at [Wyatt Studio](https://wyatt-studio.fr). For more information, see the complete list of options in **lib/analysis_options.2.4.1.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). diff --git a/packages/wyatt_architecture/README.md b/packages/wyatt_architecture/README.md index 263ab0e2..e077fbec 100644 --- a/packages/wyatt_architecture/README.md +++ b/packages/wyatt_architecture/README.md @@ -16,11 +16,11 @@ * along with this program. If not, see . --> -# Flutter - Wyatt Architecture +# Wyatt Architecture

    Style: Wyatt Analysis - SDK: Flutter + SDK: Dart & Flutter

    The Wyatt Architecture for Flutter. Contains useful classes to help you to create a clean architecture following the Wyatt Architecture. (core, data, domain, presentation). diff --git a/packages/wyatt_type_utils/README.md b/packages/wyatt_type_utils/README.md index 98034973..b36d5c1f 100644 --- a/packages/wyatt_type_utils/README.md +++ b/packages/wyatt_type_utils/README.md @@ -16,7 +16,7 @@ * along with this program. If not, see . --> -# Dart - Wyatt Type Utils +# Wyatt Type Utils

    Style: Wyatt Analysis @@ -142,3 +142,11 @@ The date formatter works with `String` formatter: final DateTime date = DateTime(1999, 6, 30); print(date.format([dd, '/', mm, '/', yy])); // prints '30/06/99' ``` + +Allow comparison between nullable numbers: + +```dart +final int? a = 10; +final int? b = 20; +print(a < b); // prints 'true' +``` diff --git a/packages/wyatt_type_utils/lib/src/src.dart b/packages/wyatt_type_utils/lib/src/src.dart index 34d55694..c1d65c3c 100644 --- a/packages/wyatt_type_utils/lib/src/src.dart +++ b/packages/wyatt_type_utils/lib/src/src.dart @@ -15,9 +15,5 @@ // along with this program. If not, see . export 'either/either_base.dart'; -export 'extensions/date_time_extension.dart'; -export 'extensions/encoding.dart'; -export 'extensions/iterable_extension.dart'; -export 'extensions/object_extension.dart'; -export 'extensions/string_extension.dart'; +export 'extensions/extensions.dart'; export 'pair/pair.dart'; -- 2.47.2 From 72b27b27ee031b03b861b13dfd3d8c0591679b76 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 20:17:55 +0200 Subject: [PATCH 258/320] refactor(arch): move to dart package --- packages/wyatt_architecture/pubspec.yaml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/wyatt_architecture/pubspec.yaml b/packages/wyatt_architecture/pubspec.yaml index dafcc4eb..e447fa29 100644 --- a/packages/wyatt_architecture/pubspec.yaml +++ b/packages/wyatt_architecture/pubspec.yaml @@ -1,3 +1,19 @@ +# 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 . + name: wyatt_architecture description: Wyatt Architecture contains useful classes to help you to create a clean architecture following the Wyatt Architecture principles. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_architecture @@ -9,15 +25,11 @@ environment: sdk: ">=2.17.0 <3.0.0" dependencies: - flutter: { sdk: flutter } - wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^0.0.4 dev_dependencies: - flutter_test: { sdk: flutter } - wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.1 -- 2.47.2 From 468aa72635638c40ffc8f8e40382ce5cbb6fe8b3 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 20:18:45 +0200 Subject: [PATCH 259/320] refactor(bloc_helper): docs + nullable multiprovider attributes --- packages/wyatt_bloc_helper/README.md | 14 ++++---- .../lib/src/utils/smart_provider.dart | 7 ++++ .../lib/src/widgets/multi_provider.dart | 36 ++++++++++++++----- packages/wyatt_bloc_helper/pubspec.yaml | 14 ++++---- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/packages/wyatt_bloc_helper/README.md b/packages/wyatt_bloc_helper/README.md index 5b055eb4..ea4ffd4f 100644 --- a/packages/wyatt_bloc_helper/README.md +++ b/packages/wyatt_bloc_helper/README.md @@ -7,7 +7,7 @@ * the Free Software Foundation, either version 3 of the License, or * any later version. * - * This program is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -16,12 +16,10 @@ * along with this program. If not, see . --> -# Flutter - BloC Helper +# BloC Helper

    - - Style: Wyatt Analysis - + Style: Wyatt Analysis SDK: Flutter

    @@ -86,7 +84,7 @@ Widget buildChild(BuildContext context) { } ``` -> Note: here, you can use BlocBuilder, BlocListener,... and access Bloc and Repository instance with the mixin helper. +> Note: here, you can use BlocBuilder, BlocListener, ... and access Bloc and Repository instance with the mixin helper. ### Only BlocConsumer @@ -116,7 +114,7 @@ Widget onBuild(BuildContext context, CounterState state) { } ``` -If needed, you can wrap what depends on the state with the function `parent`. +If needed, you can wrap what depends on the state with the function `parent` . ```dart @override @@ -129,7 +127,7 @@ Widget parent(BuildContext context, Widget child) { ); ``` -> Note: you can override `onBuild`, but also `onListen`, `shouldBuildWhen` and `shouldListenWhen` methods. +> Note: you can override `onBuild` , but also `onListen` , `shouldBuildWhen` and `shouldListenWhen` methods. ### Both BlocProvider and BlocConsumer diff --git a/packages/wyatt_bloc_helper/lib/src/utils/smart_provider.dart b/packages/wyatt_bloc_helper/lib/src/utils/smart_provider.dart index 046da441..9ac68ddb 100644 --- a/packages/wyatt_bloc_helper/lib/src/utils/smart_provider.dart +++ b/packages/wyatt_bloc_helper/lib/src/utils/smart_provider.dart @@ -17,7 +17,12 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +/// A utility class that provides a way to create a [BlocProvider] or +/// [RepositoryProvider] with a [Bloc] or Repository that is already +/// available in the widget tree. abstract class SmartProvider { + /// Creates a [BlocProvider] with a [Bloc] that is possibly already + /// available in the widget tree. static BlocProvider bloc, State extends Object>( BuildContext context, { @@ -45,6 +50,8 @@ abstract class SmartProvider { ); } + /// Creates a [RepositoryProvider] with a Repository that is possibly + /// already available in the widget tree. static RepositoryProvider repo( BuildContext context, { required Repository Function(BuildContext) create, diff --git a/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart b/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart index 4cb3c2bf..4ddfbea0 100644 --- a/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart +++ b/packages/wyatt_bloc_helper/lib/src/widgets/multi_provider.dart @@ -77,9 +77,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; class MultiProvider extends StatelessWidget { /// {@macro multi_provider} const MultiProvider({ - required this.repositoryProviders, - required this.blocProviders, required this.child, + this.repositoryProviders = const >[], + this.blocProviders = const [], super.key, }); @@ -88,11 +88,31 @@ class MultiProvider extends StatelessWidget { final Widget child; @override - Widget build(BuildContext context) => MultiRepositoryProvider( - providers: repositoryProviders, - child: MultiBlocProvider( - providers: blocProviders, - child: child, - ), + Widget build(BuildContext context) { + if (repositoryProviders.isEmpty && blocProviders.isEmpty) { + return child; + } + + if (repositoryProviders.isEmpty) { + return MultiBlocProvider( + providers: blocProviders, + child: child, ); + } + + if (blocProviders.isEmpty) { + return MultiRepositoryProvider( + providers: repositoryProviders, + child: child, + ); + } + + return MultiRepositoryProvider( + providers: repositoryProviders, + child: MultiBlocProvider( + providers: blocProviders, + child: child, + ), + ); + } } diff --git a/packages/wyatt_bloc_helper/pubspec.yaml b/packages/wyatt_bloc_helper/pubspec.yaml index 00af1bf5..a133308c 100644 --- a/packages/wyatt_bloc_helper/pubspec.yaml +++ b/packages/wyatt_bloc_helper/pubspec.yaml @@ -6,20 +6,18 @@ version: 2.0.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: - sdk: '>=2.17.0 <3.0.0' + sdk: ">=2.17.0 <3.0.0" dependencies: - flutter: - sdk: flutter - + flutter: { sdk: flutter } + flutter_bloc: ^8.1.1 equatable: ^2.0.5 dev_dependencies: - flutter_test: - sdk: flutter + flutter_test: { sdk: flutter } bloc_test: ^9.1.0 - + wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 \ No newline at end of file + version: ^2.4.1 -- 2.47.2 From 4acab9a662c499c3825d5ff156db697f3f3ee324 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 20:19:35 +0200 Subject: [PATCH 260/320] feat(type_utils): add nullable num comparison --- .../lib/src/extensions/extensions.dart | 22 ++++++++ .../lib/src/extensions/num_extension.dart | 51 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 packages/wyatt_type_utils/lib/src/extensions/extensions.dart create mode 100644 packages/wyatt_type_utils/lib/src/extensions/num_extension.dart diff --git a/packages/wyatt_type_utils/lib/src/extensions/extensions.dart b/packages/wyatt_type_utils/lib/src/extensions/extensions.dart new file mode 100644 index 00000000..be624333 --- /dev/null +++ b/packages/wyatt_type_utils/lib/src/extensions/extensions.dart @@ -0,0 +1,22 @@ +// 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 . + +export 'date_time_extension.dart'; +export 'encoding.dart'; +export 'iterable_extension.dart'; +export 'num_extension.dart'; +export 'object_extension.dart'; +export 'string_extension.dart'; diff --git a/packages/wyatt_type_utils/lib/src/extensions/num_extension.dart b/packages/wyatt_type_utils/lib/src/extensions/num_extension.dart new file mode 100644 index 00000000..66979260 --- /dev/null +++ b/packages/wyatt_type_utils/lib/src/extensions/num_extension.dart @@ -0,0 +1,51 @@ +// 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 . + +extension NumExtension on num? { + bool operator <(num? other) { + if (this == null || other == null) { + return false; + } + return this < other; + } + + bool operator >(num? other) { + if (this == null || other == null) { + return false; + } + return this > other; + } + + bool operator <=(num? other) { + if (this == null && other == null) { + return true; + } + if (this == null || other == null) { + return false; + } + return this <= other; + } + + bool operator >=(num? other) { + if (this == null && other == null) { + return true; + } + if (this == null || other == null) { + return false; + } + return this >= other; + } +} -- 2.47.2 From 216a6c2aae736519c5287a5345984314b6a95fee Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 20:21:30 +0200 Subject: [PATCH 261/320] feat(crud): change responsibility of blocs (closes #45, closes #44) --- packages/wyatt_crud_bloc/README.md | 178 +++++++-- packages/wyatt_crud_bloc/example/lib/app.dart | 26 +- .../wyatt_crud_bloc/example/lib/models.dart | 29 +- .../example/lib/user_cubit.dart | 25 +- .../wyatt_crud_bloc/lib/src/core/core.dart | 1 + .../lib/src/core/enums/where_query_type.dart | 1 + .../lib/src/core/mixins/operation.dart | 30 ++ .../crud_in_memory_data_source_impl.dart | 8 +- .../crud_firestore_data_source_impl.dart | 8 + .../repositories/crud_repository_impl.dart | 8 +- .../domain/data_sources/crud_data_source.dart | 15 + .../lib/src/domain/entities/object_model.dart | 7 + .../lib/src/domain/entities/query.dart | 48 ++- .../domain/repositories/crud_repository.dart | 23 ++ .../lib/src/domain/usecases/create.dart | 13 +- .../lib/src/domain/usecases/delete.dart | 13 +- .../lib/src/domain/usecases/delete_all.dart | 11 +- .../lib/src/domain/usecases/get.dart | 11 +- .../lib/src/domain/usecases/get_all.dart | 12 +- .../usecases/params/stream_parameters.dart | 16 +- .../usecases/params/update_parameters.dart | 20 +- .../lib/src/domain/usecases/query.dart | 13 +- .../lib/src/domain/usecases/stream_query.dart | 44 --- .../lib/src/domain/usecases/update.dart | 13 +- .../lib/src/domain/usecases/update_all.dart | 13 +- .../lib/src/domain/usecases/usecases.dart | 1 - .../crud/blocs/crud_advanced_cubit.dart | 305 +++++++++++++++ .../crud_base_cubit/crud_base_cubit.dart} | 41 +- .../crud_base_cubit}/crud_state.dart | 40 +- .../src/features/crud/blocs/crud_cubit.dart | 369 ++++++++++++++++++ .../features/crud/builder/crud_builder.dart | 26 +- .../lib/src/features/crud/crud.dart | 4 +- .../src/features/crud/cubit/crud_cubit.dart | 266 ------------- packages/wyatt_crud_bloc/pubspec.yaml | 6 +- 34 files changed, 1146 insertions(+), 498 deletions(-) create mode 100644 packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart delete mode 100644 packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart create mode 100644 packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_advanced_cubit.dart rename packages/wyatt_crud_bloc/lib/src/{core/extensions/num_extension.dart => features/crud/blocs/crud_base_cubit/crud_base_cubit.dart} (51%) rename packages/wyatt_crud_bloc/lib/src/features/crud/{cubit => blocs/crud_base_cubit}/crud_state.dart (58%) create mode 100644 packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_cubit.dart delete mode 100644 packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart diff --git a/packages/wyatt_crud_bloc/README.md b/packages/wyatt_crud_bloc/README.md index 8b55e735..4f483186 100644 --- a/packages/wyatt_crud_bloc/README.md +++ b/packages/wyatt_crud_bloc/README.md @@ -1,39 +1,167 @@ - -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. +# CRUD BloC -## Features +

    + Style: Wyatt Analysis + SDK: Flutter +

    -TODO: List what your package can do. Maybe include images, gifs, or videos. +CRUD Bloc Pattern utilities for Flutter. -## Getting started +This package defines a set of classes that can be used to implement the CRUD Bloc Pattern. -TODO: List prerequisites and provide or point to information on how to -start using the package. +* Model +* Data Source + + In Memory + + Firestore +* Repository +* Use Case + + Create + + Get + + Get All + + Update + + Update All + + Delete + + Delete All + + Query +* Bloc + + Standard (C R U D), you have to choose the responsiblity of the bloc for each use case. For example, you can have a cubit that only handles the creation of an entity, and another cubit that only handles the deletion of an entity. Each cubit can only have one operation responsibility of each type, for example you can't have a cubit that handles get and get all. + + Advanced, you can set every use case to be handled by the bloc. This is useful if you want to have a single bloc that handles all the operations of an entity. ## Usage -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. +Create a model class that extends the `ObjectModel` class. ```dart -const like = 'sample'; +class User extends ObjectModel { + @override + final String? id; + + final String? name; + + const User({ + required this.name, + this.id, + }); + + Map toMap() { + return { + 'name': name ?? '', + }; + } + + @override + String toString() => 'User(id: $id, name: $name)'; +} ``` -## Additional information +You have to implement a bloc. -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. +```dart +/// A [CrudCubit] for [User]. +class UserCubit extends CrudCubit { + final CrudRepository _crudRepository; + + UserCubit(this._crudRepository); + + @override + CreateOperation? get createOperation => + Create(_crudRepository); + + @override + DeleteOperation? get deleteOperation => + Delete(_crudRepository); + + @override + ReadOperation? get readOperation => + GetAll(_crudRepository); + + @override + UpdateOperation? get updateOperation => + Update(_crudRepository); +} +``` + +> You can also use the `CrudAdvancedCubit` class to implement a bloc that handles all the use cases. + +Then you can use the bloc in your widget with a data source and a repository. + +```dart +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + final CrudDataSource userLocalDataSource = + CrudInMemoryDataSourceImpl(toMap: (user) => user.toMap()); + + final CrudRepository userRepository = + CrudRepositoryImpl(crudDataSource: userLocalDataSource); + + return RepositoryProvider>.value( + value: userRepository, + child: BlocProvider( + create: (context) => UserCubit(userRepository)..read(), + child: MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const MyHomePage(), + ), + ), + ); + } +} +``` + +And anywhere in your widget tree you can use the BlocBuilder to build your widget. + +```dart +... +BlocBuilder( + builder: (context, state) { + return CrudBuilder.typed>( + state: state, + builder: ((context, state) { + return ListView.builder( + shrinkWrap: true, + itemCount: state.data.length, + itemBuilder: (context, index) { + final user = state.data.elementAt(index); + return ListTile( + title: Text(user?.name ?? 'Error'), + subtitle: Text(user?.id ?? 'Error'), + onTap: () { + context.read().delete(id: (user?.id)!); + }, + ); + }, + ); + }), + initialBuilder: (context, state) => const Text("Loading..."), + loadingBuilder: (context, state) => const Text("Loading..."), + errorBuilder: (context, state) => Text("Error: $state"), + ); + }, +), +... +``` diff --git a/packages/wyatt_crud_bloc/example/lib/app.dart b/packages/wyatt_crud_bloc/example/lib/app.dart index 47d7e59e..d5339343 100644 --- a/packages/wyatt_crud_bloc/example/lib/app.dart +++ b/packages/wyatt_crud_bloc/example/lib/app.dart @@ -36,8 +36,12 @@ class MyApp extends StatelessWidget { return RepositoryProvider>.value( value: userRepository, - child: BlocProvider( - create: (context) => UserCubit(userRepository)..getAll(), + child: MultiBlocProvider( + providers: [ + BlocProvider( + create: (context) => UserCubit(userRepository)..read(), + ), + ], child: MaterialApp( title: 'Flutter Demo', theme: ThemeData( @@ -78,9 +82,7 @@ class MyHomePage extends StatelessWidget { title: Text(user?.name ?? 'Error'), subtitle: Text(user?.id ?? 'Error'), onTap: () { - context.read().delete( - (user?.id)!, - ); + context.read().delete(id: (user?.id)!); }, ); }, @@ -108,22 +110,10 @@ class MyHomePage extends StatelessWidget { ), ElevatedButton( onPressed: () { - context.read().deleteAll(); - }, - child: const Text("DeleteAll"), - ), - ElevatedButton( - onPressed: () { - context.read().getAll(); + context.read().read(); }, child: const Text("GetAll"), ), - ElevatedButton( - onPressed: () { - context.read().query([LimitQuery(2)]); - }, - child: const Text("Query"), - ), const SizedBox(height: 20), ], ), diff --git a/packages/wyatt_crud_bloc/example/lib/models.dart b/packages/wyatt_crud_bloc/example/lib/models.dart index b4ccfebf..e9ed1c7f 100644 --- a/packages/wyatt_crud_bloc/example/lib/models.dart +++ b/packages/wyatt_crud_bloc/example/lib/models.dart @@ -18,37 +18,18 @@ import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; class User extends ObjectModel { @override - String? id; + final String? id; - String? name; - String? email; - String? phone; + final String? name; + final String? email; + final String? phone; - User({ + const User({ required this.name, required this.email, required this.phone, this.id, }); - // User._(); - - // factory User.parser() { - // return User._(); - // } - - // @override - // User? from(DocumentSnapshot? object) { - // if (object == null) return null; - // if (object.exists) { - // return User( - // id: object.id, - // name: (object.data() as Map?)!['name'] as String, - // email: (object.data() as Map?)!['email'] as String, - // phone: (object.data() as Map?)!['phone'] as String, - // ); - // } - // return null; - // } Map toMap() { return { diff --git a/packages/wyatt_crud_bloc/example/lib/user_cubit.dart b/packages/wyatt_crud_bloc/example/lib/user_cubit.dart index 703d6686..cc34df6c 100644 --- a/packages/wyatt_crud_bloc/example/lib/user_cubit.dart +++ b/packages/wyatt_crud_bloc/example/lib/user_cubit.dart @@ -17,32 +17,25 @@ import 'package:crud_bloc_example/models.dart'; import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +/// A [CrudCubit] for [User]. class UserCubit extends CrudCubit { final CrudRepository _crudRepository; UserCubit(this._crudRepository); @override - Create? get crudCreate => Create(_crudRepository); + CreateOperation? get createOperation => + Create(_crudRepository); @override - Delete? get crudDelete => Delete(_crudRepository); + DeleteOperation? get deleteOperation => + Delete(_crudRepository); @override - DeleteAll? get crudDeleteAll => DeleteAll(_crudRepository); + ReadOperation? get readOperation => + GetAll(_crudRepository); @override - Get? get crudGet => Get(_crudRepository); - - @override - GetAll? get crudGetAll => GetAll(_crudRepository); - - @override - Query? get crudQuery => Query(_crudRepository); - - @override - Update? get crudUpdate => Update(_crudRepository); - - @override - UpdateAll? get crudUpdateAll => UpdateAll(_crudRepository); + UpdateOperation? get updateOperation => + Update(_crudRepository); } diff --git a/packages/wyatt_crud_bloc/lib/src/core/core.dart b/packages/wyatt_crud_bloc/lib/src/core/core.dart index 1d218692..12ebcadf 100644 --- a/packages/wyatt_crud_bloc/lib/src/core/core.dart +++ b/packages/wyatt_crud_bloc/lib/src/core/core.dart @@ -15,3 +15,4 @@ // along with this program. If not, see . export 'enums/where_query_type.dart'; +export 'mixins/operation.dart'; diff --git a/packages/wyatt_crud_bloc/lib/src/core/enums/where_query_type.dart b/packages/wyatt_crud_bloc/lib/src/core/enums/where_query_type.dart index f20879e7..6a7c9bfe 100644 --- a/packages/wyatt_crud_bloc/lib/src/core/enums/where_query_type.dart +++ b/packages/wyatt_crud_bloc/lib/src/core/enums/where_query_type.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines different query types for WhereQuery. enum WhereQueryType { isEqualTo, isNotEqualTo, diff --git a/packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart b/packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart new file mode 100644 index 00000000..7a1b9b09 --- /dev/null +++ b/packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart @@ -0,0 +1,30 @@ +// 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 . + +import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; + +/// Defines every write operation in CRUD. +mixin CreateOperation on AsyncUseCase {} + +/// Defines every read operation in CRUD. +mixin ReadOperation on AsyncUseCase {} + +/// Defines every update operation in CRUD. +mixin UpdateOperation on AsyncUseCase {} + +/// Defines every delete operation in CRUD. +mixin DeleteOperation on AsyncUseCase {} diff --git a/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart index bb892251..7c2f706b 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/data_sources/local/crud_in_memory_data_source_impl.dart @@ -17,13 +17,17 @@ import 'dart:async'; import 'package:wyatt_crud_bloc/src/core/enums/where_query_type.dart'; -import 'package:wyatt_crud_bloc/src/core/extensions/num_extension.dart'; -import 'package:wyatt_crud_bloc/src/domain/data_sources/crud_data_source.dart'; +import 'package:wyatt_crud_bloc/src/domain/data_sources/data_sources.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; +import 'package:wyatt_type_utils/wyatt_type_utils.dart'; +/// {@template crud_in_memory_data_source_impl} +/// A [CrudDataSource] that stores data in memory. +/// {@endtemplate} class CrudInMemoryDataSourceImpl extends CrudDataSource { + /// {@macro crud_in_memory_data_source_impl} CrudInMemoryDataSourceImpl({required this.toMap, Map? data}) : _data = data ?? {}; final Map _data; diff --git a/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart index e70ecc9c..2915f2e6 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/data_sources/remote/crud_firestore_data_source_impl.dart @@ -20,15 +20,23 @@ import 'package:wyatt_crud_bloc/src/domain/data_sources/crud_data_source.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; +/// {@template crud_firestore_data_source_impl} +/// A concrete implementation of [CrudDataSource] that uses +/// [FirebaseFirestore] as the data source. +/// {@endtemplate} class CrudFirestoreDataSourceImpl extends CrudDataSource { + /// {@macro crud_firestore_data_source_impl} CrudFirestoreDataSourceImpl( String collection, { + /// The function that converts a [DocumentSnapshot] to a [Model]. required Model Function( DocumentSnapshot>, SnapshotOptions?, ) fromFirestore, + + /// The function that converts a [Model] to a [Map]. required Map Function(Model, SetOptions?) toFirestore, FirebaseFirestore? firestore, }) : _firestore = firestore ?? FirebaseFirestore.instance, diff --git a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart index f26fdc1d..7f068be2 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart @@ -21,9 +21,13 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; +/// {@template crud_repository_impl} +/// A repository that implements the [CrudRepository] interface. +/// {@endtemplate} class CrudRepositoryImpl extends CrudRepository { - CrudRepositoryImpl({ + /// {@macro crud_repository_impl} + const CrudRepositoryImpl({ required CrudDataSource crudDataSource, }) : _crudDataSource = crudDataSource; final CrudDataSource _crudDataSource; @@ -99,6 +103,6 @@ class CrudRepositoryImpl if (lst.isNotNull) { return Ok, AppException>(lst); } - return Err, AppException>(ServerException()); + return Err, AppException>(const ServerException()); }); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/data_sources/crud_data_source.dart b/packages/wyatt_crud_bloc/lib/src/domain/data_sources/crud_data_source.dart index 95defb4c..b6d0ba30 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/data_sources/crud_data_source.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/data_sources/crud_data_source.dart @@ -17,27 +17,42 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; +/// {@template crud_data_source} +/// A [BaseDataSource] that provides SCRUD operations. +/// {@endtemplate} abstract class CrudDataSource extends BaseDataSource { + /// {@macro crud_data_source} + const CrudDataSource(); + + /// Creates a new [Model] object. Future create(Model object, {String? id}); + /// Gets a [Model] object by its [id]. Future get(String id); + /// Gets all [Model] objects. Future> getAll(); + /// Updates a [Model] object by its [id]. Future update( String id, { Model? object, Map? raw, }); + /// Updates all [Model] objects. Future updateAll(Map? data); + /// Deletes a [Model] object by its [id]. Future delete(String id); + /// Deletes all [Model] objects. Future deleteAll(); + /// Queries [Model] objects by [conditions]. Future> query(List conditions); + /// Streams [Model] objects by [conditions]. Stream> stream({ String? id, List? conditions, diff --git a/packages/wyatt_crud_bloc/lib/src/domain/entities/object_model.dart b/packages/wyatt_crud_bloc/lib/src/domain/entities/object_model.dart index 2b419e41..10dc5a25 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/entities/object_model.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/entities/object_model.dart @@ -16,6 +16,13 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; +/// {@template object_model} +/// An abstract class that represents an object model. +/// {@endtemplate} abstract class ObjectModel extends Entity { + /// {@macro object_model} + const ObjectModel(); + + /// The id of the object model. String? get id; } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart index a414f3ff..5fe8908f 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/entities/query.dart @@ -17,27 +17,59 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/core/enums/where_query_type.dart'; -// ignore: one_member_abstracts -abstract class QueryParser { - Q parser(QueryInterface condition, Q query); +// // ignore: one_member_abstracts +// abstract class QueryParser { +// Q parser(QueryInterface condition, Q query); +// } + +typedef QueryParser = Q Function(QueryInterface condition, Q query); + +/// {@template query} +/// An abstract class that represents a query. +/// {@endtemplate} +abstract class QueryInterface extends Entity { + /// {@macro query} + const QueryInterface(); } -abstract class QueryInterface extends Entity {} - +/// {@template where_query} +/// Represents a where query. +/// {@endtemplate} class WhereQuery extends QueryInterface { - WhereQuery(this.type, this.field, this.value); + /// {@macro where_query} + const WhereQuery(this.type, this.field, this.value); + + /// The type of the where query. final WhereQueryType type; + + /// The field of the where query. final String field; + + /// The value of the where query. final Value value; } +/// {@template limit_query} +/// Represents a limit query. +/// {@endtemplate} class LimitQuery extends QueryInterface { - LimitQuery(this.limit); + /// {@macro limit_query} + const LimitQuery(this.limit); + + /// The limit of the limit query. final int limit; } +/// {@template offset_query} +/// Represents an offset query. +/// {@endtemplate} class OrderByQuery extends QueryInterface { - OrderByQuery(this.field, {this.ascending = true}); + /// {@macro offset_query} + const OrderByQuery(this.field, {this.ascending = true}); + + /// The field of the order by query. final String field; + + /// The ascending of the order by query. final bool ascending; } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart b/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart index f0313c44..95b52190 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart @@ -18,20 +18,43 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; +/// {@template crud_repository} +/// An abstract class that represents a SCRUD repository. +/// {@endtemplate} abstract class CrudRepository extends BaseRepository { + /// {@macro crud_repository} + const CrudRepository(); + + /// Creates a new object. FutureOrResult create(Model object, {String? id}); + + /// Gets an object by its [id]. FutureOrResult get(String id); + + /// Gets all objects. FutureOrResult> getAll(); + + /// Updates an object by its [id]. FutureOrResult update( String id, { Model? object, Map? raw, }); + + /// Updates all objects. FutureOrResult updateAll(Map raw); + + /// Deletes an object by its [id]. FutureOrResult delete(String id); + + /// Deletes all objects. FutureOrResult deleteAll(); + + /// Queries objects by [conditions]. FutureOrResult> query(List conditions); + + /// Streams objects by [conditions]. StreamResult> stream({ String? id, List? conditions, diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart index 8a6940b5..ff88a046 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // @@ -18,13 +17,19 @@ import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class Create extends AsyncUseCase { - final CrudRepository _crudRepository; +/// {@template create} +/// A use case that creates an object model. +/// {@endtemplate} +class Create extends AsyncUseCase + with CreateOperation { + /// {@macro create} + const Create(this._crudRepository); - Create(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(Model? params) { diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart index cdebd878..d8ffb17d 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart @@ -17,17 +17,24 @@ import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class Delete extends AsyncUseCase { - Delete(this._crudRepository); +/// {@template delete} +/// A use case that deletes an object model. +/// {@endtemplate} +class Delete extends AsyncUseCase + with DeleteOperation { + /// {@macro delete} + const Delete(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(String? params) { if (params == null) { - throw ClientException('Id cannot be null.'); + throw const ClientException('Id cannot be null.'); } } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart index a1a36275..ae1935d7 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart @@ -15,11 +15,18 @@ // along with this program. If not, see . import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class DeleteAll extends AsyncUseCase { - DeleteAll(this._crudRepository); +/// {@template delete_all} +/// A use case that deletes all the object models. +/// {@endtemplate} +class DeleteAll extends AsyncUseCase + with DeleteOperation { + /// {@macro delete_all} + const DeleteAll(this._crudRepository); + final CrudRepository _crudRepository; @override diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart index 40d6719c..08850936 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart @@ -17,17 +17,24 @@ import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class Get extends AsyncUseCase { +/// {@template get} +/// A use case that gets an object model. +/// {@endtemplate} +class Get extends AsyncUseCase + with ReadOperation { + /// {@macro get} Get(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(String? params) { if (params == null) { - throw ClientException('Id cannot be null.'); + throw const ClientException('Id cannot be null.'); } } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart index 6fde76b7..63379212 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart @@ -15,12 +15,18 @@ // along with this program. If not, see . import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class GetAll - extends AsyncUseCase> { - GetAll(this._crudRepository); +/// {@template get_all} +/// A use case that gets all the object models. +/// {@endtemplate} +class GetAll extends AsyncUseCase> + with ReadOperation> { + /// {@macro get_all} + const GetAll(this._crudRepository); + final CrudRepository _crudRepository; @override diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart index ed7768d4..0b2d178b 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/stream_parameters.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // @@ -17,12 +16,19 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; +/// {@template stream_parameters} +/// Represents the parameters for a query stream +/// {@endtemplate} class StreamParameters { - final String? id; - final List? conditions; - - StreamParameters({ + /// {@macro stream_parameters} + const StreamParameters({ this.id, this.conditions, }); + + /// The id of the object model. + final String? id; + + /// The conditions of the query. + final List? conditions; } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart index cbe4cd2b..c44ab784 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/params/update_parameters.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // @@ -15,14 +14,23 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// {@template update_parameters} +/// Represents the parameters for an update use case +/// {@endtemplate} class UpdateParameters { - final String id; - final Model? object; - final Map? raw; - - UpdateParameters({ + /// {@macro update_parameters} + const UpdateParameters({ required this.id, this.object, this.raw, }); + + /// The id of the object model. + final String id; + + /// The object model. + final Model? object; + + /// The raw data. + final Map? raw; } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart index 2070b015..4869fa0d 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart @@ -17,19 +17,26 @@ import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; +/// {@template query} +/// A use case that queries the object models. +/// {@endtemplate} class Query - extends AsyncUseCase, List> { - Query(this._crudRepository); + extends AsyncUseCase, List> + with ReadOperation, List> { + /// {@macro query} + const Query(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(List? params) { if (params == null) { - throw ClientException('List of conditions cannot be null.'); + throw const ClientException('List of conditions cannot be null.'); } } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart deleted file mode 100644 index 35e42b9e..00000000 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart +++ /dev/null @@ -1,44 +0,0 @@ -// 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 . - -// class Stream extends UseCase> { -// final CrudRepository _crudRepository; - -// Stream(this._crudRepository); - -// @override -// StreamResult> call(StreamParameters params) => -// _crudRepository.stream(id: params.id, conditions: params.conditions); -// } - -// class StreamQuery -// extends StreamUseCase> { -// final CrudRepository _crudRepository; - -// StreamQuery(this._crudRepository); - -// @override -// FutureOr onStart(StreamParameters? params) { -// if(params == null){ -// throw ClientException('Stream parameters cannot be null.'); -// } -// } - -// @override -// FutureOrResult>> call(StreamParameters? params) => -// _crudRepository.stream(); -// } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart index 70c82b73..237e3e9d 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart @@ -17,19 +17,26 @@ import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dart'; +/// {@template update} +/// A use case that updates an object model. +/// {@endtemplate} class Update - extends AsyncUseCase, void> { - Update(this._crudRepository); + extends AsyncUseCase, void> + with UpdateOperation> { + /// {@macro update} + const Update(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(UpdateParameters? params) { if (params == null) { - throw ClientException('Update parameters cannot be null.'); + throw const ClientException('Update parameters cannot be null.'); } } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart index 60a81957..22c32181 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart @@ -17,18 +17,25 @@ import 'dart:async'; import 'package:wyatt_architecture/wyatt_architecture.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; +/// {@template update_all} +/// A use case that updates all the object models. +/// {@endtemplate} class UpdateAll - extends AsyncUseCase, void> { - UpdateAll(this._crudRepository); + extends AsyncUseCase, void> + with UpdateOperation> { + /// {@macro update_all} + const UpdateAll(this._crudRepository); + final CrudRepository _crudRepository; @override FutureOr onStart(Map? params) { if (params == null) { - throw ClientException('Data cannot be null.'); + throw const ClientException('Data cannot be null.'); } } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart index b53d1702..4a8d8467 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart @@ -21,6 +21,5 @@ export 'get.dart'; export 'get_all.dart'; export 'params/params.dart'; export 'query.dart'; -export 'stream_query.dart'; export 'update.dart'; export 'update_all.dart'; diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_advanced_cubit.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_advanced_cubit.dart new file mode 100644 index 00000000..d41e35d9 --- /dev/null +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_advanced_cubit.dart @@ -0,0 +1,305 @@ +// 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 . + +import 'dart:async'; + +import 'package:wyatt_crud_bloc/src/core/enums/where_query_type.dart'; +import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; +import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/create.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/delete.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/delete_all.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/get.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/get_all.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/query.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/update.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/update_all.dart'; +import 'package:wyatt_crud_bloc/src/features/crud/blocs/crud_base_cubit/crud_base_cubit.dart'; + +/// {@template crud_cubit_advanced} +/// Cubit that handles CRUD operations with more granularity. +/// {@endtemplate} +abstract class CrudAdvancedCubit + extends CrudBaseCubit { + /// {@macro crud_cubit} + CrudAdvancedCubit() : super(); + + Create? get crudCreate; + DeleteAll? get crudDeleteAll; + Delete? get crudDelete; + GetAll? get crudGetAll; + Get? get crudGet; + Query? get crudQuery; + UpdateAll? get crudUpdateAll; + Update? get crudUpdate; + + FutureOr create(Model model) async { + final crud = crudCreate; + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(model); + emit( + result.fold( + (_) { + if (stateCopy is CrudLoaded) { + if (stateCopy.data == null) { + return CrudLoaded(model); + } + if (stateCopy.data!.id == model.id) { + return CrudLoaded(model); + } + + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + if (stateCopy.data.isEmpty) { + return CrudListLoaded([model]); + } + final List lst = stateCopy.data.toList()..add(model); + + return CrudListLoaded(lst); + } + + return const CrudOkReturn(); + }, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr delete(String id) async { + final crud = crudDelete; + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(id); + emit( + result.fold( + (_) { + if (stateCopy is CrudLoaded) { + if (stateCopy.data?.id == id) { + return CrudLoaded(null); + } + + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + return CrudListLoaded( + stateCopy.data.where((element) => element?.id != id).toList(), + ); + } + + return const CrudOkReturn(); + }, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr deleteAll() async { + final crud = crudDeleteAll; + if (crud == null) { + return; + } + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(null); + emit( + result.fold( + (_) { + if (stateCopy is CrudLoaded) { + return CrudLoaded(null); + } + if (stateCopy is CrudListLoaded) { + return CrudListLoaded(const []); + } + + return const CrudOkReturn(); + }, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr get(String id) async { + final crud = crudGet; + if (crud == null) { + return; + } + emit(const CrudLoading()); + final result = await crud.call(id); + emit( + result.fold( + CrudLoaded.new, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr getAll() async { + final crud = crudGetAll; + if (crud == null) { + return; + } + emit(const CrudLoading()); + final result = await crud.call(null); + emit( + result.fold( + CrudListLoaded.new, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr query(List conditions) async { + final crud = crudQuery; + if (crud == null) { + return; + } + + emit(const CrudLoading()); + final result = await crud.call(conditions); + emit( + result.fold( + CrudListLoaded.new, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr update(UpdateParameters param) async { + final crud = crudUpdate; + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(param); + emit( + await result.foldAsync( + (_) async { + if (stateCopy is CrudLoaded) { + if (stateCopy.data?.id == param.id) { + // Same object, need to update actual stateCopy + final crudGet = this.crudGet; + if (crudGet == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + final newVersion = await crudGet.call(param.id); + if (newVersion.isOk) { + return CrudLoaded(newVersion.ok); + } + } + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + final bool listContains = + stateCopy.data.any((element) => element?.id == param.id); + if (listContains) { + // Loaded objects contains the modified object. + + final crudGet = this.crudGet; + if (crudGet == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + final newVersion = await crudGet.call(param.id); + if (newVersion.isOk) { + final newList = stateCopy.data + .where( + (element) => element?.id != param.id, + ) + .toList(); + return CrudListLoaded(newList + [newVersion.ok]); + } + } + return stateCopy; + } + return const CrudOkReturn(); + }, + (error) async => CrudError(error.toString()), + ), + ); + } + + FutureOr updateAll(Map param) async { + final crud = crudUpdateAll; + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(param); + emit( + await result.foldAsync( + (_) async { + if (stateCopy is CrudLoaded) { + // Same object, need to update actual stateCopy + final crudGet = this.crudGet; + if (crudGet == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + final actualId = stateCopy.data?.id; + final newVersion = await crudGet.call(actualId ?? ''); + if (newVersion.isOk) { + return CrudLoaded(newVersion.ok); + } + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + final crudQuery = this.crudQuery; + if (crudQuery == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + // Load all id to retrieve exactly same object + // (not all because previous stateCopy can be a query result) + final List ids = stateCopy.data + .map( + (e) => e?.id, + ) + .toList(); + final result = await crudQuery.call([ + WhereQuery( + WhereQueryType.whereIn, + 'id', + ids, + ) + ]); + if (result.isOk) { + return CrudListLoaded(result.ok ?? []); + } + return stateCopy; + } + return const CrudOkReturn(); + }, + (error) async => CrudError(error.toString()), + ), + ); + } +} diff --git a/packages/wyatt_crud_bloc/lib/src/core/extensions/num_extension.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_base_cubit/crud_base_cubit.dart similarity index 51% rename from packages/wyatt_crud_bloc/lib/src/core/extensions/num_extension.dart rename to packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_base_cubit/crud_base_cubit.dart index abe45b91..c694b880 100644 --- a/packages/wyatt_crud_bloc/lib/src/core/extensions/num_extension.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_base_cubit/crud_base_cubit.dart @@ -14,38 +14,15 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -extension NumExtension on num? { - bool operator <(num? other) { - if (this == null || other == null) { - return false; - } - return this < other; - } +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; - bool operator >(num? other) { - if (this == null || other == null) { - return false; - } - return this > other; - } +part 'crud_state.dart'; - bool operator <=(num? other) { - if (this == null && other == null) { - return true; - } - if (this == null || other == null) { - return false; - } - return this <= other; - } - - bool operator >=(num? other) { - if (this == null && other == null) { - return true; - } - if (this == null || other == null) { - return false; - } - return this >= other; - } +/// {@template crud_base_cubit} +/// A base [Cubit] that handles SCRUD operations. +/// {@endtemplate} +abstract class CrudBaseCubit extends Cubit { + /// {@macro crud_base_cubit} + CrudBaseCubit() : super(const CrudInitial()); } diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_base_cubit/crud_state.dart similarity index 58% rename from packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart rename to packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_base_cubit/crud_state.dart index f8ab26e2..64f2479a 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_state.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_base_cubit/crud_state.dart @@ -1,4 +1,4 @@ -// Copyright (C) 2022 WYATT GROUP +// Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // // This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -part of 'crud_cubit.dart'; +part of 'crud_base_cubit.dart'; abstract class CrudState extends Equatable { const CrudState(); @@ -23,18 +23,17 @@ abstract class CrudState extends Equatable { List get props => []; } -class CrudInitial extends CrudState {} - -class CrudLoading extends CrudState {} - -abstract class CrudSuccess extends CrudState { - const CrudSuccess(); +/// Initial state of the CrudBaseCubit. +class CrudInitial extends CrudState { + const CrudInitial(); } -class CrudOkReturn extends CrudState { - const CrudOkReturn(); +/// Loading state of the CrudBaseCubit. +class CrudLoading extends CrudState { + const CrudLoading(); } +/// Error state of the CrudBaseCubit. class CrudError extends CrudState { const CrudError(this.message); final String? message; @@ -43,6 +42,24 @@ class CrudError extends CrudState { List get props => [message]; } +/// Success state of the CrudBaseCubit. +/// This state is used to indicate that the operation was successful. +/// Can be one or list of objects. +abstract class CrudSuccess extends CrudState { + const CrudSuccess(); +} + +/// Success state of the CrudBaseCubit. +/// This state is used to indicate that the operation was successful. +/// Contains no objects. +/// Used for create, update, delete operations. +class CrudOkReturn extends CrudSuccess { + const CrudOkReturn(); +} + +/// Loaded state of the CrudBaseCubit. +/// This state is used to indicate that the operation was successful. +/// Contains one object. class CrudLoaded extends CrudSuccess { const CrudLoaded(this.data); final T? data; @@ -51,6 +68,9 @@ class CrudLoaded extends CrudSuccess { List get props => [data]; } +/// Loaded state of the CrudBaseCubit. +/// This state is used to indicate that the operation was successful. +/// Contains list of objects. class CrudListLoaded extends CrudSuccess { const CrudListLoaded(this.data); final List data; diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_cubit.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_cubit.dart new file mode 100644 index 00000000..5d18975f --- /dev/null +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/blocs/crud_cubit.dart @@ -0,0 +1,369 @@ +// 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 . + +import 'dart:async'; + +import 'package:wyatt_crud_bloc/src/core/enums/where_query_type.dart'; +import 'package:wyatt_crud_bloc/src/core/mixins/operation.dart'; +import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; +import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/create.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/delete.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/delete_all.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/get.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/get_all.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/query.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/update.dart'; +import 'package:wyatt_crud_bloc/src/domain/usecases/update_all.dart'; +import 'package:wyatt_crud_bloc/src/features/crud/blocs/crud_base_cubit/crud_base_cubit.dart'; + +/// {@template crud_cubit} +/// Cubit that handles CRUD operations. +/// {@endtemplate} +abstract class CrudCubit extends CrudBaseCubit { + /// {@macro crud_cubit} + CrudCubit() : super(); + + /// Create operation. + /// Can be create. + CreateOperation? get createOperation; + + /// Read operation. + /// Can be get, getAll, query. + ReadOperation? get readOperation; + + /// Update operation. + /// Can be update, updateAll. + UpdateOperation? get updateOperation; + + /// Delete operation. + /// Can be delete or deleteAll. + DeleteOperation? get deleteOperation; + + Expected? _checkOperation(dynamic operation) { + if (operation == null) { + return null; + } + if (operation is! Expected) { + return null; + } + return operation; + } + + FutureOr create(Model model) async { + if (_checkOperation>(createOperation) != null) { + return _create(model); + } + } + + FutureOr read({String? id, List? conditions}) async { + if (_checkOperation>(readOperation) != null && id != null) { + return _get(id); + } + if (_checkOperation>(readOperation) != null) { + return _getAll(); + } + if (_checkOperation>(readOperation) != null && + conditions != null) { + return _query(conditions); + } + if (_checkOperation>(readOperation) != null && + conditions == null) { + return _getAll(); + } + } + + FutureOr update( + UpdateParameters? single, + Map? all, + ) async { + if (_checkOperation>(updateOperation) != null && + single != null) { + return _update(single); + } + + if (_checkOperation>(updateOperation) != null && + all != null) { + return _updateAll(all); + } + } + + FutureOr delete({String? id}) async { + if (_checkOperation>(deleteOperation) != null && id != null) { + return _delete(id); + } + if (_checkOperation>(deleteOperation) != null) { + return _deleteAll(); + } + } + + FutureOr _create(Model model) async { + final crud = _checkOperation>(createOperation); + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(model); + emit( + result.fold( + (_) { + if (stateCopy is CrudLoaded) { + if (stateCopy.data == null) { + return CrudLoaded(model); + } + if (stateCopy.data!.id == model.id) { + return CrudLoaded(model); + } + + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + if (stateCopy.data.isEmpty) { + return CrudListLoaded([model]); + } + final List lst = stateCopy.data.toList()..add(model); + + return CrudListLoaded(lst); + } + + return const CrudOkReturn(); + }, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr _delete(String id) async { + final crud = _checkOperation>(deleteOperation); + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(id); + emit( + result.fold( + (_) { + if (stateCopy is CrudLoaded) { + if (stateCopy.data?.id == id) { + return CrudLoaded(null); + } + + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + return CrudListLoaded( + stateCopy.data.where((element) => element?.id != id).toList(), + ); + } + + return const CrudOkReturn(); + }, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr _deleteAll() async { + final crud = _checkOperation>(deleteOperation); + if (crud == null) { + return; + } + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(null); + emit( + result.fold( + (_) { + if (stateCopy is CrudLoaded) { + return CrudLoaded(null); + } + if (stateCopy is CrudListLoaded) { + return CrudListLoaded(const []); + } + + return const CrudOkReturn(); + }, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr _get(String id) async { + final crud = _checkOperation>(readOperation); + if (crud == null) { + return; + } + emit(const CrudLoading()); + final result = await crud.call(id); + emit( + result.fold( + CrudLoaded.new, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr _getAll() async { + final crud = _checkOperation>(readOperation); + if (crud == null) { + return; + } + emit(const CrudLoading()); + final result = await crud.call(null); + emit( + result.fold( + CrudListLoaded.new, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr _query(List conditions) async { + final crud = _checkOperation>(readOperation); + if (crud == null) { + return; + } + + emit(const CrudLoading()); + final result = await crud.call(conditions); + emit( + result.fold( + CrudListLoaded.new, + (error) => CrudError(error.toString()), + ), + ); + } + + FutureOr _update(UpdateParameters param) async { + final crud = _checkOperation>(updateOperation); + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(param); + emit( + await result.foldAsync( + (_) async { + if (stateCopy is CrudLoaded) { + if (stateCopy.data?.id == param.id) { + // Same object, need to update actual stateCopy + final crudGet = _checkOperation>(readOperation); + if (crudGet == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + final newVersion = await crudGet.call(param.id); + if (newVersion.isOk) { + return CrudLoaded(newVersion.ok); + } + } + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + final bool listContains = + stateCopy.data.any((element) => element?.id == param.id); + if (listContains) { + // Loaded objects contains the modified object. + + final crudGet = _checkOperation>(readOperation); + if (crudGet == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + final newVersion = await crudGet.call(param.id); + if (newVersion.isOk) { + final newList = stateCopy.data + .where( + (element) => element?.id != param.id, + ) + .toList(); + return CrudListLoaded(newList + [newVersion.ok]); + } + } + return stateCopy; + } + return const CrudOkReturn(); + }, + (error) async => CrudError(error.toString()), + ), + ); + } + + FutureOr _updateAll(Map param) async { + final crud = _checkOperation>(updateOperation); + if (crud == null) { + return; + } + + final stateCopy = state; + emit(const CrudLoading()); + final result = await crud.call(param); + emit( + await result.foldAsync( + (_) async { + if (stateCopy is CrudLoaded) { + // Same object, need to update actual stateCopy + final crudGet = _checkOperation>(readOperation); + if (crudGet == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + final actualId = stateCopy.data?.id; + final newVersion = await crudGet.call(actualId ?? ''); + if (newVersion.isOk) { + return CrudLoaded(newVersion.ok); + } + return stateCopy; + } + if (stateCopy is CrudListLoaded) { + final crudQuery = _checkOperation>(readOperation); + if (crudQuery == null) { + // No read operation, can't update stateCopy. + return stateCopy; + } + // Load all id to retrieve exactly same object + // (not all because previous stateCopy can be a query result) + final List ids = stateCopy.data + .map( + (e) => e?.id, + ) + .toList(); + final result = await crudQuery.call([ + WhereQuery( + WhereQueryType.whereIn, + 'id', + ids, + ) + ]); + if (result.isOk) { + return CrudListLoaded(result.ok ?? []); + } + return stateCopy; + } + return const CrudOkReturn(); + }, + (error) async => CrudError(error.toString()), + ), + ); + } +} diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/builder/crud_builder.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/builder/crud_builder.dart index 62f1faaa..d864ce7a 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/builder/crud_builder.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/builder/crud_builder.dart @@ -15,15 +15,19 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_crud_bloc/src/features/crud/cubit/crud_cubit.dart'; +import 'package:wyatt_crud_bloc/src/features/crud/blocs/crud_base_cubit/crud_base_cubit.dart'; +/// {@template crud_builder} +/// A widget that builds itself based on the latest snapshot of interaction +/// with a [CrudBaseCubit]. +/// +/// * I = Initial State +/// * L = Loading State +/// * S = Success State +/// * E = Error State +/// {@endtemplate} class CrudBuilder extends StatelessWidget { - /// `` - /// - /// - I: the Initial State - /// - L: the Loading State - /// - S: the Success State - /// - E: the Error State + /// {@macro crud_builder} const CrudBuilder({ required this.state, required this.builder, @@ -34,11 +38,11 @@ class CrudBuilder extends StatelessWidget { super.key, }); - /// `` + /// {@macro crud_builder} /// - /// - S: the Success State - /// - /// For CrudStates only. + /// This factory constructor is used to create a [CrudBuilder] with + /// [CrudState]s. `S` is the Success State, and it must be a subtype of + /// [CrudSuccess]. It the only type that you have to specify. static CrudBuilder typed({ required CrudState state, diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/crud.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/crud.dart index cb18407c..16113197 100644 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/crud.dart +++ b/packages/wyatt_crud_bloc/lib/src/features/crud/crud.dart @@ -14,5 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +export 'blocs/crud_advanced_cubit.dart'; +export 'blocs/crud_base_cubit/crud_base_cubit.dart'; +export 'blocs/crud_cubit.dart'; export 'builder/builder.dart'; -export 'cubit/crud_cubit.dart'; diff --git a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart b/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart deleted file mode 100644 index dcb466aa..00000000 --- a/packages/wyatt_crud_bloc/lib/src/features/crud/cubit/crud_cubit.dart +++ /dev/null @@ -1,266 +0,0 @@ -// 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 . - -import 'dart:async'; - -import 'package:equatable/equatable.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:wyatt_architecture/wyatt_architecture.dart'; -import 'package:wyatt_crud_bloc/src/core/enums/where_query_type.dart'; -import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; -import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/create.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/delete.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/delete_all.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/get.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/get_all.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/query.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/update.dart'; -import 'package:wyatt_crud_bloc/src/domain/usecases/update_all.dart'; - -part 'crud_state.dart'; - -abstract class CrudCubit extends Cubit { - CrudCubit() : super(CrudInitial()); - Create? get crudCreate; - DeleteAll? get crudDeleteAll; - Delete? get crudDelete; - GetAll? get crudGetAll; - Get? get crudGet; - Query? get crudQuery; - UpdateAll? get crudUpdateAll; - Update? get crudUpdate; - - FutureOr create(Model model) async { - if (crudCreate != null) { - final stateCopy = state; - emit(CrudLoading()); - final result = await crudCreate!.call(model); - emit( - result.fold( - (_) { - if (stateCopy is CrudLoaded) { - return stateCopy; - } - if (stateCopy is CrudListLoaded) { - if (stateCopy.data.isEmpty) { - return CrudListLoaded([model]); - } - final List lst = stateCopy.data.toList()..add(model); - return CrudListLoaded(lst); - } - return const CrudOkReturn(); - }, - (error) => CrudError(error.toString()), - ), - ); - } - } - - FutureOr delete(String id) async { - if (crudDelete != null) { - final stateCopy = state; - emit(CrudLoading()); - final result = await crudDelete!.call(id); - emit( - result.fold( - (_) { - if (stateCopy is CrudLoaded) { - return stateCopy; - } - if (stateCopy is CrudListLoaded) { - return CrudListLoaded( - stateCopy.data.where((element) => element?.id != id).toList(), - ); - } - return const CrudOkReturn(); - }, - (error) => CrudError(error.toString()), - ), - ); - } - } - - FutureOr deleteAll() async { - if (crudDeleteAll != null) { - final stateCopy = state; - emit(CrudLoading()); - final result = await crudDeleteAll!.call(null); - emit( - result.fold( - (_) { - if (stateCopy is CrudLoaded) { - return CrudLoaded(null); - } - if (stateCopy is CrudListLoaded) { - return CrudListLoaded(const []); - } - return const CrudOkReturn(); - }, - (error) => CrudError(error.toString()), - ), - ); - } - } - - FutureOr get(String id) async { - if (crudGet != null) { - emit(CrudLoading()); - final result = await crudGet!.call(id); - emit( - result.fold( - CrudLoaded.new, - (error) => CrudError(error.toString()), - ), - ); - } - } - - FutureOr getAll() async { - if (crudGetAll != null) { - emit(CrudLoading()); - final result = await crudGetAll!.call(null); - emit( - result.fold( - CrudListLoaded.new, - (error) => CrudError(error.toString()), - ), - ); - } - } - - FutureOr query(List conditions) async { - if (crudQuery != null) { - emit(CrudLoading()); - final result = await crudQuery!.call(conditions); - emit( - result.fold( - CrudListLoaded.new, - (error) => CrudError(error.toString()), - ), - ); - } - } - - FutureOr update(UpdateParameters param) async { - if (crudUpdate != null) { - final stateCopy = state; - emit(CrudLoading()); - final result = await crudUpdate!.call(param); - emit( - await result.foldAsync( - (_) async { - if (stateCopy is CrudLoaded) { - if (stateCopy.data?.id == param.id) { - // Same object, need to update actual stateCopy - if (crudGet == null) { - throw ClientException( - 'Need to init Get usecase to use update.', - ); - } - final newVersion = await crudGet!.call(param.id); - if (newVersion.isOk) { - return CrudLoaded(newVersion.ok); - } - } - return stateCopy; - } - if (stateCopy is CrudListLoaded) { - final bool listContains = - stateCopy.data.any((element) => element?.id == param.id); - if (listContains) { - // Loaded objects contains the modified object. - if (crudGet == null) { - throw ClientException( - 'Need to init Get usecase to use update.', - ); - } - final newVersion = await crudGet!.call(param.id); - if (newVersion.isOk) { - final newList = stateCopy.data - .where( - (element) => element?.id != param.id, - ) - .toList(); - return CrudListLoaded(newList + [newVersion.ok]); - } - } - return stateCopy; - } - return const CrudOkReturn(); - }, - (error) async => CrudError(error.toString()), - ), - ); - } - } - - FutureOr updateAll(Map param) async { - if (crudUpdateAll != null) { - final stateCopy = state; - emit(CrudLoading()); - final result = await crudUpdateAll!.call(param); - emit( - await result.foldAsync( - (_) async { - if (stateCopy is CrudLoaded) { - // Same object, need to update actual stateCopy - if (crudGet == null) { - throw ClientException( - 'Need to init Get usecase to use updateAll.', - ); - } - final actualId = stateCopy.data?.id; - final newVersion = await crudGet!.call(actualId ?? ''); - if (newVersion.isOk) { - return CrudLoaded(newVersion.ok); - } - return stateCopy; - } - if (stateCopy is CrudListLoaded) { - if (crudQuery == null) { - throw ClientException( - 'Need to init Query usecase to use updateAll.', - ); - } - // Load all id to retrieve exactly same object - // (not all because previous stateCopy can be a query result) - final List ids = stateCopy.data - .map( - (e) => e?.id, - ) - .toList(); - final result = await crudQuery!.call([ - WhereQuery( - WhereQueryType.whereIn, - 'id', - ids, - ) - ]); - if (result.isOk) { - return CrudListLoaded(result.ok ?? []); - } - return stateCopy; - } - return const CrudOkReturn(); - }, - (error) async => CrudError(error.toString()), - ), - ); - } - } -} diff --git a/packages/wyatt_crud_bloc/pubspec.yaml b/packages/wyatt_crud_bloc/pubspec.yaml index 058de9d4..52960c0e 100644 --- a/packages/wyatt_crud_bloc/pubspec.yaml +++ b/packages/wyatt_crud_bloc/pubspec.yaml @@ -10,8 +10,7 @@ environment: flutter: ">=1.17.0" dependencies: - flutter: - sdk: flutter + flutter: { sdk: flutter } flutter_bloc: ^8.1.1 equatable: ^2.0.5 @@ -26,8 +25,7 @@ dependencies: version: ^0.0.4 dev_dependencies: - flutter_test: - sdk: flutter + flutter_test: { sdk: flutter } bloc_test: ^9.1.0 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ -- 2.47.2 From 07c2f4aeffc282e78b1645800a835e67c5e21b07 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 22:00:45 +0200 Subject: [PATCH 262/320] refactor(http)!: fix cascade dart good practices + docs --- .../lib/core/dependency_injection/get_it.dart | 14 +- packages/wyatt_http_client/README.md | 36 +- .../example/http_client_example.dart | 294 -------------- .../example/http_client_fastapi_example.dart | 371 ------------------ .../wyatt_http_client/example/pipeline.dart | 164 -------- .../wyatt_http_client/lib/src/middleware.dart | 12 +- .../lib/src/middleware_client.dart | 14 +- .../access_token_auth_middleware.dart | 15 - .../middlewares/basic_auth_middleware.dart | 21 +- .../middlewares/body_to_json_middleware.dart | 11 +- .../src/middlewares/default_middleware.dart | 6 + .../middlewares/digest_auth_middleware.dart | 12 +- .../lib/src/middlewares/middlewares.dart | 3 +- .../refresh_token_auth_middleware.dart | 16 +- .../middlewares/simple_logger_middleware.dart | 40 +- .../middlewares/unsafe_auth_middleware.dart | 15 +- .../middlewares/uri_prefix_middleware.dart | 15 +- .../lib/src/models/middleware_context.dart | 34 +- .../lib/src/models/middleware_request.dart | 49 ++- .../lib/src/models/middleware_response.dart | 26 +- .../lib/src/models/unfreezed_request.dart | 20 +- .../wyatt_http_client/lib/src/pipeline.dart | 27 +- .../lib/src/utils/authentication_methods.dart | 6 + .../lib/src/utils/convert.dart | 12 +- .../lib/src/utils/crypto.dart | 3 +- .../lib/src/utils/delay.dart | 2 + .../lib/src/utils/digest_auth.dart | 5 +- .../lib/src/utils/header_keys.dart | 6 + .../lib/src/utils/http_methods.dart | 4 + .../lib/src/utils/http_status.dart | 6 + .../lib/src/utils/protocols.dart | 4 + .../lib/src/utils/request_utils.dart | 6 + packages/wyatt_http_client/pubspec.yaml | 8 +- 33 files changed, 303 insertions(+), 974 deletions(-) delete mode 100644 packages/wyatt_http_client/example/http_client_example.dart delete mode 100644 packages/wyatt_http_client/example/http_client_fastapi_example.dart delete mode 100644 packages/wyatt_http_client/example/pipeline.dart delete mode 100644 packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart diff --git a/packages/wyatt_architecture/example/lib/core/dependency_injection/get_it.dart b/packages/wyatt_architecture/example/lib/core/dependency_injection/get_it.dart index e43a12a1..a3e2bc25 100644 --- a/packages/wyatt_architecture/example/lib/core/dependency_injection/get_it.dart +++ b/packages/wyatt_architecture/example/lib/core/dependency_injection/get_it.dart @@ -52,13 +52,13 @@ abstract class GetItInitializer { ) ..registerLazySingleton(() { final Pipeline pipeline = Pipeline() - .addMiddleware( - UriPrefixMiddleware( - protocol: Protocols.https, - authority: 'jsonplaceholder.typicode.com', - ), - ) - .addMiddleware(BodyToJsonMiddleware()); + ..addMiddleware( + const UriPrefixMiddleware( + protocol: Protocols.https, + authority: 'jsonplaceholder.typicode.com', + ), + ) + ..addMiddleware(const BodyToJsonMiddleware()); return MiddlewareClient(pipeline: pipeline); }) ..registerLazySingleton( diff --git a/packages/wyatt_http_client/README.md b/packages/wyatt_http_client/README.md index ee2b78d5..aee439ed 100644 --- a/packages/wyatt_http_client/README.md +++ b/packages/wyatt_http_client/README.md @@ -16,12 +16,10 @@ * along with this program. If not, see . --> -# Dart - HTTP Client +# HTTP Client

    - - Style: Wyatt Analysis - + Style: Wyatt Analysis SDK: Dart & Flutter

    @@ -52,13 +50,13 @@ For example, if you want to log every request, and simplify an url you can use p ```dart // Create the Pipeline final Pipeline pipeline = Pipeline() - .addMiddleware( - UriPrefixMiddleware( + ..addMiddleware( + const UriPrefixMiddleware( protocol: Protocols.http, authority: 'localhost:80', ), ) - .addMiddleware(SimpleLoggerMiddleware()); + ..addMiddleware(const SimpleLoggerMiddleware()); ``` Then if you print the pipeline, @@ -94,20 +92,20 @@ Let's start by creating the Pipeline: ```dart final Pipeline pipeline = Pipeline() - .addMiddleware( - UriPrefixMiddleware( + ..addMiddleware( + const UriPrefixMiddleware( protocol: Protocols.http, authority: 'localhost:80', ), ) - .addMiddleware(BodyToJsonMiddleware()) - .addMiddleware( - UnsafeAuthMiddleware( + ..addMiddleware(const BodyToJsonMiddleware()) + ..addMiddleware( + const UnsafeAuthMiddleware( username: 'wyatt', password: 'motdepasse', ), ) - .addMiddleware(SimpleLoggerMiddleware()); + ..addMiddleware(SimpleLoggerMiddleware()); ``` Then simply create a client and make a call. @@ -128,14 +126,14 @@ So now we want a real authentication. ```dart final Pipeline pipeline = Pipeline() - .addMiddleware( - UriPrefixMiddleware( + ..addMiddleware( + const UriPrefixMiddleware( protocol: Protocols.http, authority: 'localhost:80', ), ) - .addMiddleware(BodyToJsonMiddleware()) - .addMiddleware( + ..addMiddleware(const BodyToJsonMiddleware()) + ..addMiddleware( RefreshTokenAuthMiddleware( authorizationEndpoint: '/auth/sign-in', tokenEndpoint: '/auth/refresh', @@ -144,7 +142,7 @@ final Pipeline pipeline = Pipeline() unauthorized: HttpStatus.forbidden, ), ) - .addMiddleware(SimpleLoggerMiddleware()); + ..addMiddleware(const SimpleLoggerMiddleware()); ``` > Here we just change `UnsafeAuthMiddleware` by `RefreshTokenAuthMiddleware` and the whole app while adapt to a new authentication system. @@ -157,6 +155,8 @@ You can create your own middleware by implementing `Middleware` class, and use m class SimpleLoggerMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { + + const SimpleLoggerMiddleware(); @override String getName() => 'SimpleLogger'; diff --git a/packages/wyatt_http_client/example/http_client_example.dart b/packages/wyatt_http_client/example/http_client_example.dart deleted file mode 100644 index 43009540..00000000 --- a/packages/wyatt_http_client/example/http_client_example.dart +++ /dev/null @@ -1,294 +0,0 @@ -// 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 . - -import 'dart:async'; -import 'dart:io'; - -import 'package:wyatt_http_client/wyatt_http_client.dart'; - -String lastToken = ''; -int token = 0; - -void printAuth(HttpRequest req) { - print( - 'Authorization => ' - "${req.headers.value('Authorization') ?? 'no authorization header'}", - ); -} - -Future handleBasic(HttpRequest req) async { - printAuth(req); -} - -Future handleBasicNegotiate(HttpRequest req) async { - if (req.headers.value('Authorization') == null) { - req.response.statusCode = HttpStatus.unauthorized.statusCode; - req.response.headers.set(HeaderKeys.wwwAuthenticate, 'Basic realm="Wyatt"'); - print(req.response.headers.value('WWW-Authenticate')); - return req.response.close(); - } - printAuth(req); -} - -Future handleBearer(HttpRequest req) async { - printAuth(req); -} - -Future handleDigest(HttpRequest req) async { - if (req.headers.value('Authorization') == null) { - req.response.statusCode = HttpStatus.unauthorized.statusCode; - req.response.headers.set( - 'WWW-Authenticate', - 'Digest realm="Wyatt", ' - 'qop="auth,auth-int", ' - 'nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", ' - 'opaque="5ccc069c403ebaf9f0171e9517f40e41"', - ); - print(req.response.headers.value('WWW-Authenticate')); - return req.response.close(); - } - printAuth(req); -} - -Future handleUnsafe(HttpRequest req) async { - print( - 'Query parameters => ' - '${req.uri.queryParameters}', - ); -} - -Future handleOauth2RefreshToken(HttpRequest req) async { - final action = req.uri.queryParameters['action']; - if (action == null) { - printAuth(req); - } - - switch (action) { - case 'login': - if (req.method == 'POST') { - token++; - req.response.write( - '{"accessToken": "access-token-awesome$token", ' - '"refreshToken": "refresh-token-awesome$token"}', - ); - } - break; - case 'refresh': - printAuth(req); - if (req.method == 'GET') { - token++; - req.response.write('{"accessToken": "access-token-refreshed$token"}'); - } - break; - case 'access-denied': - final String receivedToken = req.headers.value('Authorization') ?? ''; - if (receivedToken != '' && - lastToken != '' && - receivedToken != lastToken) { - lastToken = receivedToken; - printAuth(req); - return req.response.close(); - } else { - lastToken = receivedToken; - req.response.statusCode = HttpStatus.unauthorized.statusCode; - return req.response.close(); - } - default: - break; - } -} - -Future server() async { - final server = await HttpServer.bind(InternetAddress.anyIPv6, 8080); - var error = 0; - var token = 0; - await server.forEach((request) { - print('[${request.method}] ${request.uri}'); - switch (request.uri.path) { - case '/test/basic-test': - handleBasic(request); - break; - case '/test/basic-test-with-negotiate': - handleBasicNegotiate(request); - break; - case '/test/digest-test': - handleDigest(request); - break; - case '/test/apikey-test': - handleBearer(request); - break; - case '/test/bearer-test': - handleBearer(request); - break; - case '/test/unsafe-test': - handleUnsafe(request); - break; - case '/test/oauth2-test': - handleOauth2RefreshToken(request); - break; - - case '/test/bearer-login': - if (request.method == 'POST') { - request.response.write('{"token": "access-token-test"}'); - } - break; - - case '/test/oauth2-test-error': - error++; - print('Error $error'); - if (error >= 3) { - print('Authorized'); - error = 0; - } else { - request.response.statusCode = HttpStatus.unauthorized.statusCode; - } - break; - case '/test/oauth2-test-timeout': - error++; - print('Error $error'); - request.response.statusCode = HttpStatus.unauthorized.statusCode; - break; - case '/test/oauth2-login': - if (request.method == 'POST') { - token++; - request.response.write( - '{"accessToken": "access-token-awesome$token", ' - '"refreshToken": "refresh-token-awesome$token"}', - ); - } - break; - case '/test/oauth2-refresh': - print( - 'Authorization => ' - "${request.headers.value('Authorization') ?? 'no refresh token'}", - ); - if (request.method == 'GET') { - token++; - request.response - .write('{"accessToken": "access-token-refreshed$token"}'); - } - break; - case '/test/oauth2-refresh-error': - request.response.statusCode = HttpStatus.unauthorized.statusCode; - break; - - default: - print(' => Unknown path or method'); - request.response.statusCode = HttpStatus.notFound.statusCode; - } - request.response.close(); - print('===================='); - }); -} - -Future main() async { - unawaited(server()); - const base = 'localhost:8080'; - final uriPrefix = UriPrefixMiddleware( - protocol: Protocols.http, - authority: base, - ); - final jsonEncoder = BodyToJsonMiddleware(); - final logger = SimpleLoggerMiddleware(); - - // Basic - final basicAuth = BasicAuthMiddleware( - username: 'username', - password: 'password', - ); - final basic = MiddlewareClient( - pipeline: Pipeline.fromIterable([ - uriPrefix, - basicAuth, - logger, - ]), - ); - await basic.get(Uri.parse('/test/basic-test')); - - // Digest - final digestAuth = DigestAuthMiddleware( - username: 'Mufasa', - password: 'Circle Of Life', - ); - final digest = MiddlewareClient( - pipeline: Pipeline.fromIterable([ - uriPrefix, - digestAuth, - logger, - ]), - ); - await digest.get(Uri.parse('/test/digest-test')); - - // // Bearer - // final bearer = BearerAuthenticationClient( - // token: 'access-token-test', - // inner: restClient, - // ); - // await bearer.get(Uri.parse('/test/bearer-test')); - - // // API Key - // final apiKey = BearerAuthenticationClient( - // token: 'awesome-api-key', - // authenticationMethod: 'ApiKey', - // inner: restClient, - // ); - // await apiKey.get(Uri.parse('/test/apikey-test')); - - // Unsafe URL - final unsafeAuth = UnsafeAuthMiddleware( - username: 'Mufasa', - password: 'Circle Of Life', - ); - final unsafe = MiddlewareClient( - pipeline: Pipeline.fromIterable([ - uriPrefix, - unsafeAuth, - logger, - ]), - ); - await unsafe.get(Uri.parse('/test/unsafe-test')); - - // OAuth2 - final refreshTokenAuth = RefreshTokenAuthMiddleware( - authorizationEndpoint: '/test/oauth2-test?action=login', - tokenEndpoint: '/test/oauth2-test?action=refresh', - accessTokenParser: (body) => body['accessToken']! as String, - refreshTokenParser: (body) => body['refreshToken']! as String, - ); - final refreshToken = MiddlewareClient( - pipeline: Pipeline.fromIterable([ - uriPrefix, - jsonEncoder, - refreshTokenAuth, - logger, - ]), - ); - await refreshToken.get(Uri.parse('/test/oauth2-test')); - // Login - await refreshToken.post( - Uri.parse('/test/oauth2-test'), - body: { - 'username': 'username', - 'password': 'password', - }, - ); - await refreshToken.get(Uri.parse('/test/oauth2-test')); - // await refreshToken.refresh(); - // await refreshToken.get(Uri.parse('/test/oauth2-test')); - // await refreshToken.get(Uri.parse('/test/oauth2-test?action=access-denied')); - - exit(0); -} diff --git a/packages/wyatt_http_client/example/http_client_fastapi_example.dart b/packages/wyatt_http_client/example/http_client_fastapi_example.dart deleted file mode 100644 index b9a900fd..00000000 --- a/packages/wyatt_http_client/example/http_client_fastapi_example.dart +++ /dev/null @@ -1,371 +0,0 @@ -// 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 . - -// ignore_for_file: public_member_api_docs, sort_constructors_first -import 'dart:convert'; - -import 'package:wyatt_http_client/src/middleware_client.dart'; -import 'package:wyatt_http_client/src/middlewares/body_to_json_middleware.dart'; -import 'package:wyatt_http_client/src/middlewares/refresh_token_auth_middleware.dart'; -import 'package:wyatt_http_client/src/middlewares/simple_logger_middleware.dart'; -import 'package:wyatt_http_client/src/middlewares/uri_prefix_middleware.dart'; -import 'package:wyatt_http_client/src/pipeline.dart'; -import 'package:wyatt_http_client/src/utils/http_status.dart'; -import 'package:wyatt_http_client/src/utils/protocols.dart'; - -enum EmailVerificationAction { - signUp, - resetPassword, - changeEmail; - - String toSnakeCase() => name.splitMapJoin( - RegExp('[A-Z]'), - onMatch: (m) => '_${m[0]?.toLowerCase()}', - onNonMatch: (n) => n, - ); - - factory EmailVerificationAction.fromString(String str) => - EmailVerificationAction.values.firstWhere( - (element) => element.toSnakeCase() == str, - ); -} - -class VerifyCode { - final String email; - final String verificationCode; - final EmailVerificationAction action; - VerifyCode({ - required this.email, - required this.verificationCode, - required this.action, - }); - - VerifyCode copyWith({ - String? email, - String? verificationCode, - EmailVerificationAction? action, - }) => - VerifyCode( - email: email ?? this.email, - verificationCode: verificationCode ?? this.verificationCode, - action: action ?? this.action, - ); - - Map toMap() => { - 'email': email, - 'verification_code': verificationCode, - 'action': action.toSnakeCase(), - }; - - factory VerifyCode.fromMap(Map map) => VerifyCode( - email: map['email'] as String, - verificationCode: map['verification_code'] as String, - action: EmailVerificationAction.fromString(map['action'] as String), - ); - - String toJson() => json.encode(toMap()); - - factory VerifyCode.fromJson(String source) => - VerifyCode.fromMap(json.decode(source) as Map); - - @override - String toString() => 'VerifyCode(email: $email, verificationCode: ' - '$verificationCode, action: $action)'; -} - -class Account { - final String email; - final String? sessionId; - Account({ - required this.email, - this.sessionId, - }); - - Account copyWith({ - String? email, - String? sessionId, - }) => - Account( - email: email ?? this.email, - sessionId: sessionId ?? this.sessionId, - ); - - Map toMap() => { - 'email': email, - 'session_id': sessionId, - }; - - factory Account.fromMap(Map map) => Account( - email: map['email'] as String, - sessionId: - map['session_id'] != null ? map['session_id'] as String : null, - ); - - String toJson() => json.encode(toMap()); - - factory Account.fromJson(String source) => - Account.fromMap(json.decode(source) as Map); - - @override - String toString() => 'Account(email: $email, sessionId: $sessionId)'; -} - -class SignUp { - final String sessionId; - final String password; - SignUp({ - required this.sessionId, - required this.password, - }); - - SignUp copyWith({ - String? sessionId, - String? password, - }) => - SignUp( - sessionId: sessionId ?? this.sessionId, - password: password ?? this.password, - ); - - Map toMap() => { - 'session_id': sessionId, - 'password': password, - }; - - factory SignUp.fromMap(Map map) => SignUp( - sessionId: map['session_id'] as String, - password: map['password'] as String, - ); - - String toJson() => json.encode(toMap()); - - factory SignUp.fromJson(String source) => - SignUp.fromMap(json.decode(source) as Map); - - @override - String toString() => 'SignUp(sessionId: $sessionId, password: $password)'; -} - -class TokenSuccess { - final String accessToken; - final String refreshToken; - final Account account; - TokenSuccess({ - required this.accessToken, - required this.refreshToken, - required this.account, - }); - - TokenSuccess copyWith({ - String? accessToken, - String? refreshToken, - Account? account, - }) => - TokenSuccess( - accessToken: accessToken ?? this.accessToken, - refreshToken: refreshToken ?? this.refreshToken, - account: account ?? this.account, - ); - - Map toMap() => { - 'access_token': accessToken, - 'refresh_token': refreshToken, - 'account': account.toMap(), - }; - - factory TokenSuccess.fromMap(Map map) => TokenSuccess( - accessToken: map['access_token'] as String, - refreshToken: map['refresh_token'] as String, - account: Account.fromMap(map['account'] as Map), - ); - - String toJson() => json.encode(toMap()); - - factory TokenSuccess.fromJson(String source) => - TokenSuccess.fromMap(json.decode(source) as Map); - - @override - String toString() => 'TokenSuccess(accessToken: $accessToken, refreshToken: ' - '$refreshToken, account: $account)'; -} - -class Login { - final String email; - final String password; - Login({ - required this.email, - required this.password, - }); - - Login copyWith({ - String? email, - String? password, - }) => - Login( - email: email ?? this.email, - password: password ?? this.password, - ); - - Map toMap() => { - 'email': email, - 'password': password, - }; - - factory Login.fromMap(Map map) => Login( - email: map['email'] as String, - password: map['password'] as String, - ); - - String toJson() => json.encode(toMap()); - - factory Login.fromJson(String source) => - Login.fromMap(json.decode(source) as Map); - - @override - String toString() => 'Login(email: $email, password: $password)'; -} - -class FastAPI { - final String baseUrl; - final MiddlewareClient client; - final int apiVersion; - - FastAPI({ - this.baseUrl = 'localhost:80', - MiddlewareClient? client, - this.apiVersion = 1, - }) : client = client ?? MiddlewareClient(); - - String get apiPath => '/api/v$apiVersion'; - - Future sendSignUpCode(String email) async { - final r = await client.post( - Uri.parse('$apiPath/auth/send-sign-up-code'), - body: { - 'email': email, - }, - ); - if (r.statusCode != 201) { - throw Exception('Invalid reponse: ${r.statusCode}'); - } - } - - Future verifyCode(VerifyCode verifyCode) async { - final r = await client.post( - Uri.parse('$apiPath/auth/verify-code'), - body: verifyCode.toMap(), - ); - if (r.statusCode != 202) { - throw Exception('Invalid reponse: ${r.statusCode}'); - } else { - return Account.fromMap( - (jsonDecode(r.body) as Map)['account'] - as Map, - ); - } - } - - Future signUp(SignUp signUp) async { - final r = await client.post( - Uri.parse('$apiPath/auth/sign-up'), - body: signUp.toMap(), - ); - if (r.statusCode != 201) { - throw Exception('Invalid reponse: ${r.statusCode}'); - } else { - return Account.fromJson(r.body); - } - } - - Future signInWithPassword(Login login) async { - final r = await client.post( - Uri.parse('$apiPath/auth/sign-in-with-password'), - body: login.toMap(), - ); - if (r.statusCode != 200) { - throw Exception('Invalid reponse: ${r.statusCode}'); - } else { - return TokenSuccess.fromJson(r.body); - } - } - - // Future refresh() async { - // final r = await client.refresh(); - // return TokenSuccess.fromJson(r?.body ?? ''); - // } - - Future> getAccountList() async { - final r = await client.get( - Uri.parse('$apiPath/account'), - ); - if (r.statusCode != 200) { - throw Exception('Invalid reponse: ${r.statusCode}'); - } else { - final list = (jsonDecode(r.body) as Map)['founds'] - as List>; - final result = []; - for (final element in list) { - result.add(Account.fromMap(element)); - } - return result; - } - } -} - -void main(List args) async { - final Pipeline pipeline = Pipeline() - .addMiddleware( - UriPrefixMiddleware( - protocol: Protocols.http, - authority: 'localhost:80', - ), - ) - .addMiddleware(BodyToJsonMiddleware()) - .addMiddleware( - RefreshTokenAuthMiddleware( - authorizationEndpoint: '/api/v1/auth/sign-in-with-password', - tokenEndpoint: '/api/v1/auth/refresh', - accessTokenParser: (body) => body['access_token']! as String, - refreshTokenParser: (body) => body['refresh_token']! as String, - unauthorized: HttpStatus.forbidden, - ), - ) - .addMiddleware(SimpleLoggerMiddleware()); - - print(pipeline); - final client = MiddlewareClient(pipeline: pipeline); - - final api = FastAPI( - client: client, - ); - - await api.sendSignUpCode('git@pcl.ovh'); - // final verifiedAccount = await api.verifyCode( - // VerifyCode( - // email: 'git@pcl.ovh', - // verificationCode: '000000000', - // action: EmailVerificationAction.signUp, - // ), - // ); - // final registeredAccount = await api.signUp( - // SignUp(sessionId: verifiedAccount.sessionId ?? '', password: 'password'), - // ); - // final signedInAccount = await api.signInWithPassword( - // Login(email: 'git@pcl.ovh', password: 'password'), - // ); - final accountList = await api.getAccountList(); - print(accountList); -} diff --git a/packages/wyatt_http_client/example/pipeline.dart b/packages/wyatt_http_client/example/pipeline.dart deleted file mode 100644 index 7f261f39..00000000 --- a/packages/wyatt_http_client/example/pipeline.dart +++ /dev/null @@ -1,164 +0,0 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first -// 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 . - -import 'package:wyatt_http_client/src/middleware_client.dart'; -import 'package:wyatt_http_client/src/middlewares/body_to_json_middleware.dart'; -import 'package:wyatt_http_client/src/middlewares/simple_logger_middleware.dart'; -import 'package:wyatt_http_client/src/middlewares/unsafe_auth_middleware.dart'; -import 'package:wyatt_http_client/src/middlewares/uri_prefix_middleware.dart'; -import 'package:wyatt_http_client/src/pipeline.dart'; -import 'package:wyatt_http_client/src/utils/protocols.dart'; - -// class RequestMutatorMiddleware implements Middleware { -// @override -// Middleware? parent; - -// @override -// Middleware? child; - -// RequestMutatorMiddleware({ -// this.parent, -// this.child, -// }); - -// @override -// BaseRequest onRequest(BaseRequest request) { -// print('RequestMutator::OnRequest: ${request.method} -> ${request.url}'); -// return child?.onRequest(request) ?? request; -// } - -// @override -// BaseResponse onResponse(BaseResponse response) { -// final res = child?.onResponse(response) ?? response; -// print( -// 'RequestMutator::OnResponse: ${res.statusCode} -> ${res.contentLength} -// bytes', -// ); -// return res; -// } -// } - -// typedef Middleware = Handler Function(Handler innerHandler); - -// Middleware createMiddleware({ -// FutureOr Function(Request)? requestHandler, -// FutureOr Function(Response)? responseHandler, -// FutureOr Function(Object error, StackTrace)? errorHandler, -// }) { -// requestHandler ??= (request) => null; -// responseHandler ??= (response) => response; - -// FutureOr Function(Object, StackTrace)? onError; -// if (errorHandler != null) { -// onError = (error, stackTrace) { -// if (error is Exception) throw error; -// return errorHandler(error, stackTrace); -// }; -// } - -// return (Handler innerHandler) { -// return (request) { -// return Future.sync(() => requestHandler!(request)).then((response) { -// if (response != null) return response; - -// return Future.sync(() => innerHandler(request)) -// .then((response) => responseHandler!(response), onError: -// onError); -// }); -// }; -// }; -// } - -// extension MiddlewareX on Middleware { -// Middleware addMiddleware(Middleware other) => -// (Handler handler) => this(other(handler)); -// Handler addHandler(Handler handler) => this(handler); -// } - -// typedef Handler = FutureOr Function(Request request); - -// final headerMutator = createMiddleware( -// responseHandler: (response) { -// print(response.headers); -// return response; -// },); - -// class Pipeline { -// const Pipeline(); - -// Pipeline addMiddleware(Middleware middleware) => -// _Pipeline(middleware, addHandler); - -// Handler addHandler(Handler handler) => handler; - -// Middleware get middleware => addHandler; -// } - -// class _Pipeline extends Pipeline { -// final Middleware _middleware; -// final Middleware _parent; - -// _Pipeline(this._middleware, this._parent); - -// @override -// Handler addHandler(Handler handler) => _parent(_middleware(handler)); -// } - -Future main(List args) async { - final UnsafeAuthMiddleware auth = UnsafeAuthMiddleware(); - final Pipeline pipeline = Pipeline() - .addMiddleware( - UriPrefixMiddleware( - protocol: Protocols.http, - authority: 'localhost:80', - ), - ) - .addMiddleware(BodyToJsonMiddleware()) - .addMiddleware( - UnsafeAuthMiddleware( - username: 'wyatt', - password: 'motdepasse', - ), - ) - .addMiddleware(SimpleLoggerMiddleware()); - // .addMiddleware( - // RefreshTokenMiddleware( - // authorizationEndpoint: '/api/v1/account/test?action=authorize', - // tokenEndpoint: '/api/v1/account/test?action=refresh', - // accessTokenParser: (body) => body['access_token']! as String, - // refreshTokenParser: (body) => body['refresh_token']! as String, - // ), - // ); - - print(pipeline); - final client = MiddlewareClient(pipeline: pipeline); - await client.post( - Uri.parse('/api/v1/account/test'), - body: { - 'email': 'test@test.fr', - }, - ); - auth - ..username = 'username' - ..password = 'password'; - await client.post( - Uri.parse('/api/v1/account/test'), - body: { - 'email': 'test@test.fr', - }, - ); -} diff --git a/packages/wyatt_http_client/lib/src/middleware.dart b/packages/wyatt_http_client/lib/src/middleware.dart index 07cf6323..9f0c9d67 100644 --- a/packages/wyatt_http_client/lib/src/middleware.dart +++ b/packages/wyatt_http_client/lib/src/middleware.dart @@ -18,12 +18,21 @@ import 'package:wyatt_http_client/src/models/middleware_context.dart'; import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/models/middleware_response.dart'; +/// {@template middleware} +/// A middleware is a class that can intercept requests and responses +/// and modify them before they are sent to the server or before they +/// are returned to the client. +/// {@endtemplate} abstract class Middleware { - Middleware(); + /// {@macro middleware} + const Middleware(); + + /// The name of the middleware. String getName(); } mixin OnRequestMiddleware { + /// Performs an action before the request is sent to the server. Future onRequest( MiddlewareContext context, MiddlewareRequest request, @@ -31,6 +40,7 @@ mixin OnRequestMiddleware { } mixin OnResponseMiddleware { + /// Performs an action before the response is returned to the client. Future onResponse( MiddlewareContext context, MiddlewareResponse response, diff --git a/packages/wyatt_http_client/lib/src/middleware_client.dart b/packages/wyatt_http_client/lib/src/middleware_client.dart index 14cbd094..23c1f064 100644 --- a/packages/wyatt_http_client/lib/src/middleware_client.dart +++ b/packages/wyatt_http_client/lib/src/middleware_client.dart @@ -24,15 +24,23 @@ import 'package:wyatt_http_client/src/models/unfreezed_request.dart'; import 'package:wyatt_http_client/src/pipeline.dart'; import 'package:wyatt_http_client/src/utils/http_methods.dart'; +/// {@template middleware_client} +/// A custom [Client] implementation that allows you to intercept requests +/// and responses and modify them before they are sent to the server or +/// before they are returned to the client. +/// {@endtemplate} class MiddlewareClient extends BaseClient { + /// {@macro middleware_client} MiddlewareClient({ Pipeline? pipeline, Client? inner, }) : pipeline = pipeline ?? Pipeline(), - inner = inner ?? Client() { - print('Using Pipeline:\n$pipeline'); - } + inner = inner ?? Client(); + + /// The [Client] that will be used to send requests. final Client inner; + + /// The [Pipeline] that will be used to intercept requests and responses. final Pipeline pipeline; @override diff --git a/packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart deleted file mode 100644 index 1bb8b149..00000000 --- a/packages/wyatt_http_client/lib/src/middlewares/access_token_auth_middleware.dart +++ /dev/null @@ -1,15 +0,0 @@ -// 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 . diff --git a/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart index 529e3113..37bf033a 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/basic_auth_middleware.dart @@ -22,14 +22,24 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/utils/authentication_methods.dart'; import 'package:wyatt_http_client/src/utils/header_keys.dart'; +/// {@template basic_auth_middleware} +/// A middleware that adds basic authentication to the request. +/// {@endtemplate} class BasicAuthMiddleware with OnRequestMiddleware implements Middleware { - BasicAuthMiddleware({ + /// {@macro basic_auth_middleware} + const BasicAuthMiddleware({ this.username, this.password, this.authenticationHeader = HeaderKeys.authorization, }); - String? username; - String? password; + + /// The username to use for authentication. + final String? username; + + /// The password to use for authentication. + final String? password; + + /// The header to use for authentication. final String authenticationHeader; @override @@ -43,10 +53,7 @@ class BasicAuthMiddleware with OnRequestMiddleware implements Middleware { if (username == null || password == null) { return request; } - print( - '${getName()}::OnRequest\n' - '>> Basic: ${base64Encode(utf8.encode('$username:$password'))}', - ); + final mutation = { authenticationHeader: '${AuthenticationMethods.basic} ' '${base64Encode(utf8.encode('$username:$password'))}', diff --git a/packages/wyatt_http_client/lib/src/middlewares/body_to_json_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/body_to_json_middleware.dart index a77048d8..e9aaaba7 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/body_to_json_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/body_to_json_middleware.dart @@ -20,7 +20,13 @@ import 'package:wyatt_http_client/src/middleware.dart'; import 'package:wyatt_http_client/src/models/middleware_context.dart'; import 'package:wyatt_http_client/src/models/middleware_request.dart'; +/// {@template body_to_json_middleware} +/// A middleware that transforms the body in json if it's a [Map]. +/// {@endtemplate} class BodyToJsonMiddleware with OnRequestMiddleware implements Middleware { + /// {@macro body_to_json_middleware} + const BodyToJsonMiddleware(); + @override String getName() => 'BodyToJson'; @@ -29,11 +35,6 @@ class BodyToJsonMiddleware with OnRequestMiddleware implements Middleware { MiddlewareContext context, MiddlewareRequest request, ) async { - print( - '${getName()}::OnRequest\n' - '>> Transforms body in json if Map then update ' - 'headers with right content-type', - ); final mutation = { 'content-type': 'application/json; charset=utf-8', }; diff --git a/packages/wyatt_http_client/lib/src/middlewares/default_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/default_middleware.dart index 65b766ca..456a07b5 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/default_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/default_middleware.dart @@ -16,7 +16,13 @@ import 'package:wyatt_http_client/src/middleware.dart'; +/// {@template default_middleware} +/// A default middleware that does nothing. +/// {@endtemplate} class DefaultMiddleware implements Middleware { + /// {@macro default_middleware} + const DefaultMiddleware(); + @override String getName() => 'DefaultMiddleware'; } diff --git a/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart index c09d0423..55c17030 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/digest_auth_middleware.dart @@ -22,9 +22,13 @@ import 'package:wyatt_http_client/src/utils/digest_auth.dart'; import 'package:wyatt_http_client/src/utils/header_keys.dart'; import 'package:wyatt_http_client/src/utils/http_status.dart'; +/// {@template digest_auth_middleware} +/// A middleware that handles digest authentication. +/// {@endtemplate} class DigestAuthMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { + /// {@macro digest_auth_middleware} DigestAuthMiddleware({ required this.username, required this.password, @@ -47,10 +51,6 @@ class DigestAuthMiddleware MiddlewareContext context, MiddlewareRequest request, ) async { - print( - '${getName()}::OnRequest\n' - '>> Digest ready: ${_digestAuth.isReady()}', - ); if (_digestAuth.isReady()) { final mutation = { authenticationHeader: _digestAuth.getAuthString( @@ -82,10 +82,6 @@ class DigestAuthMiddleware return MiddlewareResponse(httpResponse: newResponse); } } - print( - '${getName()}::OnResponse\n' - '>> Digest ready: ${_digestAuth.isReady()}', - ); return response; } } diff --git a/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart b/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart index 9c2b70b0..29bbf147 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/middlewares.dart @@ -14,7 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'access_token_auth_middleware.dart'; +// All built-in middlewares + export 'basic_auth_middleware.dart'; export 'body_to_json_middleware.dart'; export 'default_middleware.dart'; diff --git a/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart index 19f3f137..50f5005d 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/refresh_token_auth_middleware.dart @@ -28,9 +28,14 @@ import 'package:wyatt_http_client/src/utils/http_status.dart'; typedef TokenParser = String Function(Map); +/// {@template refresh_token_auth_middleware} +/// A middleware that refreshes the access token when it expires. +/// This middleware is useful for OAuth2. +/// {@endtemplate} class RefreshTokenAuthMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { + /// {@macro refresh_token_auth_middleware} RefreshTokenAuthMiddleware({ required this.authorizationEndpoint, required this.tokenEndpoint, @@ -113,11 +118,6 @@ class RefreshTokenAuthMiddleware MiddlewareContext context, MiddlewareRequest request, ) async { - print( - '${getName()}::OnRequest\n' - '>> accessToken: $accessToken\n' - '>> refreshToken: $refreshToken', - ); // Check if it is authorization if (context.originalRequest?.url == Uri.parse(authorizationEndpoint)) { return request; @@ -168,12 +168,6 @@ class RefreshTokenAuthMiddleware } } - print( - '${getName()}::OnResponse\n' - '>> accessToken: $accessToken\n' - '>> refreshToken: $refreshToken', - ); - if (response.status == unauthorized) { // Refresh MiddlewareRequest? newRequest = await refresh(context); diff --git a/packages/wyatt_http_client/lib/src/middlewares/simple_logger_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/simple_logger_middleware.dart index 8e2d2637..31492b8f 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/simple_logger_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/simple_logger_middleware.dart @@ -19,9 +19,15 @@ import 'package:wyatt_http_client/src/models/middleware_context.dart'; import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/models/middleware_response.dart'; +/// {@template simple_logger_middleware} +/// A simple logger middleware that logs the request and response. +/// {@endtemplate} class SimpleLoggerMiddleware with OnRequestMiddleware, OnResponseMiddleware implements Middleware { + /// {@macro simple_logger_middleware} + const SimpleLoggerMiddleware(); + @override String getName() => 'SimpleLogger'; @@ -30,11 +36,22 @@ class SimpleLoggerMiddleware MiddlewareContext context, MiddlewareRequest request, ) async { - print( - '${getName()}::OnRequest\n' - '>> ${request.method} ${request.url}\n' - '>> Headers: ${request.headers}\n>> Body: ${request.encodedBody}', - ); + final log = StringBuffer() + ..writeln('${getName()}::OnRequest') + ..writeln('>> ${request.method} ${request.url}'); + if (request.headers.isNotEmpty) { + log.writeln('>> Headers:'); + request.headers.forEach((key, value) { + log.writeln('>> $key: $value'); + }); + } + if (request.encodedBody.isNotEmpty) { + log + ..writeln('>> Body:') + ..writeln(request.encodedBody); + } + print(log); + return request; } @@ -43,12 +60,13 @@ class SimpleLoggerMiddleware MiddlewareContext context, MiddlewareResponse response, ) async { - print( - '${getName()}::OnResponse\n' - '>> Status: ${response.status.name.toUpperCase()}\n' - '>> Length: ${response.contentLength ?? '0'} bytes', - // '>> Body: ${response.body}', - ); + final log = StringBuffer() + ..writeln('${getName()}::OnResponse') + ..writeln('>> Status: ${response.status.name.toUpperCase()}') + ..writeln('>> Length: ${response.contentLength ?? '0'} bytes'); + + print(log); + return response; } } diff --git a/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart index 724d7211..f4481877 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/unsafe_auth_middleware.dart @@ -19,15 +19,20 @@ import 'package:wyatt_http_client/src/models/middleware_context.dart'; import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/utils/convert.dart'; +/// {@template unsafe_auth_middleware} +/// A middleware that appends the username and password to the URL. +/// +/// This is not recommended to use in production. +/// {@endtemplate} class UnsafeAuthMiddleware with OnRequestMiddleware implements Middleware { - UnsafeAuthMiddleware({ + const UnsafeAuthMiddleware({ this.username, this.password, this.usernameField = 'username', this.passwordField = 'password', }); - String? username; - String? password; + final String? username; + final String? password; final String usernameField; final String passwordField; @@ -45,10 +50,6 @@ class UnsafeAuthMiddleware with OnRequestMiddleware implements Middleware { } final Uri uri = request.url + '?$usernameField=$username&$passwordField=$password'; - print( - '${getName()}::OnRequest\n' - '>> Append: ?$usernameField=$username&$passwordField=$password', - ); request.modifyRequest(request.unfreezedRequest.copyWith(url: uri)); return request; } diff --git a/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart b/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart index 04c3232f..f02cff99 100644 --- a/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart +++ b/packages/wyatt_http_client/lib/src/middlewares/uri_prefix_middleware.dart @@ -19,12 +19,20 @@ import 'package:wyatt_http_client/src/models/middleware_context.dart'; import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/utils/protocols.dart'; +/// {@template uri_prefix_middleware} +/// A middleware that adds a prefix to the request's URI. +/// {@endtemplate} class UriPrefixMiddleware with OnRequestMiddleware implements Middleware { - UriPrefixMiddleware({ + /// {@macro uri_prefix_middleware} + const UriPrefixMiddleware({ required this.protocol, required this.authority, }); + + /// The protocol of the prefix. final Protocols protocol; + + /// The authority of the prefix. final String? authority; @override @@ -36,11 +44,6 @@ class UriPrefixMiddleware with OnRequestMiddleware implements Middleware { MiddlewareRequest request, ) async { final Uri uri = Uri.parse('${protocol.scheme}$authority${request.url}'); - print( - '${getName()}::OnRequest\n' - '>> From: ${request.url}\n' - '>> To: $uri', - ); request.modifyRequest(request.unfreezedRequest.copyWith(url: uri)); return request; } diff --git a/packages/wyatt_http_client/lib/src/models/middleware_context.dart b/packages/wyatt_http_client/lib/src/models/middleware_context.dart index 503c2e3e..5071b39e 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_context.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_context.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // @@ -20,15 +19,12 @@ import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/models/middleware_response.dart'; import 'package:wyatt_http_client/src/pipeline.dart'; +/// {@template middleware_context} +/// A class that contains the context of the middleware. +/// {@endtemplate} class MiddlewareContext { - Pipeline pipeline; - MiddlewareClient client; - MiddlewareRequest? originalRequest; - MiddlewareRequest? lastRequest; - MiddlewareResponse? originalResponse; - MiddlewareResponse? lastResponse; - - MiddlewareContext({ + /// {@macro middleware_context} + const MiddlewareContext({ required this.pipeline, required this.client, this.originalRequest, @@ -37,6 +33,26 @@ class MiddlewareContext { this.lastResponse, }); + /// The pipeline that the middleware is in. + final Pipeline pipeline; + + /// The client that the middleware is in. + final MiddlewareClient client; + + /// The original request that the middleware is in. + final MiddlewareRequest? originalRequest; + + /// The last request that the middleware is in. + final MiddlewareRequest? lastRequest; + + /// The original response that the middleware is in. + final MiddlewareResponse? originalResponse; + + /// The last response that the middleware is in. + final MiddlewareResponse? lastResponse; + + /// Create a copy of this [MiddlewareContext] with the given fields replaced + /// with the new values. MiddlewareContext copyWith({ Pipeline? pipeline, MiddlewareClient? client, diff --git a/packages/wyatt_http_client/lib/src/models/middleware_request.dart b/packages/wyatt_http_client/lib/src/models/middleware_request.dart index 333d3177..e7c93703 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_request.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_request.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // @@ -22,24 +21,43 @@ import 'package:wyatt_http_client/src/models/unfreezed_request.dart'; import 'package:wyatt_http_client/src/utils/convert.dart'; import 'package:wyatt_http_client/src/utils/request_utils.dart'; +/// {@template middleware_request} +/// A class that represents a middleware request. +/// {@endtemplate} class MiddlewareRequest { - UnfreezedRequest unfreezedRequest; - Request _httpRequest; - - Request get request => _httpRequest; - - // Proxy - String get method => _httpRequest.method; - Uri get url => _httpRequest.url; - Map get headers => _httpRequest.headers; - Encoding get encoding => _httpRequest.encoding; - String get encodedBody => _httpRequest.body; - Object? get body => unfreezedRequest.body; - + /// {@macro middleware_request} MiddlewareRequest({ required this.unfreezedRequest, }) : _httpRequest = Request(unfreezedRequest.method, unfreezedRequest.url); + /// The unfreezed request. + UnfreezedRequest unfreezedRequest; + + Request _httpRequest; + + /// The http request. (Read-only) + Request get request => _httpRequest; + + /// The request method (proxy, read-only). + String get method => _httpRequest.method; + + /// The request url (proxy, read-only). + Uri get url => _httpRequest.url; + + /// The request headers (proxy, read-only). + Map get headers => _httpRequest.headers; + + /// The request body (proxy, read-only). + Encoding get encoding => _httpRequest.encoding; + + /// The request body (proxy, read-only). + String get encodedBody => _httpRequest.body; + + /// The request body (proxy, read-only). + Object? get body => unfreezedRequest.body; + + /// Copies this request and returns a new request with the given + /// [unfreezedRequest]. MiddlewareRequest copyWith({ UnfreezedRequest? unfreezedRequest, }) => @@ -47,6 +65,7 @@ class MiddlewareRequest { unfreezedRequest: unfreezedRequest ?? this.unfreezedRequest, ); + /// Modifies the request with the given [unfreezedRequest]. void modifyRequest(UnfreezedRequest unfreezedRequest) { String? body; if (unfreezedRequest.body != null) { @@ -72,6 +91,8 @@ class MiddlewareRequest { this.unfreezedRequest = unfreezedRequest; } + /// Applies the changes made to the request by modifying it with the + /// [unfreezedRequest]. void apply() { modifyRequest(unfreezedRequest); } diff --git a/packages/wyatt_http_client/lib/src/models/middleware_response.dart b/packages/wyatt_http_client/lib/src/models/middleware_response.dart index 500c17c3..19781901 100644 --- a/packages/wyatt_http_client/lib/src/models/middleware_response.dart +++ b/packages/wyatt_http_client/lib/src/models/middleware_response.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first // Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // @@ -18,12 +17,25 @@ import 'package:http/http.dart'; import 'package:wyatt_http_client/src/utils/http_status.dart'; +/// {@template middleware_response} +/// A class that represents a middleware response. +/// {@endtemplate} class MiddlewareResponse { - BaseResponse httpResponse; + /// {@macro middleware_response} + const MiddlewareResponse({ + required this.httpResponse, + }); - // Proxy + /// {@macro middleware_response} + final BaseResponse httpResponse; + + /// The status code of the response. (proxy) int get statusCode => httpResponse.statusCode; + + /// The status of the response. (proxy) HttpStatus get status => HttpStatus.from(statusCode); + + /// The body of the response. (proxy or empty string) String get body { if (httpResponse is Response) { return (httpResponse as Response).body; @@ -32,13 +44,13 @@ class MiddlewareResponse { } } + /// The content length of the response. (proxy) int? get contentLength => httpResponse.contentLength; + + /// The headers of the response. (proxy) Map get headers => httpResponse.headers; - MiddlewareResponse({ - required this.httpResponse, - }); - + /// Returns a copy of this response with the given [httpResponse]. MiddlewareResponse copyWith({ BaseResponse? httpResponse, }) => diff --git a/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart b/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart index d29c15d8..6779a5b6 100644 --- a/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart +++ b/packages/wyatt_http_client/lib/src/models/unfreezed_request.dart @@ -16,20 +16,38 @@ import 'dart:convert'; +/// {@template unfreezed_request} +/// A class that represents an unfreezed request. +/// It is used to unfreeze a Request object, and allows you to +/// modify the request before sending it. +/// {@endtemplate} class UnfreezedRequest { - UnfreezedRequest({ + /// {@macro unfreezed_request} + const UnfreezedRequest({ required this.method, required this.url, this.headers, this.body, this.encoding, }); + + /// The request method. final String method; + + /// The request url. final Uri url; + + /// The request headers. final Map? headers; + + /// The request body. final Object? body; + + /// The request encoding. final Encoding? encoding; + /// Copies this request and returns a new request with the given [method], + /// [url], [headers], [body] and [encoding]. UnfreezedRequest copyWith({ String? method, Uri? url, diff --git a/packages/wyatt_http_client/lib/src/pipeline.dart b/packages/wyatt_http_client/lib/src/pipeline.dart index 3cebc400..7e1c2900 100644 --- a/packages/wyatt_http_client/lib/src/pipeline.dart +++ b/packages/wyatt_http_client/lib/src/pipeline.dart @@ -19,20 +19,27 @@ import 'package:wyatt_http_client/src/models/middleware_context.dart'; import 'package:wyatt_http_client/src/models/middleware_request.dart'; import 'package:wyatt_http_client/src/models/middleware_response.dart'; +/// {@template pipeline} +/// A [Pipeline] is a list of [Middleware]s that are executed in order. +/// {@endtemplate} class Pipeline { + /// {@macro pipeline} Pipeline() : _middlewares = []; + + /// {@macro pipeline} Pipeline.fromIterable(Iterable middlewares) : _middlewares = middlewares.toList(); + final List _middlewares; + /// The length of the [Pipeline]. + /// + /// This is the number of [Middleware]s in the [Pipeline]. int get length => _middlewares.length; /// Add a [Middleware] to this [Pipeline] - Pipeline addMiddleware(Middleware middleware) { + void addMiddleware(Middleware middleware) { _middlewares.add(middleware); - // TODO(hpcl): use Dart cascades instead of returning this - // ignore: avoid_returning_this - return this; } /// Create new [Pipeline] from the start or end to a specified [Middleware]. @@ -57,11 +64,15 @@ class Pipeline { return Pipeline.fromIterable(fromEnd ? nodes.reversed : nodes); } + /// Call the [onRequest] method of all [OnRequestMiddleware]s in the + /// [Pipeline]. + /// + /// The [MiddlewareRequest] returned by the last [OnRequestMiddleware] is + /// returned. Future onRequest( MiddlewareContext context, MiddlewareRequest request, ) async { - print('\n\nNEW REQUEST\n'); MiddlewareRequest req = request..apply(); MiddlewareContext ctx = context.copyWith(lastRequest: req); for (final middleware in _middlewares) { @@ -73,11 +84,15 @@ class Pipeline { return req; } + /// Call the [onResponse] method of all [OnResponseMiddleware]s in the + /// [Pipeline]. + /// + /// The [MiddlewareResponse] returned by the last [OnResponseMiddleware] is + /// returned. Future onResponse( MiddlewareContext context, MiddlewareResponse response, ) async { - print('\n\nNEW RESPONSE\n'); MiddlewareResponse res = response; MiddlewareContext ctx = context.copyWith(lastResponse: res); for (final middleware in _middlewares.reversed) { diff --git a/packages/wyatt_http_client/lib/src/utils/authentication_methods.dart b/packages/wyatt_http_client/lib/src/utils/authentication_methods.dart index ef73c15f..d8f028c2 100644 --- a/packages/wyatt_http_client/lib/src/utils/authentication_methods.dart +++ b/packages/wyatt_http_client/lib/src/utils/authentication_methods.dart @@ -14,8 +14,14 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines some authentication methods abstract class AuthenticationMethods { + /// The `Basic` authentication method. static const String basic = 'Basic'; + + /// The `Bearer` authentication method. static const String bearer = 'Bearer'; + + /// The `Digest` authentication method. static const String digest = 'Digest'; } diff --git a/packages/wyatt_http_client/lib/src/utils/convert.dart b/packages/wyatt_http_client/lib/src/utils/convert.dart index 1f287757..93c86d59 100644 --- a/packages/wyatt_http_client/lib/src/utils/convert.dart +++ b/packages/wyatt_http_client/lib/src/utils/convert.dart @@ -16,7 +16,11 @@ import 'dart:convert'; -class Convert { +/// Defines some convert functions. +abstract class Convert { + /// Converts a list of bytes to a hex string. + /// + /// If [upperCase] is `true`, the hex string will be in uppercase. static String toHex(List bytes, {bool upperCase = false}) { final buffer = StringBuffer(); for (final int part in bytes) { @@ -32,6 +36,11 @@ class Convert { } } + /// Converts a map to a query string. + /// + /// If [encoding] is `null`, the default encoding is `utf8`. + /// + /// For example, the map `{a: 1, b: 2}` will be converted to `a=1&b=2`. static String mapToQuery(Map map, {Encoding? encoding}) { final pairs = >[]; map.forEach( @@ -45,6 +54,7 @@ class Convert { } extension UriX on Uri { + /// Returns a new [Uri] by appending the given [path] to this [Uri]. Uri operator +(String path) { final thisPath = toString(); return Uri.parse(thisPath + path); diff --git a/packages/wyatt_http_client/lib/src/utils/crypto.dart b/packages/wyatt_http_client/lib/src/utils/crypto.dart index f27d08a7..bf7fa5a6 100644 --- a/packages/wyatt_http_client/lib/src/utils/crypto.dart +++ b/packages/wyatt_http_client/lib/src/utils/crypto.dart @@ -18,7 +18,8 @@ import 'dart:convert'; import 'package:crypto/crypto.dart'; -class Crypto { +/// Defines some crypto functions. +abstract class Crypto { /// Hash a string using MD5 static String md5Hash(String data) { final content = const Utf8Encoder().convert(data); diff --git a/packages/wyatt_http_client/lib/src/utils/delay.dart b/packages/wyatt_http_client/lib/src/utils/delay.dart index 3ca50947..cc9d4193 100644 --- a/packages/wyatt_http_client/lib/src/utils/delay.dart +++ b/packages/wyatt_http_client/lib/src/utils/delay.dart @@ -17,7 +17,9 @@ import 'dart:core'; import 'dart:math'; +/// Defines some delay functions. abstract class Delay { + /// Returns a delay based on the [attempt]. static Duration getRetryDelay(int attempt) { assert(attempt >= 0, 'attempt cannot be negative'); if (attempt <= 0) { diff --git a/packages/wyatt_http_client/lib/src/utils/digest_auth.dart b/packages/wyatt_http_client/lib/src/utils/digest_auth.dart index ba16c0aa..065eeef0 100644 --- a/packages/wyatt_http_client/lib/src/utils/digest_auth.dart +++ b/packages/wyatt_http_client/lib/src/utils/digest_auth.dart @@ -19,12 +19,13 @@ import 'dart:math'; import 'package:wyatt_http_client/src/utils/convert.dart'; import 'package:wyatt_http_client/src/utils/crypto.dart'; +/// A class for digest authentication. class DigestAuth { // request counter DigestAuth(this.username, this.password); - String username; - String password; + final String username; + final String password; // must get from first response String? _algorithm; diff --git a/packages/wyatt_http_client/lib/src/utils/header_keys.dart b/packages/wyatt_http_client/lib/src/utils/header_keys.dart index 9fe72ce8..c1c9e986 100644 --- a/packages/wyatt_http_client/lib/src/utils/header_keys.dart +++ b/packages/wyatt_http_client/lib/src/utils/header_keys.dart @@ -14,8 +14,14 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines some header keys. abstract class HeaderKeys { + /// The `Authorization` header key. static const String authorization = 'Authorization'; + + /// The `WWW-Authenticate` header key. static const String wwwAuthenticate = 'WWW-Authenticate'; + + /// The `Content-Type` header key. static const String contentType = 'Content-Type'; } diff --git a/packages/wyatt_http_client/lib/src/utils/http_methods.dart b/packages/wyatt_http_client/lib/src/utils/http_methods.dart index 7b0a4c7a..efef38c4 100644 --- a/packages/wyatt_http_client/lib/src/utils/http_methods.dart +++ b/packages/wyatt_http_client/lib/src/utils/http_methods.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines http verb methods. enum HttpMethods { head('HEAD'), get('GET'), @@ -24,5 +25,8 @@ enum HttpMethods { const HttpMethods(this.method); + /// Returns the method of the http verb. + /// + /// For example, the method of [HttpMethods.get] is `GET`. final String method; } diff --git a/packages/wyatt_http_client/lib/src/utils/http_status.dart b/packages/wyatt_http_client/lib/src/utils/http_status.dart index e5360309..f5a5c488 100644 --- a/packages/wyatt_http_client/lib/src/utils/http_status.dart +++ b/packages/wyatt_http_client/lib/src/utils/http_status.dart @@ -83,6 +83,7 @@ enum HttpStatus { const HttpStatus(this.statusCode); + /// Returns the [HttpStatus] with the given [statusCode]. factory HttpStatus.from(int status) => HttpStatus.values.firstWhere((element) => element.statusCode == status); @@ -98,13 +99,18 @@ enum HttpStatus { return false; } + /// Checks if the status code is in the range of 100-199. bool isInfo() => statusCode >= 100 && statusCode < 200; + /// Checks if the status code is in the range of 200-299. bool isSuccess() => statusCode >= 200 && statusCode < 300; + /// Checks if the status code is in the range of 300-399. bool isRedirection() => statusCode >= 300 && statusCode < 400; + /// Checks if the status code is in the range of 400-499. bool isClientError() => statusCode >= 400 && statusCode < 500; + /// Checks if the status code is in the range of 500-599. bool isServerError() => statusCode >= 500 && statusCode < 600; } diff --git a/packages/wyatt_http_client/lib/src/utils/protocols.dart b/packages/wyatt_http_client/lib/src/utils/protocols.dart index 97b9d5f3..bf41a5d6 100644 --- a/packages/wyatt_http_client/lib/src/utils/protocols.dart +++ b/packages/wyatt_http_client/lib/src/utils/protocols.dart @@ -14,9 +14,13 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines few protocols enum Protocols { http, https; + /// Returns the scheme of the protocol. + /// + /// For example, the scheme of [Protocols.http] is `http://`. String get scheme => '$name://'; } diff --git a/packages/wyatt_http_client/lib/src/utils/request_utils.dart b/packages/wyatt_http_client/lib/src/utils/request_utils.dart index b50c0063..01794757 100644 --- a/packages/wyatt_http_client/lib/src/utils/request_utils.dart +++ b/packages/wyatt_http_client/lib/src/utils/request_utils.dart @@ -16,6 +16,7 @@ import 'package:http/http.dart'; +/// Defines some request utils. abstract class RequestUtils { static Request _copyNormalRequestWith( Request original, { @@ -38,6 +39,9 @@ abstract class RequestUtils { return request; } + /// Copies the given [original] request and returns a new request with the + /// given [method], [url], [headers], [maxRedirects], [followRedirects], + /// [persistentConnection] and [body]. static BaseRequest copyRequestWith( BaseRequest original, { String? method, @@ -77,6 +81,8 @@ abstract class RequestUtils { return request; } + /// Copies the given [original] request and returns a new request. + /// This method is useful when you want to modify the request static BaseRequest copyRequest(BaseRequest original) { if (original is Request) { return _copyNormalRequest(original); diff --git a/packages/wyatt_http_client/pubspec.yaml b/packages/wyatt_http_client/pubspec.yaml index 699732db..357e00a8 100644 --- a/packages/wyatt_http_client/pubspec.yaml +++ b/packages/wyatt_http_client/pubspec.yaml @@ -3,6 +3,8 @@ description: A Dart client for RESTful APIs with authentication. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_http_client version: 1.2.0 +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + environment: sdk: '>=2.17.0 <3.0.0' @@ -12,7 +14,5 @@ dependencies: dev_dependencies: wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 - path: packages/wyatt_analysis + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.1 -- 2.47.2 From 95c492e977640bab67e15438201f5dc6717a4483 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 22:01:23 +0200 Subject: [PATCH 263/320] style: update some analysis files --- .../wyatt_architecture/analysis_options.yaml | 14 +++++-------- .../wyatt_bloc_helper/analysis_options.yaml | 3 --- .../wyatt_crud_bloc/analysis_options.yaml | 3 --- packages/wyatt_crud_bloc/pubspec.yaml | 4 ++-- packages/wyatt_i18n/README.md | 2 +- packages/wyatt_i18n/analysis_options.yaml | 1 + packages/wyatt_i18n/pubspec.yaml | 20 +++++++++---------- 7 files changed, 18 insertions(+), 29 deletions(-) diff --git a/packages/wyatt_architecture/analysis_options.yaml b/packages/wyatt_architecture/analysis_options.yaml index 9f5b6860..53aca98a 100644 --- a/packages/wyatt_architecture/analysis_options.yaml +++ b/packages/wyatt_architecture/analysis_options.yaml @@ -1,21 +1,17 @@ -# Copyright (C) 2022 WYATT GROUP +# 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 . - -include: package:wyatt_analysis/analysis_options.flutter.yaml - -analyzer: - exclude: "!example/**" +include: package:wyatt_analysis/analysis_options.yaml diff --git a/packages/wyatt_bloc_helper/analysis_options.yaml b/packages/wyatt_bloc_helper/analysis_options.yaml index b0c6aced..8c9daa4e 100644 --- a/packages/wyatt_bloc_helper/analysis_options.yaml +++ b/packages/wyatt_bloc_helper/analysis_options.yaml @@ -1,4 +1 @@ include: package:wyatt_analysis/analysis_options.flutter.yaml - -analyzer: - exclude: "!example/**" \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/analysis_options.yaml b/packages/wyatt_crud_bloc/analysis_options.yaml index f09fbccc..8c9daa4e 100644 --- a/packages/wyatt_crud_bloc/analysis_options.yaml +++ b/packages/wyatt_crud_bloc/analysis_options.yaml @@ -1,4 +1 @@ include: package:wyatt_analysis/analysis_options.flutter.yaml - -analyzer: - exclude: "!example/**" diff --git a/packages/wyatt_crud_bloc/pubspec.yaml b/packages/wyatt_crud_bloc/pubspec.yaml index 52960c0e..09b9d2b2 100644 --- a/packages/wyatt_crud_bloc/pubspec.yaml +++ b/packages/wyatt_crud_bloc/pubspec.yaml @@ -28,5 +28,5 @@ dev_dependencies: flutter_test: { sdk: flutter } bloc_test: ^9.1.0 wyatt_analysis: - hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.4.1 + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.1 diff --git a/packages/wyatt_i18n/README.md b/packages/wyatt_i18n/README.md index 09cd8b61..b878a833 100644 --- a/packages/wyatt_i18n/README.md +++ b/packages/wyatt_i18n/README.md @@ -16,7 +16,7 @@ * along with this program. If not, see . --> -# Flutter - Wyatt I18n +# Wyatt I18n

    Style: Wyatt Analysis diff --git a/packages/wyatt_i18n/analysis_options.yaml b/packages/wyatt_i18n/analysis_options.yaml index 265c79a8..3302c602 100644 --- a/packages/wyatt_i18n/analysis_options.yaml +++ b/packages/wyatt_i18n/analysis_options.yaml @@ -1,4 +1,5 @@ include: package:wyatt_analysis/analysis_options.flutter.yaml + analyzer: plugins: - dart_code_metrics diff --git a/packages/wyatt_i18n/pubspec.yaml b/packages/wyatt_i18n/pubspec.yaml index 23c658ea..a0336a93 100644 --- a/packages/wyatt_i18n/pubspec.yaml +++ b/packages/wyatt_i18n/pubspec.yaml @@ -1,17 +1,19 @@ name: wyatt_i18n -description: A package by wyatt studio. +description: Library to handle internationalization in Flutter apps. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_i18n version: 1.0.0 +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + environment: sdk: ">=2.19.0 <3.0.0" dependencies: collection: ^1.17.0 equatable: ^2.0.5 - flutter: {sdk: flutter} + flutter: { sdk: flutter } flutter_bloc: ^8.1.2 - flutter_localizations: {sdk: flutter} + flutter_localizations: { sdk: flutter } http: ^0.13.5 intl: ^0.17.0 path: ^1.8.0 @@ -20,26 +22,22 @@ dependencies: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_architecture - version: 0.1.0+1 + version: ^0.1.0+1 wyatt_bloc_helper: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_bloc_helper - version: 2.0.0 + version: ^2.0.0 wyatt_type_utils: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_type_utils - version: 0.0.4 + version: ^0.0.4 yaml: ^3.1.1 dev_dependencies: - flutter_test: {sdk: flutter} + flutter_test: { sdk: flutter } dart_code_metrics: ^5.5.1 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.1 - -# The following section is specific to Flutter. -flutter: - uses-material-design: true -- 2.47.2 From 7606d26aac554d277a6f8af2e90b947c6df4ffae Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 22:01:36 +0200 Subject: [PATCH 264/320] docs(http): add simple example --- .../wyatt_http_client/example/example.dart | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 packages/wyatt_http_client/example/example.dart diff --git a/packages/wyatt_http_client/example/example.dart b/packages/wyatt_http_client/example/example.dart new file mode 100644 index 00000000..a5c529ea --- /dev/null +++ b/packages/wyatt_http_client/example/example.dart @@ -0,0 +1,78 @@ +// 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 . + +import 'package:wyatt_http_client/wyatt_http_client.dart'; + +Future testSimpleGet() async { + print('testSimpleGet'); + final pipeline = Pipeline() + ..addMiddleware(const BodyToJsonMiddleware()) + ..addMiddleware(const SimpleLoggerMiddleware()); + + final client = MiddlewareClient(pipeline: pipeline); + + final response = await client + .get(Uri.parse('https://jsonplaceholder.typicode.com/todos/1')); + print(response.body); +} + +Future testUriPrefix() async { + print('testUriPrefix'); + final pipeline = Pipeline() + ..addMiddleware( + const UriPrefixMiddleware( + protocol: Protocols.https, + authority: 'jsonplaceholder.typicode.com', + ), + ) + ..addMiddleware(const BodyToJsonMiddleware()) + ..addMiddleware(const SimpleLoggerMiddleware()); + + final client = MiddlewareClient(pipeline: pipeline); + + final response = await client.get(Uri.parse('/todos/1')); + print(response.body); +} + +Future testBasicAuth() async { + print('testBasicAuth'); + final pipeline = Pipeline() + ..addMiddleware( + const BasicAuthMiddleware( + username: 'guest', + password: 'guest', + ), + ) + ..addMiddleware(const BodyToJsonMiddleware()) + ..addMiddleware(const SimpleLoggerMiddleware()); + + final client = MiddlewareClient(pipeline: pipeline); + + final response = + await client.get(Uri.parse('https://jigsaw.w3.org/HTTP/Basic/')); + + if (HttpStatus.from(response.statusCode).isSuccess()) { + print("🎉 You're in!"); + } else { + print("⭕️ Nope, you're not in."); + } +} + +void main(List args) { + testSimpleGet(); + testUriPrefix(); + testBasicAuth(); +} -- 2.47.2 From 5fe8d84cf67e245d91454888e68986cc6b627846 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 22:01:56 +0200 Subject: [PATCH 265/320] docs(component_copy_with): add some documentation --- .../README.md | 50 ++++++++++++------- .../analysis_options.yaml | 2 +- .../src/component_copy_with_extension.dart | 24 ++++++++- .../lib/src/component_proxy_extension.dart | 32 +++++++++--- .../lib/src/domain/component_annotation.dart | 4 ++ .../pubspec.yaml | 7 +-- .../wyatt_component_copy_with_gen/README.md | 24 +++++---- .../pubspec.yaml | 8 ++- 8 files changed, 104 insertions(+), 47 deletions(-) diff --git a/packages/wyatt_component_copy_with_extension/README.md b/packages/wyatt_component_copy_with_extension/README.md index 3ef1d24d..4dd5beaf 100644 --- a/packages/wyatt_component_copy_with_extension/README.md +++ b/packages/wyatt_component_copy_with_extension/README.md @@ -7,7 +7,7 @@ * the Free Software Foundation, either version 3 of the License, or * any later version. * - * This program is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -16,15 +16,32 @@ * along with this program. If not, see . --> -# Flutter - Component Copy With Extension +# Component Copy With Extension

    Style: Wyatt Analysis - SDK: Flutter + SDK: Dart & Flutter

    This package provides annotations for generating code and simplifying the use of an UI kit within a Flutter application. **The package contains only the annotation classes**. +> This package does not contain Flutter specific code, but there is no sense in using it without Flutter. + +## Summary + +* `ComponentProxyExtension` - Annotation class for generating a proxy of a component of an UI kit. +* `ComponentCopyWithExtension` - Annotation class for generating the copyWith method of a component implementation. + +For example, let's say we have a component of an UI kit that we want to use in our application. + +1) We create the component in the `wyatt_ui_components` , add the `ComponentProxyExtension` annotation and generate the code. This component does not have any specific implementation, and only have a set of properties. +2) Now we implement the component in our ui kit, `wyatt_ui_kit` , add the `ComponentCopyWithExtension` annotation and generate the code. This component has a specific implementation and can be used in the application. +3) But we can implement multiple ui kits, and each of them can have their own implementation of the same component. And at the top of the application tree we can use the `wyatt_ui_components` package, which contains only the proxy of the component. + +> In that way, the **application is UI kit agnostic**, and we can easily change the UI kit without changing the code of the application. + +We will use the `LoaderComponent` component as an example in this documentation. + ## Annotation Classes #### `ComponentProxyExtension` @@ -32,31 +49,30 @@ This package provides annotations for generating code and simplifying the use of This annotation class is used to annotate a new component of an UI kit in the `wyatt_ui_components` package. It generates the abstract proxy of the component and allows access to all its properties in different packages and throughout the application. ```dart -part 'text_field_component.g.dart'; +part 'loader_component.g.dart'; @ComponentProxyExtension() -abstract class TextFieldComponent extends Component { - with CopyWithMixin<$TextFieldComponentCWProxy> { - - const TextFieldComponent({ - ... +abstract class LoaderComponent extends Component + with CopyWithMixin<$LoaderComponentCWProxy> { + + const LoaderComponent({ + ... }); } ``` #### `ComponentCopyWithExtension` -This annotation class is used to annotate the implementation of components directly in the application. It generates the implementation of the proxy and the mixin to ensure that the component meets the specifications defined in the `wyatt_ui_components package`. +This annotation class is used to annotate the implementation of components directly in the application. It generates the implementation of the proxy and the mixin to ensure that the component meets the specifications defined in the `wyatt_ui_components package` . ```dart -part 'text_field_component.g.dart'; +part 'loader.g.dart'; -@ComponentProxyExtension() -abstract class TextFieldComponent extends Component { - with CopyWithMixin<$TextFieldComponentCWProxy> { - - const TextFieldComponent({ - ... +@ComponentCopyWithExtension() +class Loader extends LoaderComponent with $LoaderCWMixin { + + const Loader({ + ... }); } ``` diff --git a/packages/wyatt_component_copy_with_extension/analysis_options.yaml b/packages/wyatt_component_copy_with_extension/analysis_options.yaml index 0939257e..1c320a71 100644 --- a/packages/wyatt_component_copy_with_extension/analysis_options.yaml +++ b/packages/wyatt_component_copy_with_extension/analysis_options.yaml @@ -1,5 +1,5 @@ -include: package:wyatt_analysis/analysis_options.flutter.yaml +include: package:wyatt_analysis/analysis_options.yaml diff --git a/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart b/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart index 482b1748..a71e23bf 100644 --- a/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart +++ b/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart @@ -17,9 +17,29 @@ import 'package:meta/meta_meta.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -/// Annotation used to indicate that the `copyWith` extension -/// should be generated for the compononent. +/// {@template component_copy_with_extension} +/// This annotation class is used to annotate the implementation of components +/// directly in the application. It generates the implementation of the proxy +/// and the mixin to ensure that the component meets the specifications +/// defined in the UI Kit. +/// +/// Basically it indicate that the `copyWith` extension +/// should be generated for the component. +/// +/// ```dart +/// part 'loader.g.dart'; +/// +/// @ComponentCopyWithExtension() +/// class Loader extends LoaderComponent with $LoaderCWMixin { +/// +/// const Loader({ +/// ... +/// }); +/// } +/// ``` +/// {@endtemplate} @Target({TargetKind.classType}) class ComponentCopyWithExtension extends ComponentAnnotation { + /// {@macro component_copy_with_extension} const ComponentCopyWithExtension({super.skipFields}); } diff --git a/packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart b/packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart index 3e75eef5..d34ac82c 100644 --- a/packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart +++ b/packages/wyatt_component_copy_with_extension/lib/src/component_proxy_extension.dart @@ -14,12 +14,32 @@ // along with this program. If not, see . import 'package:meta/meta_meta.dart'; +import 'package:wyatt_component_copy_with_extension/src/domain/component_annotation.dart'; +/// {@template component_proxy_extension} +/// This annotation class is used to annotate a new component of an UI kit. +/// It generates the abstract proxy of the component and allows access to +/// all its properties in different packages and throughout the application. +/// +/// ```dart +/// part 'loader_component.g.dart'; +/// +/// @ComponentProxyExtension() +/// abstract class LoaderComponent extends Component +/// with CopyWithMixin<$LoaderComponentCWProxy> { +/// +/// const LoaderComponent({ +/// ... +/// }); +/// } +/// ``` +/// +/// The [skipFields] option allows you to directly and specifically change +/// a field. This makes it easier to use. +/// +/// {@endtemplate} @Target({TargetKind.classType}) -class ComponentProxyExtension { - const ComponentProxyExtension({ - this.skipFields = true, - }); - - final bool? skipFields; +class ComponentProxyExtension extends ComponentAnnotation { + /// {@macro component_proxy_extension} + const ComponentProxyExtension({super.skipFields}); } diff --git a/packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart b/packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart index 1faf6119..4408aa19 100644 --- a/packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart +++ b/packages/wyatt_component_copy_with_extension/lib/src/domain/component_annotation.dart @@ -14,7 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// {@template component_annotation} +/// Abstract class that is used as a base for all annotations +/// {@endtemplate} abstract class ComponentAnnotation { + /// {@macro component_annotation} const ComponentAnnotation({this.skipFields = true}); /// Prevent the library from generating `copyWith` functions for individual diff --git a/packages/wyatt_component_copy_with_extension/pubspec.yaml b/packages/wyatt_component_copy_with_extension/pubspec.yaml index de13dc2d..4b0375c5 100644 --- a/packages/wyatt_component_copy_with_extension/pubspec.yaml +++ b/packages/wyatt_component_copy_with_extension/pubspec.yaml @@ -3,18 +3,15 @@ description: Extension for component copy with feature. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/component_copy_with_extension version: 1.0.0 +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + environment: sdk: ">=2.19.0 <3.0.0" dependencies: meta: ^1.8.0 - path: ^1.8.0 dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.1 - -# The following section is specific to Flutter. -flutter: - uses-material-design: true diff --git a/packages/wyatt_component_copy_with_gen/README.md b/packages/wyatt_component_copy_with_gen/README.md index 6b606cd8..64e5e799 100644 --- a/packages/wyatt_component_copy_with_gen/README.md +++ b/packages/wyatt_component_copy_with_gen/README.md @@ -7,7 +7,7 @@ * the Free Software Foundation, either version 3 of the License, or * any later version. * - * This program is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -16,30 +16,32 @@ * along with this program. If not, see . --> -# Dart - Component Copy With Gen +# Component Copy With Gen

    Style: Wyatt Analysis SDK: Dart & Flutter

    -A Dart package for generating code from annotations to ease the use of a UIKit in Flutter applications. The generated code is based on the annotation classes present in the 'wyatt_component_copy_with_extension' package. +A Dart package for generating code from annotations to ease the use of a UIKit in Flutter applications. The generated code is based on the annotation classes present in the [ `wyatt_component_copy_with_extension` package](https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_component_copy_with_extension) + +> This package does not contain Flutter specific code, but there is no sense in using it without Flutter. ## Features -- Supports the generation of abstract proxies in the `wyatt_ui_components` package. -- Supports direct use in Flutter applications. +* Supports the generation of abstract proxies in the `wyatt_ui_components` package. +* Supports direct use in Flutter applications. ## Usage ### In the 'wyatt_ui_components' package -- Add the appropriate annotation when addicdng a new component. -- Run the build runner command to generate the proxy. +* Add the appropriate annotation when adding a new component. +* Run the build runner command to generate the proxy. -### In Flutter applications +### In Flutter applications (or UI Kit implementations) -- Add the following dependencies to your pubspec.yaml: +* Add the following dependencies to your pubspec.yaml: ```yaml dependencies: @@ -51,7 +53,7 @@ dev_dependencies: build_runner: ^2.3.3 ``` -- In your UIKit, extend the desired component class and add the appropriate annotation. -- Run the code generation command via the build runner. +* In your UIKit, extend the desired component class and add the appropriate annotation. +* Run the code generation command via the build runner. For further details and additional features on class annotation, see the 'wyatt_component_copy_with_extension' package's README. diff --git a/packages/wyatt_component_copy_with_gen/pubspec.yaml b/packages/wyatt_component_copy_with_gen/pubspec.yaml index bae83cb0..301cb28c 100644 --- a/packages/wyatt_component_copy_with_gen/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/pubspec.yaml @@ -3,21 +3,19 @@ description: Generator for copywith method for components. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/component_copy_with_gen version: 1.0.0 -publish_to: "none" +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: sdk: ">=2.19.0 <3.0.0" dependencies: - path: ^1.8.0 build: ^2.3.1 source_gen: ^1.2.7 analyzer: ^5.4.0 wyatt_component_copy_with_extension: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_extension + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 dev_dependencies: test: ^1.21.0 -- 2.47.2 From afbb911a0fc70552b13d67e61e43224d3b218101 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 22:53:51 +0200 Subject: [PATCH 266/320] docs(ui_components): add some documentation + readme --- packages/wyatt_ui_components/README.md | 63 ++++++++++--------- .../wyatt_ui_components/analysis_options.yaml | 16 ----- .../lib/src/core/enums/status_state.dart | 1 + .../extensions/build_context_extensions.dart | 8 +++ .../lib/src/core/mixins/copy_with_mixin.dart | 3 + .../lib/src/core/utils/multi_color.dart | 16 +++++ .../lib/src/core/utils/text_wrapper.dart | 4 ++ .../lib/src/core/utils/theme_helper.dart | 1 - .../lib/src/domain/entities/component.dart | 3 + .../lib/src/domain/entities/theme_style.dart | 4 ++ .../lib/src/features/component_theme.dart | 17 +++++ .../src/features/component_theme_data.dart | 3 + .../lib/wyatt_ui_components.dart | 2 +- packages/wyatt_ui_components/pubspec.yaml | 14 ++--- 14 files changed, 101 insertions(+), 54 deletions(-) diff --git a/packages/wyatt_ui_components/README.md b/packages/wyatt_ui_components/README.md index 4c2d773d..5fedb940 100644 --- a/packages/wyatt_ui_components/README.md +++ b/packages/wyatt_ui_components/README.md @@ -7,7 +7,7 @@ * the Free Software Foundation, either version 3 of the License, or * any later version. - * This program is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -16,48 +16,35 @@ * along with this program. If not, see . --> -# Flutter - Wyatt Ui Components +# Wyatt UI Components

    - - Style: Wyatt Analysis - + Style: Wyatt Analysis SDK: Flutter

    -Wyatt Ui Components for Flutter. +Wyatt UI Components for Flutter. This package defines all the components used in Wyatt Studio with their set of properties. But there is no implementation of the components. You have to create your own or check out [Wyatt UI Kit](https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_kit) package. ## Usage ### Configuration -First create all your custom components in `core/design_system/components/`folder. For exemple : +First create all your custom components in `domain/entities` folder. For exemple : -├── design_system -│ ├── components +``` +├── domain +│ ├── entities │ │ ├── custom_app_bar.dart │ │ ├── custom_bottom_navigation_bar.dart │ │ └── ... │ └── ... └── ... - -You have to override `confgure` method. - -Then create AppComponentTheme class in `core/design_system/` folder and add all your components. For Example : - -```dart -class AppThemeComponent { - static ComponentThemeData get components => ComponentThemeData.raw( - appBar: const CustomAppBar(), - bottomNavigationBar: CustomBottomNavigationBar( - onTap: (context, index) { - print('$index'); - }, - ), - ); -} ``` +> Run `flutter pub run build_runner build` to generate your components. + +Then, add your components to `ComponentThemeData` class. + ### Provider In you main file, before calling router, call `ComponentTheme` widget and give your app as child. For example : @@ -72,7 +59,7 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) => ComponentTheme( - themDataWidget: AppThemeComponent.components, + componentThemeWidget: AppThemeComponent.components, child: MaterialApp( title: 'Wyatt Ui Layout Example', theme: ThemeData( @@ -102,12 +89,32 @@ For example : ) ``` -If you need specific settings, or pass parameters to your component, call `configure` method. It will use default paramters you've passed in your app comppnent theme file, and update the parameter you need to change. For example : +If you need specific settings, or pass parameters to your component, call `copyWith.call` method. ```dart @override Widget build(BuildContext context) => Scaffold( - appBar: context.components.appBar.configure({title:'New Title !}), + appBar: context.components.appBar.copyWith.call({title: 'New Title !'}), body: ... ) ``` + +## Development + +> Common to this, and Wyatt UI Kit packages. + +Add a new component : + +**Wyatt UI Components side** + + 1. Create a new file in `lib/src/domain/entities` folder. + 2. Add your component class. + 3. Add your component class to `ComponentThemeData` abstract class. + 4. Run `flutter pub run build_runner build` to generate your component proxy properties. + +**Wyatt UI Kit side** + 1. Create a new file in `lib/src/components` folder. + 2. Add your component class, styles, (and logic if needed) + 3. Run `flutter pub run build_runner build` to generate your component copy with method. + 4. Add a theme extension to your component class in `lib/src/domain/` + 5. Add your component class `wyattComponentThemeData` static property in `lib/src/features/wyatt_component_theme_data.dart` diff --git a/packages/wyatt_ui_components/analysis_options.yaml b/packages/wyatt_ui_components/analysis_options.yaml index 90d6bd51..8c9daa4e 100644 --- a/packages/wyatt_ui_components/analysis_options.yaml +++ b/packages/wyatt_ui_components/analysis_options.yaml @@ -1,17 +1 @@ -# 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 . - include: package:wyatt_analysis/analysis_options.flutter.yaml diff --git a/packages/wyatt_ui_components/lib/src/core/enums/status_state.dart b/packages/wyatt_ui_components/lib/src/core/enums/status_state.dart index 878899f6..9add284a 100644 --- a/packages/wyatt_ui_components/lib/src/core/enums/status_state.dart +++ b/packages/wyatt_ui_components/lib/src/core/enums/status_state.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Defines status states enum StatusState { initial, success, diff --git a/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart b/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart index be5e6045..b00fdb3f 100644 --- a/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart +++ b/packages/wyatt_ui_components/lib/src/core/extensions/build_context_extensions.dart @@ -18,5 +18,13 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/src/features/features.dart'; extension ThemeComponentBuildContext on BuildContext { + /// Returns the [ComponentThemeData] of the current [BuildContext]. + /// + /// Throws an [AssertionError] if the current [BuildContext] does not contain + /// a [ComponentTheme]. ComponentThemeData get components => ComponentTheme.of(this); + + /// Returns the [ComponentThemeData] of the current [BuildContext] if it + /// exists. + ComponentThemeData? get maybeComponents => ComponentTheme.maybeOf(this); } diff --git a/packages/wyatt_ui_components/lib/src/core/mixins/copy_with_mixin.dart b/packages/wyatt_ui_components/lib/src/core/mixins/copy_with_mixin.dart index cd7bd5a9..728622c5 100644 --- a/packages/wyatt_ui_components/lib/src/core/mixins/copy_with_mixin.dart +++ b/packages/wyatt_ui_components/lib/src/core/mixins/copy_with_mixin.dart @@ -15,5 +15,8 @@ // along with this program. If not, see . mixin CopyWithMixin { + /// Returns a copy of the current object with the specified properties + /// overridden by the specified values. + /// You have to call the `.call()` method on the returned object. Proxy get copyWith; } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart index d64ac9a3..1a3aa44e 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/multi_color.dart @@ -16,13 +16,20 @@ import 'package:flutter/widgets.dart'; +/// {@template multi_color} +/// A class that can hold a [Color] or a [List] of [Color]s. +/// {@endtemplate} class MultiColor { + /// {@macro multi_color} const MultiColor(this._colors) : _color = null; + + /// {@macro multi_color} const MultiColor.single(this._color) : _colors = null; final List? _colors; final Color? _color; + /// Returns a [Color] or the first [Color] in the [List] of [Color]s. Color get color => _color != null ? _color! : _colors?.isNotEmpty ?? false @@ -33,11 +40,20 @@ class MultiColor { message: '_color is not defined or _colors is empty.', ); + /// Returns the [List] of [Color]s. + /// If the [List] is empty or if it is a single [MultiColor], it will return + /// an empty [List]. List get colors => _colors ?? []; + /// Returns `true` if the [MultiColor] is a [List] of [Color]s that is not + /// empty with a length greater than 1. bool get isGradient => (_colors?.length ?? 0) > 1; + + /// Returns `true` if the [MultiColor] is a [Color] or a [List] of [Color]s + /// that is not empty with a length greater than 1. bool get isColor => _color != null || isGradient; + /// Lerps between two [MultiColor]s. static MultiColor? lerp(MultiColor? a, MultiColor? b, double t) { if (a == null && b == null) { return null; diff --git a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart index ba23b89b..2c6e248e 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart @@ -17,9 +17,12 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; +/// {@template text_wrapper} /// Wraps [String] and [TextStyle] into one object that can be /// a [Text] or a [RichText]. +/// {@endtemplate} class TextWrapper { + /// {@macro text_wrapper} const TextWrapper( this.data, { this.style, @@ -32,6 +35,7 @@ class TextWrapper { this.selectionColor, }); + /// Creates a [TextWrapper] from a [Text] widget. const TextWrapper.text(this.data) : style = null, gradientColors = null, diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart index abefa83f..97fe94a0 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart @@ -28,7 +28,6 @@ abstract class ThemeHelper { /// determines if a style element is valid. /// [combine]: A function that combines two [P] type objects to create /// a new object. - static T? getThemeElement( List? styles, { required T? Function(P?)? transform, diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart index e7f984f1..9cd334b5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/component.dart @@ -17,6 +17,9 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/src/core/utils/theme_resolver.dart'; +/// {@template component} +/// Base class for all components. +/// {@endtemplate} abstract class Component extends StatelessWidget { const Component({this.themeResolver, super.key}); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart index a0a69ffb..89db71e2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/theme_style.dart @@ -14,7 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// {@template theme_style} +/// Base class for all theme styles. +/// {@endtemplate} abstract class ThemeStyle { + /// {@macro theme_style} const ThemeStyle(); /// Merges non-null `other` attributes in `this` and returns a copy. diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme.dart b/packages/wyatt_ui_components/lib/src/features/component_theme.dart index 0ed44487..c7dc79d3 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme.dart @@ -17,7 +17,12 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/src/features/features.dart'; +/// {@template component_theme} +/// A [ComponentTheme] widget that provides a [ComponentThemeData] to its +/// descendants. +/// {@endtemplate} class ComponentTheme extends StatelessWidget { + /// {@macro component_theme} const ComponentTheme({ required this.child, required this.componentThemeWidget, @@ -26,6 +31,9 @@ class ComponentTheme extends StatelessWidget { final Widget child; final ComponentThemeData componentThemeWidget; + /// Returns the [ComponentThemeData] of the closest ancestor [ComponentTheme] + /// widget. If there is no ancestor [ComponentTheme] widget, it throws an + /// assertion error. static ComponentThemeData of(BuildContext context) { final _InheritedComponentTheme? inheritedThemeComponent = context.dependOnInheritedWidgetOfExactType<_InheritedComponentTheme>(); @@ -37,6 +45,15 @@ class ComponentTheme extends StatelessWidget { return inheritedThemeComponent!.themeWidget.componentThemeWidget; } + /// Returns the [ComponentThemeData] of the closest ancestor [ComponentTheme] + /// widget. If there is no ancestor [ComponentTheme] widget, it returns null. + static ComponentThemeData? maybeOf(BuildContext context) { + final _InheritedComponentTheme? inheritedThemeComponent = + context.dependOnInheritedWidgetOfExactType<_InheritedComponentTheme>(); + + return inheritedThemeComponent?.themeWidget.componentThemeWidget; + } + @override Widget build(BuildContext context) => _InheritedComponentTheme( this, diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index aaff531d..c08e2502 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -18,6 +18,9 @@ import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:wyatt_ui_components/src/domain/entities/entities.dart'; part 'component_theme_data.g.dart'; +/// {@template component_theme_data} +/// A class that holds all the components that are used in the app. +/// {@endtemplate} @CopyWith() class ComponentThemeData { factory ComponentThemeData({ diff --git a/packages/wyatt_ui_components/lib/wyatt_ui_components.dart b/packages/wyatt_ui_components/lib/wyatt_ui_components.dart index 3f16c3b1..e8cce321 100644 --- a/packages/wyatt_ui_components/lib/wyatt_ui_components.dart +++ b/packages/wyatt_ui_components/lib/wyatt_ui_components.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -/// Wyatt Ui Components +/// Wyatt UI Components library wyatt_ui_components; export 'src/src.dart'; diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 81f439f9..eecf6f81 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -1,9 +1,9 @@ name: wyatt_ui_components -description: Primary ui components +description: Components that can be implemented in any application with copy constructor. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_components version: 0.0.1 -publish_to: none +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: sdk: ">=2.17.0 <3.0.0" @@ -12,9 +12,8 @@ dependencies: flutter: { sdk: flutter } copy_with_extension: ^5.0.0 wyatt_component_copy_with_extension: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_extension + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 dev_dependencies: flutter_test: { sdk: flutter } @@ -25,6 +24,5 @@ dev_dependencies: build_runner: ^2.3.3 copy_with_extension_gen: ^5.0.0 wyatt_component_copy_with_gen: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_gen + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 -- 2.47.2 From 56de994e67417507f7706f6a760272842ad41d9d Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 22:54:08 +0200 Subject: [PATCH 267/320] docs(ui_kit): add some documentation + readme --- packages/wyatt_ui_kit/README.md | 80 ++++++++++++++++-------------- packages/wyatt_ui_kit/pubspec.yaml | 21 +++----- 2 files changed, 50 insertions(+), 51 deletions(-) diff --git a/packages/wyatt_ui_kit/README.md b/packages/wyatt_ui_kit/README.md index 8ee9ac74..909c37ea 100644 --- a/packages/wyatt_ui_kit/README.md +++ b/packages/wyatt_ui_kit/README.md @@ -16,54 +16,60 @@ * along with this program. If not, see . --> -# Flutter - Wyatt Ui Kit +# Wyatt UI Kit

    Style: Wyatt Analysis SDK: Flutter

    -UIKit and Design System used in Wyatt Studio. - -## Theme negotiation - -When building a component, most of its attributes can be 'null'. -The `build()` method then starts to negotiate the theme in the tree to obtain the most consistent style possible. - -Explanation: - -When you build a component `Button({double? radius})`. -You have several possibilities: -1) Pass the "radius" into the constructor, `Button(radius: 12)`. -2) Set up a theme extension `ButtonThemeExtension(radius: 15)`. -3) Let `wyatt_ui_kit` "negotiate" and try to find a suitable style in the flutter theme. - -If this negotiation phase fails, then: -- If the value is mandatory: a hardcoded value in "wyatt_ui_kit" is chosen. -- If not, the style is simply not applied. - -If, for example, you don't use option 1, then the radius will be 15. If you use neither option 1 nor option 2 then the radius will be 4 as this is the [official Material Design value](https://m2.material.io/design/shape/about-shape.html#shape-customization-tool). - -## Features - -TODO: List what your package can do. Maybe include images, gifs, or videos. - -## Getting started - -TODO: List prerequisites and provide or point to information on how to -start using the package. +UIKit and Design System used in Wyatt Studio. This is a implementation of the components defined in [Wyatt UI Components](https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_components) package. ## Usage -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. +The UIKit provides `WyattComponentThemeData` class that contains all the components used in Wyatt Studio. You can use it in your app by calling `WyattComponentTheme` widget and give your app as child. For example : + +This component theme is to be used with Wyatt UI Components. It provides a default theme for all the components defined in Wyatt UI Components package. ```dart -const like = 'sample'; +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) => ComponentTheme( + // It is here that you can override the default theme ! + componentThemeWidget: WyattComponentThemeData(), + child: MaterialApp( + title: 'Wyatt Ui Layout Example', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const .., + ), + ); +} ``` -## Additional information +## Development -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. +> Common to this, and Wyatt UI Components packages. + +Add a new component : + +**Wyatt UI Components side** + + 1. Create a new file in `lib/src/domain/entities` folder. + 2. Add your component class. + 3. Add your component class to `ComponentThemeData` abstract class. + 4. Run `flutter pub run build_runner build` to generate your component proxy properties. + +**Wyatt UI Kit side** + 1. Create a new file in `lib/src/components` folder. + 2. Add your component class, styles, (and logic if needed) + 3. Run `flutter pub run build_runner build` to generate your component copy with method. + 4. Add a theme extension to your component class in `lib/src/domain/` + 5. Add your component class `wyattComponentThemeData` static property in `lib/src/features/wyatt_component_theme_data.dart` diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index d34b1dbc..68082704 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -3,7 +3,7 @@ description: UIKit and Design System used in Wyatt Studio. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_kit version: 1.0.0 -publish_to: none +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: sdk: ">=2.19.0 <3.0.0" @@ -22,13 +22,11 @@ dependencies: name: wyatt_bloc_helper version: 2.0.0 wyatt_component_copy_with_extension: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_extension + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 wyatt_ui_components: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_ui_components + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.0.1 dev_dependencies: build_runner: ^2.3.3 @@ -37,10 +35,5 @@ dev_dependencies: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.1 wyatt_component_copy_with_gen: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_gen - -# The following section is specific to Flutter. -flutter: - uses-material-design: true + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 -- 2.47.2 From 79c5aa7c7682335f34711880c89b3f57e9a8cdf0 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 22:54:26 +0200 Subject: [PATCH 268/320] docs(ui_layout): add some documentation + readme --- packages/wyatt_ui_layout/README.md | 31 +++++-------------- .../wyatt_ui_layout/analysis_options.yaml | 17 ---------- .../layouts/content_layouts/grid_layout.dart | 10 ++++++ .../lib/src/presentation/layouts/layout.dart | 23 +++++++++----- .../bottom_navigation_bar_layout.dart | 25 ++++++--------- .../structural_layouts/frame_layout.dart | 18 ++++++----- .../top_app_bar_layout.dart | 21 ++++++------- .../wyatt_ui_layout/lib/wyatt_ui_layout.dart | 2 +- packages/wyatt_ui_layout/pubspec.yaml | 19 +++++------- 9 files changed, 69 insertions(+), 97 deletions(-) diff --git a/packages/wyatt_ui_layout/README.md b/packages/wyatt_ui_layout/README.md index e8d1656d..af77bf5f 100644 --- a/packages/wyatt_ui_layout/README.md +++ b/packages/wyatt_ui_layout/README.md @@ -7,7 +7,7 @@ * the Free Software Foundation, either version 3 of the License, or * any later version. - * This program is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -16,12 +16,10 @@ * along with this program. If not, see . --> -# Flutter - Wyatt Ui Layout +# Wyatt UI Layout

    - - Style: Wyatt Analysis - + Style: Wyatt Analysis SDK: Flutter

    @@ -31,19 +29,19 @@ Wyatt UI Layout is a Flutter package that provides pre-built layouts to make the Structural layouts are used to structure the GUI, and there are currently four layouts provided by this package: -- #### TopAppBarLayout +* #### TopAppBarLayout This layout is used to create a GUI with a classic app bar and a body. -- #### TopNavigationBarLayout +* #### TopNavigationBarLayout This layout is used to create a GUI with an app bar that includes navigation options and a body. -- #### BottomNavigationBarLayout +* #### BottomNavigationBarLayout This layout is used to create a GUI with a bottom bar that includes navigation options and a body. -- #### FrameLayout +* #### FrameLayout This layout is used to create a GUI that includes a classic app bar, a bottom navigation bar, and a body. @@ -51,19 +49,6 @@ This layout is used to create a GUI that includes a classic app bar, a bottom na Content layouts are used to display dynamic data and content within the GUI. Currently, there is only one content layout provided by this package: -- #### GridLayout +* #### GridLayout This layout is used to display data and content in a grid layout. - -### Installation - -To use Wyatt UI Layout in your Flutter project, add the following dependency to your pubspec.yaml file: - -```yaml -wyatt_ui_layout: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_ui_layout -``` - -That's it! You're now ready to use Wyatt UI Layout in your project. diff --git a/packages/wyatt_ui_layout/analysis_options.yaml b/packages/wyatt_ui_layout/analysis_options.yaml index f8bb612a..e66159fc 100644 --- a/packages/wyatt_ui_layout/analysis_options.yaml +++ b/packages/wyatt_ui_layout/analysis_options.yaml @@ -1,19 +1,2 @@ -# 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 . - - include: package:wyatt_analysis/analysis_options.flutter.yaml diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart index c06014c1..04c9a7a0 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/content_layouts/grid_layout.dart @@ -18,7 +18,12 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; +/// {@template grid_layout} +/// A concrete implementation of the [ContentLayout] abstract class for a layout +/// which defines a layout structure with a grid layout. +/// {@endtemplate} class GridLayout extends ContentLayout { + /// {@macro grid_layout} const GridLayout({ required this.children, this.verticalGap = 30, @@ -26,8 +31,13 @@ class GridLayout extends ContentLayout { super.key, }); + /// The children of the layout. final List children; + + /// The vertical gap between the children. final double verticalGap; + + /// The horizontal gap between the children. final double horizontalGap; @override diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart index 41f839a8..28068913 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/layout.dart @@ -1,4 +1,4 @@ -// Copyright (C) 2022 WYATT GROUP +// Copyright (C) 2023 WYATT GROUP // Please see the AUTHORS file for details. // // This program is free software: you can redistribute it and/or modify @@ -14,28 +14,35 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -/// This file contains the [Layout] abstract class, which provides a base -/// for creating custom layout widgets in Flutter. -import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +/// {@template layout} /// An abstract class that provides a base for creating custom layout widgets. /// /// This class can be used as a base for creating custom layout widgets in /// Flutter. It extends the [StatelessWidget] class and adds support for /// providing a custom key. Custom layout widgets that extend this class should /// override the [build] method to define the layout. +/// {@endtemplate} abstract class Layout extends StatelessWidget { - /// Creates a new [Layout] instance. - /// - /// [key] is an optional parameter that can be used to provide a custom key - /// for the widget. + /// {@macro layout} const Layout({super.key}); } +/// {@template structural_layout} +/// An abstract class that provides a base for creating custom structural layout +/// widgets. +/// {@endtemplate} abstract class StructuralLayout extends Layout { + /// {@macro structural_layout} const StructuralLayout({super.key}); } +/// {@template content_layout} +/// An abstract class that provides a base for creating custom content layout +/// widgets. +/// {@endtemplate} abstract class ContentLayout extends Layout { + /// {@macro content_layout} const ContentLayout({super.key}); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart index 4ef676de..d8755e92 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart @@ -14,34 +14,27 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -/// This file contains the concrete class [BottomNavigationBarLayout]. -/// -/// The [BottomNavigationBarLayout] class is a concrete implementation of the -/// [Layout] abstract class, which defines a layout structure with a bottom -/// navigation bar component. -/// -/// [BottomNavigationBarLayout] includes an optional -/// [BottomNavigationBarLayout.custom] -/// function for customizing the bottom navigation bar component. import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; -/// A concrete implementation of the [Layout] abstract class for a layout with -/// a bottom navigation bar component. +/// {@template bottom_navigation_bar_layout} +/// A concrete implementation of the [Layout] abstract class for a layout which +/// defines a layout structure with a bottom navigation bar component. +/// {@endtemplate} class BottomNavigationBarLayout extends StructuralLayout { - /// Creates a [BottomNavigationBarLayout] instance. - /// - /// [body] represents the main content of the layout. - /// [custom] is an optional function that can be used to customize - /// the bottom navigation bar component. + /// {@macro bottom_navigation_bar_layout} const BottomNavigationBarLayout({ required this.body, this.custom, super.key, }); + /// The main content of the layout. final Widget? body; + + /// An optional function that can be used to customize the bottom navigation + /// bar component. final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? custom; diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart index 79e28793..144ef867 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart @@ -18,6 +18,7 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; +/// {@template frame_layout} /// A layout that contains a top app bar, a body and a bottom navigation bar. /// /// This layout consists of a [TopAppBarComponent] at the top of the screen, @@ -25,15 +26,9 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; /// You can customize the app bar and the bottom navigation bar by passing /// a [customAppBar] and a [customBottomNavBar] functions that take /// the corresponding components and return the customized ones. +/// {@endtemplate} class FrameLayout extends StructuralLayout { - /// Creates a [FrameLayout] instance. - /// - /// [body] represents the main content of the layout. - /// [customAppBar] is an optional function that can be used to customize - /// the top app bar component. - /// [customBottomNavBar] is an optional function that can be used to customize - /// the bottom navigation bar component. - /// [height] represents the height of the top app bar. + /// {@macro frame_layout} const FrameLayout({ required this.body, this.customAppBar, @@ -42,10 +37,17 @@ class FrameLayout extends StructuralLayout { super.key, }); + /// An optional function that can be used to customize the top app bar final TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar; + + /// An optional function that can be used to customize the bottom navigation final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? customBottomNavBar; + + /// The main content of the layout. final Widget body; + + /// The height of the top app bar. final double height; @override diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart index e69054bb..70f61b1e 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart @@ -14,16 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -/// This file contains the abstract class [TopBarLayout] and two concrete -/// classes [TopAppBarLayout] and [TopNavigationBarLayout]. -/// The [TopBarLayout] abstract class defines a layout structure with a top bar. -/// The [TopAppBarLayout] and [TopNavigationBarLayout] classes are concrete -/// implementations of the [TopBarLayout] class. - import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; +/// {@template top_bar_layout} /// An abstract class for creating layouts with a top bar component. /// /// This class provides a base for creating layouts that include a top bar @@ -34,14 +29,10 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; /// given [BuildContext]. /// /// [T] represents the type of the top bar component. +/// {@endtemplate} abstract class TopBarLayout extends StructuralLayout { - /// Creates a [TopBarLayout] instance. - /// - /// [body] represents the main content of the layout. - /// [custom] is an optional function that can be used to customize - /// the top bar component. - /// [height] represents the height of the top bar. + /// {@macro top_bar_layout} const TopBarLayout({ required this.body, this.custom, @@ -49,9 +40,15 @@ abstract class TopBarLayout super.key, }); + /// The main content of the layout. final Widget body; + /// An optional function that can be used to customize the top bar component. + /// The function takes the top bar component as an argument and returns + /// a customized top bar component. final T? Function(T?)? custom; + + /// The height of the top bar. final double height; /// Returns the top bar component for the given [BuildContext]. diff --git a/packages/wyatt_ui_layout/lib/wyatt_ui_layout.dart b/packages/wyatt_ui_layout/lib/wyatt_ui_layout.dart index 5ab915d4..ac5430dc 100644 --- a/packages/wyatt_ui_layout/lib/wyatt_ui_layout.dart +++ b/packages/wyatt_ui_layout/lib/wyatt_ui_layout.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -/// Wyatt Ui Layout +/// Wyatt UI Layout library wyatt_ui_layout; export 'src/src.dart'; diff --git a/packages/wyatt_ui_layout/pubspec.yaml b/packages/wyatt_ui_layout/pubspec.yaml index 7c8703ed..aaaf1130 100644 --- a/packages/wyatt_ui_layout/pubspec.yaml +++ b/packages/wyatt_ui_layout/pubspec.yaml @@ -3,27 +3,22 @@ description: Main layouts to help you build your application views. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_layout version: 0.0.1 -publish_to: "none" +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: sdk: ">=2.17.0 <3.0.0" dependencies: - flutter: - sdk: flutter + flutter: { sdk: flutter } gap: ^2.0.1 wyatt_ui_components: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_ui_components + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.0.1 dev_dependencies: - flutter_test: - sdk: flutter + flutter_test: { sdk: flutter } wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 - path: packages/wyatt_analysis + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.1 -- 2.47.2 From c3620e61c16f973c64dcc0f3f5d8d228e89acf76 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 23:13:11 +0200 Subject: [PATCH 269/320] refactor(bloc_layout): remove cross package export --- packages/wyatt_analysis/.pubignore | 3 +- packages/wyatt_authentication_bloc/.pubignore | 3 +- packages/wyatt_bloc_layout/README.md | 73 ++++++++----------- .../wyatt_bloc_layout/analysis_options.yaml | 16 ---- .../example/lib/bloc/example_cubit.dart | 13 ++-- .../lib/components/custom_app_bar.dart | 2 +- .../lib/components/custom_bottom_bar.dart | 2 +- .../lib/components/custom_error_widget.dart | 2 +- .../lib/components/custom_loading_widget.dart | 2 +- .../lib/components/theme_components.dart | 2 +- .../wyatt_bloc_layout/example/lib/main.dart | 3 + .../wyatt_bloc_layout/example/pubspec.yaml | 18 +++++ .../lib/src/core/mixins/gird_view_mixin.dart | 3 +- ...ar_grid_layout_cubit_screen_crud_list.dart | 1 + ...om_navigation_bar_layout_cubit_screen.dart | 2 + ...vigation_bar_layout_cubit_screen_crud.dart | 1 + ...ion_bar_layout_cubit_screen_crud_item.dart | 1 + ...ion_bar_layout_cubit_screen_crud_list.dart | 1 + .../src/presentation/cubit_screen_base.dart | 2 +- .../presentation/cubit_screen_crud_base.dart | 1 + .../cubit_screen_crud_item_base.dart | 1 + .../cubit_screen_crud_list_base.dart | 1 + ...me_grid_layout_cubit_screen_crud_list.dart | 1 + .../frame_layout_cubit_screen.dart | 2 + .../frame_layout_cubit_screen_crud.dart | 1 + .../frame_layout_cubit_screen_crud_item.dart | 1 + .../frame_layout_cubit_screen_crud_list.dart | 1 + .../grid_cubit_screen_crud_list_base.dart | 1 + ...ar_grid_layout_cubit_screen_crud_list.dart | 1 + .../top_app_bar_layout_cubit_screen.dart | 2 + .../top_app_bar_layout_cubit_screen_crud.dart | 1 + ...app_bar_layout_cubit_screen_crud_item.dart | 1 + ...app_bar_layout_cubit_screen_crud_list.dart | 1 + ...ar_grid_layout_cubit_screen_crud_list.dart | 1 + ...op_navigation_bar_layout_cubit_screen.dart | 2 + ...vigation_bar_layout_cubit_screen_crud.dart | 1 + ...ion_bar_layout_cubit_screen_crud_item.dart | 1 + ...ion_bar_layout_cubit_screen_crud_list.dart | 1 + packages/wyatt_bloc_layout/lib/src/src.dart | 6 -- packages/wyatt_bloc_layout/pubspec.yaml | 36 ++++----- packages/wyatt_crud_bloc/.pubignore | 3 +- packages/wyatt_form_bloc/.pubignore | 3 +- 42 files changed, 113 insertions(+), 107 deletions(-) mode change 100644 => 120000 packages/wyatt_analysis/.pubignore mode change 100644 => 120000 packages/wyatt_authentication_bloc/.pubignore mode change 100644 => 120000 packages/wyatt_crud_bloc/.pubignore mode change 100644 => 120000 packages/wyatt_form_bloc/.pubignore diff --git a/packages/wyatt_analysis/.pubignore b/packages/wyatt_analysis/.pubignore deleted file mode 100644 index e2355bec..00000000 --- a/packages/wyatt_analysis/.pubignore +++ /dev/null @@ -1,2 +0,0 @@ -new_version.sh -.latest_version \ No newline at end of file diff --git a/packages/wyatt_analysis/.pubignore b/packages/wyatt_analysis/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_analysis/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/.pubignore b/packages/wyatt_authentication_bloc/.pubignore deleted file mode 100644 index 11610c5a..00000000 --- a/packages/wyatt_authentication_bloc/.pubignore +++ /dev/null @@ -1,2 +0,0 @@ -firebase_options.dart -.vscode \ No newline at end of file diff --git a/packages/wyatt_authentication_bloc/.pubignore b/packages/wyatt_authentication_bloc/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_authentication_bloc/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_bloc_layout/README.md b/packages/wyatt_bloc_layout/README.md index b31892df..39b4c134 100644 --- a/packages/wyatt_bloc_layout/README.md +++ b/packages/wyatt_bloc_layout/README.md @@ -7,7 +7,7 @@ * the Free Software Foundation, either version 3 of the License, or * any later version. - * This program is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -16,57 +16,46 @@ * along with this program. If not, see . --> -# Flutter - Wyatt Bloc Layout +# Wyatt Bloc Layout

    - - Style: Wyatt Analysis - + Style: Wyatt Analysis SDK: Flutter

    Bloc Layout for Flutter. -Wyatt Bloc Layout is a Flutter package that builds on the Wyatt UI Layout package and the Wyatt Bloc Helper package. It provides a way to link multiple packages in order to create intelligent layouts that combine both layout and logic. The package allows developers to use the available layouts in the Wyatt UI Layout package along with the block state logic available in the Wyatt Bloc Helper package. It also uses the Wyatt Crud Bloc package to make it easier to implement CRUD logic. +Wyatt Bloc Layout is a Flutter package that is built on the Wyatt UI Layout package and the Wyatt Bloc Helper package. + +It provides a way to link multiple packages in order to create intelligent layouts that combine both layout and logic. The package allows developers to use the available layouts in the Wyatt UI Layout package along with the block state logic available in the Wyatt Bloc Helper package. + +It also uses the Wyatt Crud Bloc package to make it easier to implement CRUD logic. ### Features -- Allows developers to use available layouts from Wyatt UI Layout package. -- Links with the Wyatt Bloc Helper package to combine layout and block state logic. -- Uses the Wyatt Crud Bloc package to easily implement CRUD logic. +* Allows developers to use available layouts from Wyatt UI Layout package. +* Links with the Wyatt Bloc Helper package to combine layout and block state logic. +* Uses the Wyatt Crud Bloc package to easily implement CRUD logic. #### Available bloc layouts -- BottomNavigationBarGridLayoutCubitScreenCrudList -- BottomNavigationBarLayoutCubitScreen -- BottomNavigationBarLayoutCubitScreenCrud -- BottomNavigationBarLayoutCubitScreenCrudItem -- BottomNavigationBarLayoutCubitScreenCrudList -- FrameGridLayoutCubitScreenCrudList -- FrameLayoutCubitScreen -- FrameLayoutCubitScreenCrud -- FrameLayoutCubitScreenCrudItem -- FrameLayoutCubitScreenCrudList -- TopAppBarGridLayoutCubitScreenCrudList -- TopAppBarLayoutCubitScreen -- TopAppBarLayoutCubitScreenCrud -- TopAppBarLayoutCubitScreenCrudItem -- TopAppBarLayoutCubitScreenCrudList -- TopNavigationBarGridLayoutCubitScreenCrudList -- TopNavigationBarLayoutCubitScreen -- TopNavigationBarLayoutCubitScreenCrud -- TopNavigationBarLayoutCubitScreenCrudItem -- TopNavigationBarLayoutCubitScreenCrudList - -### Installation - -To use Wyatt Bloc Layout in your Flutter project, add the following dependency to your pubspec.yaml file: - -```yaml -wyatt_bloc_layout: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_bloc_layout -``` - -Then, run flutter pub get to download the package. +* BottomNavigationBarGridLayoutCubitScreenCrudList +* BottomNavigationBarLayoutCubitScreen +* BottomNavigationBarLayoutCubitScreenCrud +* BottomNavigationBarLayoutCubitScreenCrudItem +* BottomNavigationBarLayoutCubitScreenCrudList +* FrameGridLayoutCubitScreenCrudList +* FrameLayoutCubitScreen +* FrameLayoutCubitScreenCrud +* FrameLayoutCubitScreenCrudItem +* FrameLayoutCubitScreenCrudList +* TopAppBarGridLayoutCubitScreenCrudList +* TopAppBarLayoutCubitScreen +* TopAppBarLayoutCubitScreenCrud +* TopAppBarLayoutCubitScreenCrudItem +* TopAppBarLayoutCubitScreenCrudList +* TopNavigationBarGridLayoutCubitScreenCrudList +* TopNavigationBarLayoutCubitScreen +* TopNavigationBarLayoutCubitScreenCrud +* TopNavigationBarLayoutCubitScreenCrudItem +* TopNavigationBarLayoutCubitScreenCrudList diff --git a/packages/wyatt_bloc_layout/analysis_options.yaml b/packages/wyatt_bloc_layout/analysis_options.yaml index 90d6bd51..8c9daa4e 100644 --- a/packages/wyatt_bloc_layout/analysis_options.yaml +++ b/packages/wyatt_bloc_layout/analysis_options.yaml @@ -1,17 +1 @@ -# 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 . - include: package:wyatt_analysis/analysis_options.flutter.yaml diff --git a/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart index 80c20d1a..dd2275d4 100644 --- a/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart +++ b/packages/wyatt_bloc_layout/example/lib/bloc/example_cubit.dart @@ -1,27 +1,28 @@ import 'dart:async'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; class ExampleCubit extends Cubit { - ExampleCubit() : super(CrudInitial()); + ExampleCubit() : super(const CrudInitial()); FutureOr run() async { while (true) { await Future.delayed(const Duration(seconds: 1)); - emit(CrudLoading()); + emit(const CrudLoading()); await Future.delayed(const Duration(seconds: 1)); emit(const CrudError('Cubit Error')); await Future.delayed(const Duration(seconds: 1)); emit(const CrudLoaded('DATA LOADED')); await Future.delayed(const Duration(seconds: 1)); - emit(CrudInitial()); + emit(const CrudInitial()); } } FutureOr runList() async { while (true) { await Future.delayed(const Duration(seconds: 1)); - emit(CrudLoading()); + emit(const CrudLoading()); await Future.delayed(const Duration(seconds: 1)); emit(const CrudError('Cubit Error')); await Future.delayed(const Duration(seconds: 1)); @@ -34,7 +35,7 @@ class ExampleCubit extends Cubit { ]), ); await Future.delayed(const Duration(seconds: 1)); - emit(CrudInitial()); + emit(const CrudInitial()); } } } diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart index aff474a8..1ca3cab4 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_app_bar.g.dart'; diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart index 1b094adf..34417c03 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_bottom_bar.g.dart'; diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart index 77364998..5d9cfee7 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_error_widget.g.dart'; diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart index 94517557..fe53a631 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_loading_widget.g.dart'; diff --git a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart index b0b1f404..afc4203d 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart @@ -2,7 +2,7 @@ import 'package:bloc_layout_example/components/custom_app_bar.dart'; import 'package:bloc_layout_example/components/custom_bottom_bar.dart'; import 'package:bloc_layout_example/components/custom_error_widget.dart'; import 'package:bloc_layout_example/components/custom_loading_widget.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; class AppThemeComponent { static ComponentThemeData get components => ComponentThemeData.raw( diff --git a/packages/wyatt_bloc_layout/example/lib/main.dart b/packages/wyatt_bloc_layout/example/lib/main.dart index 4542215e..2856aec7 100644 --- a/packages/wyatt_bloc_layout/example/lib/main.dart +++ b/packages/wyatt_bloc_layout/example/lib/main.dart @@ -17,7 +17,10 @@ import 'package:bloc_layout_example/bloc/example_cubit.dart'; import 'package:bloc_layout_example/components/theme_components.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; void main() { runApp(const MyApp()); diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml index 50944ac6..8d19be75 100644 --- a/packages/wyatt_bloc_layout/example/pubspec.yaml +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -30,9 +30,27 @@ dependencies: flutter: sdk: flutter + flutter_bloc: ^8.1.2 + wyatt_bloc_layout: path: "../" + wyatt_bloc_helper: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.0.0 + + wyatt_ui_layout: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.0.1 + + wyatt_crud_bloc: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.1.0+2 + + wyatt_ui_components: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.0.1 + wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git diff --git a/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart b/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart index 696ae8e9..636048e2 100644 --- a/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart +++ b/packages/wyatt_bloc_layout/lib/src/core/mixins/gird_view_mixin.dart @@ -15,7 +15,8 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; +import 'package:wyatt_ui_layout/wyatt_ui_layout.dart'; mixin GridLayoutMixin { Widget gridChild(BuildContext context, SuccessType? successType); diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart index 099d6b79..952a2c81 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_grid_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class BottomNavigationBarGridLayoutCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart index c729a0f6..0a02294f 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen.dart @@ -18,6 +18,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; +import 'package:wyatt_ui_layout/wyatt_ui_layout.dart'; abstract class BottomNavigationBarLayoutCubitScreen< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart index 16cc1abf..c1cc938d 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud.dart @@ -17,6 +17,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart index f2bbdb07..69ff4371 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_item.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrudItem< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart index cce7f2a4..7c6c5b21 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/bottom_navigation_bar_bloc_layout/bottom_navigation_bar_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class BottomNavigationBarLayoutCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_base.dart index b4848316..4dc4107a 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_base.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; -import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; abstract class CubitScreenBase, State extends Object> extends CubitScreen { diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart index a113c5ad..ad9142f8 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_base.dart @@ -17,6 +17,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class CubitScreenCrudBase, CrudSuccessState extends CrudSuccess> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart index 5e81a799..3fe2becb 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_item_base.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class CubitScreenCrudItemBase, T extends Object?> extends CubitScreenCrudBase> { diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart index d641b6b5..f886138e 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/cubit_screen_crud_list_base.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class CubitScreenCrudListBase, T extends Object?> extends CubitScreenCrudBase> { diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart index e62fea8c..e54e5c49 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class FrameLayoutGridCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart index d8631d8e..51985223 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart @@ -18,6 +18,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; +import 'package:wyatt_ui_layout/wyatt_ui_layout.dart'; abstract class FrameLayoutCubitScreen, State extends Object> extends CubitScreenBase { diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart index a498490b..62e5fc91 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart @@ -17,6 +17,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class FrameLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart index 92db37fa..80381609 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class FrameLayoutCubitScreenCrudItem< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart index 8c38994a..6bbf7a6b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class FrameLayoutCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart b/packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart index 28931c40..c95cb338 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/grid_cubit_screen_crud_list_base.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class GridCubitScreenCrudListBase< Cubit extends bloc_base.Cubit, T extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart index efc7ecdc..e20a1842 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_grid_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopAppBarGridLayoutCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart index 80479742..48fe0abe 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen.dart @@ -18,6 +18,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; +import 'package:wyatt_ui_layout/wyatt_ui_layout.dart'; abstract class TopAppBarLayoutCubitScreen, State extends Object> extends CubitScreenBase { diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart index 1de4081a..efa82d3e 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud.dart @@ -17,6 +17,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopAppBarLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart index 9e90c286..dd7e2bb1 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_item.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopAppBarLayoutCubitScreenCrudItem< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart index 9bc6047d..902ce24c 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_app_bar_bloc_layout/top_app_bar_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopAppBarLayoutCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart index 238079ba..b57d29cf 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_grid_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopNavigationBarGridLayoutCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart index 7978b76f..b1903cdc 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen.dart @@ -18,6 +18,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; +import 'package:wyatt_ui_layout/wyatt_ui_layout.dart'; abstract class TopNavigationBarLayoutCubitScreen< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart index 65bd7bff..76bd6beb 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud.dart @@ -17,6 +17,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopNavigationBarLayoutCubitScreenCrud< Cubit extends bloc_base.Cubit, diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart index 6b4c022b..112b8844 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_item.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopNavigationBarLayoutCubitScreenCrudItem< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart index 0b04c6f2..0f17b282 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/top_navigation_bar_bloc_layout/top_navigation_bar_layout_cubit_screen_crud_list.dart @@ -16,6 +16,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; abstract class TopNavigationBarLayoutCubitScreenCrudList< Cubit extends bloc_base.Cubit, SuccessType extends Object?> diff --git a/packages/wyatt_bloc_layout/lib/src/src.dart b/packages/wyatt_bloc_layout/lib/src/src.dart index 4da50dac..d35a3ae0 100644 --- a/packages/wyatt_bloc_layout/lib/src/src.dart +++ b/packages/wyatt_bloc_layout/lib/src/src.dart @@ -14,11 +14,5 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'package:flutter_bloc/flutter_bloc.dart'; -export 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; -export 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart'; -export 'package:wyatt_ui_components/wyatt_ui_components.dart'; -export 'package:wyatt_ui_layout/wyatt_ui_layout.dart'; - export 'core/core.dart'; export 'presentation/presentation.dart'; diff --git a/packages/wyatt_bloc_layout/pubspec.yaml b/packages/wyatt_bloc_layout/pubspec.yaml index 11e03807..538ebf97 100644 --- a/packages/wyatt_bloc_layout/pubspec.yaml +++ b/packages/wyatt_bloc_layout/pubspec.yaml @@ -3,43 +3,35 @@ description: Layouts based on bloc helper library repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_bloc_layout version: 0.0.1 -publish_to: "none" +publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub environment: sdk: ">=2.17.0 <3.0.0" dependencies: - flutter: - sdk: flutter - + flutter: { sdk: flutter } + flutter_bloc: ^8.1.2 wyatt_bloc_helper: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_bloc_helper + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.0.0 wyatt_ui_layout: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_ui_layout + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.0.1 wyatt_crud_bloc: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_crud_bloc + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.1.0+2 wyatt_ui_components: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_ui_components + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.0.1 dev_dependencies: - flutter_test: - sdk: flutter + flutter_test: { sdk: flutter } wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 - path: packages/wyatt_analysis + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.1 diff --git a/packages/wyatt_crud_bloc/.pubignore b/packages/wyatt_crud_bloc/.pubignore deleted file mode 100644 index 4ad4d99b..00000000 --- a/packages/wyatt_crud_bloc/.pubignore +++ /dev/null @@ -1,2 +0,0 @@ -google-services.json -.vscode \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/.pubignore b/packages/wyatt_crud_bloc/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_crud_bloc/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file diff --git a/packages/wyatt_form_bloc/.pubignore b/packages/wyatt_form_bloc/.pubignore deleted file mode 100644 index 11610c5a..00000000 --- a/packages/wyatt_form_bloc/.pubignore +++ /dev/null @@ -1,2 +0,0 @@ -firebase_options.dart -.vscode \ No newline at end of file diff --git a/packages/wyatt_form_bloc/.pubignore b/packages/wyatt_form_bloc/.pubignore new file mode 120000 index 00000000..52b2f28d --- /dev/null +++ b/packages/wyatt_form_bloc/.pubignore @@ -0,0 +1 @@ +../../.pubignore \ No newline at end of file -- 2.47.2 From 0a13c67058db39b10c03ce3d9b069b944780a45d Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 23:43:57 +0200 Subject: [PATCH 270/320] refactor(authentication): remove cross package export --- packages/wyatt_authentication_bloc/README.md | 4 +- .../doc/api/__404error.md | 6 - .../doc/api/categories.json | 1 - .../doc/api/index.json | 1 - .../doc/api/index.md | 214 ------ .../doc/api/search.md | 6 - .../Account-class.md | 237 ------ .../Account/Account.md | 43 -- .../Account/accessToken.md | 34 - .../Account/creationTime.md | 35 - .../Account/email.md | 35 - .../Account/emailVerified.md | 35 - .../wyatt_authentication_bloc/Account/id.md | 34 - .../Account/isAnonymous.md | 34 - .../Account/isNewUser.md | 34 - .../Account/lastSignInTime.md | 34 - .../Account/phoneNumber.md | 36 - .../Account/photoURL.md | 36 - .../Account/props.md | 55 -- .../Account/providerId.md | 34 - .../Account/refreshToken.md | 34 - .../Account/stringify.md | 47 -- .../AccountModel-class.md | 247 ------ .../AccountModel.fromFirebaseUser.md | 51 -- ...AccountModel.fromFirebaseUserCredential.md | 54 -- .../AccountModel/refreshToken.md | 41 - .../AccountModel/user.md | 33 - .../ApplyActionCodeFailureFirebase-class.md | 137 ---- ...ApplyActionCodeFailureFirebase.fromCode.md | 49 -- .../ApplyActionCodeFailureFirebase.md | 31 - .../ApplyActionCodeFailureInterface-class.md | 139 ---- ...pplyActionCodeFailureInterface.fromCode.md | 31 - .../ApplyActionCodeFailureInterface.md | 31 - .../AuthFormField-class.md | 122 --- .../AuthFormField/AuthFormField.md | 25 - .../AuthFormField/confirmPassword-constant.md | 34 - .../AuthFormField/email-constant.md | 34 - .../AuthFormField/password-constant.md | 34 - .../AuthFormName-class.md | 131 ---- .../AuthFormName/AuthFormName.md | 25 - .../AuthFormName/editAccountForm-constant.md | 34 - .../passwordResetForm-constant.md | 34 - .../AuthFormName/signInForm-constant.md | 34 - .../AuthFormName/signUpForm-constant.md | 34 - .../AuthenticationBuilder-class.md | 216 ------ .../AuthenticationBuilder.md | 35 - .../AuthenticationBuilder/authenticated.md | 36 - .../AuthenticationBuilder/build.md | 85 -- .../AuthenticationBuilder/unauthenticated.md | 33 - .../AuthenticationBuilder/unknown.md | 33 - .../AuthenticationChangeEvent-class.md | 137 ---- .../AuthenticationChangeEvent.md | 30 - .../AuthenticationChangeEvent/props.md | 42 - .../AuthenticationChangeEvent/stringify.md | 47 -- .../AuthenticationCubit-class.md | 292 ------- .../AuthenticationCubit.md | 34 - .../authenticationRepository.md | 33 - .../AuthenticationCubit/currentSession.md | 37 - .../AuthenticationCubit/delete.md | 44 -- .../AuthenticationCubit/onDelete.md | 38 - .../AuthenticationCubit/onReauthenticate.md | 38 - .../AuthenticationCubit/onRefresh.md | 37 - .../AuthenticationCubit/onSignInFromCache.md | 38 - .../AuthenticationCubit/onSignOut.md | 37 - .../AuthenticationCubit/reauthenticate.md | 53 -- .../AuthenticationCubit/refresh.md | 49 -- .../AuthenticationCubit/signOut.md | 43 -- .../AuthenticationFailureInterface-class.md | 159 ---- ...AuthenticationFailureInterface.fromCode.md | 31 - .../AuthenticationFailureInterface.md | 30 - .../AuthenticationFailureInterface/code.md | 33 - .../AuthenticationFailureInterface/message.md | 40 - .../AuthenticationFailureInterface/msg.md | 33 - .../toString.md | 53 -- ...henticationFirebaseDataSourceImpl-class.md | 251 ------ .../AuthenticationFirebaseDataSourceImpl.md | 40 - .../addSession.md | 40 - .../confirmPasswordReset.md | 53 -- .../delete.md | 48 -- .../reauthenticate.md | 61 -- .../refresh.md | 52 -- .../sendEmailVerification.md | 47 -- .../sendPasswordResetEmail.md | 47 -- .../sessionStream.md | 39 - .../signInAnonymously.md | 54 -- .../signInWithEmailAndPassword.md | 61 -- .../signInWithGoogle.md | 68 -- .../signOut.md | 46 -- .../signUpWithEmailAndPassword.md | 62 -- .../updateEmail.md | 55 -- .../updatePassword.md | 55 -- .../verifyPasswordResetCode.md | 48 -- .../AuthenticationRemoteDataSource-class.md | 247 ------ .../AuthenticationRemoteDataSource.md | 25 - .../addSession.md | 35 - .../confirmPasswordReset.md | 38 - .../AuthenticationRemoteDataSource/delete.md | 35 - .../reauthenticate.md | 35 - .../AuthenticationRemoteDataSource/refresh.md | 35 - .../sendEmailVerification.md | 35 - .../sendPasswordResetEmail.md | 35 - .../sessionStream.md | 35 - .../signInAnonymously.md | 35 - .../signInWithEmailAndPassword.md | 38 - .../signInWithGoogle.md | 35 - .../AuthenticationRemoteDataSource/signOut.md | 35 - .../signUpWithEmailAndPassword.md | 38 - .../updateEmail.md | 35 - .../updatePassword.md | 35 - .../verifyPasswordResetCode.md | 35 - .../AuthenticationRepository-class.md | 258 ------- .../AuthenticationRepository.md | 25 - .../AuthenticationRepository/addSession.md | 36 - .../confirmPasswordReset.md | 40 - .../AuthenticationRepository/delete.md | 38 - .../formRepository.md | 37 - .../reauthenticate.md | 40 - .../AuthenticationRepository/refresh.md | 36 - .../sendEmailVerification.md | 37 - .../sendPasswordResetEmail.md | 37 - .../AuthenticationRepository/sessionStream.md | 36 - .../signInAnonymously.md | 37 - .../signInWithEmailAndPassword.md | 41 - .../signInWithGoogle.md | 37 - .../AuthenticationRepository/signOut.md | 37 - .../signUpWithEmailAndPassword.md | 42 - .../AuthenticationRepository/updateEmail.md | 40 - .../updatePassword.md | 40 - .../verifyPasswordResetCode.md | 37 - .../AuthenticationRepositoryImpl-class.md | 269 ------- .../AuthenticationRepositoryImpl.md | 69 -- .../addSession.md | 39 - .../authenticationRemoteDataSource.md | 33 - .../confirmPasswordReset.md | 51 -- .../AuthenticationRepositoryImpl/delete.md | 44 -- .../formRepository.md | 41 - .../reauthenticate.md | 49 -- .../AuthenticationRepositoryImpl/refresh.md | 45 -- .../sendEmailVerification.md | 45 -- .../sendPasswordResetEmail.md | 47 -- .../sessionStream.md | 39 - .../signInAnonymously.md | 47 -- .../signInWithEmailAndPassword.md | 54 -- .../signInWithGoogle.md | 47 -- .../AuthenticationRepositoryImpl/signOut.md | 45 -- .../signUpWithEmailAndPassword.md | 55 -- .../updateEmail.md | 48 -- .../updatePassword.md | 49 -- .../verifyPasswordResetCode.md | 47 -- .../AuthenticationState-class.md | 150 ---- .../AuthenticationState.authenticated.md | 34 - .../AuthenticationState.unauthenticated.md | 31 - .../AuthenticationState.unknown.md | 31 - .../AuthenticationState/props.md | 42 - .../AuthenticationState/status.md | 33 - .../AuthenticationState/stringify.md | 47 -- .../AuthenticationState/wrapper.md | 33 - .../AuthenticationStatus.md | 151 ---- .../AuthenticationStatus.md | 25 - .../AuthenticationStatus/values-constant.md | 29 - .../BaseEditAccountCubit-class.md | 261 ------- .../BaseEditAccountCubit.md | 37 - .../authenticationRepository.md | 33 - .../BaseEditAccountCubit/dataChanged.md | 53 -- .../BaseEditAccountCubit/formName.md | 40 - .../BaseEditAccountCubit/formRepository.md | 36 - .../BaseEditAccountCubit/reset.md | 43 -- .../BaseEditAccountCubit/submit.md | 48 -- .../BaseEditAccountCubit/update.md | 48 -- .../BaseEditAccountCubit/validate.md | 42 - .../BaseSignInCubit-class.md | 261 ------- .../BaseSignInCubit/BaseSignInCubit.md | 37 - .../authenticationRepository.md | 33 - .../BaseSignInCubit/dataChanged.md | 53 -- .../BaseSignInCubit/formName.md | 40 - .../BaseSignInCubit/formRepository.md | 36 - .../BaseSignInCubit/reset.md | 43 -- .../BaseSignInCubit/submit.md | 48 -- .../BaseSignInCubit/update.md | 48 -- .../BaseSignInCubit/validate.md | 42 - .../BaseSignUpCubit-class.md | 261 ------- .../BaseSignUpCubit/BaseSignUpCubit.md | 37 - .../authenticationRepository.md | 33 - .../BaseSignUpCubit/dataChanged.md | 53 -- .../BaseSignUpCubit/formName.md | 40 - .../BaseSignUpCubit/formRepository.md | 36 - .../BaseSignUpCubit/reset.md | 43 -- .../BaseSignUpCubit/submit.md | 49 -- .../BaseSignUpCubit/update.md | 51 -- .../BaseSignUpCubit/validate.md | 42 - .../BuildContextExtension.md | 76 -- .../BuildContextExtension/account.md | 37 - .../BuildContextExtension/data.md | 37 - .../BuildContextExtension/session.md | 37 - .../BuildContextExtension/wrapper.md | 37 - ...nfirmPasswordResetFailureFirebase-class.md | 137 ---- ...rmPasswordResetFailureFirebase.fromCode.md | 30 - .../ConfirmPasswordResetFailureFirebase.md | 31 - ...firmPasswordResetFailureInterface-class.md | 139 ---- ...mPasswordResetFailureInterface.fromCode.md | 31 - .../ConfirmPasswordResetFailureInterface.md | 31 - .../CustomRoutine-class.md | 139 ---- .../CustomRoutine/CustomRoutine.md | 35 - .../CustomRoutine/attachedLogic.md | 35 - .../CustomRoutine/call.md | 55 -- .../CustomRoutine/onError.md | 33 - .../CustomRoutine/onSuccess.md | 33 - .../CustomRoutine/routine.md | 33 - .../DeleteAccountFailureFirebase-class.md | 137 ---- .../DeleteAccountFailureFirebase.fromCode.md | 39 - .../DeleteAccountFailureFirebase.md | 31 - .../DeleteAccountFailureInterface-class.md | 139 ---- .../DeleteAccountFailureInterface.fromCode.md | 30 - .../DeleteAccountFailureInterface.md | 30 - .../DeletedEvent-class.md | 126 --- .../DeletedEvent/DeletedEvent.md | 30 - .../EditAccountCubit-class.md | 335 -------- .../EditAccountCubit/EditAccountCubit.md | 30 - .../EditAccountCubit/onEmailUpdated.md | 42 - .../EditAccountCubit/onPasswordUpdated.md | 42 - .../EditAccountListener-class.md | 236 ------ .../EditAccountListener.md | 37 - .../EditAccountListener/build.md | 92 --- .../EditAccountListener/child.md | 33 - .../EditAccountListener/customBuilder.md | 34 - .../EditAccountListener/onError.md | 37 - .../EditAccountListener/onProgress.md | 33 - .../EditAccountListener/onSuccess.md | 33 - .../EditAccountState-class.md | 179 ----- .../EditAccountState/EditAccountState.md | 34 - .../EditAccountState/copyWith.md | 44 -- .../EditAccountState/email.md | 37 - .../EditAccountState/errorMessage.md | 34 - .../EditAccountState/form.md | 34 - .../EditAccountState/password.md | 37 - .../EditAccountState/props.md | 42 - .../EditAccountState/status.md | 34 - .../EditAccountState/toString.md | 48 -- .../EmailVerificationBuilder-class.md | 225 ------ .../EmailVerificationBuilder.md | 36 - .../EmailVerificationBuilder/build.md | 91 --- .../EmailVerificationBuilder/customBuilder.md | 34 - .../EmailVerificationBuilder/notVerified.md | 33 - .../EmailVerificationBuilder/onError.md | 37 - .../EmailVerificationBuilder/verified.md | 33 - .../EmailVerificationCubit-class.md | 211 ----- .../EmailVerificationCubit.md | 32 - .../authenticationRepository.md | 33 - .../checkEmailVerification.md | 65 -- .../sendEmailVerification.md | 47 -- .../EmailVerificationState-class.md | 160 ---- .../EmailVerificationState.md | 34 - .../EmailVerificationState/copyWith.md | 44 -- .../EmailVerificationState/errorMessage.md | 33 - .../EmailVerificationState/isVerified.md | 33 - .../EmailVerificationState/props.md | 42 - .../EmailVerificationState/status.md | 33 - .../EmailVerificationState/toString.md | 49 -- ...nInMethodsForEmailFailureFirebase-class.md | 137 ---- ...MethodsForEmailFailureFirebase.fromCode.md | 40 - ...tchSignInMethodsForEmailFailureFirebase.md | 31 - ...InMethodsForEmailFailureInterface-class.md | 139 ---- ...ethodsForEmailFailureInterface.fromCode.md | 32 - ...chSignInMethodsForEmailFailureInterface.md | 31 - .../ModelParsingFailureFirebase-class.md | 137 ---- .../ModelParsingFailureFirebase.fromCode.md | 30 - .../ModelParsingFailureFirebase.md | 31 - .../ModelParsingFailureInterface-class.md | 139 ---- .../ModelParsingFailureInterface.fromCode.md | 30 - .../ModelParsingFailureInterface.md | 30 - .../PasswordResetCubit-class.md | 275 ------- .../PasswordResetCubit/PasswordResetCubit.md | 37 - .../authenticationRepository.md | 33 - .../PasswordResetCubit/dataChanged.md | 53 -- .../PasswordResetCubit/emailChanged.md | 47 -- .../PasswordResetCubit/emailCustomChanged.md | 42 - .../PasswordResetCubit/formName.md | 40 - .../PasswordResetCubit/formRepository.md | 36 - .../PasswordResetCubit/reset.md | 43 -- .../PasswordResetCubit/submit.md | 70 -- .../PasswordResetCubit/update.md | 51 -- .../PasswordResetCubit/validate.md | 43 -- .../PasswordResetState-class.md | 169 ---- .../PasswordResetState/PasswordResetState.md | 34 - .../PasswordResetState/copyWith.md | 44 -- .../PasswordResetState/email.md | 36 - .../PasswordResetState/errorMessage.md | 34 - .../PasswordResetState/form.md | 34 - .../PasswordResetState/props.md | 42 - .../PasswordResetState/status.md | 34 - .../PasswordResetState/toString.md | 48 -- .../ReauthenticateFailureFirebase-class.md | 137 ---- .../ReauthenticateFailureFirebase.fromCode.md | 57 -- .../ReauthenticateFailureFirebase.md | 31 - .../ReauthenticateFailureInterface-class.md | 139 ---- ...ReauthenticateFailureInterface.fromCode.md | 30 - .../ReauthenticateFailureInterface.md | 30 - .../ReauthenticatedEvent-class.md | 137 ---- .../ReauthenticatedEvent.md | 30 - .../ReauthenticatedEvent/account.md | 33 - .../ReauthenticatedEvent/props.md | 42 - .../RefreshFailureFirebase-class.md | 137 ---- .../RefreshFailureFirebase.fromCode.md | 30 - .../RefreshFailureFirebase.md | 31 - .../RefreshFailureInterface-class.md | 139 ---- .../RefreshFailureInterface.fromCode.md | 31 - .../RefreshFailureInterface.md | 31 - .../RefreshedEvent-class.md | 136 ---- .../RefreshedEvent/RefreshedEvent.md | 30 - .../RefreshedEvent/account.md | 33 - .../RefreshedEvent/props.md | 42 - ...dEmailVerificationFailureFirebase-class.md | 137 ---- ...ailVerificationFailureFirebase.fromCode.md | 30 - .../SendEmailVerificationFailureFirebase.md | 31 - ...EmailVerificationFailureInterface-class.md | 139 ---- ...ilVerificationFailureInterface.fromCode.md | 31 - .../SendEmailVerificationFailureInterface.md | 31 - ...PasswordResetEmailFailureFirebase-class.md | 137 ---- ...swordResetEmailFailureFirebase.fromCode.md | 30 - .../SendPasswordResetEmailFailureFirebase.md | 31 - ...asswordResetEmailFailureInterface-class.md | 139 ---- ...wordResetEmailFailureInterface.fromCode.md | 32 - .../SendPasswordResetEmailFailureInterface.md | 31 - ...endSignInLinkEmailFailureFirebase-class.md | 137 ---- ...SignInLinkEmailFailureFirebase.fromCode.md | 30 - .../SendSignInLinkEmailFailureFirebase.md | 31 - ...ndSignInLinkEmailFailureInterface-class.md | 139 ---- ...ignInLinkEmailFailureInterface.fromCode.md | 31 - .../SendSignInLinkEmailFailureInterface.md | 31 - .../Session-class.md | 144 ---- .../Session/Session.md | 33 - .../Session/account.md | 33 - .../wyatt_authentication_bloc/Session/data.md | 33 - .../Session/props.md | 42 - .../Session/stringify.md | 47 -- .../SessionWrapper-class.md | 144 ---- .../SessionWrapper/SessionWrapper.md | 33 - .../SessionWrapper/event.md | 33 - .../SessionWrapper/props.md | 42 - .../SessionWrapper/session.md | 33 - .../SessionWrapper/stringify.md | 47 -- .../SignInAnonymously-mixin.md | 269 ------- .../SignInAnonymously/onSignInAnonymously.md | 39 - .../SignInAnonymously/signInAnonymously.md | 79 -- .../SignInAnonymouslyFailureFirebase-class.md | 137 ---- ...gnInAnonymouslyFailureFirebase.fromCode.md | 40 - .../SignInAnonymouslyFailureFirebase.md | 31 - ...SignInAnonymouslyFailureInterface-class.md | 139 ---- ...nInAnonymouslyFailureInterface.fromCode.md | 31 - .../SignInAnonymouslyFailureInterface.md | 31 - .../SignInCubit-class.md | 354 --------- .../SignInCubit/SignInCubit.md | 30 - .../SignInCubit/onSignInAnonymously.md | 42 - .../onSignInWithEmailAndPassword.md | 42 - .../SignInCubit/onSignInWithGoogle.md | 42 - .../SignInListener-class.md | 236 ------ .../SignInListener/SignInListener.md | 37 - .../SignInListener/build.md | 92 --- .../SignInListener/child.md | 33 - .../SignInListener/customBuilder.md | 33 - .../SignInListener/onError.md | 37 - .../SignInListener/onProgress.md | 33 - .../SignInListener/onSuccess.md | 33 - .../SignInState-class.md | 179 ----- .../SignInState/SignInState.md | 34 - .../SignInState/copyWith.md | 44 -- .../SignInState/email.md | 37 - .../SignInState/errorMessage.md | 34 - .../SignInState/form.md | 34 - .../SignInState/password.md | 37 - .../SignInState/props.md | 42 - .../SignInState/status.md | 34 - .../SignInState/toString.md | 48 -- .../SignInWithAppleFailureFirebase-class.md | 141 ---- ...SignInWithAppleFailureFirebase.fromCode.md | 30 - .../SignInWithAppleFailureFirebase.md | 30 - .../SignInWithAppleFailureInterface-class.md | 140 ---- ...ignInWithAppleFailureInterface.fromCode.md | 31 - .../SignInWithAppleFailureInterface.md | 31 - ...gnInWithCredentialFailureFirebase-class.md | 143 ---- ...nWithCredentialFailureFirebase.fromCode.md | 61 -- .../SignInWithCredentialFailureFirebase.md | 31 - ...nInWithCredentialFailureInterface-class.md | 139 ---- ...WithCredentialFailureInterface.fromCode.md | 31 - .../SignInWithCredentialFailureInterface.md | 31 - ...thEmailAndPasswordFailureFirebase-class.md | 137 ---- ...mailAndPasswordFailureFirebase.fromCode.md | 49 -- ...gnInWithEmailAndPasswordFailureFirebase.md | 31 - ...hEmailAndPasswordFailureInterface-class.md | 139 ---- ...ailAndPasswordFailureInterface.fromCode.md | 32 - ...nInWithEmailAndPasswordFailureInterface.md | 31 - ...ignInWithEmailLinkFailureFirebase-class.md | 137 ---- ...InWithEmailLinkFailureFirebase.fromCode.md | 46 -- .../SignInWithEmailLinkFailureFirebase.md | 31 - ...gnInWithEmailLinkFailureInterface-class.md | 139 ---- ...nWithEmailLinkFailureInterface.fromCode.md | 31 - .../SignInWithEmailLinkFailureInterface.md | 31 - .../SignInWithEmailPassword-mixin.md | 305 -------- .../SignInWithEmailPassword/emailChanged.md | 47 -- .../emailCustomChanged.md | 42 - .../onSignInWithEmailAndPassword.md | 39 - .../passwordChanged.md | 46 -- .../passwordCustomChanged.md | 42 - .../signInWithEmailAndPassword.md | 105 --- ...SignInWithFacebookFailureFirebase-class.md | 141 ---- ...nInWithFacebookFailureFirebase.fromCode.md | 30 - .../SignInWithFacebookFailureFirebase.md | 30 - ...ignInWithFacebookFailureInterface-class.md | 139 ---- ...InWithFacebookFailureInterface.fromCode.md | 31 - .../SignInWithFacebookFailureInterface.md | 31 - .../SignInWithGoogle-mixin.md | 269 ------- .../SignInWithGoogle/onSignInWithGoogle.md | 39 - .../SignInWithGoogle/signInWithGoogle.md | 78 -- .../SignInWithGoogleFailureFirebase-class.md | 141 ---- ...ignInWithGoogleFailureFirebase.fromCode.md | 30 - .../SignInWithGoogleFailureFirebase.md | 30 - .../SignInWithGoogleFailureInterface-class.md | 139 ---- ...gnInWithGoogleFailureInterface.fromCode.md | 31 - .../SignInWithGoogleFailureInterface.md | 31 - .../SignInWithTwitterFailureFirebase-class.md | 141 ---- ...gnInWithTwitterFailureFirebase.fromCode.md | 30 - .../SignInWithTwitterFailureFirebase.md | 30 - ...SignInWithTwitterFailureInterface-class.md | 136 ---- ...nInWithTwitterFailureInterface.fromCode.md | 31 - .../SignInWithTwitterFailureInterface.md | 31 - .../SignOutFailureFirebase-class.md | 137 ---- .../SignOutFailureFirebase.fromCode.md | 30 - .../SignOutFailureFirebase.md | 31 - .../SignOutFailureInterface-class.md | 139 ---- .../SignOutFailureInterface.fromCode.md | 31 - .../SignOutFailureInterface.md | 31 - .../SignUpCubit-class.md | 316 -------- .../SignUpCubit/SignUpCubit.md | 30 - .../onSignUpWithEmailAndPassword.md | 43 -- .../SignUpListener-class.md | 236 ------ .../SignUpListener/SignUpListener.md | 37 - .../SignUpListener/build.md | 92 --- .../SignUpListener/child.md | 33 - .../SignUpListener/customBuilder.md | 33 - .../SignUpListener/onError.md | 37 - .../SignUpListener/onProgress.md | 33 - .../SignUpListener/onSuccess.md | 33 - .../SignUpState-class.md | 179 ----- .../SignUpState/SignUpState.md | 34 - .../SignUpState/copyWith.md | 44 -- .../SignUpState/email.md | 37 - .../SignUpState/errorMessage.md | 34 - .../SignUpState/form.md | 34 - .../SignUpState/password.md | 37 - .../SignUpState/props.md | 42 - .../SignUpState/status.md | 34 - .../SignUpState/toString.md | 50 -- ...thEmailAndPasswordFailureFirebase-class.md | 137 ---- ...mailAndPasswordFailureFirebase.fromCode.md | 52 -- ...gnUpWithEmailAndPasswordFailureFirebase.md | 31 - ...hEmailAndPasswordFailureInterface-class.md | 139 ---- ...ailAndPasswordFailureInterface.fromCode.md | 32 - ...nUpWithEmailAndPasswordFailureInterface.md | 31 - .../SignUpWithEmailPassword-mixin.md | 305 -------- .../SignUpWithEmailPassword/emailChanged.md | 47 -- .../emailCustomChanged.md | 42 - .../onSignUpWithEmailAndPassword.md | 40 - .../passwordChanged.md | 46 -- .../passwordCustomChanged.md | 42 - .../signUpWithEmailPassword.md | 97 --- .../SignedInEvent-class.md | 135 ---- .../SignedInEvent/SignedInEvent.md | 30 - .../SignedInEvent/account.md | 33 - .../SignedInEvent/props.md | 42 - .../SignedInFromCacheEvent-class.md | 135 ---- .../SignedInFromCacheEvent.md | 30 - .../SignedInFromCacheEvent/account.md | 33 - .../SignedInFromCacheEvent/props.md | 42 - .../SignedOutEvent-class.md | 126 --- .../SignedOutEvent/SignedOutEvent.md | 30 - .../SignedUpEvent-class.md | 135 ---- .../SignedUpEvent/SignedUpEvent.md | 30 - .../SignedUpEvent/account.md | 33 - .../SignedUpEvent/props.md | 42 - .../UnknownAuthenticationEvent-class.md | 126 --- .../UnknownAuthenticationEvent.md | 30 - .../UpdateEmail-mixin.md | 287 ------- .../UpdateEmail/emailChanged.md | 47 -- .../UpdateEmail/emailCustomChanged.md | 42 - .../UpdateEmail/onEmailUpdated.md | 39 - .../UpdateEmail/updateEmail.md | 103 --- .../UpdateEmailFailureFirebase-class.md | 137 ---- .../UpdateEmailFailureFirebase.fromCode.md | 45 -- .../UpdateEmailFailureFirebase.md | 31 - .../UpdateEmailFailureInterface-class.md | 139 ---- .../UpdateEmailFailureInterface.fromCode.md | 30 - .../UpdateEmailFailureInterface.md | 30 - .../UpdatePassword-mixin.md | 287 ------- .../UpdatePassword/onPasswordUpdated.md | 39 - .../UpdatePassword/passwordChanged.md | 46 -- .../UpdatePassword/passwordCustomChanged.md | 42 - .../UpdatePassword/updatePassword.md | 103 --- .../UpdatePasswordFailureFirebase-class.md | 137 ---- .../UpdatePasswordFailureFirebase.fromCode.md | 42 - .../UpdatePasswordFailureFirebase.md | 31 - .../UpdatePasswordFailureInterface-class.md | 139 ---- ...UpdatePasswordFailureInterface.fromCode.md | 30 - .../UpdatePasswordFailureInterface.md | 30 - .../UpdatedEvent-class.md | 135 ---- .../UpdatedEvent/UpdatedEvent.md | 30 - .../UpdatedEvent/account.md | 33 - .../UpdatedEvent/props.md | 42 - ...yPasswordResetCodeFailureFirebase-class.md | 137 ---- ...sswordResetCodeFailureFirebase.fromCode.md | 31 - .../VerifyPasswordResetCodeFailureFirebase.md | 31 - ...PasswordResetCodeFailureInterface-class.md | 139 ---- ...swordResetCodeFailureInterface.fromCode.md | 32 - ...VerifyPasswordResetCodeFailureInterface.md | 31 - .../wyatt_authentication_bloc-library.md | 727 ------------------ .../lib/core/dependency_injection/get_it.dart | 2 + .../example/pubspec.yaml | 2 + .../lib/src/core/constants/storage.dart | 8 + ...ation_firebase_cache_data_source_impl.dart | 2 +- .../lib/wyatt_authentication_bloc.dart | 3 - .../wyatt_authentication_bloc/pubspec.yaml | 2 +- 520 files changed, 16 insertions(+), 33833 deletions(-) delete mode 100644 packages/wyatt_authentication_bloc/doc/api/__404error.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/categories.json delete mode 100644 packages/wyatt_authentication_bloc/doc/api/index.json delete mode 100644 packages/wyatt_authentication_bloc/doc/api/index.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/search.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/Account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/accessToken.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/creationTime.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/email.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/emailVerified.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/id.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isAnonymous.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isNewUser.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/lastSignInTime.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/phoneNumber.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/photoURL.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/providerId.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/refreshToken.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/stringify.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/refreshToken.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/user.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/AuthFormField.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/email-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/password-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/AuthFormName.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signInForm-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/build.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unknown.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/currentSession.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/delete.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onDelete.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/refresh.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/signOut.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/code.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/message.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/addSession.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/delete.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/formRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/refresh.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signOut.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/status.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/stringify.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/wrapper.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/values-constant.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formName.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/reset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/submit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/update.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/validate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formName.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/reset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/submit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/update.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/validate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formName.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/reset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/submit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/update.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/validate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/data.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/session.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/wrapper.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/attachedLogic.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/call.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onError.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onSuccess.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/routine.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/build.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/child.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/customBuilder.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onError.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onProgress.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onSuccess.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/EditAccountState.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/copyWith.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/email.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/errorMessage.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/form.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/password.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/status.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/toString.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/build.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/onError.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/verified.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/copyWith.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/errorMessage.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/isVerified.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/status.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/toString.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formName.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formRepository.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/reset.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/submit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/update.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/validate.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/copyWith.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/email.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/errorMessage.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/form.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/status.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/toString.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/Session.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/data.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/stringify.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/event.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/session.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/stringify.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously-mixin.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/SignInCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/SignInListener.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/build.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/child.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/customBuilder.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onError.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onProgress.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onSuccess.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/SignInState.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/copyWith.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/email.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/errorMessage.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/form.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/password.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/status.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/toString.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle-mixin.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/SignUpListener.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/build.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/child.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/customBuilder.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onError.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onProgress.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onSuccess.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/SignUpState.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/copyWith.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/email.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/errorMessage.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/form.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/password.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/status.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/toString.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail-mixin.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/updateEmail.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword-mixin.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/updatePassword.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/account.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/props.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md delete mode 100644 packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/wyatt_authentication_bloc-library.md diff --git a/packages/wyatt_authentication_bloc/README.md b/packages/wyatt_authentication_bloc/README.md index 04f0f236..9d58adfb 100644 --- a/packages/wyatt_authentication_bloc/README.md +++ b/packages/wyatt_authentication_bloc/README.md @@ -16,7 +16,7 @@ * along with this program. If not, see . --> -# Flutter - Authentication BLoC +# Authentication BLoC

    Style: Wyatt Analysis @@ -218,4 +218,4 @@ return SignInListener( ), child: ... ); -``` \ No newline at end of file +``` diff --git a/packages/wyatt_authentication_bloc/doc/api/__404error.md b/packages/wyatt_authentication_bloc/doc/api/__404error.md deleted file mode 100644 index 0fedbdcf..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/__404error.md +++ /dev/null @@ -1,6 +0,0 @@ -# 404 - -Oops, something's gone wrong :-( - -You've tried to visit a page that doesn't exist. Luckily this site has other -[pages](index.md). diff --git a/packages/wyatt_authentication_bloc/doc/api/categories.json b/packages/wyatt_authentication_bloc/doc/api/categories.json deleted file mode 100644 index fe51488c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/categories.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/packages/wyatt_authentication_bloc/doc/api/index.json b/packages/wyatt_authentication_bloc/doc/api/index.json deleted file mode 100644 index 0745ab72..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/index.json +++ /dev/null @@ -1 +0,0 @@ -[{"name":"wyatt_authentication_bloc","qualifiedName":"wyatt_authentication_bloc","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md","type":"library","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"An authentication library for BLoC."},{"name":"Account","qualifiedName":"wyatt_authentication_bloc.Account","href":"wyatt_authentication_bloc/Account-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Represents a user Account in the \nvarious identity provisioning systems.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"Account","qualifiedName":"wyatt_authentication_bloc.Account.Account","href":"wyatt_authentication_bloc/Account/Account.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"accessToken","qualifiedName":"wyatt_authentication_bloc.Account.accessToken","href":"wyatt_authentication_bloc/Account/accessToken.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The user access token","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"creationTime","qualifiedName":"wyatt_authentication_bloc.Account.creationTime","href":"wyatt_authentication_bloc/Account/creationTime.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns the users account creation time.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"email","qualifiedName":"wyatt_authentication_bloc.Account.email","href":"wyatt_authentication_bloc/Account/email.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The users email address.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"emailVerified","qualifiedName":"wyatt_authentication_bloc.Account.emailVerified","href":"wyatt_authentication_bloc/Account/emailVerified.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns whether the users email address has been verified.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"id","qualifiedName":"wyatt_authentication_bloc.Account.id","href":"wyatt_authentication_bloc/Account/id.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The user's unique ID.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"isAnonymous","qualifiedName":"wyatt_authentication_bloc.Account.isAnonymous","href":"wyatt_authentication_bloc/Account/isAnonymous.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns whether the user is a anonymous.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"isNewUser","qualifiedName":"wyatt_authentication_bloc.Account.isNewUser","href":"wyatt_authentication_bloc/Account/isNewUser.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Whether the user account has been recently created.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"lastSignInTime","qualifiedName":"wyatt_authentication_bloc.Account.lastSignInTime","href":"wyatt_authentication_bloc/Account/lastSignInTime.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When the user last signed in as dictated by the server clock.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"phoneNumber","qualifiedName":"wyatt_authentication_bloc.Account.phoneNumber","href":"wyatt_authentication_bloc/Account/phoneNumber.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns the users phone number.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"photoURL","qualifiedName":"wyatt_authentication_bloc.Account.photoURL","href":"wyatt_authentication_bloc/Account/photoURL.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns a photo URL for the user.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.Account.props","href":"wyatt_authentication_bloc/Account/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"providerId","qualifiedName":"wyatt_authentication_bloc.Account.providerId","href":"wyatt_authentication_bloc/Account/providerId.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The provider ID for the user.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"refreshToken","qualifiedName":"wyatt_authentication_bloc.Account.refreshToken","href":"wyatt_authentication_bloc/Account/refreshToken.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The user refresh token","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"stringify","qualifiedName":"wyatt_authentication_bloc.Account.stringify","href":"wyatt_authentication_bloc/Account/stringify.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"If set to true, the toString method will be overridden to output\nthis instance's props.","enclosedBy":{"name":"Account","type":"class","href":"wyatt_authentication_bloc/Account-class.md"}},{"name":"AccountModel","qualifiedName":"wyatt_authentication_bloc.AccountModel","href":"wyatt_authentication_bloc/AccountModel-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Account Model to parse Firebase User data","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AccountModel.fromFirebaseUser","qualifiedName":"wyatt_authentication_bloc.AccountModel.fromFirebaseUser","href":"wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AccountModel","type":"class","href":"wyatt_authentication_bloc/AccountModel-class.md"}},{"name":"AccountModel.fromFirebaseUserCredential","qualifiedName":"wyatt_authentication_bloc.AccountModel.fromFirebaseUserCredential","href":"wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AccountModel","type":"class","href":"wyatt_authentication_bloc/AccountModel-class.md"}},{"name":"refreshToken","qualifiedName":"wyatt_authentication_bloc.AccountModel.refreshToken","href":"wyatt_authentication_bloc/AccountModel/refreshToken.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The user refresh token","enclosedBy":{"name":"AccountModel","type":"class","href":"wyatt_authentication_bloc/AccountModel-class.md"}},{"name":"user","qualifiedName":"wyatt_authentication_bloc.AccountModel.user","href":"wyatt_authentication_bloc/AccountModel/user.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AccountModel","type":"class","href":"wyatt_authentication_bloc/AccountModel-class.md"}},{"name":"ApplyActionCodeFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ApplyActionCodeFailureFirebase","href":"wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the apply action code process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ApplyActionCodeFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ApplyActionCodeFailureFirebase.ApplyActionCodeFailureFirebase","href":"wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ApplyActionCodeFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md"}},{"name":"ApplyActionCodeFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.ApplyActionCodeFailureFirebase.fromCode","href":"wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ApplyActionCodeFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md"}},{"name":"ApplyActionCodeFailureInterface","qualifiedName":"wyatt_authentication_bloc.ApplyActionCodeFailureInterface","href":"wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the apply action code process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ApplyActionCodeFailureInterface","qualifiedName":"wyatt_authentication_bloc.ApplyActionCodeFailureInterface.ApplyActionCodeFailureInterface","href":"wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the apply action code process if a failure occurs.","enclosedBy":{"name":"ApplyActionCodeFailureInterface","type":"class","href":"wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md"}},{"name":"ApplyActionCodeFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.ApplyActionCodeFailureInterface.fromCode","href":"wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the apply action code process if a failure occurs.","enclosedBy":{"name":"ApplyActionCodeFailureInterface","type":"class","href":"wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md"}},{"name":"AuthFormField","qualifiedName":"wyatt_authentication_bloc.AuthFormField","href":"wyatt_authentication_bloc/AuthFormField-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Default authentication form fields name","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthFormField","qualifiedName":"wyatt_authentication_bloc.AuthFormField.AuthFormField","href":"wyatt_authentication_bloc/AuthFormField/AuthFormField.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthFormField","type":"class","href":"wyatt_authentication_bloc/AuthFormField-class.md"}},{"name":"confirmPassword","qualifiedName":"wyatt_authentication_bloc.AuthFormField.confirmPassword","href":"wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Confirm Password field: wyattConfirmPasswordField","enclosedBy":{"name":"AuthFormField","type":"class","href":"wyatt_authentication_bloc/AuthFormField-class.md"}},{"name":"email","qualifiedName":"wyatt_authentication_bloc.AuthFormField.email","href":"wyatt_authentication_bloc/AuthFormField/email-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Email field: wyattEmailField","enclosedBy":{"name":"AuthFormField","type":"class","href":"wyatt_authentication_bloc/AuthFormField-class.md"}},{"name":"password","qualifiedName":"wyatt_authentication_bloc.AuthFormField.password","href":"wyatt_authentication_bloc/AuthFormField/password-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Password field: wyattPasswordField","enclosedBy":{"name":"AuthFormField","type":"class","href":"wyatt_authentication_bloc/AuthFormField-class.md"}},{"name":"AuthFormName","qualifiedName":"wyatt_authentication_bloc.AuthFormName","href":"wyatt_authentication_bloc/AuthFormName-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Default authentication form name","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthFormName","qualifiedName":"wyatt_authentication_bloc.AuthFormName.AuthFormName","href":"wyatt_authentication_bloc/AuthFormName/AuthFormName.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthFormName","type":"class","href":"wyatt_authentication_bloc/AuthFormName-class.md"}},{"name":"editAccountForm","qualifiedName":"wyatt_authentication_bloc.AuthFormName.editAccountForm","href":"wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Edit account form: wyattEditAccountForm","enclosedBy":{"name":"AuthFormName","type":"class","href":"wyatt_authentication_bloc/AuthFormName-class.md"}},{"name":"passwordResetForm","qualifiedName":"wyatt_authentication_bloc.AuthFormName.passwordResetForm","href":"wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Password reset form: wyattPasswordResetForm","enclosedBy":{"name":"AuthFormName","type":"class","href":"wyatt_authentication_bloc/AuthFormName-class.md"}},{"name":"signInForm","qualifiedName":"wyatt_authentication_bloc.AuthFormName.signInForm","href":"wyatt_authentication_bloc/AuthFormName/signInForm-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign In form: wyattSignInForm","enclosedBy":{"name":"AuthFormName","type":"class","href":"wyatt_authentication_bloc/AuthFormName-class.md"}},{"name":"signUpForm","qualifiedName":"wyatt_authentication_bloc.AuthFormName.signUpForm","href":"wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign Up form: wyattSignUpForm","enclosedBy":{"name":"AuthFormName","type":"class","href":"wyatt_authentication_bloc/AuthFormName-class.md"}},{"name":"AuthenticationBuilder","qualifiedName":"wyatt_authentication_bloc.AuthenticationBuilder","href":"wyatt_authentication_bloc/AuthenticationBuilder-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationBuilder","qualifiedName":"wyatt_authentication_bloc.AuthenticationBuilder.AuthenticationBuilder","href":"wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationBuilder","type":"class","href":"wyatt_authentication_bloc/AuthenticationBuilder-class.md"}},{"name":"authenticated","qualifiedName":"wyatt_authentication_bloc.AuthenticationBuilder.authenticated","href":"wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationBuilder","type":"class","href":"wyatt_authentication_bloc/AuthenticationBuilder-class.md"}},{"name":"build","qualifiedName":"wyatt_authentication_bloc.AuthenticationBuilder.build","href":"wyatt_authentication_bloc/AuthenticationBuilder/build.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Describes the part of the user interface represented by this widget.","enclosedBy":{"name":"AuthenticationBuilder","type":"class","href":"wyatt_authentication_bloc/AuthenticationBuilder-class.md"}},{"name":"unauthenticated","qualifiedName":"wyatt_authentication_bloc.AuthenticationBuilder.unauthenticated","href":"wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationBuilder","type":"class","href":"wyatt_authentication_bloc/AuthenticationBuilder-class.md"}},{"name":"unknown","qualifiedName":"wyatt_authentication_bloc.AuthenticationBuilder.unknown","href":"wyatt_authentication_bloc/AuthenticationBuilder/unknown.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationBuilder","type":"class","href":"wyatt_authentication_bloc/AuthenticationBuilder-class.md"}},{"name":"AuthenticationChangeEvent","qualifiedName":"wyatt_authentication_bloc.AuthenticationChangeEvent","href":"wyatt_authentication_bloc/AuthenticationChangeEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Represents an event initiated by a change in\nthe user's authentication status.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationChangeEvent","qualifiedName":"wyatt_authentication_bloc.AuthenticationChangeEvent.AuthenticationChangeEvent","href":"wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationChangeEvent","type":"class","href":"wyatt_authentication_bloc/AuthenticationChangeEvent-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.AuthenticationChangeEvent.props","href":"wyatt_authentication_bloc/AuthenticationChangeEvent/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"AuthenticationChangeEvent","type":"class","href":"wyatt_authentication_bloc/AuthenticationChangeEvent-class.md"}},{"name":"stringify","qualifiedName":"wyatt_authentication_bloc.AuthenticationChangeEvent.stringify","href":"wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"If set to true, the toString method will be overridden to output\nthis instance's props.","enclosedBy":{"name":"AuthenticationChangeEvent","type":"class","href":"wyatt_authentication_bloc/AuthenticationChangeEvent-class.md"}},{"name":"AuthenticationCubit","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Abstract authentication cubit class needs to be implemented in application.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationCubit","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.AuthenticationCubit","href":"wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"authenticationRepository","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.authenticationRepository","href":"wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"currentSession","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.currentSession","href":"wyatt_authentication_bloc/AuthenticationCubit/currentSession.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns latest session wrapper.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"delete","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.delete","href":"wyatt_authentication_bloc/AuthenticationCubit/delete.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Delete account.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"onDelete","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.onDelete","href":"wyatt_authentication_bloc/AuthenticationCubit/onDelete.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when the current account is deleted from\nthe remote.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"onReauthenticate","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.onReauthenticate","href":"wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when the account is re-authenticated","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"onRefresh","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.onRefresh","href":"wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when the account is refreshed.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"onSignInFromCache","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.onSignInFromCache","href":"wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when the user is automaticcaly logged in from\nthe cache.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"onSignOut","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.onSignOut","href":"wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when the user is logged out.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"reauthenticate","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.reauthenticate","href":"wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Some security-sensitive actions—such as deleting an account,\nsetting a primary email address, and changing a password—require that\nthe user has recently signed in.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"refresh","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.refresh","href":"wyatt_authentication_bloc/AuthenticationCubit/refresh.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Refreshes the current user, if signed in.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"signOut","qualifiedName":"wyatt_authentication_bloc.AuthenticationCubit.signOut","href":"wyatt_authentication_bloc/AuthenticationCubit/signOut.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Signs out the current user.\nIt also clears the cache and the associated data.","enclosedBy":{"name":"AuthenticationCubit","type":"class","href":"wyatt_authentication_bloc/AuthenticationCubit-class.md"}},{"name":"AuthenticationFailureInterface","qualifiedName":"wyatt_authentication_bloc.AuthenticationFailureInterface","href":"wyatt_authentication_bloc/AuthenticationFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Base exception used in Wyatt Authentication","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationFailureInterface","qualifiedName":"wyatt_authentication_bloc.AuthenticationFailureInterface.AuthenticationFailureInterface","href":"wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationFailureInterface","type":"class","href":"wyatt_authentication_bloc/AuthenticationFailureInterface-class.md"}},{"name":"code","qualifiedName":"wyatt_authentication_bloc.AuthenticationFailureInterface.code","href":"wyatt_authentication_bloc/AuthenticationFailureInterface/code.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationFailureInterface","type":"class","href":"wyatt_authentication_bloc/AuthenticationFailureInterface-class.md"}},{"name":"AuthenticationFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.AuthenticationFailureInterface.fromCode","href":"wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationFailureInterface","type":"class","href":"wyatt_authentication_bloc/AuthenticationFailureInterface-class.md"}},{"name":"message","qualifiedName":"wyatt_authentication_bloc.AuthenticationFailureInterface.message","href":"wyatt_authentication_bloc/AuthenticationFailureInterface/message.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationFailureInterface","type":"class","href":"wyatt_authentication_bloc/AuthenticationFailureInterface-class.md"}},{"name":"msg","qualifiedName":"wyatt_authentication_bloc.AuthenticationFailureInterface.msg","href":"wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationFailureInterface","type":"class","href":"wyatt_authentication_bloc/AuthenticationFailureInterface-class.md"}},{"name":"toString","qualifiedName":"wyatt_authentication_bloc.AuthenticationFailureInterface.toString","href":"wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"A string representation of this object.","enclosedBy":{"name":"AuthenticationFailureInterface","type":"class","href":"wyatt_authentication_bloc/AuthenticationFailureInterface-class.md"}},{"name":"AuthenticationFirebaseDataSourceImpl","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationFirebaseDataSourceImpl","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.AuthenticationFirebaseDataSourceImpl","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"addSession","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.addSession","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Add a new authentication event.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"confirmPasswordReset","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.confirmPasswordReset","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Confirms the password reset with the provided newPassword and code.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"delete","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.delete","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Delete account.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"reauthenticate","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.reauthenticate","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Some security-sensitive actions—such as deleting an account,\nsetting a primary email address, and changing a password—require that\nthe user has recently signed in.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"refresh","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.refresh","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Refreshes the current user, if signed in.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"sendEmailVerification","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.sendEmailVerification","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Sends verification email to the account email.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"sendPasswordResetEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.sendPasswordResetEmail","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Sends a password reset email to the provided email.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"sessionStream","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.sessionStream","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Authentication state change event stream.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"signInAnonymously","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.signInAnonymously","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Sign in anonymously.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"signInWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.signInWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Signs in with the provided email and password.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"signInWithGoogle","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.signInWithGoogle","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Starts the Sign In with Google Flow.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"signOut","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.signOut","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Signs out the current user.\nIt also clears the cache and the associated data.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"signUpWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.signUpWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Creates a new user with the provided email and password.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"updateEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.updateEmail","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Update or add email.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"updatePassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.updatePassword","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Update or add password.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"verifyPasswordResetCode","qualifiedName":"wyatt_authentication_bloc.AuthenticationFirebaseDataSourceImpl.verifyPasswordResetCode","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Verify password reset code.","enclosedBy":{"name":"AuthenticationFirebaseDataSourceImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md"}},{"name":"AuthenticationRemoteDataSource","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Is responsible for abstracting the provenance of the data.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationRemoteDataSource","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.AuthenticationRemoteDataSource","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"addSession","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.addSession","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"confirmPasswordReset","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.confirmPasswordReset","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"delete","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.delete","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"reauthenticate","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.reauthenticate","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"refresh","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.refresh","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"sendEmailVerification","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.sendEmailVerification","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"sendPasswordResetEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.sendPasswordResetEmail","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"sessionStream","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.sessionStream","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"signInAnonymously","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.signInAnonymously","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"signInWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.signInWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"signInWithGoogle","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.signInWithGoogle","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"signOut","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.signOut","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"signUpWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.signUpWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"updateEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.updateEmail","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"updatePassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.updatePassword","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"verifyPasswordResetCode","qualifiedName":"wyatt_authentication_bloc.AuthenticationRemoteDataSource.verifyPasswordResetCode","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRemoteDataSource","type":"class","href":"wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md"}},{"name":"AuthenticationRepository","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationRepository","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.AuthenticationRepository","href":"wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"addSession","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.addSession","href":"wyatt_authentication_bloc/AuthenticationRepository/addSession.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Add a new authentication event.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"confirmPasswordReset","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.confirmPasswordReset","href":"wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Confirms the password reset with the provided newPassword and code.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"delete","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.delete","href":"wyatt_authentication_bloc/AuthenticationRepository/delete.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Delete account.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"formRepository","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.formRepository","href":"wyatt_authentication_bloc/AuthenticationRepository/formRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Form repository used in different authentication cubits/blocs","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"reauthenticate","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.reauthenticate","href":"wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Some security-sensitive actions—such as deleting an account,\nsetting a primary email address, and changing a password—require that\nthe user has recently signed in.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"refresh","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.refresh","href":"wyatt_authentication_bloc/AuthenticationRepository/refresh.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Refreshes the current user, if signed in.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"sendEmailVerification","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.sendEmailVerification","href":"wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sends verification email to the account email.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"sendPasswordResetEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.sendPasswordResetEmail","href":"wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sends a password reset email to the provided email.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"sessionStream","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.sessionStream","href":"wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Authentication state change event stream.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"signInAnonymously","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.signInAnonymously","href":"wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign in anonymously.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"signInWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.signInWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Signs in with the provided email and password.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"signInWithGoogle","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.signInWithGoogle","href":"wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Starts the Sign In with Google Flow.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"signOut","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.signOut","href":"wyatt_authentication_bloc/AuthenticationRepository/signOut.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Signs out the current user.\nIt also clears the cache and the associated data.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"signUpWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.signUpWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Creates a new user with the provided email and password.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"updateEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.updateEmail","href":"wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Update or add email.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"updatePassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.updatePassword","href":"wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Update or add password.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"verifyPasswordResetCode","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepository.verifyPasswordResetCode","href":"wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Verify password reset code.","enclosedBy":{"name":"AuthenticationRepository","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepository-class.md"}},{"name":"AuthenticationRepositoryImpl","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationRepositoryImpl","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.AuthenticationRepositoryImpl","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"addSession","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.addSession","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Add a new authentication event.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"authenticationRemoteDataSource","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.authenticationRemoteDataSource","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"confirmPasswordReset","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.confirmPasswordReset","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Confirms the password reset with the provided newPassword and code.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"delete","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.delete","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Delete account.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"formRepository","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.formRepository","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Form repository used in different authentication cubits/blocs","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"reauthenticate","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.reauthenticate","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Some security-sensitive actions—such as deleting an account,\nsetting a primary email address, and changing a password—require that\nthe user has recently signed in.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"refresh","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.refresh","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Refreshes the current user, if signed in.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"sendEmailVerification","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.sendEmailVerification","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Sends verification email to the account email.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"sendPasswordResetEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.sendPasswordResetEmail","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Sends a password reset email to the provided email.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"sessionStream","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.sessionStream","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Authentication state change event stream.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"signInAnonymously","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.signInAnonymously","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Sign in anonymously.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"signInWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.signInWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Signs in with the provided email and password.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"signInWithGoogle","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.signInWithGoogle","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Starts the Sign In with Google Flow.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"signOut","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.signOut","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Signs out the current user.\nIt also clears the cache and the associated data.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"signUpWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.signUpWithEmailAndPassword","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Creates a new user with the provided email and password.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"updateEmail","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.updateEmail","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Update or add email.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"updatePassword","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.updatePassword","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Update or add password.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"verifyPasswordResetCode","qualifiedName":"wyatt_authentication_bloc.AuthenticationRepositoryImpl.verifyPasswordResetCode","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Verify password reset code.","enclosedBy":{"name":"AuthenticationRepositoryImpl","type":"class","href":"wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md"}},{"name":"AuthenticationState","qualifiedName":"wyatt_authentication_bloc.AuthenticationState","href":"wyatt_authentication_bloc/AuthenticationState-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationState.authenticated","qualifiedName":"wyatt_authentication_bloc.AuthenticationState.authenticated","href":"wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationState","type":"class","href":"wyatt_authentication_bloc/AuthenticationState-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.AuthenticationState.props","href":"wyatt_authentication_bloc/AuthenticationState/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"AuthenticationState","type":"class","href":"wyatt_authentication_bloc/AuthenticationState-class.md"}},{"name":"status","qualifiedName":"wyatt_authentication_bloc.AuthenticationState.status","href":"wyatt_authentication_bloc/AuthenticationState/status.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationState","type":"class","href":"wyatt_authentication_bloc/AuthenticationState-class.md"}},{"name":"stringify","qualifiedName":"wyatt_authentication_bloc.AuthenticationState.stringify","href":"wyatt_authentication_bloc/AuthenticationState/stringify.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"If set to true, the toString method will be overridden to output\nthis instance's props.","enclosedBy":{"name":"AuthenticationState","type":"class","href":"wyatt_authentication_bloc/AuthenticationState-class.md"}},{"name":"AuthenticationState.unauthenticated","qualifiedName":"wyatt_authentication_bloc.AuthenticationState.unauthenticated","href":"wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationState","type":"class","href":"wyatt_authentication_bloc/AuthenticationState-class.md"}},{"name":"AuthenticationState.unknown","qualifiedName":"wyatt_authentication_bloc.AuthenticationState.unknown","href":"wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationState","type":"class","href":"wyatt_authentication_bloc/AuthenticationState-class.md"}},{"name":"wrapper","qualifiedName":"wyatt_authentication_bloc.AuthenticationState.wrapper","href":"wyatt_authentication_bloc/AuthenticationState/wrapper.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationState","type":"class","href":"wyatt_authentication_bloc/AuthenticationState-class.md"}},{"name":"AuthenticationStatus","qualifiedName":"wyatt_authentication_bloc.AuthenticationStatus","href":"wyatt_authentication_bloc/AuthenticationStatus.md","type":"enum","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Different authentication status","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"AuthenticationStatus","qualifiedName":"wyatt_authentication_bloc.AuthenticationStatus.AuthenticationStatus","href":"wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"AuthenticationStatus","type":"enum","href":"wyatt_authentication_bloc/AuthenticationStatus.md"}},{"name":"values","qualifiedName":"wyatt_authentication_bloc.AuthenticationStatus.values","href":"wyatt_authentication_bloc/AuthenticationStatus/values-constant.md","type":"constant","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"A constant List of the values in this enum, in order of their declaration.","enclosedBy":{"name":"AuthenticationStatus","type":"enum","href":"wyatt_authentication_bloc/AuthenticationStatus.md"}},{"name":"BaseEditAccountCubit","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Abstract edit account cubit useful for implementing a cubit with fine\ngranularity by adding only the required mixins.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"BaseEditAccountCubit","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.BaseEditAccountCubit","href":"wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"authenticationRepository","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.authenticationRepository","href":"wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"dataChanged","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.dataChanged","href":"wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"formName","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.formName","href":"wyatt_authentication_bloc/BaseEditAccountCubit/formName.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"formRepository","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.formRepository","href":"wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"reset","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.reset","href":"wyatt_authentication_bloc/BaseEditAccountCubit/reset.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"submit","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.submit","href":"wyatt_authentication_bloc/BaseEditAccountCubit/submit.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"update","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.update","href":"wyatt_authentication_bloc/BaseEditAccountCubit/update.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"validate","qualifiedName":"wyatt_authentication_bloc.BaseEditAccountCubit.validate","href":"wyatt_authentication_bloc/BaseEditAccountCubit/validate.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseEditAccountCubit","type":"class","href":"wyatt_authentication_bloc/BaseEditAccountCubit-class.md"}},{"name":"BaseSignInCubit","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Abstract sign in cubit useful for implementing a cubit with fine \ngranularity by adding only the required mixins.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"BaseSignInCubit","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.BaseSignInCubit","href":"wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"authenticationRepository","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.authenticationRepository","href":"wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"dataChanged","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.dataChanged","href":"wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"formName","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.formName","href":"wyatt_authentication_bloc/BaseSignInCubit/formName.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"formRepository","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.formRepository","href":"wyatt_authentication_bloc/BaseSignInCubit/formRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"reset","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.reset","href":"wyatt_authentication_bloc/BaseSignInCubit/reset.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"submit","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.submit","href":"wyatt_authentication_bloc/BaseSignInCubit/submit.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"update","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.update","href":"wyatt_authentication_bloc/BaseSignInCubit/update.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"validate","qualifiedName":"wyatt_authentication_bloc.BaseSignInCubit.validate","href":"wyatt_authentication_bloc/BaseSignInCubit/validate.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignInCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignInCubit-class.md"}},{"name":"BaseSignUpCubit","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Abstract sign up cubit useful for implementing a cubit with fine \ngranularity by adding only the required mixins.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"BaseSignUpCubit","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.BaseSignUpCubit","href":"wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"authenticationRepository","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.authenticationRepository","href":"wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"dataChanged","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.dataChanged","href":"wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"formName","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.formName","href":"wyatt_authentication_bloc/BaseSignUpCubit/formName.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"formRepository","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.formRepository","href":"wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"reset","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.reset","href":"wyatt_authentication_bloc/BaseSignUpCubit/reset.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"submit","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.submit","href":"wyatt_authentication_bloc/BaseSignUpCubit/submit.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"update","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.update","href":"wyatt_authentication_bloc/BaseSignUpCubit/update.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"validate","qualifiedName":"wyatt_authentication_bloc.BaseSignUpCubit.validate","href":"wyatt_authentication_bloc/BaseSignUpCubit/validate.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"BaseSignUpCubit","type":"class","href":"wyatt_authentication_bloc/BaseSignUpCubit-class.md"}},{"name":"BuildContextExtension","qualifiedName":"wyatt_authentication_bloc.BuildContextExtension","href":"wyatt_authentication_bloc/BuildContextExtension.md","type":"extension","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Extension that helps to quickly access useful resources like wrapper,\nsession, account or data.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.BuildContextExtension.account","href":"wyatt_authentication_bloc/BuildContextExtension/account.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns account","enclosedBy":{"name":"BuildContextExtension","type":"extension","href":"wyatt_authentication_bloc/BuildContextExtension.md"}},{"name":"data","qualifiedName":"wyatt_authentication_bloc.BuildContextExtension.data","href":"wyatt_authentication_bloc/BuildContextExtension/data.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns associated data","enclosedBy":{"name":"BuildContextExtension","type":"extension","href":"wyatt_authentication_bloc/BuildContextExtension.md"}},{"name":"session","qualifiedName":"wyatt_authentication_bloc.BuildContextExtension.session","href":"wyatt_authentication_bloc/BuildContextExtension/session.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns session","enclosedBy":{"name":"BuildContextExtension","type":"extension","href":"wyatt_authentication_bloc/BuildContextExtension.md"}},{"name":"wrapper","qualifiedName":"wyatt_authentication_bloc.BuildContextExtension.wrapper","href":"wyatt_authentication_bloc/BuildContextExtension/wrapper.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Returns session wrapper","enclosedBy":{"name":"BuildContextExtension","type":"extension","href":"wyatt_authentication_bloc/BuildContextExtension.md"}},{"name":"ConfirmPasswordResetFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ConfirmPasswordResetFailureFirebase","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ConfirmPasswordResetFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ConfirmPasswordResetFailureFirebase.ConfirmPasswordResetFailureFirebase","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ConfirmPasswordResetFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md"}},{"name":"ConfirmPasswordResetFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.ConfirmPasswordResetFailureFirebase.fromCode","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ConfirmPasswordResetFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md"}},{"name":"ConfirmPasswordResetFailureInterface","qualifiedName":"wyatt_authentication_bloc.ConfirmPasswordResetFailureInterface","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ConfirmPasswordResetFailureInterface","qualifiedName":"wyatt_authentication_bloc.ConfirmPasswordResetFailureInterface.ConfirmPasswordResetFailureInterface","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"ConfirmPasswordResetFailureInterface","type":"class","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md"}},{"name":"ConfirmPasswordResetFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.ConfirmPasswordResetFailureInterface.fromCode","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"ConfirmPasswordResetFailureInterface","type":"class","href":"wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md"}},{"name":"CustomRoutine","qualifiedName":"wyatt_authentication_bloc.CustomRoutine","href":"wyatt_authentication_bloc/CustomRoutine-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Calls on each cubit action of this package.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"CustomRoutine","qualifiedName":"wyatt_authentication_bloc.CustomRoutine.CustomRoutine","href":"wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"CustomRoutine","type":"class","href":"wyatt_authentication_bloc/CustomRoutine-class.md"}},{"name":"attachedLogic","qualifiedName":"wyatt_authentication_bloc.CustomRoutine.attachedLogic","href":"wyatt_authentication_bloc/CustomRoutine/attachedLogic.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"CustomRoutine","type":"class","href":"wyatt_authentication_bloc/CustomRoutine-class.md"}},{"name":"call","qualifiedName":"wyatt_authentication_bloc.CustomRoutine.call","href":"wyatt_authentication_bloc/CustomRoutine/call.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"CustomRoutine","type":"class","href":"wyatt_authentication_bloc/CustomRoutine-class.md"}},{"name":"onError","qualifiedName":"wyatt_authentication_bloc.CustomRoutine.onError","href":"wyatt_authentication_bloc/CustomRoutine/onError.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"CustomRoutine","type":"class","href":"wyatt_authentication_bloc/CustomRoutine-class.md"}},{"name":"onSuccess","qualifiedName":"wyatt_authentication_bloc.CustomRoutine.onSuccess","href":"wyatt_authentication_bloc/CustomRoutine/onSuccess.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"CustomRoutine","type":"class","href":"wyatt_authentication_bloc/CustomRoutine-class.md"}},{"name":"routine","qualifiedName":"wyatt_authentication_bloc.CustomRoutine.routine","href":"wyatt_authentication_bloc/CustomRoutine/routine.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"CustomRoutine","type":"class","href":"wyatt_authentication_bloc/CustomRoutine-class.md"}},{"name":"DeleteAccountFailureFirebase","qualifiedName":"wyatt_authentication_bloc.DeleteAccountFailureFirebase","href":"wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the account deletion if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"DeleteAccountFailureFirebase","qualifiedName":"wyatt_authentication_bloc.DeleteAccountFailureFirebase.DeleteAccountFailureFirebase","href":"wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"DeleteAccountFailureFirebase","type":"class","href":"wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md"}},{"name":"DeleteAccountFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.DeleteAccountFailureFirebase.fromCode","href":"wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"DeleteAccountFailureFirebase","type":"class","href":"wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md"}},{"name":"DeleteAccountFailureInterface","qualifiedName":"wyatt_authentication_bloc.DeleteAccountFailureInterface","href":"wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the account deletion if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"DeleteAccountFailureInterface","qualifiedName":"wyatt_authentication_bloc.DeleteAccountFailureInterface.DeleteAccountFailureInterface","href":"wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"DeleteAccountFailureInterface","type":"class","href":"wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md"}},{"name":"DeleteAccountFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.DeleteAccountFailureInterface.fromCode","href":"wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"DeleteAccountFailureInterface","type":"class","href":"wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md"}},{"name":"DeletedEvent","qualifiedName":"wyatt_authentication_bloc.DeletedEvent","href":"wyatt_authentication_bloc/DeletedEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user deleted his account.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"DeletedEvent","qualifiedName":"wyatt_authentication_bloc.DeletedEvent.DeletedEvent","href":"wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"DeletedEvent","type":"class","href":"wyatt_authentication_bloc/DeletedEvent-class.md"}},{"name":"EditAccountCubit","qualifiedName":"wyatt_authentication_bloc.EditAccountCubit","href":"wyatt_authentication_bloc/EditAccountCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Fully featured edit account cubit.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"EditAccountCubit","qualifiedName":"wyatt_authentication_bloc.EditAccountCubit.EditAccountCubit","href":"wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountCubit","type":"class","href":"wyatt_authentication_bloc/EditAccountCubit-class.md"}},{"name":"onEmailUpdated","qualifiedName":"wyatt_authentication_bloc.EditAccountCubit.onEmailUpdated","href":"wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when user updates his email","enclosedBy":{"name":"EditAccountCubit","type":"class","href":"wyatt_authentication_bloc/EditAccountCubit-class.md"}},{"name":"onPasswordUpdated","qualifiedName":"wyatt_authentication_bloc.EditAccountCubit.onPasswordUpdated","href":"wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user edits his password.","enclosedBy":{"name":"EditAccountCubit","type":"class","href":"wyatt_authentication_bloc/EditAccountCubit-class.md"}},{"name":"EditAccountListener","qualifiedName":"wyatt_authentication_bloc.EditAccountListener","href":"wyatt_authentication_bloc/EditAccountListener-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Widget that listens and builds a child based on the state of\nthe edit account cubit","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"EditAccountListener","qualifiedName":"wyatt_authentication_bloc.EditAccountListener.EditAccountListener","href":"wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountListener","type":"class","href":"wyatt_authentication_bloc/EditAccountListener-class.md"}},{"name":"build","qualifiedName":"wyatt_authentication_bloc.EditAccountListener.build","href":"wyatt_authentication_bloc/EditAccountListener/build.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Describes the part of the user interface represented by this widget.","enclosedBy":{"name":"EditAccountListener","type":"class","href":"wyatt_authentication_bloc/EditAccountListener-class.md"}},{"name":"child","qualifiedName":"wyatt_authentication_bloc.EditAccountListener.child","href":"wyatt_authentication_bloc/EditAccountListener/child.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountListener","type":"class","href":"wyatt_authentication_bloc/EditAccountListener-class.md"}},{"name":"customBuilder","qualifiedName":"wyatt_authentication_bloc.EditAccountListener.customBuilder","href":"wyatt_authentication_bloc/EditAccountListener/customBuilder.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountListener","type":"class","href":"wyatt_authentication_bloc/EditAccountListener-class.md"}},{"name":"onError","qualifiedName":"wyatt_authentication_bloc.EditAccountListener.onError","href":"wyatt_authentication_bloc/EditAccountListener/onError.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountListener","type":"class","href":"wyatt_authentication_bloc/EditAccountListener-class.md"}},{"name":"onProgress","qualifiedName":"wyatt_authentication_bloc.EditAccountListener.onProgress","href":"wyatt_authentication_bloc/EditAccountListener/onProgress.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountListener","type":"class","href":"wyatt_authentication_bloc/EditAccountListener-class.md"}},{"name":"onSuccess","qualifiedName":"wyatt_authentication_bloc.EditAccountListener.onSuccess","href":"wyatt_authentication_bloc/EditAccountListener/onSuccess.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountListener","type":"class","href":"wyatt_authentication_bloc/EditAccountListener-class.md"}},{"name":"EditAccountState","qualifiedName":"wyatt_authentication_bloc.EditAccountState","href":"wyatt_authentication_bloc/EditAccountState-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Edit account cubit state to manage the form.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"EditAccountState","qualifiedName":"wyatt_authentication_bloc.EditAccountState.EditAccountState","href":"wyatt_authentication_bloc/EditAccountState/EditAccountState.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"copyWith","qualifiedName":"wyatt_authentication_bloc.EditAccountState.copyWith","href":"wyatt_authentication_bloc/EditAccountState/copyWith.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"email","qualifiedName":"wyatt_authentication_bloc.EditAccountState.email","href":"wyatt_authentication_bloc/EditAccountState/email.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"errorMessage","qualifiedName":"wyatt_authentication_bloc.EditAccountState.errorMessage","href":"wyatt_authentication_bloc/EditAccountState/errorMessage.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Optional error message.","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"form","qualifiedName":"wyatt_authentication_bloc.EditAccountState.form","href":"wyatt_authentication_bloc/EditAccountState/form.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"FormData with all inputs, and associated metadata.","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"password","qualifiedName":"wyatt_authentication_bloc.EditAccountState.password","href":"wyatt_authentication_bloc/EditAccountState/password.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.EditAccountState.props","href":"wyatt_authentication_bloc/EditAccountState/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"status","qualifiedName":"wyatt_authentication_bloc.EditAccountState.status","href":"wyatt_authentication_bloc/EditAccountState/status.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Global status of a form.","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"toString","qualifiedName":"wyatt_authentication_bloc.EditAccountState.toString","href":"wyatt_authentication_bloc/EditAccountState/toString.md","type":"method","overriddenDepth":2,"packageName":"wyatt_authentication_bloc","desc":"A string representation of this object.","enclosedBy":{"name":"EditAccountState","type":"class","href":"wyatt_authentication_bloc/EditAccountState-class.md"}},{"name":"EmailVerificationBuilder","qualifiedName":"wyatt_authentication_bloc.EmailVerificationBuilder","href":"wyatt_authentication_bloc/EmailVerificationBuilder-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"EmailVerificationBuilder","qualifiedName":"wyatt_authentication_bloc.EmailVerificationBuilder.EmailVerificationBuilder","href":"wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationBuilder","type":"class","href":"wyatt_authentication_bloc/EmailVerificationBuilder-class.md"}},{"name":"build","qualifiedName":"wyatt_authentication_bloc.EmailVerificationBuilder.build","href":"wyatt_authentication_bloc/EmailVerificationBuilder/build.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Describes the part of the user interface represented by this widget.","enclosedBy":{"name":"EmailVerificationBuilder","type":"class","href":"wyatt_authentication_bloc/EmailVerificationBuilder-class.md"}},{"name":"customBuilder","qualifiedName":"wyatt_authentication_bloc.EmailVerificationBuilder.customBuilder","href":"wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationBuilder","type":"class","href":"wyatt_authentication_bloc/EmailVerificationBuilder-class.md"}},{"name":"notVerified","qualifiedName":"wyatt_authentication_bloc.EmailVerificationBuilder.notVerified","href":"wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationBuilder","type":"class","href":"wyatt_authentication_bloc/EmailVerificationBuilder-class.md"}},{"name":"onError","qualifiedName":"wyatt_authentication_bloc.EmailVerificationBuilder.onError","href":"wyatt_authentication_bloc/EmailVerificationBuilder/onError.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationBuilder","type":"class","href":"wyatt_authentication_bloc/EmailVerificationBuilder-class.md"}},{"name":"verified","qualifiedName":"wyatt_authentication_bloc.EmailVerificationBuilder.verified","href":"wyatt_authentication_bloc/EmailVerificationBuilder/verified.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationBuilder","type":"class","href":"wyatt_authentication_bloc/EmailVerificationBuilder-class.md"}},{"name":"EmailVerificationCubit","qualifiedName":"wyatt_authentication_bloc.EmailVerificationCubit","href":"wyatt_authentication_bloc/EmailVerificationCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"EmailVerificationCubit","qualifiedName":"wyatt_authentication_bloc.EmailVerificationCubit.EmailVerificationCubit","href":"wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationCubit","type":"class","href":"wyatt_authentication_bloc/EmailVerificationCubit-class.md"}},{"name":"authenticationRepository","qualifiedName":"wyatt_authentication_bloc.EmailVerificationCubit.authenticationRepository","href":"wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationCubit","type":"class","href":"wyatt_authentication_bloc/EmailVerificationCubit-class.md"}},{"name":"checkEmailVerification","qualifiedName":"wyatt_authentication_bloc.EmailVerificationCubit.checkEmailVerification","href":"wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationCubit","type":"class","href":"wyatt_authentication_bloc/EmailVerificationCubit-class.md"}},{"name":"sendEmailVerification","qualifiedName":"wyatt_authentication_bloc.EmailVerificationCubit.sendEmailVerification","href":"wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationCubit","type":"class","href":"wyatt_authentication_bloc/EmailVerificationCubit-class.md"}},{"name":"EmailVerificationState","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState","href":"wyatt_authentication_bloc/EmailVerificationState-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"EmailVerificationState","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState.EmailVerificationState","href":"wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationState","type":"class","href":"wyatt_authentication_bloc/EmailVerificationState-class.md"}},{"name":"copyWith","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState.copyWith","href":"wyatt_authentication_bloc/EmailVerificationState/copyWith.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationState","type":"class","href":"wyatt_authentication_bloc/EmailVerificationState-class.md"}},{"name":"errorMessage","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState.errorMessage","href":"wyatt_authentication_bloc/EmailVerificationState/errorMessage.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationState","type":"class","href":"wyatt_authentication_bloc/EmailVerificationState-class.md"}},{"name":"isVerified","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState.isVerified","href":"wyatt_authentication_bloc/EmailVerificationState/isVerified.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationState","type":"class","href":"wyatt_authentication_bloc/EmailVerificationState-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState.props","href":"wyatt_authentication_bloc/EmailVerificationState/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"EmailVerificationState","type":"class","href":"wyatt_authentication_bloc/EmailVerificationState-class.md"}},{"name":"status","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState.status","href":"wyatt_authentication_bloc/EmailVerificationState/status.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"EmailVerificationState","type":"class","href":"wyatt_authentication_bloc/EmailVerificationState-class.md"}},{"name":"toString","qualifiedName":"wyatt_authentication_bloc.EmailVerificationState.toString","href":"wyatt_authentication_bloc/EmailVerificationState/toString.md","type":"method","overriddenDepth":2,"packageName":"wyatt_authentication_bloc","desc":"A string representation of this object.","enclosedBy":{"name":"EmailVerificationState","type":"class","href":"wyatt_authentication_bloc/EmailVerificationState-class.md"}},{"name":"FetchSignInMethodsForEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.FetchSignInMethodsForEmailFailureFirebase","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the fetch sign in methods if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"FetchSignInMethodsForEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.FetchSignInMethodsForEmailFailureFirebase.FetchSignInMethodsForEmailFailureFirebase","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"FetchSignInMethodsForEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md"}},{"name":"FetchSignInMethodsForEmailFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.FetchSignInMethodsForEmailFailureFirebase.fromCode","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"FetchSignInMethodsForEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md"}},{"name":"FetchSignInMethodsForEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.FetchSignInMethodsForEmailFailureInterface","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the fetch sign in methods if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"FetchSignInMethodsForEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.FetchSignInMethodsForEmailFailureInterface.FetchSignInMethodsForEmailFailureInterface","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the fetch sign in methods if a failure occurs.","enclosedBy":{"name":"FetchSignInMethodsForEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md"}},{"name":"FetchSignInMethodsForEmailFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.FetchSignInMethodsForEmailFailureInterface.fromCode","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the fetch sign in methods if a failure occurs.","enclosedBy":{"name":"FetchSignInMethodsForEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md"}},{"name":"ModelParsingFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ModelParsingFailureFirebase","href":"wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the model parsing process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ModelParsingFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ModelParsingFailureFirebase.ModelParsingFailureFirebase","href":"wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ModelParsingFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md"}},{"name":"ModelParsingFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.ModelParsingFailureFirebase.fromCode","href":"wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ModelParsingFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md"}},{"name":"ModelParsingFailureInterface","qualifiedName":"wyatt_authentication_bloc.ModelParsingFailureInterface","href":"wyatt_authentication_bloc/ModelParsingFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the model parsing process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ModelParsingFailureInterface","qualifiedName":"wyatt_authentication_bloc.ModelParsingFailureInterface.ModelParsingFailureInterface","href":"wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ModelParsingFailureInterface","type":"class","href":"wyatt_authentication_bloc/ModelParsingFailureInterface-class.md"}},{"name":"ModelParsingFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.ModelParsingFailureInterface.fromCode","href":"wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ModelParsingFailureInterface","type":"class","href":"wyatt_authentication_bloc/ModelParsingFailureInterface-class.md"}},{"name":"PasswordResetCubit","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Cubit that allows user to reset his password","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"PasswordResetCubit","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.PasswordResetCubit","href":"wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"authenticationRepository","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.authenticationRepository","href":"wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"dataChanged","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.dataChanged","href":"wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"emailChanged","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.emailChanged","href":"wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"emailCustomChanged","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.emailCustomChanged","href":"wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Same as emailChanged but with a custom Validator.","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"formName","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.formName","href":"wyatt_authentication_bloc/PasswordResetCubit/formName.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"formRepository","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.formRepository","href":"wyatt_authentication_bloc/PasswordResetCubit/formRepository.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"reset","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.reset","href":"wyatt_authentication_bloc/PasswordResetCubit/reset.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"submit","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.submit","href":"wyatt_authentication_bloc/PasswordResetCubit/submit.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Sends a password reset email to the user","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"update","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.update","href":"wyatt_authentication_bloc/PasswordResetCubit/update.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"validate","qualifiedName":"wyatt_authentication_bloc.PasswordResetCubit.validate","href":"wyatt_authentication_bloc/PasswordResetCubit/validate.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetCubit","type":"class","href":"wyatt_authentication_bloc/PasswordResetCubit-class.md"}},{"name":"PasswordResetState","qualifiedName":"wyatt_authentication_bloc.PasswordResetState","href":"wyatt_authentication_bloc/PasswordResetState-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"PasswordResetState","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.PasswordResetState","href":"wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"copyWith","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.copyWith","href":"wyatt_authentication_bloc/PasswordResetState/copyWith.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"email","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.email","href":"wyatt_authentication_bloc/PasswordResetState/email.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"errorMessage","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.errorMessage","href":"wyatt_authentication_bloc/PasswordResetState/errorMessage.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Optional error message.","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"form","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.form","href":"wyatt_authentication_bloc/PasswordResetState/form.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"FormData with all inputs, and associated metadata.","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.props","href":"wyatt_authentication_bloc/PasswordResetState/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"status","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.status","href":"wyatt_authentication_bloc/PasswordResetState/status.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Global status of a form.","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"toString","qualifiedName":"wyatt_authentication_bloc.PasswordResetState.toString","href":"wyatt_authentication_bloc/PasswordResetState/toString.md","type":"method","overriddenDepth":2,"packageName":"wyatt_authentication_bloc","desc":"A string representation of this object.","enclosedBy":{"name":"PasswordResetState","type":"class","href":"wyatt_authentication_bloc/PasswordResetState-class.md"}},{"name":"ReauthenticateFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ReauthenticateFailureFirebase","href":"wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the reauthentication process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ReauthenticateFailureFirebase","qualifiedName":"wyatt_authentication_bloc.ReauthenticateFailureFirebase.ReauthenticateFailureFirebase","href":"wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ReauthenticateFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md"}},{"name":"ReauthenticateFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.ReauthenticateFailureFirebase.fromCode","href":"wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ReauthenticateFailureFirebase","type":"class","href":"wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md"}},{"name":"ReauthenticateFailureInterface","qualifiedName":"wyatt_authentication_bloc.ReauthenticateFailureInterface","href":"wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the reauthentication process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ReauthenticateFailureInterface","qualifiedName":"wyatt_authentication_bloc.ReauthenticateFailureInterface.ReauthenticateFailureInterface","href":"wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ReauthenticateFailureInterface","type":"class","href":"wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md"}},{"name":"ReauthenticateFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.ReauthenticateFailureInterface.fromCode","href":"wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ReauthenticateFailureInterface","type":"class","href":"wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md"}},{"name":"ReauthenticatedEvent","qualifiedName":"wyatt_authentication_bloc.ReauthenticatedEvent","href":"wyatt_authentication_bloc/ReauthenticatedEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user re-authenticates (from the logged in state to the \nlogged in state with a different and fresh access \ntoken and a different login time)","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"ReauthenticatedEvent","qualifiedName":"wyatt_authentication_bloc.ReauthenticatedEvent.ReauthenticatedEvent","href":"wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ReauthenticatedEvent","type":"class","href":"wyatt_authentication_bloc/ReauthenticatedEvent-class.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.ReauthenticatedEvent.account","href":"wyatt_authentication_bloc/ReauthenticatedEvent/account.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"ReauthenticatedEvent","type":"class","href":"wyatt_authentication_bloc/ReauthenticatedEvent-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.ReauthenticatedEvent.props","href":"wyatt_authentication_bloc/ReauthenticatedEvent/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"ReauthenticatedEvent","type":"class","href":"wyatt_authentication_bloc/ReauthenticatedEvent-class.md"}},{"name":"RefreshFailureFirebase","qualifiedName":"wyatt_authentication_bloc.RefreshFailureFirebase","href":"wyatt_authentication_bloc/RefreshFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the refresh process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"RefreshFailureFirebase","qualifiedName":"wyatt_authentication_bloc.RefreshFailureFirebase.RefreshFailureFirebase","href":"wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"RefreshFailureFirebase","type":"class","href":"wyatt_authentication_bloc/RefreshFailureFirebase-class.md"}},{"name":"RefreshFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.RefreshFailureFirebase.fromCode","href":"wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"RefreshFailureFirebase","type":"class","href":"wyatt_authentication_bloc/RefreshFailureFirebase-class.md"}},{"name":"RefreshFailureInterface","qualifiedName":"wyatt_authentication_bloc.RefreshFailureInterface","href":"wyatt_authentication_bloc/RefreshFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the refresh process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"RefreshFailureInterface","qualifiedName":"wyatt_authentication_bloc.RefreshFailureInterface.RefreshFailureInterface","href":"wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the refresh process if a failure occurs.","enclosedBy":{"name":"RefreshFailureInterface","type":"class","href":"wyatt_authentication_bloc/RefreshFailureInterface-class.md"}},{"name":"RefreshFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.RefreshFailureInterface.fromCode","href":"wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the refresh process if a failure occurs.","enclosedBy":{"name":"RefreshFailureInterface","type":"class","href":"wyatt_authentication_bloc/RefreshFailureInterface-class.md"}},{"name":"RefreshedEvent","qualifiedName":"wyatt_authentication_bloc.RefreshedEvent","href":"wyatt_authentication_bloc/RefreshedEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user access token is refreshed (from the logged in state to the \nlogged in state with a different access token)","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"RefreshedEvent","qualifiedName":"wyatt_authentication_bloc.RefreshedEvent.RefreshedEvent","href":"wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"RefreshedEvent","type":"class","href":"wyatt_authentication_bloc/RefreshedEvent-class.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.RefreshedEvent.account","href":"wyatt_authentication_bloc/RefreshedEvent/account.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"RefreshedEvent","type":"class","href":"wyatt_authentication_bloc/RefreshedEvent-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.RefreshedEvent.props","href":"wyatt_authentication_bloc/RefreshedEvent/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"RefreshedEvent","type":"class","href":"wyatt_authentication_bloc/RefreshedEvent-class.md"}},{"name":"SendEmailVerificationFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SendEmailVerificationFailureFirebase","href":"wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the email verification process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SendEmailVerificationFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SendEmailVerificationFailureFirebase.SendEmailVerificationFailureFirebase","href":"wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SendEmailVerificationFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md"}},{"name":"SendEmailVerificationFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SendEmailVerificationFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SendEmailVerificationFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md"}},{"name":"SendEmailVerificationFailureInterface","qualifiedName":"wyatt_authentication_bloc.SendEmailVerificationFailureInterface","href":"wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the email verification process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SendEmailVerificationFailureInterface","qualifiedName":"wyatt_authentication_bloc.SendEmailVerificationFailureInterface.SendEmailVerificationFailureInterface","href":"wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the email verification process if a failure occurs.","enclosedBy":{"name":"SendEmailVerificationFailureInterface","type":"class","href":"wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md"}},{"name":"SendEmailVerificationFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SendEmailVerificationFailureInterface.fromCode","href":"wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the email verification process if a failure occurs.","enclosedBy":{"name":"SendEmailVerificationFailureInterface","type":"class","href":"wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md"}},{"name":"SendPasswordResetEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SendPasswordResetEmailFailureFirebase","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SendPasswordResetEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SendPasswordResetEmailFailureFirebase.SendPasswordResetEmailFailureFirebase","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SendPasswordResetEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md"}},{"name":"SendPasswordResetEmailFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SendPasswordResetEmailFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SendPasswordResetEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md"}},{"name":"SendPasswordResetEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.SendPasswordResetEmailFailureInterface","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SendPasswordResetEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.SendPasswordResetEmailFailureInterface.SendPasswordResetEmailFailureInterface","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"SendPasswordResetEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md"}},{"name":"SendPasswordResetEmailFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SendPasswordResetEmailFailureInterface.fromCode","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"SendPasswordResetEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md"}},{"name":"SendSignInLinkEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SendSignInLinkEmailFailureFirebase","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in link process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SendSignInLinkEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SendSignInLinkEmailFailureFirebase.SendSignInLinkEmailFailureFirebase","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SendSignInLinkEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md"}},{"name":"SendSignInLinkEmailFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SendSignInLinkEmailFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SendSignInLinkEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md"}},{"name":"SendSignInLinkEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.SendSignInLinkEmailFailureInterface","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in link process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SendSignInLinkEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.SendSignInLinkEmailFailureInterface.SendSignInLinkEmailFailureInterface","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in link process if a failure occurs.","enclosedBy":{"name":"SendSignInLinkEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md"}},{"name":"SendSignInLinkEmailFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SendSignInLinkEmailFailureInterface.fromCode","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in link process if a failure occurs.","enclosedBy":{"name":"SendSignInLinkEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md"}},{"name":"Session","qualifiedName":"wyatt_authentication_bloc.Session","href":"wyatt_authentication_bloc/Session-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The Session object is used to transport and propagate\nthe connected user Account and personalized Data in the application.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"Session","qualifiedName":"wyatt_authentication_bloc.Session.Session","href":"wyatt_authentication_bloc/Session/Session.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"Session","type":"class","href":"wyatt_authentication_bloc/Session-class.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.Session.account","href":"wyatt_authentication_bloc/Session/account.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"Session","type":"class","href":"wyatt_authentication_bloc/Session-class.md"}},{"name":"data","qualifiedName":"wyatt_authentication_bloc.Session.data","href":"wyatt_authentication_bloc/Session/data.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"Session","type":"class","href":"wyatt_authentication_bloc/Session-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.Session.props","href":"wyatt_authentication_bloc/Session/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"Session","type":"class","href":"wyatt_authentication_bloc/Session-class.md"}},{"name":"stringify","qualifiedName":"wyatt_authentication_bloc.Session.stringify","href":"wyatt_authentication_bloc/Session/stringify.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"If set to true, the toString method will be overridden to output\nthis instance's props.","enclosedBy":{"name":"Session","type":"class","href":"wyatt_authentication_bloc/Session-class.md"}},{"name":"SessionWrapper","qualifiedName":"wyatt_authentication_bloc.SessionWrapper","href":"wyatt_authentication_bloc/SessionWrapper-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Contains the AuthenticationChangeEvent initiating the state \nchange and the current Session.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SessionWrapper","qualifiedName":"wyatt_authentication_bloc.SessionWrapper.SessionWrapper","href":"wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SessionWrapper","type":"class","href":"wyatt_authentication_bloc/SessionWrapper-class.md"}},{"name":"event","qualifiedName":"wyatt_authentication_bloc.SessionWrapper.event","href":"wyatt_authentication_bloc/SessionWrapper/event.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SessionWrapper","type":"class","href":"wyatt_authentication_bloc/SessionWrapper-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.SessionWrapper.props","href":"wyatt_authentication_bloc/SessionWrapper/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"SessionWrapper","type":"class","href":"wyatt_authentication_bloc/SessionWrapper-class.md"}},{"name":"session","qualifiedName":"wyatt_authentication_bloc.SessionWrapper.session","href":"wyatt_authentication_bloc/SessionWrapper/session.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SessionWrapper","type":"class","href":"wyatt_authentication_bloc/SessionWrapper-class.md"}},{"name":"stringify","qualifiedName":"wyatt_authentication_bloc.SessionWrapper.stringify","href":"wyatt_authentication_bloc/SessionWrapper/stringify.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"If set to true, the toString method will be overridden to output\nthis instance's props.","enclosedBy":{"name":"SessionWrapper","type":"class","href":"wyatt_authentication_bloc/SessionWrapper-class.md"}},{"name":"SignInAnonymously","qualifiedName":"wyatt_authentication_bloc.SignInAnonymously","href":"wyatt_authentication_bloc/SignInAnonymously-mixin.md","type":"mixin","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign in mixin.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"onSignInAnonymously","qualifiedName":"wyatt_authentication_bloc.SignInAnonymously.onSignInAnonymously","href":"wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user signs in anonymously.","enclosedBy":{"name":"SignInAnonymously","type":"mixin","href":"wyatt_authentication_bloc/SignInAnonymously-mixin.md"}},{"name":"signInAnonymously","qualifiedName":"wyatt_authentication_bloc.SignInAnonymously.signInAnonymously","href":"wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign in anonymously.","enclosedBy":{"name":"SignInAnonymously","type":"mixin","href":"wyatt_authentication_bloc/SignInAnonymously-mixin.md"}},{"name":"SignInAnonymouslyFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInAnonymouslyFailureFirebase","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInAnonymouslyFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInAnonymouslyFailureFirebase.SignInAnonymouslyFailureFirebase","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInAnonymouslyFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md"}},{"name":"SignInAnonymouslyFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInAnonymouslyFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInAnonymouslyFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md"}},{"name":"SignInAnonymouslyFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInAnonymouslyFailureInterface","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInAnonymouslyFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInAnonymouslyFailureInterface.SignInAnonymouslyFailureInterface","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInAnonymouslyFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md"}},{"name":"SignInAnonymouslyFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInAnonymouslyFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInAnonymouslyFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md"}},{"name":"SignInCubit","qualifiedName":"wyatt_authentication_bloc.SignInCubit","href":"wyatt_authentication_bloc/SignInCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Fully featured sign in cubit.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInCubit","qualifiedName":"wyatt_authentication_bloc.SignInCubit.SignInCubit","href":"wyatt_authentication_bloc/SignInCubit/SignInCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInCubit","type":"class","href":"wyatt_authentication_bloc/SignInCubit-class.md"}},{"name":"onSignInAnonymously","qualifiedName":"wyatt_authentication_bloc.SignInCubit.onSignInAnonymously","href":"wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user signs in anonymously.","enclosedBy":{"name":"SignInCubit","type":"class","href":"wyatt_authentication_bloc/SignInCubit-class.md"}},{"name":"onSignInWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.SignInCubit.onSignInWithEmailAndPassword","href":"wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user signs in with email and password.","enclosedBy":{"name":"SignInCubit","type":"class","href":"wyatt_authentication_bloc/SignInCubit-class.md"}},{"name":"onSignInWithGoogle","qualifiedName":"wyatt_authentication_bloc.SignInCubit.onSignInWithGoogle","href":"wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user signs in with google.","enclosedBy":{"name":"SignInCubit","type":"class","href":"wyatt_authentication_bloc/SignInCubit-class.md"}},{"name":"SignInListener","qualifiedName":"wyatt_authentication_bloc.SignInListener","href":"wyatt_authentication_bloc/SignInListener-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Widget that listens and builds a child based on the state of \nthe sign in cubit","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInListener","qualifiedName":"wyatt_authentication_bloc.SignInListener.SignInListener","href":"wyatt_authentication_bloc/SignInListener/SignInListener.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInListener","type":"class","href":"wyatt_authentication_bloc/SignInListener-class.md"}},{"name":"build","qualifiedName":"wyatt_authentication_bloc.SignInListener.build","href":"wyatt_authentication_bloc/SignInListener/build.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Describes the part of the user interface represented by this widget.","enclosedBy":{"name":"SignInListener","type":"class","href":"wyatt_authentication_bloc/SignInListener-class.md"}},{"name":"child","qualifiedName":"wyatt_authentication_bloc.SignInListener.child","href":"wyatt_authentication_bloc/SignInListener/child.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInListener","type":"class","href":"wyatt_authentication_bloc/SignInListener-class.md"}},{"name":"customBuilder","qualifiedName":"wyatt_authentication_bloc.SignInListener.customBuilder","href":"wyatt_authentication_bloc/SignInListener/customBuilder.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInListener","type":"class","href":"wyatt_authentication_bloc/SignInListener-class.md"}},{"name":"onError","qualifiedName":"wyatt_authentication_bloc.SignInListener.onError","href":"wyatt_authentication_bloc/SignInListener/onError.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInListener","type":"class","href":"wyatt_authentication_bloc/SignInListener-class.md"}},{"name":"onProgress","qualifiedName":"wyatt_authentication_bloc.SignInListener.onProgress","href":"wyatt_authentication_bloc/SignInListener/onProgress.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInListener","type":"class","href":"wyatt_authentication_bloc/SignInListener-class.md"}},{"name":"onSuccess","qualifiedName":"wyatt_authentication_bloc.SignInListener.onSuccess","href":"wyatt_authentication_bloc/SignInListener/onSuccess.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInListener","type":"class","href":"wyatt_authentication_bloc/SignInListener-class.md"}},{"name":"SignInState","qualifiedName":"wyatt_authentication_bloc.SignInState","href":"wyatt_authentication_bloc/SignInState-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign in cubit state to manage the form.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInState","qualifiedName":"wyatt_authentication_bloc.SignInState.SignInState","href":"wyatt_authentication_bloc/SignInState/SignInState.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"copyWith","qualifiedName":"wyatt_authentication_bloc.SignInState.copyWith","href":"wyatt_authentication_bloc/SignInState/copyWith.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"email","qualifiedName":"wyatt_authentication_bloc.SignInState.email","href":"wyatt_authentication_bloc/SignInState/email.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"errorMessage","qualifiedName":"wyatt_authentication_bloc.SignInState.errorMessage","href":"wyatt_authentication_bloc/SignInState/errorMessage.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Optional error message.","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"form","qualifiedName":"wyatt_authentication_bloc.SignInState.form","href":"wyatt_authentication_bloc/SignInState/form.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"FormData with all inputs, and associated metadata.","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"password","qualifiedName":"wyatt_authentication_bloc.SignInState.password","href":"wyatt_authentication_bloc/SignInState/password.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.SignInState.props","href":"wyatt_authentication_bloc/SignInState/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"status","qualifiedName":"wyatt_authentication_bloc.SignInState.status","href":"wyatt_authentication_bloc/SignInState/status.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Global status of a form.","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"toString","qualifiedName":"wyatt_authentication_bloc.SignInState.toString","href":"wyatt_authentication_bloc/SignInState/toString.md","type":"method","overriddenDepth":2,"packageName":"wyatt_authentication_bloc","desc":"A string representation of this object.","enclosedBy":{"name":"SignInState","type":"class","href":"wyatt_authentication_bloc/SignInState-class.md"}},{"name":"SignInWithAppleFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithAppleFailureFirebase","href":"wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithAppleFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithAppleFailureFirebase.SignInWithAppleFailureFirebase","href":"wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithAppleFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md"}},{"name":"SignInWithAppleFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithAppleFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithAppleFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md"}},{"name":"SignInWithAppleFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithAppleFailureInterface","href":"wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithAppleFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithAppleFailureInterface.SignInWithAppleFailureInterface","href":"wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithAppleFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md"}},{"name":"SignInWithAppleFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithAppleFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithAppleFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md"}},{"name":"SignInWithCredentialFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithCredentialFailureFirebase","href":"wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithCredentialFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithCredentialFailureFirebase.SignInWithCredentialFailureFirebase","href":"wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithCredentialFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md"}},{"name":"SignInWithCredentialFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithCredentialFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithCredentialFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md"}},{"name":"SignInWithCredentialFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithCredentialFailureInterface","href":"wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithCredentialFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithCredentialFailureInterface.SignInWithCredentialFailureInterface","href":"wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithCredentialFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md"}},{"name":"SignInWithCredentialFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithCredentialFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithCredentialFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md"}},{"name":"SignInWithEmailAndPasswordFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailAndPasswordFailureFirebase","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithEmailAndPasswordFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailAndPasswordFailureFirebase.SignInWithEmailAndPasswordFailureFirebase","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithEmailAndPasswordFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md"}},{"name":"SignInWithEmailAndPasswordFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailAndPasswordFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithEmailAndPasswordFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md"}},{"name":"SignInWithEmailAndPasswordFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailAndPasswordFailureInterface","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithEmailAndPasswordFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailAndPasswordFailureInterface.SignInWithEmailAndPasswordFailureInterface","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithEmailAndPasswordFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md"}},{"name":"SignInWithEmailAndPasswordFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailAndPasswordFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithEmailAndPasswordFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md"}},{"name":"SignInWithEmailLinkFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailLinkFailureFirebase","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithEmailLinkFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailLinkFailureFirebase.SignInWithEmailLinkFailureFirebase","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithEmailLinkFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md"}},{"name":"SignInWithEmailLinkFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailLinkFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithEmailLinkFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md"}},{"name":"SignInWithEmailLinkFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailLinkFailureInterface","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithEmailLinkFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailLinkFailureInterface.SignInWithEmailLinkFailureInterface","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithEmailLinkFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md"}},{"name":"SignInWithEmailLinkFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailLinkFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithEmailLinkFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md"}},{"name":"SignInWithEmailPassword","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailPassword","href":"wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md","type":"mixin","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign in mixin.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"emailChanged","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailPassword.emailChanged","href":"wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md"}},{"name":"emailCustomChanged","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailPassword.emailCustomChanged","href":"wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Same as emailChanged but with a custom Validator.","enclosedBy":{"name":"SignInWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md"}},{"name":"onSignInWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailPassword.onSignInWithEmailAndPassword","href":"wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user signs in with email and password.","enclosedBy":{"name":"SignInWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md"}},{"name":"passwordChanged","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailPassword.passwordChanged","href":"wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md"}},{"name":"passwordCustomChanged","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailPassword.passwordCustomChanged","href":"wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Same as passwordChanged but with a custom Validator.","enclosedBy":{"name":"SignInWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md"}},{"name":"signInWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.SignInWithEmailPassword.signInWithEmailAndPassword","href":"wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Signs in with the provided email and password.","enclosedBy":{"name":"SignInWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md"}},{"name":"SignInWithFacebookFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithFacebookFailureFirebase","href":"wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithFacebookFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithFacebookFailureFirebase.SignInWithFacebookFailureFirebase","href":"wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithFacebookFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md"}},{"name":"SignInWithFacebookFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithFacebookFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithFacebookFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md"}},{"name":"SignInWithFacebookFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithFacebookFailureInterface","href":"wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithFacebookFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithFacebookFailureInterface.SignInWithFacebookFailureInterface","href":"wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithFacebookFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md"}},{"name":"SignInWithFacebookFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithFacebookFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithFacebookFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md"}},{"name":"SignInWithGoogle","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogle","href":"wyatt_authentication_bloc/SignInWithGoogle-mixin.md","type":"mixin","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign in mixin.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"onSignInWithGoogle","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogle.onSignInWithGoogle","href":"wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user signs in with google.","enclosedBy":{"name":"SignInWithGoogle","type":"mixin","href":"wyatt_authentication_bloc/SignInWithGoogle-mixin.md"}},{"name":"signInWithGoogle","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogle.signInWithGoogle","href":"wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Starts the Sign In with Google Flow.","enclosedBy":{"name":"SignInWithGoogle","type":"mixin","href":"wyatt_authentication_bloc/SignInWithGoogle-mixin.md"}},{"name":"SignInWithGoogleFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogleFailureFirebase","href":"wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithGoogleFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogleFailureFirebase.SignInWithGoogleFailureFirebase","href":"wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithGoogleFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md"}},{"name":"SignInWithGoogleFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogleFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithGoogleFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md"}},{"name":"SignInWithGoogleFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogleFailureInterface","href":"wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithGoogleFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogleFailureInterface.SignInWithGoogleFailureInterface","href":"wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithGoogleFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md"}},{"name":"SignInWithGoogleFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithGoogleFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithGoogleFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md"}},{"name":"SignInWithTwitterFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithTwitterFailureFirebase","href":"wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithTwitterFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignInWithTwitterFailureFirebase.SignInWithTwitterFailureFirebase","href":"wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithTwitterFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md"}},{"name":"SignInWithTwitterFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithTwitterFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignInWithTwitterFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md"}},{"name":"SignInWithTwitterFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithTwitterFailureInterface","href":"wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignInWithTwitterFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignInWithTwitterFailureInterface.SignInWithTwitterFailureInterface","href":"wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithTwitterFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md"}},{"name":"SignInWithTwitterFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignInWithTwitterFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign in process if a failure occurs.","enclosedBy":{"name":"SignInWithTwitterFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md"}},{"name":"SignOutFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignOutFailureFirebase","href":"wyatt_authentication_bloc/SignOutFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign out process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignOutFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignOutFailureFirebase.SignOutFailureFirebase","href":"wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignOutFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignOutFailureFirebase-class.md"}},{"name":"SignOutFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignOutFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignOutFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignOutFailureFirebase-class.md"}},{"name":"SignOutFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignOutFailureInterface","href":"wyatt_authentication_bloc/SignOutFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign out process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignOutFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignOutFailureInterface.SignOutFailureInterface","href":"wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign out process if a failure occurs.","enclosedBy":{"name":"SignOutFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignOutFailureInterface-class.md"}},{"name":"SignOutFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignOutFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the sign out process if a failure occurs.","enclosedBy":{"name":"SignOutFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignOutFailureInterface-class.md"}},{"name":"SignUpCubit","qualifiedName":"wyatt_authentication_bloc.SignUpCubit","href":"wyatt_authentication_bloc/SignUpCubit-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Fully featured sign up cubit.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignUpCubit","qualifiedName":"wyatt_authentication_bloc.SignUpCubit.SignUpCubit","href":"wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpCubit","type":"class","href":"wyatt_authentication_bloc/SignUpCubit-class.md"}},{"name":"onSignUpWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.SignUpCubit.onSignUpWithEmailAndPassword","href":"wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user creates an account.","enclosedBy":{"name":"SignUpCubit","type":"class","href":"wyatt_authentication_bloc/SignUpCubit-class.md"}},{"name":"SignUpListener","qualifiedName":"wyatt_authentication_bloc.SignUpListener","href":"wyatt_authentication_bloc/SignUpListener-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Widget that listens and builds a child based on the state of \nthe sign up cubit","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignUpListener","qualifiedName":"wyatt_authentication_bloc.SignUpListener.SignUpListener","href":"wyatt_authentication_bloc/SignUpListener/SignUpListener.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpListener","type":"class","href":"wyatt_authentication_bloc/SignUpListener-class.md"}},{"name":"build","qualifiedName":"wyatt_authentication_bloc.SignUpListener.build","href":"wyatt_authentication_bloc/SignUpListener/build.md","type":"method","overriddenDepth":1,"packageName":"wyatt_authentication_bloc","desc":"Describes the part of the user interface represented by this widget.","enclosedBy":{"name":"SignUpListener","type":"class","href":"wyatt_authentication_bloc/SignUpListener-class.md"}},{"name":"child","qualifiedName":"wyatt_authentication_bloc.SignUpListener.child","href":"wyatt_authentication_bloc/SignUpListener/child.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpListener","type":"class","href":"wyatt_authentication_bloc/SignUpListener-class.md"}},{"name":"customBuilder","qualifiedName":"wyatt_authentication_bloc.SignUpListener.customBuilder","href":"wyatt_authentication_bloc/SignUpListener/customBuilder.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpListener","type":"class","href":"wyatt_authentication_bloc/SignUpListener-class.md"}},{"name":"onError","qualifiedName":"wyatt_authentication_bloc.SignUpListener.onError","href":"wyatt_authentication_bloc/SignUpListener/onError.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpListener","type":"class","href":"wyatt_authentication_bloc/SignUpListener-class.md"}},{"name":"onProgress","qualifiedName":"wyatt_authentication_bloc.SignUpListener.onProgress","href":"wyatt_authentication_bloc/SignUpListener/onProgress.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpListener","type":"class","href":"wyatt_authentication_bloc/SignUpListener-class.md"}},{"name":"onSuccess","qualifiedName":"wyatt_authentication_bloc.SignUpListener.onSuccess","href":"wyatt_authentication_bloc/SignUpListener/onSuccess.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpListener","type":"class","href":"wyatt_authentication_bloc/SignUpListener-class.md"}},{"name":"SignUpState","qualifiedName":"wyatt_authentication_bloc.SignUpState","href":"wyatt_authentication_bloc/SignUpState-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign up cubit state to manage the form.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignUpState","qualifiedName":"wyatt_authentication_bloc.SignUpState.SignUpState","href":"wyatt_authentication_bloc/SignUpState/SignUpState.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"copyWith","qualifiedName":"wyatt_authentication_bloc.SignUpState.copyWith","href":"wyatt_authentication_bloc/SignUpState/copyWith.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"email","qualifiedName":"wyatt_authentication_bloc.SignUpState.email","href":"wyatt_authentication_bloc/SignUpState/email.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"errorMessage","qualifiedName":"wyatt_authentication_bloc.SignUpState.errorMessage","href":"wyatt_authentication_bloc/SignUpState/errorMessage.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Optional error message.","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"form","qualifiedName":"wyatt_authentication_bloc.SignUpState.form","href":"wyatt_authentication_bloc/SignUpState/form.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"FormData with all inputs, and associated metadata.","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"password","qualifiedName":"wyatt_authentication_bloc.SignUpState.password","href":"wyatt_authentication_bloc/SignUpState/password.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.SignUpState.props","href":"wyatt_authentication_bloc/SignUpState/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"status","qualifiedName":"wyatt_authentication_bloc.SignUpState.status","href":"wyatt_authentication_bloc/SignUpState/status.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Global status of a form.","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"toString","qualifiedName":"wyatt_authentication_bloc.SignUpState.toString","href":"wyatt_authentication_bloc/SignUpState/toString.md","type":"method","overriddenDepth":2,"packageName":"wyatt_authentication_bloc","desc":"A string representation of this object.","enclosedBy":{"name":"SignUpState","type":"class","href":"wyatt_authentication_bloc/SignUpState-class.md"}},{"name":"SignUpWithEmailAndPasswordFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailAndPasswordFailureFirebase","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the sign up process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignUpWithEmailAndPasswordFailureFirebase","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailAndPasswordFailureFirebase.SignUpWithEmailAndPasswordFailureFirebase","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpWithEmailAndPasswordFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md"}},{"name":"SignUpWithEmailAndPasswordFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailAndPasswordFailureFirebase.fromCode","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpWithEmailAndPasswordFailureFirebase","type":"class","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md"}},{"name":"SignUpWithEmailAndPasswordFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailAndPasswordFailureInterface","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the sign up process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignUpWithEmailAndPasswordFailureInterface","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailAndPasswordFailureInterface.SignUpWithEmailAndPasswordFailureInterface","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the sign up process if a failure occurs.","enclosedBy":{"name":"SignUpWithEmailAndPasswordFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md"}},{"name":"SignUpWithEmailAndPasswordFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailAndPasswordFailureInterface.fromCode","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown if during the sign up process if a failure occurs.","enclosedBy":{"name":"SignUpWithEmailAndPasswordFailureInterface","type":"class","href":"wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md"}},{"name":"SignUpWithEmailPassword","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailPassword","href":"wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md","type":"mixin","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Sign up mixin.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"emailChanged","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailPassword.emailChanged","href":"wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md"}},{"name":"emailCustomChanged","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailPassword.emailCustomChanged","href":"wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Same as emailChanged but with a custom Validator.","enclosedBy":{"name":"SignUpWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md"}},{"name":"onSignUpWithEmailAndPassword","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailPassword.onSignUpWithEmailAndPassword","href":"wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user creates an account.","enclosedBy":{"name":"SignUpWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md"}},{"name":"passwordChanged","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailPassword.passwordChanged","href":"wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignUpWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md"}},{"name":"passwordCustomChanged","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailPassword.passwordCustomChanged","href":"wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Same as passwordChanged but with a custom Validator.","enclosedBy":{"name":"SignUpWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md"}},{"name":"signUpWithEmailPassword","qualifiedName":"wyatt_authentication_bloc.SignUpWithEmailPassword.signUpWithEmailPassword","href":"wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Creates a new user with the provided email and password.","enclosedBy":{"name":"SignUpWithEmailPassword","type":"mixin","href":"wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md"}},{"name":"SignedInEvent","qualifiedName":"wyatt_authentication_bloc.SignedInEvent","href":"wyatt_authentication_bloc/SignedInEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user authenticates (from not logged in to logged in).","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignedInEvent","qualifiedName":"wyatt_authentication_bloc.SignedInEvent.SignedInEvent","href":"wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignedInEvent","type":"class","href":"wyatt_authentication_bloc/SignedInEvent-class.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.SignedInEvent.account","href":"wyatt_authentication_bloc/SignedInEvent/account.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignedInEvent","type":"class","href":"wyatt_authentication_bloc/SignedInEvent-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.SignedInEvent.props","href":"wyatt_authentication_bloc/SignedInEvent/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"SignedInEvent","type":"class","href":"wyatt_authentication_bloc/SignedInEvent-class.md"}},{"name":"SignedInFromCacheEvent","qualifiedName":"wyatt_authentication_bloc.SignedInFromCacheEvent","href":"wyatt_authentication_bloc/SignedInFromCacheEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user authenticates automatically (from not logged in to logged in).","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignedInFromCacheEvent","qualifiedName":"wyatt_authentication_bloc.SignedInFromCacheEvent.SignedInFromCacheEvent","href":"wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignedInFromCacheEvent","type":"class","href":"wyatt_authentication_bloc/SignedInFromCacheEvent-class.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.SignedInFromCacheEvent.account","href":"wyatt_authentication_bloc/SignedInFromCacheEvent/account.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignedInFromCacheEvent","type":"class","href":"wyatt_authentication_bloc/SignedInFromCacheEvent-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.SignedInFromCacheEvent.props","href":"wyatt_authentication_bloc/SignedInFromCacheEvent/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"SignedInFromCacheEvent","type":"class","href":"wyatt_authentication_bloc/SignedInFromCacheEvent-class.md"}},{"name":"SignedOutEvent","qualifiedName":"wyatt_authentication_bloc.SignedOutEvent","href":"wyatt_authentication_bloc/SignedOutEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user logs out.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignedOutEvent","qualifiedName":"wyatt_authentication_bloc.SignedOutEvent.SignedOutEvent","href":"wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignedOutEvent","type":"class","href":"wyatt_authentication_bloc/SignedOutEvent-class.md"}},{"name":"SignedUpEvent","qualifiedName":"wyatt_authentication_bloc.SignedUpEvent","href":"wyatt_authentication_bloc/SignedUpEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user creates an account.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"SignedUpEvent","qualifiedName":"wyatt_authentication_bloc.SignedUpEvent.SignedUpEvent","href":"wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignedUpEvent","type":"class","href":"wyatt_authentication_bloc/SignedUpEvent-class.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.SignedUpEvent.account","href":"wyatt_authentication_bloc/SignedUpEvent/account.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"SignedUpEvent","type":"class","href":"wyatt_authentication_bloc/SignedUpEvent-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.SignedUpEvent.props","href":"wyatt_authentication_bloc/SignedUpEvent/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"SignedUpEvent","type":"class","href":"wyatt_authentication_bloc/SignedUpEvent-class.md"}},{"name":"UnknownAuthenticationEvent","qualifiedName":"wyatt_authentication_bloc.UnknownAuthenticationEvent","href":"wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When a user's login status is unknown.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"UnknownAuthenticationEvent","qualifiedName":"wyatt_authentication_bloc.UnknownAuthenticationEvent.UnknownAuthenticationEvent","href":"wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UnknownAuthenticationEvent","type":"class","href":"wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md"}},{"name":"UpdateEmail","qualifiedName":"wyatt_authentication_bloc.UpdateEmail","href":"wyatt_authentication_bloc/UpdateEmail-mixin.md","type":"mixin","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Edit account mixin.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"emailChanged","qualifiedName":"wyatt_authentication_bloc.UpdateEmail.emailChanged","href":"wyatt_authentication_bloc/UpdateEmail/emailChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdateEmail","type":"mixin","href":"wyatt_authentication_bloc/UpdateEmail-mixin.md"}},{"name":"emailCustomChanged","qualifiedName":"wyatt_authentication_bloc.UpdateEmail.emailCustomChanged","href":"wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Same as emailChanged but with a custom Validator.","enclosedBy":{"name":"UpdateEmail","type":"mixin","href":"wyatt_authentication_bloc/UpdateEmail-mixin.md"}},{"name":"onEmailUpdated","qualifiedName":"wyatt_authentication_bloc.UpdateEmail.onEmailUpdated","href":"wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when user updates his email","enclosedBy":{"name":"UpdateEmail","type":"mixin","href":"wyatt_authentication_bloc/UpdateEmail-mixin.md"}},{"name":"updateEmail","qualifiedName":"wyatt_authentication_bloc.UpdateEmail.updateEmail","href":"wyatt_authentication_bloc/UpdateEmail/updateEmail.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Update or add email.","enclosedBy":{"name":"UpdateEmail","type":"mixin","href":"wyatt_authentication_bloc/UpdateEmail-mixin.md"}},{"name":"UpdateEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.UpdateEmailFailureFirebase","href":"wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the email modification process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"UpdateEmailFailureFirebase","qualifiedName":"wyatt_authentication_bloc.UpdateEmailFailureFirebase.UpdateEmailFailureFirebase","href":"wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdateEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md"}},{"name":"UpdateEmailFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.UpdateEmailFailureFirebase.fromCode","href":"wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdateEmailFailureFirebase","type":"class","href":"wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md"}},{"name":"UpdateEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.UpdateEmailFailureInterface","href":"wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the email modification process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"UpdateEmailFailureInterface","qualifiedName":"wyatt_authentication_bloc.UpdateEmailFailureInterface.UpdateEmailFailureInterface","href":"wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdateEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md"}},{"name":"UpdateEmailFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.UpdateEmailFailureInterface.fromCode","href":"wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdateEmailFailureInterface","type":"class","href":"wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md"}},{"name":"UpdatePassword","qualifiedName":"wyatt_authentication_bloc.UpdatePassword","href":"wyatt_authentication_bloc/UpdatePassword-mixin.md","type":"mixin","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Edit account mixin.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"onPasswordUpdated","qualifiedName":"wyatt_authentication_bloc.UpdatePassword.onPasswordUpdated","href":"wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"This callback is triggered when a user edits his password.","enclosedBy":{"name":"UpdatePassword","type":"mixin","href":"wyatt_authentication_bloc/UpdatePassword-mixin.md"}},{"name":"passwordChanged","qualifiedName":"wyatt_authentication_bloc.UpdatePassword.passwordChanged","href":"wyatt_authentication_bloc/UpdatePassword/passwordChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdatePassword","type":"mixin","href":"wyatt_authentication_bloc/UpdatePassword-mixin.md"}},{"name":"passwordCustomChanged","qualifiedName":"wyatt_authentication_bloc.UpdatePassword.passwordCustomChanged","href":"wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Same as passwordChanged but with a custom Validator.","enclosedBy":{"name":"UpdatePassword","type":"mixin","href":"wyatt_authentication_bloc/UpdatePassword-mixin.md"}},{"name":"updatePassword","qualifiedName":"wyatt_authentication_bloc.UpdatePassword.updatePassword","href":"wyatt_authentication_bloc/UpdatePassword/updatePassword.md","type":"method","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Update or add password.","enclosedBy":{"name":"UpdatePassword","type":"mixin","href":"wyatt_authentication_bloc/UpdatePassword-mixin.md"}},{"name":"UpdatePasswordFailureFirebase","qualifiedName":"wyatt_authentication_bloc.UpdatePasswordFailureFirebase","href":"wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password modification process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"UpdatePasswordFailureFirebase","qualifiedName":"wyatt_authentication_bloc.UpdatePasswordFailureFirebase.UpdatePasswordFailureFirebase","href":"wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdatePasswordFailureFirebase","type":"class","href":"wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md"}},{"name":"UpdatePasswordFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.UpdatePasswordFailureFirebase.fromCode","href":"wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdatePasswordFailureFirebase","type":"class","href":"wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md"}},{"name":"UpdatePasswordFailureInterface","qualifiedName":"wyatt_authentication_bloc.UpdatePasswordFailureInterface","href":"wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password modification process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"UpdatePasswordFailureInterface","qualifiedName":"wyatt_authentication_bloc.UpdatePasswordFailureInterface.UpdatePasswordFailureInterface","href":"wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdatePasswordFailureInterface","type":"class","href":"wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md"}},{"name":"UpdatePasswordFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.UpdatePasswordFailureInterface.fromCode","href":"wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdatePasswordFailureInterface","type":"class","href":"wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md"}},{"name":"UpdatedEvent","qualifiedName":"wyatt_authentication_bloc.UpdatedEvent","href":"wyatt_authentication_bloc/UpdatedEvent-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"When the user's account has been updated.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"UpdatedEvent","qualifiedName":"wyatt_authentication_bloc.UpdatedEvent.UpdatedEvent","href":"wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdatedEvent","type":"class","href":"wyatt_authentication_bloc/UpdatedEvent-class.md"}},{"name":"account","qualifiedName":"wyatt_authentication_bloc.UpdatedEvent.account","href":"wyatt_authentication_bloc/UpdatedEvent/account.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"UpdatedEvent","type":"class","href":"wyatt_authentication_bloc/UpdatedEvent-class.md"}},{"name":"props","qualifiedName":"wyatt_authentication_bloc.UpdatedEvent.props","href":"wyatt_authentication_bloc/UpdatedEvent/props.md","type":"property","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"The list of properties that will be used to determine whether\ntwo instances are equal.","enclosedBy":{"name":"UpdatedEvent","type":"class","href":"wyatt_authentication_bloc/UpdatedEvent-class.md"}},{"name":"VerifyPasswordResetCodeFailureFirebase","qualifiedName":"wyatt_authentication_bloc.VerifyPasswordResetCodeFailureFirebase","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"VerifyPasswordResetCodeFailureFirebase","qualifiedName":"wyatt_authentication_bloc.VerifyPasswordResetCodeFailureFirebase.VerifyPasswordResetCodeFailureFirebase","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"VerifyPasswordResetCodeFailureFirebase","type":"class","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md"}},{"name":"VerifyPasswordResetCodeFailureFirebase.fromCode","qualifiedName":"wyatt_authentication_bloc.VerifyPasswordResetCodeFailureFirebase.fromCode","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"","enclosedBy":{"name":"VerifyPasswordResetCodeFailureFirebase","type":"class","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md"}},{"name":"VerifyPasswordResetCodeFailureInterface","qualifiedName":"wyatt_authentication_bloc.VerifyPasswordResetCodeFailureInterface","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md","type":"class","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"wyatt_authentication_bloc","type":"library","href":"wyatt_authentication_bloc/wyatt_authentication_bloc-library.md"}},{"name":"VerifyPasswordResetCodeFailureInterface","qualifiedName":"wyatt_authentication_bloc.VerifyPasswordResetCodeFailureInterface.VerifyPasswordResetCodeFailureInterface","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"VerifyPasswordResetCodeFailureInterface","type":"class","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md"}},{"name":"VerifyPasswordResetCodeFailureInterface.fromCode","qualifiedName":"wyatt_authentication_bloc.VerifyPasswordResetCodeFailureInterface.fromCode","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md","type":"constructor","overriddenDepth":0,"packageName":"wyatt_authentication_bloc","desc":"Thrown during the password reset process if a failure occurs.","enclosedBy":{"name":"VerifyPasswordResetCodeFailureInterface","type":"class","href":"wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md"}}] diff --git a/packages/wyatt_authentication_bloc/doc/api/index.md b/packages/wyatt_authentication_bloc/doc/api/index.md deleted file mode 100644 index 7cf99eac..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/index.md +++ /dev/null @@ -1,214 +0,0 @@ - - - -# wyatt_authentication_bloc - Dart API docs - - - -

    Flutter - Authentication BLoC

    - Style: Wyatt Analysis - SDK: Flutter -

    -

    Authentication Bloc for Flutter.

    -

    Features

    -
      -
    • 🧐 Wyatt Architecture
    • -
    • 🧱 Entities -
        -
      • Account -> Contains account information from provider.
      • -
      • Session -> Contains account and associated data retrieved from an external source.
      • -
      • AuthenticationChangeEvent -> Describes an event in authentication change (sign in, sign up, sign out, etc...)
      • -
      • SessionWrapper -> Contains latest authentication change event and session.
      • -
      -
    • -
    • 🔑 Powerful and secured authentication repository
    • -
    • 🔥 Multiple data sources -
        -
      • Mock
      • -
      • Firebase
      • -
      -
    • -
    • 🧊 Cubits, why make it complicated when you can make it simple? -
        -
      • Goes to the essential.
      • -
      -
    • -
    • 📐 Consistent -
        -
      • Every class have same naming convention
      • -
      -
    • -
    • 🧪 Tested
    • -
    • 📚 Documented: available here
    • -
    -

    Getting started

    -

    Simply add wyatt_authentication_bloc in pubspec.yaml , then

    -
    import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
    -
    -

    Data source

    -

    The first step is to provide a data source.

    -
    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.

    -
    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.

    -
    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

    -
    class ExampleSignUpCubit extends SignUpCubit<int> {
    -  ExampleSignUpCubit({
    -    required super.authenticationRepository,
    -  });
    -
    -  @override
    -  FutureOrResult<int?> onSignUpWithEmailAndPassword(Result<Account, AppException> result, WyattForm form) async {
    -    // TODO
    -  }
    -}
    -
    -
    -

    Sign In

    -
    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!

    -
    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.

    -
    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.

    -
    Text('Home | ${context.account<AuthenticationCubit<int>, int>()?.email}'),
    -
    -

    Listeners are used to listen to the status of the sign in and sign up forms.

    -
    return SignInListener<int>(
    -    onError: (context, status, errorMessage) => ScaffoldMessenger.of(context)
    -    ..hideCurrentSnackBar()
    -    ..showSnackBar(
    -        SnackBar(content: Text(errorMessage ?? 'Sign In Failure')),
    -    ),
    -    child: ...
    -);
    -
    - - -## Libraries - -##### [wyatt_authentication_bloc](wyatt_authentication_bloc/wyatt_authentication_bloc-library.md) -An authentication library for BLoC. - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/search.md b/packages/wyatt_authentication_bloc/doc/api/search.md deleted file mode 100644 index 0fedbdcf..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/search.md +++ /dev/null @@ -1,6 +0,0 @@ -# 404 - -Oops, something's gone wrong :-( - -You've tried to visit a page that doesn't exist. Luckily this site has other -[pages](index.md). diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account-class.md deleted file mode 100644 index f52d7482..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account-class.md +++ /dev/null @@ -1,237 +0,0 @@ - - - -# Account class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Represents a user Account in the -various identity provisioning systems.

    - - - -**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) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -The user access token -_final_ - - - -##### [creationTime](../wyatt_authentication_bloc/Account/creationTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? - - - -Returns the users account creation time. -_final_ - - - -##### [email](../wyatt_authentication_bloc/Account/email.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -The users email address. -_final_ - - - -##### [emailVerified](../wyatt_authentication_bloc/Account/emailVerified.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Returns whether the users email address has been verified. -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [id](../wyatt_authentication_bloc/Account/id.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -The user's unique ID. -_final_ - - - -##### [isAnonymous](../wyatt_authentication_bloc/Account/isAnonymous.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Returns whether the user is a anonymous. -_final_ - - - -##### [isNewUser](../wyatt_authentication_bloc/Account/isNewUser.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -Whether the user account has been recently created. -_final_ - - - -##### [lastSignInTime](../wyatt_authentication_bloc/Account/lastSignInTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? - - - -When the user last signed in as dictated by the server clock. -_final_ - - - -##### [phoneNumber](../wyatt_authentication_bloc/Account/phoneNumber.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Returns the users phone number. -_final_ - - - -##### [photoURL](../wyatt_authentication_bloc/Account/photoURL.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Returns a photo URL for the user. -_final_ - - - -##### [props](../wyatt_authentication_bloc/Account/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [providerId](../wyatt_authentication_bloc/Account/providerId.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -The provider ID for the user. -_final_ - - - -##### [refreshToken](../wyatt_authentication_bloc/Account/refreshToken.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -The user refresh token -_final_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/Account/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyoverride_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/Account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/Account.md deleted file mode 100644 index 22006c3c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/Account.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# Account constructor - - - - - *[](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, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/accessToken.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/accessToken.md deleted file mode 100644 index 0ceb6c2e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/accessToken.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# accessToken property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? accessToken - -_final_ - - - -

    The user access token

    - - - -## Implementation - -```dart -final String? accessToken; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/creationTime.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/creationTime.md deleted file mode 100644 index cf5dfe5c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/creationTime.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# creationTime property - - - - - *[](https://dart.dev/null-safety)* - - - -[DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? creationTime - -_final_ - - - -

    Returns the users account creation time.

    -

    When this account was created as dictated by the server clock.

    - - - -## Implementation - -```dart -final DateTime? creationTime; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/email.md deleted file mode 100644 index 2d007ce3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/email.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# email property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? email - -_final_ - - - -

    The users email address.

    -

    Will be null if signing in anonymously.

    - - - -## Implementation - -```dart -final String? email; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/emailVerified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/emailVerified.md deleted file mode 100644 index e4e36b29..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/emailVerified.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# emailVerified property - - - - - *[](https://dart.dev/null-safety)* - - - -[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) emailVerified - -_final_ - - - -

    Returns whether the users email address has been verified.

    -

    To send a verification email, see SendEmailVerification.

    - - - -## Implementation - -```dart -final bool emailVerified; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/id.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/id.md deleted file mode 100644 index 4796ed2f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/id.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# id property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) id - -_final_ - - - -

    The user's unique ID.

    - - - -## Implementation - -```dart -final String id; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isAnonymous.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isAnonymous.md deleted file mode 100644 index 324b4fda..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isAnonymous.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# isAnonymous property - - - - - *[](https://dart.dev/null-safety)* - - - -[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isAnonymous - -_final_ - - - -

    Returns whether the user is a anonymous.

    - - - -## Implementation - -```dart -final bool isAnonymous; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isNewUser.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isNewUser.md deleted file mode 100644 index f96ab918..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/isNewUser.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# isNewUser property - - - - - *[](https://dart.dev/null-safety)* - - - -[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isNewUser - -_final_ - - - -

    Whether the user account has been recently created.

    - - - -## Implementation - -```dart -final bool? isNewUser; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/lastSignInTime.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/lastSignInTime.md deleted file mode 100644 index 0f257f63..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/lastSignInTime.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# lastSignInTime property - - - - - *[](https://dart.dev/null-safety)* - - - -[DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? lastSignInTime - -_final_ - - - -

    When the user last signed in as dictated by the server clock.

    - - - -## Implementation - -```dart -final DateTime? lastSignInTime; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/phoneNumber.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/phoneNumber.md deleted file mode 100644 index 7b33f623..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/phoneNumber.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# phoneNumber property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? phoneNumber - -_final_ - - - -

    Returns the users phone number.

    -

    This property will be null if the user has not signed in or been has -their phone number linked.

    - - - -## Implementation - -```dart -final String? phoneNumber; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/photoURL.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/photoURL.md deleted file mode 100644 index c76a2896..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/photoURL.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# photoURL property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? photoURL - -_final_ - - - -

    Returns a photo URL for the user.

    -

    This property will be populated if the user has signed in or been linked -with a 3rd party OAuth provider (such as Google).

    - - - -## Implementation - -```dart -final String? photoURL; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/props.md deleted file mode 100644 index 619e2501..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/props.md +++ /dev/null @@ -1,55 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [ - id, - isAnonymous, - email, - emailVerified, - phoneNumber, - photoURL, - creationTime, - lastSignInTime, - providerId, - isNewUser, - accessToken, - refreshToken, - ]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/providerId.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/providerId.md deleted file mode 100644 index a539b552..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/providerId.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# providerId property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) providerId - -_final_ - - - -

    The provider ID for the user.

    - - - -## Implementation - -```dart -final String providerId; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/refreshToken.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/refreshToken.md deleted file mode 100644 index 781948d8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/refreshToken.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# refreshToken property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? refreshToken - -_final_ - - - -

    The user refresh token

    - - - -## Implementation - -```dart -final String? refreshToken; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/stringify.md deleted file mode 100644 index 8df8a404..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Account/stringify.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# stringify property - - - - - *[](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 - -_override_ - - - -

    If set to true, the toString method will be overridden to output -this instance's props.

    -

    A global default value for stringify can be set using -EquatableConfig.stringify.

    -

    If this instance's stringify is set to null, the value of -EquatableConfig.stringify will be used instead. This defaults to -false.

    - - - -## Implementation - -```dart -@override -bool get stringify => true; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel-class.md deleted file mode 100644 index 68088ea5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel-class.md +++ /dev/null @@ -1,247 +0,0 @@ - - - -# AccountModel class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Account Model to parse Firebase User data

    - - - -**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) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -The user access token -_finalinherited_ - - - -##### [creationTime](../wyatt_authentication_bloc/Account/creationTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? - - - -Returns the users account creation time. -_finalinherited_ - - - -##### [email](../wyatt_authentication_bloc/Account/email.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -The users email address. -_finalinherited_ - - - -##### [emailVerified](../wyatt_authentication_bloc/Account/emailVerified.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Returns whether the users email address has been verified. -_finalinherited_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [id](../wyatt_authentication_bloc/Account/id.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -The user's unique ID. -_finalinherited_ - - - -##### [isAnonymous](../wyatt_authentication_bloc/Account/isAnonymous.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Returns whether the user is a anonymous. -_finalinherited_ - - - -##### [isNewUser](../wyatt_authentication_bloc/Account/isNewUser.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -Whether the user account has been recently created. -_finalinherited_ - - - -##### [lastSignInTime](../wyatt_authentication_bloc/Account/lastSignInTime.md) → [DateTime](https://api.flutter.dev/flutter/dart-core/DateTime-class.html)? - - - -When the user last signed in as dictated by the server clock. -_finalinherited_ - - - -##### [phoneNumber](../wyatt_authentication_bloc/Account/phoneNumber.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Returns the users phone number. -_finalinherited_ - - - -##### [photoURL](../wyatt_authentication_bloc/Account/photoURL.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Returns a photo URL for the user. -_finalinherited_ - - - -##### [props](../wyatt_authentication_bloc/Account/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyinherited_ - - - -##### [providerId](../wyatt_authentication_bloc/Account/providerId.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -The provider ID for the user. -_finalinherited_ - - - -##### [refreshToken](../wyatt_authentication_bloc/AccountModel/refreshToken.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -The user refresh token -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/Account/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - -##### [user](../wyatt_authentication_bloc/AccountModel/user.md) → [User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)? - - - - -_final_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md deleted file mode 100644 index f040be39..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUser.md +++ /dev/null @@ -1,51 +0,0 @@ - - - -# AccountModel.fromFirebaseUser constructor - - - - - *[](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'); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md deleted file mode 100644 index ac8c078e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/AccountModel.fromFirebaseUserCredential.md +++ /dev/null @@ -1,54 +0,0 @@ - - - -# AccountModel.fromFirebaseUserCredential constructor - - - - - *[](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'); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/refreshToken.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/refreshToken.md deleted file mode 100644 index f8863731..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/refreshToken.md +++ /dev/null @@ -1,41 +0,0 @@ - - - -# refreshToken property - - - - - *[](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 - -_override_ - - - -

    The user refresh token

    - - - -## Implementation - -```dart -@override -String? get refreshToken => user?.refreshToken; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/user.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/user.md deleted file mode 100644 index e0146cab..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AccountModel/user.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# user property - - - - - *[](https://dart.dev/null-safety)* - - - -[User](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/User-class.html)? user - -_final_ - - - - - - -## Implementation - -```dart -final User? user; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md deleted file mode 100644 index 451ed5dd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# ApplyActionCodeFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown if during the apply action code process if a failure occurs.

    - - - -**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) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md deleted file mode 100644 index 1c261bc6..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.fromCode.md +++ /dev/null @@ -1,49 +0,0 @@ - - - -# ApplyActionCodeFailureFirebase.fromCode constructor - - - - - *[](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.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md deleted file mode 100644 index 2e03e5ae..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureFirebase/ApplyActionCodeFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ApplyActionCodeFailureFirebase constructor - - - - - *[](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.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md deleted file mode 100644 index 487660fd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# ApplyActionCodeFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown if during the apply action code process if a failure occurs.

    - - - -**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) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md deleted file mode 100644 index 72b11f2d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ApplyActionCodeFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ApplyActionCodeFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown if during the apply action code process if a failure occurs.

    - - - -## Implementation - -```dart -ApplyActionCodeFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md deleted file mode 100644 index 0fb17fe9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ApplyActionCodeFailureInterface/ApplyActionCodeFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ApplyActionCodeFailureInterface constructor - - - - - *[](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) - - -

    Thrown if during the apply action code process if a failure occurs.

    - - - -## Implementation - -```dart -ApplyActionCodeFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField-class.md deleted file mode 100644 index 9ccd48b3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField-class.md +++ /dev/null @@ -1,122 +0,0 @@ - - - -# AuthFormField class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Default authentication form fields name

    - - - - -## Constructors - -[AuthFormField](../wyatt_authentication_bloc/AuthFormField/AuthFormField.md) () - - - - -## Properties - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - -## Constants - -##### [confirmPassword](../wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -Confirm Password field: wyattConfirmPasswordField - - - - -##### [email](../wyatt_authentication_bloc/AuthFormField/email-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -Email field: wyattEmailField - - - - -##### [password](../wyatt_authentication_bloc/AuthFormField/password-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -Password field: wyattPasswordField - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/AuthFormField.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/AuthFormField.md deleted file mode 100644 index ab98b830..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/AuthFormField.md +++ /dev/null @@ -1,25 +0,0 @@ - - - -# AuthFormField constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthFormField() - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md deleted file mode 100644 index 7b7ac157..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/confirmPassword-constant.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# confirmPassword constant - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const confirmPassword - - - - - -

    Confirm Password field: wyattConfirmPasswordField

    - - - -## Implementation - -```dart -static const confirmPassword = 'wyattConfirmPasswordField'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/email-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/email-constant.md deleted file mode 100644 index 9d842070..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/email-constant.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# email constant - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const email - - - - - -

    Email field: wyattEmailField

    - - - -## Implementation - -```dart -static const email = 'wyattEmailField'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/password-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/password-constant.md deleted file mode 100644 index 00dbfc9d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormField/password-constant.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# password constant - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const password - - - - - -

    Password field: wyattPasswordField

    - - - -## Implementation - -```dart -static const password = 'wyattPasswordField'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName-class.md deleted file mode 100644 index f1c34250..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName-class.md +++ /dev/null @@ -1,131 +0,0 @@ - - - -# AuthFormName class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Default authentication form name

    - - - - -## Constructors - -[AuthFormName](../wyatt_authentication_bloc/AuthFormName/AuthFormName.md) () - - - - -## Properties - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - -## Constants - -##### [editAccountForm](../wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -Edit account form: wyattEditAccountForm - - - - -##### [passwordResetForm](../wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -Password reset form: wyattPasswordResetForm - - - - -##### [signInForm](../wyatt_authentication_bloc/AuthFormName/signInForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -Sign In form: wyattSignInForm - - - - -##### [signUpForm](../wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md) const [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -Sign Up form: wyattSignUpForm - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/AuthFormName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/AuthFormName.md deleted file mode 100644 index 060a09c7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/AuthFormName.md +++ /dev/null @@ -1,25 +0,0 @@ - - - -# AuthFormName constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthFormName() - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md deleted file mode 100644 index 87add4b3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/editAccountForm-constant.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# editAccountForm constant - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const editAccountForm - - - - - -

    Edit account form: wyattEditAccountForm

    - - - -## Implementation - -```dart -static const String editAccountForm = 'wyattEditAccountForm'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md deleted file mode 100644 index 0732203c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/passwordResetForm-constant.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# passwordResetForm constant - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const passwordResetForm - - - - - -

    Password reset form: wyattPasswordResetForm

    - - - -## Implementation - -```dart -static const String passwordResetForm = 'wyattPasswordResetForm'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signInForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signInForm-constant.md deleted file mode 100644 index b5863475..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signInForm-constant.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# signInForm constant - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const signInForm - - - - - -

    Sign In form: wyattSignInForm

    - - - -## Implementation - -```dart -static const String signInForm = 'wyattSignInForm'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md deleted file mode 100644 index 83820763..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthFormName/signUpForm-constant.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# signUpForm constant - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) const signUpForm - - - - - -

    Sign Up form: wyattSignUpForm

    - - - -## Implementation - -```dart -static const String signUpForm = 'wyattSignUpForm'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder-class.md deleted file mode 100644 index ba5fe7a2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder-class.md +++ /dev/null @@ -1,216 +0,0 @@ - - - -# AuthenticationBuilder<Data> class - - - - - - - *[](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)<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) → [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)<Data> sessionWrapper) - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? - - - -Controls how one widget replaces another widget in the tree. -_finalinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [unauthenticated](../wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) - - - - -_final_ - - - -##### [unknown](../wyatt_authentication_bloc/AuthenticationBuilder/unknown.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) - - - - -_final_ - - - - - -## 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. -_override_ - - - -##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) - - - -Creates a StatelessElement to manage this widget's location in the tree. -_inherited_ - - - -##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> - - - -Returns a list of DiagnosticsNode objects describing this node's -children. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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 DiagnosticsNode.toStringDeep. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md deleted file mode 100644 index 6fa6aa7d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/AuthenticationBuilder.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# AuthenticationBuilder<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -AuthenticationBuilder<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)<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, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md deleted file mode 100644 index 421ea1b9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/authenticated.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# authenticated property - - - - - *[](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)<Data> sessionWrapper) authenticated - -_final_ - - - - - - -## Implementation - -```dart -final Widget Function( - BuildContext context, - SessionWrapper sessionWrapper, -) authenticated; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/build.md deleted file mode 100644 index 5b5680da..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/build.md +++ /dev/null @@ -1,85 +0,0 @@ - - - -# build method - - - - - *[](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) - -_override_ - - - -

    Describes the part of the user interface represented by this widget.

    -

    The framework calls this method when this widget is inserted into the tree -in a given BuildContext and when the dependencies of this widget change -(e.g., an InheritedWidget 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.

    -

    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 Widget.canUpdate.

    -

    Typically implementations return a newly created constellation of widgets -that are configured with information from this widget's constructor and -from the given BuildContext.

    -

    The given BuildContext 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 BuildContext -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.

    -

    The implementation of this method must only depend on:

    - -

    If a widget's build method is to depend on anything else, use a -StatefulWidget instead.

    -

    See also:

    -
      -
    • StatelessWidget, which contains the discussion on performance considerations.
    • -
    - - - -## Implementation - -```dart -@override -Widget build(BuildContext context) => - BlocBuilder, AuthenticationState>( - 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); - } - }, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md deleted file mode 100644 index 09ac9fe3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unauthenticated.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# unauthenticated property - - - - - *[](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 - -_final_ - - - - - - -## Implementation - -```dart -final Widget Function(BuildContext context) unauthenticated; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unknown.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unknown.md deleted file mode 100644 index 4573308e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationBuilder/unknown.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# unknown property - - - - - *[](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 - -_final_ - - - - - - -## Implementation - -```dart -final Widget Function(BuildContext context) unknown; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent-class.md deleted file mode 100644 index 4cb045d8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# AuthenticationChangeEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Represents an event initiated by a change in -the user's authentication status.

    - - - -**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) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyoverride_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md deleted file mode 100644 index 82567010..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/AuthenticationChangeEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# AuthenticationChangeEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -AuthenticationChangeEvent() - - - - - -## Implementation - -```dart -const AuthenticationChangeEvent(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/props.md deleted file mode 100644 index 35d92209..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => []; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md deleted file mode 100644 index a2e1620f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# stringify property - - - - - *[](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 - -_override_ - - - -

    If set to true, the toString method will be overridden to output -this instance's props.

    -

    A global default value for stringify can be set using -EquatableConfig.stringify.

    -

    If this instance's stringify is set to null, the value of -EquatableConfig.stringify will be used instead. This defaults to -false.

    - - - -## Implementation - -```dart -@override -bool get stringify => true; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit-class.md deleted file mode 100644 index 3758c56f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit-class.md +++ /dev/null @@ -1,292 +0,0 @@ - - - -# AuthenticationCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Abstract authentication cubit class needs to be implemented in application.

    -

    This cubit is in charge of managing the global authentication state of -the application.

    -

    Its here you can override every callbacks and add your custom logic.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> -- AuthenticationCubit - - - - - - - - -## Constructors - -[AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data> - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [currentSession](../wyatt_authentication_bloc/AuthenticationCubit/currentSession.md)() [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? - - - -Returns latest session wrapper. - - - - -##### [delete](../wyatt_authentication_bloc/AuthenticationCubit/delete.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Delete account. - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data> state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data>> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onDelete](../wyatt_authentication_bloc/AuthenticationCubit/onDelete.md)() FutureOrResult<void> - - - -This callback is triggered when the current account is deleted from -the remote. - - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onReauthenticate](../wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result) FutureOrResult<Data?> - - - -This callback is triggered when the account is re-authenticated - - - - -##### [onRefresh](../wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result) FutureOrResult<Data?> - - - -This callback is triggered when the account is refreshed. - - - - -##### [onSignInFromCache](../wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) FutureOrResult<Data?> - - - -This callback is triggered when the user is automaticcaly logged in from -the cache. - - - - -##### [onSignOut](../wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md)() FutureOrResult<void> - - - -This callback is triggered when the user is logged out. - - - - -##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in. - - - - -##### [refresh](../wyatt_authentication_bloc/AuthenticationCubit/refresh.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Refreshes the current user, if signed in. - - - - -##### [signOut](../wyatt_authentication_bloc/AuthenticationCubit/signOut.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Signs out the current user. -It also clears the cache and the associated data. - - - - -##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md deleted file mode 100644 index 8a689e53..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/AuthenticationCubit.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# AuthenticationCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthenticationCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -AuthenticationCubit({ - required this.authenticationRepository, -}) : super(const AuthenticationState.unknown()) { - _listenForAuthenticationChanges(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md deleted file mode 100644 index 32cdfa2a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/authenticationRepository.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# authenticationRepository property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationRepository authenticationRepository; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/currentSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/currentSession.md deleted file mode 100644 index 855d8d0e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/currentSession.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# currentSession method - - - - - *[](https://dart.dev/null-safety)* - - - - -[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? currentSession -() - - - - - -

    Returns latest session wrapper.

    -

    Contains latest event and latest session data (account + extra data)

    - - - -## Implementation - -```dart -SessionWrapper? currentSession() => _latestSession; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/delete.md deleted file mode 100644 index 849e1aca..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/delete.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -# delete method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> delete -() - - - - - -

    Delete account.

    -

    Throws a DeleteAccountFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOr delete() async => CustomRoutine( - routine: authenticationRepository.delete, - attachedLogic: (routineResult) => onDelete(), - onError: addError, - onSuccess: (result, data) => authenticationRepository - .addSession(SessionWrapper(event: const DeletedEvent())), - ).call(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onDelete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onDelete.md deleted file mode 100644 index b5fd50a4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onDelete.md +++ /dev/null @@ -1,38 +0,0 @@ - - - -# onDelete method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<void> onDelete -() - - - - - -

    This callback is triggered when the current account is deleted from -the remote.

    -

    For example: when the user wants to delete his account from Firebase

    - - - -## Implementation - -```dart -FutureOrResult onDelete(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md deleted file mode 100644 index 434c5de1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onReauthenticate.md +++ /dev/null @@ -1,38 +0,0 @@ - - - -# onReauthenticate method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onReauthenticate -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result) - - - - - -

    This callback is triggered when the account is re-authenticated

    -

    For example: when the user is logged in and sign in -from an another provider

    - - - -## Implementation - -```dart -FutureOrResult onReauthenticate(Result result); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md deleted file mode 100644 index b3812fa8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onRefresh.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# onRefresh method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onRefresh -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result) - - - - - -

    This callback is triggered when the account is refreshed.

    -

    For example: when the access token is refreshed.

    - - - -## Implementation - -```dart -FutureOrResult onRefresh(Result result); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md deleted file mode 100644 index 3f0ccf94..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignInFromCache.md +++ /dev/null @@ -1,38 +0,0 @@ - - - -# onSignInFromCache method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onSignInFromCache -([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) - - - - - -

    This callback is triggered when the user is automaticcaly logged in from -the cache.

    -

    For example: when the user is sign in from the Firebase cache.

    - - - -## Implementation - -```dart -FutureOrResult onSignInFromCache(SessionWrapper wrapper); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md deleted file mode 100644 index 930d66b7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/onSignOut.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# onSignOut method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<void> onSignOut -() - - - - - -

    This callback is triggered when the user is logged out.

    -

    For example: when the user clicks on the logout button.

    - - - -## Implementation - -```dart -FutureOrResult onSignOut(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md deleted file mode 100644 index b2eeb9c5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/reauthenticate.md +++ /dev/null @@ -1,53 +0,0 @@ - - - -# reauthenticate method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reauthenticate -() - - - - - -

    Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in.

    -

    Throws a ReauthenticateFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOr reauthenticate() async => CustomRoutine( - routine: authenticationRepository.reauthenticate, - attachedLogic: onReauthenticate, - onError: addError, - onSuccess: (result, data) => authenticationRepository.addSession( - SessionWrapper( - event: ReauthenticatedEvent(account: result), - session: Session( - account: result, - data: data, - ), - ), - ), - ).call(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/refresh.md deleted file mode 100644 index be643224..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/refresh.md +++ /dev/null @@ -1,49 +0,0 @@ - - - -# refresh method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> refresh -() - - - - - -

    Refreshes the current user, if signed in.

    - - - -## Implementation - -```dart -FutureOr refresh() async => CustomRoutine( - routine: authenticationRepository.refresh, - attachedLogic: onRefresh, - onError: addError, - onSuccess: (result, data) => authenticationRepository.addSession( - SessionWrapper( - event: RefreshedEvent(account: result), - session: Session( - account: result, - data: data, - ), - ), - ), - ).call(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/signOut.md deleted file mode 100644 index f2634117..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationCubit/signOut.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# signOut method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signOut -() - - - - - -

    Signs out the current user. -It also clears the cache and the associated data.

    - - - -## Implementation - -```dart -FutureOr signOut() async => CustomRoutine( - routine: authenticationRepository.signOut, - attachedLogic: (routineResult) => onSignOut(), - onError: addError, - onSuccess: (result, data) => authenticationRepository - .addSession(SessionWrapper(event: const SignedOutEvent())), - ).call(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface-class.md deleted file mode 100644 index 36c265c0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface-class.md +++ /dev/null @@ -1,159 +0,0 @@ - - - -# AuthenticationFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Base exception used in Wyatt Authentication

    - - - - -**Implemented types** - -- [Exception](https://api.flutter.dev/flutter/dart-core/Exception-class.html) - - -**Implementers** - -- [ApplyActionCodeFailureInterface](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md) -- [ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md) -- [DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md) -- [FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md) -- [ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface-class.md) -- [ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md) -- [RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface-class.md) -- [SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md) -- [SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md) -- [SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md) -- [SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md) -- [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) -- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) -- [SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md) -- [SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md) -- [SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md) -- [SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md) -- [SignInWithTwitterFailureInterface](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md) -- [SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface-class.md) -- [SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md) -- [UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md) -- [UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md) -- [VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md) - - - - - -## Constructors - -[AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg) - - - -[AuthenticationFailureInterface.fromCode](../wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / write_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-only_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / write_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md deleted file mode 100644 index 96605d88..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# AuthenticationFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthenticationFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -AuthenticationFailureInterface.fromCode(this.code) - : msg = 'An unknown error occurred.'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md deleted file mode 100644 index b64683e8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/AuthenticationFailureInterface.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# AuthenticationFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthenticationFailureInterface([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, [String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg) - - - - - -## Implementation - -```dart -AuthenticationFailureInterface(this.code, this.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/code.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/code.md deleted file mode 100644 index 7d6e8996..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/code.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# code property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) code - -_read / write_ - - - - - - -## Implementation - -```dart -String code; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/message.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/message.md deleted file mode 100644 index fed51258..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/message.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# message property - - - - - *[](https://dart.dev/null-safety)* - - - - - -**Annotations** - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) message - - - - - - - - -## Implementation - -```dart -@override -String get message => msg; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md deleted file mode 100644 index 820911a4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# msg property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) msg - -_read / write_ - - - - - - -## Implementation - -```dart -String msg; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md deleted file mode 100644 index adf014b9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md +++ /dev/null @@ -1,53 +0,0 @@ - - - -# toString method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString -() - -_inherited_ - - - -

    A string representation of this object.

    -

    Some classes have a default textual representation, -often paired with a static parse function (like int.parse). -These classes will provide the textual representation as -their string representation.

    -

    Other classes have no meaningful textual representation -that a program will care about. -Such classes will typically override toString to provide -useful information when inspecting the object, -mainly for debugging or logging.

    - - - -## Implementation - -```dart -@override -String toString() { - if (message.isNotNullOrEmpty) { - return '$runtimeType: $message'; - } else { - return '$runtimeType: An exception occured'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md deleted file mode 100644 index 39635ba2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md +++ /dev/null @@ -1,251 +0,0 @@ - - - -# AuthenticationFirebaseDataSourceImpl<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> -- AuthenticationFirebaseDataSourceImpl - - - - - - - - -## Constructors - -[AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md) ({[FirebaseAuth](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/FirebaseAuth-class.html)? firebaseAuth, [GoogleSignIn](https://pub.dev/documentation/google_sign_in/5.4.2/google_sign_in/GoogleSignIn-class.html)? googleSignIn}) - - - - -## Properties - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [addSession](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void - - - -Add a new authentication event. -_override_ - - - -##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Confirms the password reset with the provided newPassword and code. -_override_ - - - -##### [delete](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Delete account. -_override_ - - - -##### [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. -_inherited_ - - - -##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in. -_override_ - - - -##### [refresh](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Refreshes the current user, if signed in. -_override_ - - - -##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Sends verification email to the account email. -_override_ - - - -##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Sends a password reset email to the provided email. -_override_ - - - -##### [sessionStream](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> - - - -Authentication state change event stream. -_override_ - - - -##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Sign in anonymously. -_override_ - - - -##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Signs in with the provided email and password. -_override_ - - - -##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Starts the Sign In with Google Flow. -_override_ - - - -##### [signOut](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Signs out the current user. -It also clears the cache and the associated data. -_override_ - - - -##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Creates a new user with the provided email and password. -_override_ - - - -##### [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. -_inherited_ - - - -##### [updateEmail](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Update or add email. -_override_ - - - -##### [updatePassword](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Update or add password. -_override_ - - - -##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> - - - -Verify password reset code. -_override_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md deleted file mode 100644 index d6364dcf..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/AuthenticationFirebaseDataSourceImpl.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# AuthenticationFirebaseDataSourceImpl<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthenticationFirebaseDataSourceImpl<Data>({[FirebaseAuth](https://pub.dev/documentation/firebase_auth/4.2.0/firebase_auth/FirebaseAuth-class.html)? firebaseAuth, [GoogleSignIn](https://pub.dev/documentation/google_sign_in/5.4.2/google_sign_in/GoogleSignIn-class.html)? googleSignIn}) - - - - - -## Implementation - -```dart -AuthenticationFirebaseDataSourceImpl({ - FirebaseAuth? firebaseAuth, - GoogleSignIn? googleSignIn, -}) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance, - _googleSignIn = googleSignIn ?? GoogleSignIn() { - _latestCredentials = BehaviorSubject(); - _sessionStream = BehaviorSubject(); - - // Check for account in memory (persistence) - _checkForCachedAccount(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md deleted file mode 100644 index adb9c34d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/addSession.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# addSession method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -void addSession -([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) - -_override_ - - - -

    Add a new authentication event.

    - - - -## Implementation - -```dart -@override -void addSession(SessionWrapper wrapper) { - _sessionStream.add(wrapper); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md deleted file mode 100644 index 5be2ed73..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/confirmPasswordReset.md +++ /dev/null @@ -1,53 +0,0 @@ - - - -# confirmPasswordReset method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> confirmPasswordReset -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) - -_override_ - - - -

    Confirms the password reset with the provided newPassword and code.

    -

    Throws a ConfirmPasswordResetFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -Future confirmPasswordReset({ - required String code, - required String newPassword, -}) async { - try { - await _firebaseAuth.confirmPasswordReset( - code: code, - newPassword: newPassword, - ); - } on FirebaseAuthException catch (e) { - throw ConfirmPasswordResetFailureFirebase.fromCode(e.code); - } catch (_) { - throw ConfirmPasswordResetFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md deleted file mode 100644 index 64729914..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/delete.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# delete method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> delete -() - -_override_ - - - -

    Delete account.

    -

    Throws a DeleteAccountFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -Future delete() async { - try { - await _firebaseAuth.currentUser!.delete(); - } on FirebaseAuthException catch (e) { - throw DeleteAccountFailureFirebase.fromCode(e.code); - } catch (_) { - throw DeleteAccountFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md deleted file mode 100644 index 244efea5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/reauthenticate.md +++ /dev/null @@ -1,61 +0,0 @@ - - - -# reauthenticate method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate -() - -_override_ - - - -

    Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in.

    -

    Throws a ReauthenticateFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -Future reauthenticate() async { - final latestCreds = - await _latestCredentials.stream.asBroadcastStream().last; - try { - if (latestCreds?.credential != null) { - await _firebaseAuth.currentUser - ?.reauthenticateWithCredential(latestCreds!.credential!); - } else { - throw Exception(); // Get caught just after. - } - - final account = AccountModel.fromFirebaseUser(_firebaseAuth.currentUser); - - return account; - } on FirebaseAuthException catch (e) { - throw ReauthenticateFailureFirebase.fromCode(e.code); - } catch (_) { - throw ReauthenticateFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md deleted file mode 100644 index 323f75a1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/refresh.md +++ /dev/null @@ -1,52 +0,0 @@ - - - -# refresh method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh -() - -_override_ - - - -

    Refreshes the current user, if signed in.

    - - - -## Implementation - -```dart -@override -Future refresh() async { - try { - final jwt = await _firebaseAuth.currentUser?.getIdToken(true); - final account = AccountModel.fromFirebaseUser( - _firebaseAuth.currentUser, - accessToken: jwt, - ); - - return account; - } on FirebaseAuthException catch (e) { - throw RefreshFailureFirebase.fromCode(e.code); - } catch (_) { - throw RefreshFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md deleted file mode 100644 index 36e3bde4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendEmailVerification.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# sendEmailVerification method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendEmailVerification -() - -_override_ - - - -

    Sends verification email to the account email.

    -

    Throws a SendEmailVerificationFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -Future sendEmailVerification() async { - try { - await _firebaseAuth.currentUser!.sendEmailVerification(); - } on FirebaseAuthException catch (e) { - throw SendEmailVerificationFailureFirebase.fromCode(e.code); - } catch (_) { - throw SendEmailVerificationFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md deleted file mode 100644 index 44ab9cd1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sendPasswordResetEmail.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# sendPasswordResetEmail method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendPasswordResetEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - -_override_ - - - -

    Sends a password reset email to the provided email.

    -

    Throws a SendPasswordResetEmailFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -Future sendPasswordResetEmail({required String email}) async { - try { - await _firebaseAuth.sendPasswordResetEmail(email: email); - } on FirebaseAuthException catch (e) { - throw SendPasswordResetEmailFailureFirebase.fromCode(e.code); - } catch (_) { - throw SendPasswordResetEmailFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md deleted file mode 100644 index d2bd33ab..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/sessionStream.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# sessionStream method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream -() - -_override_ - - - -

    Authentication state change event stream.

    - - - -## Implementation - -```dart -@override -Stream> sessionStream() => - _sessionStream.stream.asBroadcastStream(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md deleted file mode 100644 index 80bef88a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInAnonymously.md +++ /dev/null @@ -1,54 +0,0 @@ - - - -# signInAnonymously method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously -() - -_override_ - - - -

    Sign in anonymously.

    -

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -Future signInAnonymously() async { - try { - final userCredential = await _firebaseAuth.signInAnonymously(); - - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); - } on FirebaseAuthException catch (e) { - throw SignInAnonymouslyFailureFirebase.fromCode(e.code); - } catch (_) { - throw SignInAnonymouslyFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md deleted file mode 100644 index 0303cc78..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithEmailAndPassword.md +++ /dev/null @@ -1,61 +0,0 @@ - - - -# signInWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - -_override_ - - - -

    Signs in with the provided email and password.

    -

    Throws a SignInWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -Future signInWithEmailAndPassword({ - required String email, - required String password, -}) async { - try { - final userCredential = await _firebaseAuth.signInWithEmailAndPassword( - email: email, - password: password, - ); - - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); - } on FirebaseAuthException catch (e) { - throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code); - } catch (_) { - throw SignInWithEmailAndPasswordFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md deleted file mode 100644 index a8e00d8f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signInWithGoogle.md +++ /dev/null @@ -1,68 +0,0 @@ - - - -# signInWithGoogle method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle -() - -_override_ - - - -

    Starts the Sign In with Google Flow.

    -

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -Future signInWithGoogle() async { - try { - // Trigger the authentication flow - final GoogleSignInAccount? googleUser = await _googleSignIn.signIn(); - - // Obtain the auth details from the request - final GoogleSignInAuthentication? googleAuth = - await googleUser?.authentication; - - // Create a new credential - final credential = GoogleAuthProvider.credential( - accessToken: googleAuth?.accessToken, - idToken: googleAuth?.idToken, - ); - - final userCredential = - await _firebaseAuth.signInWithCredential(credential); - - return _addToStream( - userCredential, - (account) => SignedInEvent( - account: account, - ), - ); - } on FirebaseAuthException catch (e) { - throw SignInWithGoogleFailureFirebase.fromCode(e.code); - } catch (_) { - throw SignInWithGoogleFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md deleted file mode 100644 index 8e648e71..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signOut.md +++ /dev/null @@ -1,46 +0,0 @@ - - - -# signOut method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> signOut -() - -_override_ - - - -

    Signs out the current user. -It also clears the cache and the associated data.

    - - - -## Implementation - -```dart -@override -Future signOut() async { - try { - _latestCredentials.add(null); - await _firebaseAuth.signOut(); - } catch (_) { - throw SignOutFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md deleted file mode 100644 index 4c81f5e2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/signUpWithEmailAndPassword.md +++ /dev/null @@ -1,62 +0,0 @@ - - - -# signUpWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - -_override_ - - - -

    Creates a new user with the provided email and password.

    -

    Returns the newly created user's unique identifier.

    -

    Throws a SignUpWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -Future signUpWithEmailAndPassword({ - required String email, - required String password, -}) async { - try { - final userCredential = await _firebaseAuth.createUserWithEmailAndPassword( - email: email, - password: password, - ); - - return _addToStream( - userCredential, - (account) => SignedUpEvent( - account: account, - ), - ); - } on FirebaseAuthException catch (e) { - throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code); - } catch (_) { - throw SignUpWithEmailAndPasswordFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md deleted file mode 100644 index 11399787..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updateEmail.md +++ /dev/null @@ -1,55 +0,0 @@ - - - -# updateEmail method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - -_override_ - - - -

    Update or add email.

    -

    Throws a UpdateEmailFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -Future updateEmail({required String email}) async { - try { - await _firebaseAuth.currentUser!.updateEmail(email); - final jwt = await _firebaseAuth.currentUser!.getIdToken(true); - final account = AccountModel.fromFirebaseUser( - _firebaseAuth.currentUser, - accessToken: jwt, - ); - - return account; - } on FirebaseAuthException catch (e) { - throw UpdateEmailFailureFirebase.fromCode(e.code); - } catch (_) { - throw UpdateEmailFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md deleted file mode 100644 index be85ed32..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/updatePassword.md +++ /dev/null @@ -1,55 +0,0 @@ - - - -# updatePassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - -_override_ - - - -

    Update or add password.

    -

    Throws a UpdatePasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -Future updatePassword({required String password}) async { - try { - await _firebaseAuth.currentUser!.updatePassword(password); - final jwt = await _firebaseAuth.currentUser!.getIdToken(true); - final account = AccountModel.fromFirebaseUser( - _firebaseAuth.currentUser, - accessToken: jwt, - ); - - return account; - } on FirebaseAuthException catch (e) { - throw UpdatePasswordFailureFirebase.fromCode(e.code); - } catch (_) { - throw UpdatePasswordFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md deleted file mode 100644 index 887564d5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl/verifyPasswordResetCode.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# verifyPasswordResetCode method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) - -_override_ - - - -

    Verify password reset code.

    -

    Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -Future verifyPasswordResetCode({required String code}) async { - try { - final email = await _firebaseAuth.verifyPasswordResetCode(code); - return email.isNotNullOrEmpty; - } on FirebaseAuthException catch (e) { - throw VerifyPasswordResetCodeFailureFirebase.fromCode(e.code); - } catch (_) { - throw VerifyPasswordResetCodeFailureFirebase(); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md deleted file mode 100644 index 29bfc2f7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md +++ /dev/null @@ -1,247 +0,0 @@ - - - -# AuthenticationRemoteDataSource<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Is responsible for abstracting the provenance of the data.

    - - - - - - -**Implementers** - -- [AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md) - - - - - -## Constructors - -[AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md) () - - - - -## Properties - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [addSession](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void - - - - - - - - -##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - - - - - - -##### [delete](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - - - - - - -##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic - - - -Invoked when a non-existent method or property is accessed. -_inherited_ - - - -##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [refresh](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - - - - - - -##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - - - - - - -##### [sessionStream](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> - - - - - - - - -##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [signOut](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - - - - - - -##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [toString](https://api.flutter.dev/flutter/dart-core/Object/toString.html)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - -##### [updateEmail](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [updatePassword](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - - - - - - -##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> - - - - - - - - - - -## Operators - -##### [operator ==](https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) other) [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -The equality operator. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md deleted file mode 100644 index 9552fade..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/AuthenticationRemoteDataSource.md +++ /dev/null @@ -1,25 +0,0 @@ - - - -# AuthenticationRemoteDataSource<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthenticationRemoteDataSource<Data>() - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md deleted file mode 100644 index f1567da2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/addSession.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# addSession method - - - - - *[](https://dart.dev/null-safety)* - - - - -void addSession -([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) - - - - - - - - -## Implementation - -```dart -void addSession(SessionWrapper wrapper); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md deleted file mode 100644 index 785714a8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/confirmPasswordReset.md +++ /dev/null @@ -1,38 +0,0 @@ - - - -# confirmPasswordReset method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> confirmPasswordReset -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) - - - - - - - - -## Implementation - -```dart -Future confirmPasswordReset({ - required String code, - required String newPassword, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md deleted file mode 100644 index aad9ff7b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/delete.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# delete method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> delete -() - - - - - - - - -## Implementation - -```dart -Future delete(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md deleted file mode 100644 index 7f369a4c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/reauthenticate.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# reauthenticate method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate -() - - - - - - - - -## Implementation - -```dart -Future reauthenticate(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md deleted file mode 100644 index 104a6bc0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/refresh.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# refresh method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh -() - - - - - - - - -## Implementation - -```dart -Future refresh(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md deleted file mode 100644 index 8ee8fe82..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendEmailVerification.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# sendEmailVerification method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendEmailVerification -() - - - - - - - - -## Implementation - -```dart -Future sendEmailVerification(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md deleted file mode 100644 index 86a6aae2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sendPasswordResetEmail.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# sendPasswordResetEmail method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> sendPasswordResetEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - - - - - - - - -## Implementation - -```dart -Future sendPasswordResetEmail({required String email}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md deleted file mode 100644 index 9d8739aa..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/sessionStream.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# sessionStream method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream -() - - - - - - - - -## Implementation - -```dart -Stream> sessionStream(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md deleted file mode 100644 index ac7985b1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInAnonymously.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# signInAnonymously method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously -() - - - - - - - - -## Implementation - -```dart -Future signInAnonymously(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md deleted file mode 100644 index 394754c5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithEmailAndPassword.md +++ /dev/null @@ -1,38 +0,0 @@ - - - -# signInWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - - - - - - - - -## Implementation - -```dart -Future signInWithEmailAndPassword({ - required String email, - required String password, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md deleted file mode 100644 index 4713504f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signInWithGoogle.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# signInWithGoogle method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle -() - - - - - - - - -## Implementation - -```dart -Future signInWithGoogle(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md deleted file mode 100644 index f650758c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signOut.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# signOut method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> signOut -() - - - - - - - - -## Implementation - -```dart -Future signOut(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md deleted file mode 100644 index 6d55af4c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/signUpWithEmailAndPassword.md +++ /dev/null @@ -1,38 +0,0 @@ - - - -# signUpWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - - - - - - - - -## Implementation - -```dart -Future signUpWithEmailAndPassword({ - required String email, - required String password, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md deleted file mode 100644 index 07110bcb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updateEmail.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# updateEmail method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - - - - - - - - -## Implementation - -```dart -Future updateEmail({required String email}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md deleted file mode 100644 index 043a101f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/updatePassword.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# updatePassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - - - - - - - - -## Implementation - -```dart -Future updatePassword({required String password}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md deleted file mode 100644 index bee09e13..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRemoteDataSource/verifyPasswordResetCode.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# verifyPasswordResetCode method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) - - - - - - - - -## Implementation - -```dart -Future verifyPasswordResetCode({required String code}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository-class.md deleted file mode 100644 index 80cf4ff5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository-class.md +++ /dev/null @@ -1,258 +0,0 @@ - - - -# AuthenticationRepository<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - - - - - - - -**Implementers** - -- [AuthenticationRepositoryImpl](../wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md) - - - - - -## Constructors - -[AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md) () - - - - -## Properties - -##### [formRepository](../wyatt_authentication_bloc/AuthenticationRepository/formRepository.md) → FormRepository - - - -Form repository used in different authentication cubits/blocs -_read-only_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [addSession](../wyatt_authentication_bloc/AuthenticationRepository/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void - - - -Add a new authentication event. - - - - -##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) FutureOrResult<void> - - - -Confirms the password reset with the provided newPassword and code. - - - - -##### [delete](../wyatt_authentication_bloc/AuthenticationRepository/delete.md)() FutureOrResult<void> - - - -Delete account. - - - - -##### [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. -_inherited_ - - - -##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in. - - - - -##### [refresh](../wyatt_authentication_bloc/AuthenticationRepository/refresh.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Refreshes the current user, if signed in. - - - - -##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md)() FutureOrResult<void> - - - -Sends verification email to the account email. - - - - -##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<void> - - - -Sends a password reset email to the provided email. - - - - -##### [sessionStream](../wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> - - - -Authentication state change event stream. - - - - -##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Sign in anonymously. - - - - -##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Signs in with the provided email and password. - - - - -##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Starts the Sign In with Google Flow. - - - - -##### [signOut](../wyatt_authentication_bloc/AuthenticationRepository/signOut.md)() FutureOrResult<void> - - - -Signs out the current user. -It also clears the cache and the associated data. - - - - -##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Creates a new user with the provided email and password. - - - - -##### [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. -_inherited_ - - - -##### [updateEmail](../wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Update or add email. - - - - -##### [updatePassword](../wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Update or add password. - - - - -##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> - - - -Verify password reset code. - - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md deleted file mode 100644 index da6e6d1d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/AuthenticationRepository.md +++ /dev/null @@ -1,25 +0,0 @@ - - - -# AuthenticationRepository<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthenticationRepository<Data>() - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/addSession.md deleted file mode 100644 index dd5755bd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/addSession.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# addSession method - - - - - *[](https://dart.dev/null-safety)* - - - - -void addSession -([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) - - - - - -

    Add a new authentication event.

    - - - -## Implementation - -```dart -void addSession(SessionWrapper wrapper); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md deleted file mode 100644 index 43531c88..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/confirmPasswordReset.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# confirmPasswordReset method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<void> confirmPasswordReset -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) - - - - - -

    Confirms the password reset with the provided newPassword and code.

    -

    Throws a ConfirmPasswordResetFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult confirmPasswordReset({ - required String code, - required String newPassword, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/delete.md deleted file mode 100644 index 05b49493..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/delete.md +++ /dev/null @@ -1,38 +0,0 @@ - - - -# delete method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<void> delete -() - - - - - -

    Delete account.

    -

    Throws a DeleteAccountFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult delete(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/formRepository.md deleted file mode 100644 index 0bded545..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/formRepository.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# formRepository property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormRepository formRepository - - - - - -

    Form repository used in different authentication cubits/blocs

    - - - -## Implementation - -```dart -FormRepository get formRepository; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md deleted file mode 100644 index 809974fe..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/reauthenticate.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# reauthenticate method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate -() - - - - - -

    Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in.

    -

    Throws a ReauthenticateFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult reauthenticate(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/refresh.md deleted file mode 100644 index 5f3413e3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/refresh.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# refresh method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh -() - - - - - -

    Refreshes the current user, if signed in.

    - - - -## Implementation - -```dart -FutureOrResult refresh(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md deleted file mode 100644 index 184e510c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendEmailVerification.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# sendEmailVerification method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<void> sendEmailVerification -() - - - - - -

    Sends verification email to the account email.

    -

    Throws a SendEmailVerificationFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult sendEmailVerification(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md deleted file mode 100644 index 5778307e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sendPasswordResetEmail.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# sendPasswordResetEmail method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<void> sendPasswordResetEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - - - - - -

    Sends a password reset email to the provided email.

    -

    Throws a SendPasswordResetEmailFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult sendPasswordResetEmail({required String email}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md deleted file mode 100644 index d911cb8d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/sessionStream.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# sessionStream method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream -() - - - - - -

    Authentication state change event stream.

    - - - -## Implementation - -```dart -Stream> sessionStream(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md deleted file mode 100644 index 03d3f774..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInAnonymously.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# signInAnonymously method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously -() - - - - - -

    Sign in anonymously.

    -

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult signInAnonymously(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md deleted file mode 100644 index 5ae7989f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithEmailAndPassword.md +++ /dev/null @@ -1,41 +0,0 @@ - - - -# signInWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - - - - - -

    Signs in with the provided email and password.

    -

    Throws a SignInWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult signInWithEmailAndPassword({ - required String email, - required String password, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md deleted file mode 100644 index 18a8989b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signInWithGoogle.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# signInWithGoogle method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle -() - - - - - -

    Starts the Sign In with Google Flow.

    -

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult signInWithGoogle(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signOut.md deleted file mode 100644 index 7dad6c4b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signOut.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# signOut method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<void> signOut -() - - - - - -

    Signs out the current user. -It also clears the cache and the associated data.

    - - - -## Implementation - -```dart -FutureOrResult signOut(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md deleted file mode 100644 index 7a99a749..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/signUpWithEmailAndPassword.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# signUpWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - - - - - -

    Creates a new user with the provided email and password.

    -

    Returns the newly created user's unique identifier.

    -

    Throws a SignUpWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult signUpWithEmailAndPassword({ - required String email, - required String password, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md deleted file mode 100644 index e324d7ad..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updateEmail.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# updateEmail method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - - - - - -

    Update or add email.

    -

    Throws a UpdateEmailFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult updateEmail({ - required String email, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md deleted file mode 100644 index ac90a4a9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/updatePassword.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# updatePassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - - - - - -

    Update or add password.

    -

    Throws a UpdatePasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult updatePassword({ - required String password, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md deleted file mode 100644 index 73463137..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepository/verifyPasswordResetCode.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# verifyPasswordResetCode method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) - - - - - -

    Verify password reset code.

    -

    Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOrResult verifyPasswordResetCode({required String code}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md deleted file mode 100644 index 5ec57c81..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md +++ /dev/null @@ -1,269 +0,0 @@ - - - -# AuthenticationRepositoryImpl<Data extends Object> class - - - - - - - *[](https://dart.dev/null-safety)* - - - - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> -- AuthenticationRepositoryImpl - - - - - - - - -## Constructors - -[AuthenticationRepositoryImpl](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md) ({required [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> authenticationRemoteDataSource, FormRepository? formRepository, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraSignUpInputs, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraEditAccountInputs, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customEmailValidator, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customPasswordValidator}) - - - - -## Properties - -##### [authenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md) → [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> - - - - -_final_ - - - -##### [formRepository](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md) → FormRepository - - - -Form repository used in different authentication cubits/blocs -_read-onlyoverride_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [addSession](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md)([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) void - - - -Add a new authentication event. -_override_ - - - -##### [confirmPasswordReset](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) FutureOrResult<void> - - - -Confirms the password reset with the provided newPassword and code. -_override_ - - - -##### [delete](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md)() FutureOrResult<void> - - - -Delete account. -_override_ - - - -##### [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. -_inherited_ - - - -##### [reauthenticate](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in. -_override_ - - - -##### [refresh](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Refreshes the current user, if signed in. -_override_ - - - -##### [sendEmailVerification](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md)() FutureOrResult<void> - - - -Sends verification email to the account email. -_override_ - - - -##### [sendPasswordResetEmail](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<void> - - - -Sends a password reset email to the provided email. -_override_ - - - -##### [sessionStream](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md)() [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> - - - -Authentication state change event stream. -_override_ - - - -##### [signInAnonymously](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Sign in anonymously. -_override_ - - - -##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Signs in with the provided email and password. -_override_ - - - -##### [signInWithGoogle](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md)() FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Starts the Sign In with Google Flow. -_override_ - - - -##### [signOut](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md)() FutureOrResult<void> - - - -Signs out the current user. -It also clears the cache and the associated data. -_override_ - - - -##### [signUpWithEmailAndPassword](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Creates a new user with the provided email and password. -_override_ - - - -##### [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. -_inherited_ - - - -##### [updateEmail](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Update or add email. -_override_ - - - -##### [updatePassword](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) FutureOrResult<[Account](../wyatt_authentication_bloc/Account-class.md)> - - - -Update or add password. -_override_ - - - -##### [verifyPasswordResetCode](../wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md)({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> - - - -Verify password reset code. -_override_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md deleted file mode 100644 index 5fd00e8a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/AuthenticationRepositoryImpl.md +++ /dev/null @@ -1,69 +0,0 @@ - - - -# AuthenticationRepositoryImpl<Data extends Object> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -AuthenticationRepositoryImpl<Data extends Object>({required [AuthenticationRemoteDataSource](../../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> authenticationRemoteDataSource, FormRepository? formRepository, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraSignUpInputs, [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>>? extraEditAccountInputs, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customEmailValidator, FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>? customPasswordValidator}) - - - - - -## Implementation - -```dart -AuthenticationRepositoryImpl({ - required this.authenticationRemoteDataSource, - FormRepository? formRepository, - // ignore: strict_raw_type - List? extraSignUpInputs, - // ignore: strict_raw_type - List? extraEditAccountInputs, - FormInputValidator? customEmailValidator, - FormInputValidator? customPasswordValidator, -}) { - _formRepository = formRepository ?? FormRepositoryImpl(); - - if (formRepository != null) { - return; - } - _formRepository - ..registerForm( - Forms.buildSignUpForm( - customEmailValidator, - customPasswordValidator, - extraSignUpInputs, - ), - ) - ..registerForm( - Forms.buildSignInForm( - customEmailValidator, - customPasswordValidator, - ), - ) - ..registerForm( - Forms.buildPasswordResetForm(customEmailValidator), - ) - ..registerForm( - Forms.buildEditAccountForm( - customEmailValidator, - customPasswordValidator, - extraEditAccountInputs, - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md deleted file mode 100644 index 24fac35a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/addSession.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# addSession method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -void addSession -([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> wrapper) - -_override_ - - - -

    Add a new authentication event.

    - - - -## Implementation - -```dart -@override -void addSession(SessionWrapper wrapper) => - authenticationRemoteDataSource.addSession(wrapper); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md deleted file mode 100644 index c5a64a53..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/authenticationRemoteDataSource.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# authenticationRemoteDataSource property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationRemoteDataSource](../../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> authenticationRemoteDataSource - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationRemoteDataSource authenticationRemoteDataSource; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md deleted file mode 100644 index 1d7641ae..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/confirmPasswordReset.md +++ /dev/null @@ -1,51 +0,0 @@ - - - -# confirmPasswordReset method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<void> confirmPasswordReset -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) newPassword}) - -_override_ - - - -

    Confirms the password reset with the provided newPassword and code.

    -

    Throws a ConfirmPasswordResetFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult confirmPasswordReset({ - required String code, - required String newPassword, -}) => - Result.tryCatchAsync( - () async { - await authenticationRemoteDataSource.confirmPasswordReset( - code: code, - newPassword: newPassword, - ); - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md deleted file mode 100644 index 2275ccde..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/delete.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -# delete method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<void> delete -() - -_override_ - - - -

    Delete account.

    -

    Throws a DeleteAccountFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult delete() => - Result.tryCatchAsync( - () async => authenticationRemoteDataSource.delete(), - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md deleted file mode 100644 index d38908fe..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/formRepository.md +++ /dev/null @@ -1,41 +0,0 @@ - - - -# formRepository property - - - - - *[](https://dart.dev/null-safety)* - - - - - -**Annotations** - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) -FormRepository formRepository - -_override_ - - - -

    Form repository used in different authentication cubits/blocs

    - - - -## Implementation - -```dart -@override -FormRepository get formRepository => _formRepository; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md deleted file mode 100644 index 251168fb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/reauthenticate.md +++ /dev/null @@ -1,49 +0,0 @@ - - - -# reauthenticate method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> reauthenticate -() - -_override_ - - - -

    Some security-sensitive actions—such as deleting an account, -setting a primary email address, and changing a password—require that -the user has recently signed in.

    -

    Throws a ReauthenticateFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult reauthenticate() => - Result.tryCatchAsync( - () async { - final account = await authenticationRemoteDataSource.reauthenticate(); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md deleted file mode 100644 index 744850b4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/refresh.md +++ /dev/null @@ -1,45 +0,0 @@ - - - -# refresh method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> refresh -() - -_override_ - - - -

    Refreshes the current user, if signed in.

    - - - -## Implementation - -```dart -@override -FutureOrResult refresh() => - Result.tryCatchAsync( - () async { - final account = await authenticationRemoteDataSource.refresh(); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md deleted file mode 100644 index 3b70fe5d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendEmailVerification.md +++ /dev/null @@ -1,45 +0,0 @@ - - - -# sendEmailVerification method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<void> sendEmailVerification -() - -_override_ - - - -

    Sends verification email to the account email.

    -

    Throws a SendEmailVerificationFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult sendEmailVerification() => - Result.tryCatchAsync( - () async { - await authenticationRemoteDataSource.sendEmailVerification(); - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md deleted file mode 100644 index df9cbe89..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sendPasswordResetEmail.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# sendPasswordResetEmail method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<void> sendPasswordResetEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - -_override_ - - - -

    Sends a password reset email to the provided email.

    -

    Throws a SendPasswordResetEmailFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult sendPasswordResetEmail({required String email}) => - Result.tryCatchAsync( - () async { - await authenticationRemoteDataSource.sendPasswordResetEmail( - email: email, - ); - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md deleted file mode 100644 index 33cab460..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/sessionStream.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# sessionStream method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>> sessionStream -() - -_override_ - - - -

    Authentication state change event stream.

    - - - -## Implementation - -```dart -@override -Stream> sessionStream() => - authenticationRemoteDataSource.sessionStream(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md deleted file mode 100644 index 8dfc8cea..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInAnonymously.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# signInAnonymously method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInAnonymously -() - -_override_ - - - -

    Sign in anonymously.

    -

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult signInAnonymously() => - Result.tryCatchAsync( - () async { - final account = - await authenticationRemoteDataSource.signInAnonymously(); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md deleted file mode 100644 index a42a7bab..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithEmailAndPassword.md +++ /dev/null @@ -1,54 +0,0 @@ - - - -# signInWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - -_override_ - - - -

    Signs in with the provided email and password.

    -

    Throws a SignInWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult signInWithEmailAndPassword({ - required String email, - required String password, -}) => - Result.tryCatchAsync( - () async { - final account = - await authenticationRemoteDataSource.signInWithEmailAndPassword( - email: email, - password: password, - ); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md deleted file mode 100644 index e6e5095d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signInWithGoogle.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# signInWithGoogle method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signInWithGoogle -() - -_override_ - - - -

    Starts the Sign In with Google Flow.

    -

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult signInWithGoogle() => - Result.tryCatchAsync( - () async { - final account = - await authenticationRemoteDataSource.signInWithGoogle(); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md deleted file mode 100644 index 5b83c76a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signOut.md +++ /dev/null @@ -1,45 +0,0 @@ - - - -# signOut method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<void> signOut -() - -_override_ - - - -

    Signs out the current user. -It also clears the cache and the associated data.

    - - - -## Implementation - -```dart -@override -FutureOrResult signOut() => - Result.tryCatchAsync( - () async { - await authenticationRemoteDataSource.signOut(); - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md deleted file mode 100644 index 5a0ce347..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/signUpWithEmailAndPassword.md +++ /dev/null @@ -1,55 +0,0 @@ - - - -# signUpWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> signUpWithEmailAndPassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email, required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - -_override_ - - - -

    Creates a new user with the provided email and password.

    -

    Returns the newly created user's unique identifier.

    -

    Throws a SignUpWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult signUpWithEmailAndPassword({ - required String email, - required String password, -}) => - Result.tryCatchAsync( - () async { - final account = - await authenticationRemoteDataSource.signUpWithEmailAndPassword( - email: email, - password: password, - ); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md deleted file mode 100644 index 89647f63..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updateEmail.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# updateEmail method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updateEmail -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) email}) - -_override_ - - - -

    Update or add email.

    -

    Throws a UpdateEmailFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult updateEmail({required String email}) => - Result.tryCatchAsync( - () async { - final account = - await authenticationRemoteDataSource.updateEmail(email: email); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md deleted file mode 100644 index 3e839532..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/updatePassword.md +++ /dev/null @@ -1,49 +0,0 @@ - - - -# updatePassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[Account](../../wyatt_authentication_bloc/Account-class.md)> updatePassword -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) password}) - -_override_ - - - -

    Update or add password.

    -

    Throws a UpdatePasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult updatePassword({required String password}) => - Result.tryCatchAsync( - () async { - final account = await authenticationRemoteDataSource.updatePassword( - password: password, - ); - return account; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md deleted file mode 100644 index 6a2eae13..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationRepositoryImpl/verifyPasswordResetCode.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# verifyPasswordResetCode method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)> verifyPasswordResetCode -({required [String](https://api.flutter.dev/flutter/dart-core/String-class.html) code}) - -_override_ - - - -

    Verify password reset code.

    -

    Throws a VerifyPasswordResetCodeFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -@override -FutureOrResult verifyPasswordResetCode({required String code}) => - Result.tryCatchAsync( - () async { - final response = await authenticationRemoteDataSource - .verifyPasswordResetCode(code: code); - return response; - }, - (error) => error, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState-class.md deleted file mode 100644 index 8b0c36ea..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState-class.md +++ /dev/null @@ -1,150 +0,0 @@ - - - -# AuthenticationState<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - - - - -**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) -- AuthenticationState - - - - - - - - -## Constructors - -[AuthenticationState.authenticated](../wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md) ([SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> sessionWrapper) - - _const_ - -[AuthenticationState.unauthenticated](../wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md) () - - _const_ - -[AuthenticationState.unknown](../wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md) () - - _const_ - - -## Properties - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/AuthenticationState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [status](../wyatt_authentication_bloc/AuthenticationState/status.md) → [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) - - - - -_final_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationState/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyoverride_ - - - -##### [wrapper](../wyatt_authentication_bloc/AuthenticationState/wrapper.md) → [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? - - - - -_final_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md deleted file mode 100644 index d9f91abf..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.authenticated.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# AuthenticationState<Data>.authenticated constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -AuthenticationState<Data>.authenticated([SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> sessionWrapper) - - - - - -## Implementation - -```dart -const AuthenticationState.authenticated(SessionWrapper sessionWrapper) - : this._( - AuthenticationStatus.authenticated, - sessionWrapper, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md deleted file mode 100644 index e2bddab6..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unauthenticated.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# AuthenticationState<Data>.unauthenticated constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -AuthenticationState<Data>.unauthenticated() - - - - - -## Implementation - -```dart -const AuthenticationState.unauthenticated() - : this._(AuthenticationStatus.unauthenticated, null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md deleted file mode 100644 index 09ff10d9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/AuthenticationState.unknown.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# AuthenticationState<Data>.unknown constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -AuthenticationState<Data>.unknown() - - - - - -## Implementation - -```dart -const AuthenticationState.unknown() - : this._(AuthenticationStatus.unknown, null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/props.md deleted file mode 100644 index 908ab81c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [status, wrapper]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/status.md deleted file mode 100644 index 40efc5ec..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/status.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# status property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationStatus](../../wyatt_authentication_bloc/AuthenticationStatus.md) status - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationStatus status; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/stringify.md deleted file mode 100644 index d226dc33..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/stringify.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# stringify property - - - - - *[](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 - -_override_ - - - -

    If set to true, the toString method will be overridden to output -this instance's props.

    -

    A global default value for stringify can be set using -EquatableConfig.stringify.

    -

    If this instance's stringify is set to null, the value of -EquatableConfig.stringify will be used instead. This defaults to -false.

    - - - -## Implementation - -```dart -@override -bool? get stringify => true; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/wrapper.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/wrapper.md deleted file mode 100644 index cab7f3c8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationState/wrapper.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# wrapper property - - - - - *[](https://dart.dev/null-safety)* - - - -[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? wrapper - -_final_ - - - - - - -## Implementation - -```dart -final SessionWrapper? wrapper; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus.md deleted file mode 100644 index 2e76c5aa..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus.md +++ /dev/null @@ -1,151 +0,0 @@ - - - -# AuthenticationStatus enum - - - - - *[](https://dart.dev/null-safety)* - - - -

    Different authentication status

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [Enum](https://api.flutter.dev/flutter/dart-core/Enum-class.html) -- AuthenticationStatus - - - - - - -## Constructors - -[AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md) () - - _const_ - - -## Values - -##### [unknown](../wyatt_authentication_bloc/AuthenticationStatus.md) const [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) - - - -

    At the application launch.

    - - - - -##### [authenticated](../wyatt_authentication_bloc/AuthenticationStatus.md) const [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) - - - -

    When the user is logged

    - - - - -##### [unauthenticated](../wyatt_authentication_bloc/AuthenticationStatus.md) const [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) - - - -

    When the user is not logged

    - - - - - -## Properties - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [index](https://api.flutter.dev/flutter/dart-core/Enum/index.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -A numeric identifier for the enumerated value. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - -## Constants - -##### [values](../wyatt_authentication_bloc/AuthenticationStatus/values-constant.md) const [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md)> - - - -A constant List of the values in this enum, in order of their declaration. - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md deleted file mode 100644 index be2e4631..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/AuthenticationStatus.md +++ /dev/null @@ -1,25 +0,0 @@ - - - -# AuthenticationStatus constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -AuthenticationStatus() - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/values-constant.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/values-constant.md deleted file mode 100644 index 9639a71a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/AuthenticationStatus/values-constant.md +++ /dev/null @@ -1,29 +0,0 @@ - - - -# values constant - - - - - *[](https://dart.dev/null-safety)* - - - -[List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[AuthenticationStatus](../../wyatt_authentication_bloc/AuthenticationStatus.md)> const values - - - - - -

    A constant List of the values in this enum, in order of their declaration.

    - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit-class.md deleted file mode 100644 index a1d6b8f8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit-class.md +++ /dev/null @@ -1,261 +0,0 @@ - - - -# BaseEditAccountCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Abstract edit account cubit useful for implementing a cubit with fine -granularity by adding only the required mixins.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> -- BaseEditAccountCubit - - - -**Implementers** - -- [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md) - - - - - -## Constructors - -[BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_final_ - - - -##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-only_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository - - - - -_read-only_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md deleted file mode 100644 index 8f85be67..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/BaseEditAccountCubit.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# BaseEditAccountCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -BaseEditAccountCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -BaseEditAccountCubit({ - required this.authenticationRepository, -}) : super( - EditAccountState( - form: authenticationRepository.formRepository - .accessForm(AuthFormName.signInForm), - ), - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md deleted file mode 100644 index 32cdfa2a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# authenticationRepository property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationRepository authenticationRepository; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md deleted file mode 100644 index 1748061e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md +++ /dev/null @@ -1,53 +0,0 @@ - - - -# dataChanged<Value> method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged -<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) - - - - - - - - -## Implementation - -```dart -@override -FutureOr dataChanged( - String key, - FormInputValidator dirtyValue, -) { - final form = formRepository.accessForm(formName).clone(); - - try { - form.updateValidator(key, dirtyValue); - formRepository.updateForm(form); - } catch (e) { - rethrow; - } - - emit( - EditAccountState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formName.md deleted file mode 100644 index 3196e650..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formName.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# formName property - - - - - *[](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) formName - - - - - - - - -## Implementation - -```dart -@override -String get formName => AuthFormName.signInForm; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md deleted file mode 100644 index db8665dd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# formRepository property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormRepository formRepository - - - - - - - - -## Implementation - -```dart -FormRepository get formRepository => authenticationRepository.formRepository; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/reset.md deleted file mode 100644 index 5344b5c4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/reset.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# reset method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr reset() { - final form = state.form.reset(); - formRepository.updateForm(form); - emit( - EditAccountState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/submit.md deleted file mode 100644 index 4ae4a062..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/submit.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# submit method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr submit() async { - final WyattForm form = formRepository.accessForm(formName); - const error = '`submit()` is not implemented for BaseEditAccountCubit, ' - 'please use `updateEmail()` or `updatePassword()`.'; - emit( - EditAccountState( - form: form, - errorMessage: error, - status: FormStatus.submissionFailure, - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/update.md deleted file mode 100644 index f0bb65a1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/update.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# update method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update -(WyattForm form, {SetOperation operation = SetOperation.replace}) - - - - - - - - -## Implementation - -```dart -@override -FutureOr update( - WyattForm form, { - SetOperation operation = SetOperation.replace, -}) { - final WyattForm current = formRepository.accessForm(formName).clone(); - final WyattForm newForm = operation.operation.call(current, form); - formRepository.updateForm(newForm); - - emit( - EditAccountState(form: newForm, status: newForm.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/validate.md deleted file mode 100644 index 73e17324..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseEditAccountCubit/validate.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# validate method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr validate() { - final WyattForm form = formRepository.accessForm(formName); - emit( - EditAccountState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit-class.md deleted file mode 100644 index d56382ff..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit-class.md +++ /dev/null @@ -1,261 +0,0 @@ - - - -# BaseSignInCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Abstract sign in cubit useful for implementing a cubit with fine -granularity by adding only the required mixins.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> -- BaseSignInCubit - - - -**Implementers** - -- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) - - - - - -## Constructors - -[BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_final_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-only_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository - - - - -_read-only_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md deleted file mode 100644 index 11cb730f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/BaseSignInCubit.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# BaseSignInCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -BaseSignInCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -BaseSignInCubit({ - required this.authenticationRepository, -}) : super( - SignInState( - form: authenticationRepository.formRepository - .accessForm(AuthFormName.signInForm), - ), - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md deleted file mode 100644 index 32cdfa2a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# authenticationRepository property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationRepository authenticationRepository; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md deleted file mode 100644 index 2c85a80b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md +++ /dev/null @@ -1,53 +0,0 @@ - - - -# dataChanged<Value> method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged -<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) - - - - - - - - -## Implementation - -```dart -@override -FutureOr dataChanged( - String key, - FormInputValidator dirtyValue, -) { - final form = formRepository.accessForm(formName).clone(); - - try { - form.updateValidator(key, dirtyValue); - formRepository.updateForm(form); - } catch (e) { - rethrow; - } - - emit( - SignInState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formName.md deleted file mode 100644 index 3196e650..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formName.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# formName property - - - - - *[](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) formName - - - - - - - - -## Implementation - -```dart -@override -String get formName => AuthFormName.signInForm; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formRepository.md deleted file mode 100644 index db8665dd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/formRepository.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# formRepository property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormRepository formRepository - - - - - - - - -## Implementation - -```dart -FormRepository get formRepository => authenticationRepository.formRepository; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/reset.md deleted file mode 100644 index 5d78a829..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/reset.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# reset method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr reset() { - final form = state.form.reset(); - formRepository.updateForm(form); - emit( - SignInState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/submit.md deleted file mode 100644 index 69de04c2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/submit.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# submit method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr submit() async { - final WyattForm form = formRepository.accessForm(formName); - const error = '`submit()` is not implemented for BaseSignInCubit, ' - 'please use `signUpWithEmailAndPassword()`.'; - emit( - SignInState( - form: form, - errorMessage: error, - status: FormStatus.submissionFailure, - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/update.md deleted file mode 100644 index d37c336c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/update.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# update method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update -(WyattForm form, {SetOperation operation = SetOperation.replace}) - - - - - - - - -## Implementation - -```dart -@override -FutureOr update( - WyattForm form, { - SetOperation operation = SetOperation.replace, -}) { - final WyattForm current = formRepository.accessForm(formName).clone(); - final WyattForm newForm = operation.operation.call(current, form); - formRepository.updateForm(newForm); - - emit( - SignInState(form: newForm, status: newForm.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/validate.md deleted file mode 100644 index 8dbc20d1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignInCubit/validate.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# validate method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr validate() { - final WyattForm form = formRepository.accessForm(formName); - emit( - SignInState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit-class.md deleted file mode 100644 index 4bf08947..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit-class.md +++ /dev/null @@ -1,261 +0,0 @@ - - - -# BaseSignUpCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Abstract sign up cubit useful for implementing a cubit with fine -granularity by adding only the required mixins.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> -- BaseSignUpCubit - - - -**Implementers** - -- [SignUpCubit](../wyatt_authentication_bloc/SignUpCubit-class.md) - - - - - -## Constructors - -[BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_final_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignUpCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-only_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md) → FormRepository - - - - -_read-only_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/BaseSignUpCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [submit](../wyatt_authentication_bloc/BaseSignUpCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignUpCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [validate](../wyatt_authentication_bloc/BaseSignUpCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md deleted file mode 100644 index 00958987..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/BaseSignUpCubit.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# BaseSignUpCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -BaseSignUpCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -BaseSignUpCubit({ - required this.authenticationRepository, -}) : super( - SignUpState( - form: authenticationRepository.formRepository - .accessForm(AuthFormName.signUpForm), - ), - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md deleted file mode 100644 index 32cdfa2a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# authenticationRepository property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationRepository authenticationRepository; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md deleted file mode 100644 index 8583e9da..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md +++ /dev/null @@ -1,53 +0,0 @@ - - - -# dataChanged<Value> method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged -<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) - - - - - - - - -## Implementation - -```dart -@override -FutureOr dataChanged( - String key, - FormInputValidator dirtyValue, -) { - final form = formRepository.accessForm(formName).clone(); - - try { - form.updateValidator(key, dirtyValue); - formRepository.updateForm(form); - } catch (e) { - rethrow; - } - - emit( - SignUpState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formName.md deleted file mode 100644 index f79689dd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formName.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# formName property - - - - - *[](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) formName - - - - - - - - -## Implementation - -```dart -@override -String get formName => AuthFormName.signUpForm; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md deleted file mode 100644 index db8665dd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# formRepository property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormRepository formRepository - - - - - - - - -## Implementation - -```dart -FormRepository get formRepository => authenticationRepository.formRepository; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/reset.md deleted file mode 100644 index 621867ee..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/reset.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# reset method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr reset() { - final form = state.form.reset(); - formRepository.updateForm(form); - emit( - SignUpState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/submit.md deleted file mode 100644 index b9699be7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/submit.md +++ /dev/null @@ -1,49 +0,0 @@ - - - -# submit method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr submit() async { - final WyattForm form = formRepository.accessForm(formName); - const error = '`submit()` is not implemented for BaseSignUpCubit, ' - 'please use `signUpWithEmailAndPassword()`.'; - emit( - SignUpState( - form: form, - errorMessage: error, - status: FormStatus.submissionFailure, - ), - ); - throw UnimplementedError(error); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/update.md deleted file mode 100644 index 9cd644a4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/update.md +++ /dev/null @@ -1,51 +0,0 @@ - - - -# update method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update -(WyattForm form, {SetOperation operation = SetOperation.replace}) - - - - - - - - -## Implementation - -```dart -@override -FutureOr update( - WyattForm form, { - SetOperation operation = SetOperation.replace, -}) { - final WyattForm current = formRepository.accessForm(formName).clone(); - final WyattForm newForm = operation.operation.call(current, form); - formRepository.updateForm(newForm); - - emit( - SignUpState( - form: newForm, - status: newForm.validate(), - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/validate.md deleted file mode 100644 index 1eeceb04..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BaseSignUpCubit/validate.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# validate method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr validate() { - final WyattForm form = formRepository.accessForm(formName); - emit( - SignUpState(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension.md deleted file mode 100644 index 6ee49aa0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension.md +++ /dev/null @@ -1,76 +0,0 @@ - - - -# BuildContextExtension extension -on [BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) - - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Extension that helps to quickly access useful resources like wrapper, -session, account or data.

    - - - - - - -## Methods - -##### [account](../wyatt_authentication_bloc/BuildContextExtension/account.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() [Account](../wyatt_authentication_bloc/Account-class.md)? - - - -Returns account - - - - -##### [data](../wyatt_authentication_bloc/BuildContextExtension/data.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() Data? - - - -Returns associated data - - - - -##### [session](../wyatt_authentication_bloc/BuildContextExtension/session.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() [Session](../wyatt_authentication_bloc/Session-class.md)<Data>? - - - -Returns session - - - - -##### [wrapper](../wyatt_authentication_bloc/BuildContextExtension/wrapper.md)<T extends [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data>, Data>() [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? - - - -Returns session wrapper - - - - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/account.md deleted file mode 100644 index d0f51a1f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/account.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# account<T extends AuthenticationCubit<Data>, Data> method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Account](../../wyatt_authentication_bloc/Account-class.md)? account -<T extends AuthenticationCubit<Data>, Data>() - - - - - -

    Returns account

    - - - -## Implementation - -```dart -Account? account, Data>() => - watch().currentSession()?.session?.account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/data.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/data.md deleted file mode 100644 index 1958e209..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/data.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# data<T extends AuthenticationCubit<Data>, Data> method - - - - - *[](https://dart.dev/null-safety)* - - - - -Data? data -<T extends AuthenticationCubit<Data>, Data>() - - - - - -

    Returns associated data

    - - - -## Implementation - -```dart -Data? data, Data>() => - watch().currentSession()?.session?.data; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/session.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/session.md deleted file mode 100644 index 2d5d16b1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/session.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# session<T extends AuthenticationCubit<Data>, Data> method - - - - - *[](https://dart.dev/null-safety)* - - - - -[Session](../../wyatt_authentication_bloc/Session-class.md)<Data>? session -<T extends AuthenticationCubit<Data>, Data>() - - - - - -

    Returns session

    - - - -## Implementation - -```dart -Session? session, Data>() => - watch().currentSession()?.session; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/wrapper.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/wrapper.md deleted file mode 100644 index edeb2c9e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/BuildContextExtension/wrapper.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# wrapper<T extends AuthenticationCubit<Data>, Data> method - - - - - *[](https://dart.dev/null-safety)* - - - - -[SessionWrapper](../../wyatt_authentication_bloc/SessionWrapper-class.md)<Data>? wrapper -<T extends AuthenticationCubit<Data>, Data>() - - - - - -

    Returns session wrapper

    - - - -## Implementation - -```dart -SessionWrapper? wrapper, Data>() => - watch().currentSession(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md deleted file mode 100644 index a9608f3c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# ConfirmPasswordResetFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password reset process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md) -- ConfirmPasswordResetFailureFirebase - - - - - - - - -## Constructors - -[ConfirmPasswordResetFailureFirebase](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.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]) - - - -[ConfirmPasswordResetFailureFirebase.fromCode](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md deleted file mode 100644 index 4d51aa2d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# ConfirmPasswordResetFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ConfirmPasswordResetFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -ConfirmPasswordResetFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md deleted file mode 100644 index 97e8c31a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase/ConfirmPasswordResetFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ConfirmPasswordResetFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ConfirmPasswordResetFailureFirebase([[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 -ConfirmPasswordResetFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md deleted file mode 100644 index 29578d9c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# ConfirmPasswordResetFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password reset process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- ConfirmPasswordResetFailureInterface - - - -**Implementers** - -- [ConfirmPasswordResetFailureFirebase](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md) - - - - - -## Constructors - -[ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.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 during the password reset process if a failure occurs. - -[ConfirmPasswordResetFailureInterface.fromCode](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the password reset process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md deleted file mode 100644 index c0177f60..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ConfirmPasswordResetFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ConfirmPasswordResetFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the password reset process if a failure occurs.

    - - - -## Implementation - -```dart -ConfirmPasswordResetFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md deleted file mode 100644 index 585e23fc..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface/ConfirmPasswordResetFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ConfirmPasswordResetFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ConfirmPasswordResetFailureInterface([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 during the password reset process if a failure occurs.

    - - - -## Implementation - -```dart -ConfirmPasswordResetFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine-class.md deleted file mode 100644 index 8d140161..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# CustomRoutine<R, Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Calls on each cubit action of this package.

    -

    Useful to register custom logic on pre-implemented logic.

    - - - - -## Constructors - -[CustomRoutine](../wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md) ({required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> routine(), required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> attachedLogic(Result<R, AppException> routineResult), required void onError(AppException exception), required void onSuccess(R result, Data? data)}) - - _const_ - - -## Properties - -##### [attachedLogic](../wyatt_authentication_bloc/CustomRoutine/attachedLogic.md) → [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> Function(Result<R, AppException> routineResult) - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [onError](../wyatt_authentication_bloc/CustomRoutine/onError.md) → void Function(AppException exception) - - - - -_final_ - - - -##### [onSuccess](../wyatt_authentication_bloc/CustomRoutine/onSuccess.md) → void Function(R result, Data? data) - - - - -_final_ - - - -##### [routine](../wyatt_authentication_bloc/CustomRoutine/routine.md) → [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> Function() - - - - -_final_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [call](../wyatt_authentication_bloc/CustomRoutine/call.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [noSuchMethod](https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html)([Invocation](https://api.flutter.dev/flutter/dart-core/Invocation-class.html) invocation) dynamic - - - -Invoked when a non-existent method or property is accessed. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md deleted file mode 100644 index 4e771554..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/CustomRoutine.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# CustomRoutine<R, Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -CustomRoutine<R, Data>({required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> routine(), required [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> attachedLogic(Result<R, AppException> routineResult), required void onError(AppException exception), required void onSuccess(R result, Data? data)}) - - - - - -## Implementation - -```dart -const CustomRoutine({ - required this.routine, - required this.attachedLogic, - required this.onError, - required this.onSuccess, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/attachedLogic.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/attachedLogic.md deleted file mode 100644 index 0486eb86..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/attachedLogic.md +++ /dev/null @@ -1,35 +0,0 @@ - - - -# attachedLogic property - - - - - *[](https://dart.dev/null-safety)* - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<Data?, AppException>> Function(Result<R, AppException> routineResult) attachedLogic - -_final_ - - - - - - -## Implementation - -```dart -final FutureOr> Function( - Result routineResult, -) attachedLogic; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/call.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/call.md deleted file mode 100644 index a03b3b8b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/call.md +++ /dev/null @@ -1,55 +0,0 @@ - - - -# call method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> call -() - - - - - - - - -## Implementation - -```dart -FutureOr call() async { - final result = await routine.call(); - - // Call custom logic - final customRoutineResult = await attachedLogic.call(result); - - // Check for errors - if (result.isErr) { - onError.call(result.err!); - - return; - } - if (customRoutineResult.isErr) { - onError.call(customRoutineResult.err!); - - return; - } - - // If no error - return onSuccess.call(result.ok as R, customRoutineResult.ok); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onError.md deleted file mode 100644 index 540b3834..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onError.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onError property - - - - - *[](https://dart.dev/null-safety)* - - - -void Function(AppException exception) onError - -_final_ - - - - - - -## Implementation - -```dart -final void Function(AppException exception) onError; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onSuccess.md deleted file mode 100644 index 0232c8c7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/onSuccess.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onSuccess property - - - - - *[](https://dart.dev/null-safety)* - - - -void Function(R result, Data? data) onSuccess - -_final_ - - - - - - -## Implementation - -```dart -final void Function(R result, Data? data) onSuccess; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/routine.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/routine.md deleted file mode 100644 index 9359edea..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/CustomRoutine/routine.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# routine property - - - - - *[](https://dart.dev/null-safety)* - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<Result<R, AppException>> Function() routine - -_final_ - - - - - - -## Implementation - -```dart -final FutureOr> Function() routine; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md deleted file mode 100644 index b7283c93..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# DeleteAccountFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the account deletion if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md) -- DeleteAccountFailureFirebase - - - - - - - - -## Constructors - -[DeleteAccountFailureFirebase](../wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.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]) - - - -[DeleteAccountFailureFirebase.fromCode](../wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md deleted file mode 100644 index 8c43e144..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.fromCode.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# DeleteAccountFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -DeleteAccountFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -DeleteAccountFailureFirebase.fromCode(String code) : super.fromCode(code) { - switch (code) { - case 'requires-recent-login': - msg = "User's last sign-in time does not meet the security threshold."; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md deleted file mode 100644 index e9be7130..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureFirebase/DeleteAccountFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# DeleteAccountFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -DeleteAccountFailureFirebase([[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 -DeleteAccountFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md deleted file mode 100644 index 78a6a6f7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# DeleteAccountFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the account deletion if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- DeleteAccountFailureInterface - - - -**Implementers** - -- [DeleteAccountFailureFirebase](../wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md) - - - - - -## Constructors - -[DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.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) - - - -[DeleteAccountFailureInterface.fromCode](../wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md deleted file mode 100644 index 7e18dc37..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# DeleteAccountFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -DeleteAccountFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -DeleteAccountFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md deleted file mode 100644 index 09759d9d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeleteAccountFailureInterface/DeleteAccountFailureInterface.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# DeleteAccountFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -DeleteAccountFailureInterface([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 -DeleteAccountFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent-class.md deleted file mode 100644 index 9ada8b22..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent-class.md +++ /dev/null @@ -1,126 +0,0 @@ - - - -# DeletedEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user deleted his account.

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- DeletedEvent - - - - - - - - -## Constructors - -[DeletedEvent](../wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md) () - - _const_ - - -## Properties - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md deleted file mode 100644 index 3d031272..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/DeletedEvent/DeletedEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# DeletedEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -DeletedEvent() - - - - - -## Implementation - -```dart -const DeletedEvent(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit-class.md deleted file mode 100644 index 34e20299..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit-class.md +++ /dev/null @@ -1,335 +0,0 @@ - - - -# EditAccountCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Fully featured edit account cubit.

    -

    Sufficient in most cases. (Where fine granularity is not required.)

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> -- [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> -- EditAccountCubit - - -**Mixed in types** - -- [UpdateEmail](../wyatt_authentication_bloc/UpdateEmail-mixin.md)<Data> -- [UpdatePassword](../wyatt_authentication_bloc/UpdatePassword-mixin.md)<Data> - - - - - - -## Constructors - -[EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emailChanged](../wyatt_authentication_bloc/UpdateEmail/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - -_inherited_ - - - -##### [emailCustomChanged](../wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as emailChanged but with a custom Validator. -_inherited_ - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onEmailUpdated](../wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when user updates his email -_override_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onPasswordUpdated](../wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user edits his password. -_override_ - - - -##### [passwordChanged](../wyatt_authentication_bloc/UpdatePassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - -_inherited_ - - - -##### [passwordCustomChanged](../wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as passwordChanged but with a custom Validator. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [updateEmail](../wyatt_authentication_bloc/UpdateEmail/updateEmail.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Update or add email. -_inherited_ - - - -##### [updatePassword](../wyatt_authentication_bloc/UpdatePassword/updatePassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Update or add password. -_inherited_ - - - -##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md deleted file mode 100644 index 801c095c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/EditAccountCubit.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# EditAccountCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -EditAccountCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -EditAccountCubit({required super.authenticationRepository}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md deleted file mode 100644 index bc18c4b1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onEmailUpdated.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# onEmailUpdated method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<Data?> onEmailUpdated -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - -_override_ - - - -

    This callback is triggered when user updates his email

    - - - -## Implementation - -```dart -@override -FutureOrResult onEmailUpdated( - Result result, - WyattForm form, -) => - const Ok(null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md deleted file mode 100644 index c506f486..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountCubit/onPasswordUpdated.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# onPasswordUpdated method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<Data?> onPasswordUpdated -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - -_override_ - - - -

    This callback is triggered when a user edits his password.

    - - - -## Implementation - -```dart -@override -FutureOrResult onPasswordUpdated( - Result result, - WyattForm form, -) => - const Ok(null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener-class.md deleted file mode 100644 index a6da474c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener-class.md +++ /dev/null @@ -1,236 +0,0 @@ - - - -# EditAccountListener<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Widget that listens and builds a child based on the state of -the edit account cubit

    - - - -**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) -- EditAccountListener - - - - - - - - -## Constructors - -[EditAccountListener](../wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - _const_ - - -## Properties - -##### [child](../wyatt_authentication_bloc/EditAccountListener/child.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) - - - - -_final_ - - - -##### [customBuilder](../wyatt_authentication_bloc/EditAccountListener/customBuilder.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state)?) - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? - - - -Controls how one widget replaces another widget in the tree. -_finalinherited_ - - - -##### [onError](../wyatt_authentication_bloc/EditAccountListener/onError.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) - - - - -_final_ - - - -##### [onProgress](../wyatt_authentication_bloc/EditAccountListener/onProgress.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) - - - - -_final_ - - - -##### [onSuccess](../wyatt_authentication_bloc/EditAccountListener/onSuccess.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) - - - - -_final_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [build](../wyatt_authentication_bloc/EditAccountListener/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. -_override_ - - - -##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) - - - -Creates a StatelessElement to manage this widget's location in the tree. -_inherited_ - - - -##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> - - - -Returns a list of DiagnosticsNode objects describing this node's -children. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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 DiagnosticsNode.toStringDeep. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md deleted file mode 100644 index ec51cd1d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/EditAccountListener.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# EditAccountListener<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -EditAccountListener<Data>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../../wyatt_authentication_bloc/EditAccountState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - - - - -## Implementation - -```dart -const EditAccountListener({ - required this.child, - this.onProgress, - this.onSuccess, - this.onError, - this.customBuilder, - super.key, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/build.md deleted file mode 100644 index 03d55600..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/build.md +++ /dev/null @@ -1,92 +0,0 @@ - - - -# build method - - - - - *[](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) - -_override_ - - - -

    Describes the part of the user interface represented by this widget.

    -

    The framework calls this method when this widget is inserted into the tree -in a given BuildContext and when the dependencies of this widget change -(e.g., an InheritedWidget 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.

    -

    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 Widget.canUpdate.

    -

    Typically implementations return a newly created constellation of widgets -that are configured with information from this widget's constructor and -from the given BuildContext.

    -

    The given BuildContext 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 BuildContext -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.

    -

    The implementation of this method must only depend on:

    - -

    If a widget's build method is to depend on anything else, use a -StatefulWidget instead.

    -

    See also:

    -
      -
    • StatelessWidget, which contains the discussion on performance considerations.
    • -
    - - - -## Implementation - -```dart -@override -Widget build(BuildContext context) => - BlocListener, EditAccountState>( - listener: (context, state) { - if (customBuilder != null) { - return customBuilder!(context, state); - } - - if (onSuccess != null && - state.status == FormStatus.submissionSuccess) { - return onSuccess!(context); - } - if (onProgress != null && - state.status == FormStatus.submissionInProgress) { - return onProgress!(context); - } - if (onError != null && - (state.status == FormStatus.submissionCanceled || - state.status == FormStatus.submissionFailure)) { - return onError!(context, state.status, state.errorMessage); - } - }, - child: child, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/child.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/child.md deleted file mode 100644 index 53bc3682..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/child.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# child property - - - - - *[](https://dart.dev/null-safety)* - - - -[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child - -_final_ - - - - - - -## Implementation - -```dart -final Widget child; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/customBuilder.md deleted file mode 100644 index a8d52a8d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/customBuilder.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# customBuilder property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EditAccountState](../../wyatt_authentication_bloc/EditAccountState-class.md) state)?) customBuilder - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context, EditAccountState state)? - customBuilder; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onError.md deleted file mode 100644 index ed94a98f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onError.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# onError property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) onError - -_final_ - - - - - - -## Implementation - -```dart -final void Function( - BuildContext context, - FormStatus status, - String? errorMessage, -)? onError; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onProgress.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onProgress.md deleted file mode 100644 index 4a30ed71..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onProgress.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onProgress property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onProgress - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context)? onProgress; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onSuccess.md deleted file mode 100644 index 4d942f63..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountListener/onSuccess.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onSuccess property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onSuccess - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context)? onSuccess; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState-class.md deleted file mode 100644 index 9c7250d8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState-class.md +++ /dev/null @@ -1,179 +0,0 @@ - - - -# EditAccountState class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Edit account cubit state to manage the form.

    - - - -**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) -- EditAccountState - - - - - - - - -## Constructors - -[EditAccountState](../wyatt_authentication_bloc/EditAccountState/EditAccountState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - _const_ - - -## Properties - -##### [email](../wyatt_authentication_bloc/EditAccountState/email.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> - - - - -_read-only_ - - - -##### [errorMessage](../wyatt_authentication_bloc/EditAccountState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Optional error message. -_finalinherited_ - - - -##### [form](../wyatt_authentication_bloc/EditAccountState/form.md) → WyattForm - - - -FormData with all inputs, and associated metadata. -_finalinherited_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [password](../wyatt_authentication_bloc/EditAccountState/password.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> - - - - -_read-only_ - - - -##### [props](../wyatt_authentication_bloc/EditAccountState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-only_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [status](../wyatt_authentication_bloc/EditAccountState/status.md) → FormStatus - - - -Global status of a form. -_finalinherited_ - - - -##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## Methods - -##### [copyWith](../wyatt_authentication_bloc/EditAccountState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) - - - - - - - - -##### [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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/EditAccountState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_override_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/EditAccountState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/EditAccountState.md deleted file mode 100644 index b8145411..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/EditAccountState.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# EditAccountState constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -EditAccountState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - -## Implementation - -```dart -const EditAccountState({ - required super.form, - super.status = FormStatus.pure, - super.errorMessage, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/copyWith.md deleted file mode 100644 index aed8958b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/copyWith.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -# copyWith method - - - - - *[](https://dart.dev/null-safety)* - - - - -[EditAccountState](../../wyatt_authentication_bloc/EditAccountState-class.md) copyWith -({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - - - - -## Implementation - -```dart -EditAccountState copyWith({ - WyattForm? form, - FormStatus? status, - String? errorMessage, -}) => - EditAccountState( - form: form ?? this.form, - status: status ?? this.status, - errorMessage: errorMessage ?? this.errorMessage, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/email.md deleted file mode 100644 index 1ded8043..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/email.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# email property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> email - - - - - - - - -## Implementation - -```dart -FormInputValidator get email => - form.validatorOf(AuthFormField.email); -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/errorMessage.md deleted file mode 100644 index d0856deb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/errorMessage.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# errorMessage property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage - -_finalinherited_ - - - -

    Optional error message.

    - - - -## Implementation - -```dart -final String? errorMessage; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/form.md deleted file mode 100644 index d3f2da76..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/form.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# form property - - - - - *[](https://dart.dev/null-safety)* - - - -WyattForm form - -_finalinherited_ - - - -

    FormData with all inputs, and associated metadata.

    - - - -## Implementation - -```dart -final WyattForm form; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/password.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/password.md deleted file mode 100644 index 77938106..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/password.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# password property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> password - - - - - - - - -## Implementation - -```dart -FormInputValidator get password => - form.validatorOf(AuthFormField.password); -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/props.md deleted file mode 100644 index eab8d26c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> props - - - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [email, password, status]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/status.md deleted file mode 100644 index 644a9f10..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/status.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# status property - - - - - *[](https://dart.dev/null-safety)* - - - -FormStatus status - -_finalinherited_ - - - -

    Global status of a form.

    - - - -## Implementation - -```dart -final FormStatus status; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/toString.md deleted file mode 100644 index 3a837f4e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EditAccountState/toString.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# toString method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString -() - -_override_ - - - -

    A string representation of this object.

    -

    Some classes have a default textual representation, -often paired with a static parse function (like int.parse). -These classes will provide the textual representation as -their string representation.

    -

    Other classes have no meaningful textual representation -that a program will care about. -Such classes will typically override toString to provide -useful information when inspecting the object, -mainly for debugging or logging.

    - - - -## Implementation - -```dart -@override -String toString() => 'EditAccountState(status: ${status.name} ' - '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder-class.md deleted file mode 100644 index 5692d1ab..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder-class.md +++ /dev/null @@ -1,225 +0,0 @@ - - - -# EmailVerificationBuilder<Extra> class - - - - - - - *[](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) -- EmailVerificationBuilder - - - - - - - - -## Constructors - -[EmailVerificationBuilder](../wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) verified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) notVerified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage), [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md))?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - _const_ - - -## Properties - -##### [customBuilder](../wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md) → ([Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md))?) - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? - - - -Controls how one widget replaces another widget in the tree. -_finalinherited_ - - - -##### [notVerified](../wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) - - - - -_final_ - - - -##### [onError](../wyatt_authentication_bloc/EmailVerificationBuilder/onError.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage) - - - - -_final_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [verified](../wyatt_authentication_bloc/EmailVerificationBuilder/verified.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context) - - - - -_final_ - - - - - -## Methods - -##### [build](../wyatt_authentication_bloc/EmailVerificationBuilder/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. -_override_ - - - -##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) - - - -Creates a StatelessElement to manage this widget's location in the tree. -_inherited_ - - - -##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> - - - -Returns a list of DiagnosticsNode objects describing this node's -children. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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 DiagnosticsNode.toStringDeep. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md deleted file mode 100644 index 02f74876..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/EmailVerificationBuilder.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# EmailVerificationBuilder<Extra> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -EmailVerificationBuilder<Extra>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) verified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) notVerified([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context), required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage), [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [EmailVerificationState](../../wyatt_authentication_bloc/EmailVerificationState-class.md))?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - - - - -## Implementation - -```dart -const EmailVerificationBuilder({ - required this.verified, - required this.notVerified, - required this.onError, - this.customBuilder, - super.key, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/build.md deleted file mode 100644 index 6eaf5649..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/build.md +++ /dev/null @@ -1,91 +0,0 @@ - - - -# build method - - - - - *[](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) - -_override_ - - - -

    Describes the part of the user interface represented by this widget.

    -

    The framework calls this method when this widget is inserted into the tree -in a given BuildContext and when the dependencies of this widget change -(e.g., an InheritedWidget 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.

    -

    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 Widget.canUpdate.

    -

    Typically implementations return a newly created constellation of widgets -that are configured with information from this widget's constructor and -from the given BuildContext.

    -

    The given BuildContext 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 BuildContext -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.

    -

    The implementation of this method must only depend on:

    - -

    If a widget's build method is to depend on anything else, use a -StatefulWidget instead.

    -

    See also:

    -
      -
    • StatelessWidget, which contains the discussion on performance considerations.
    • -
    - - - -## Implementation - -```dart -@override -Widget build(BuildContext context) => - BlocBuilder, EmailVerificationState>( - builder: (context, state) { - if (customBuilder != null) { - return customBuilder!(context, state); - } - - if (state.status.isSubmissionFailure || - state.status.isSubmissionCanceled) { - return onError( - context, - state.status, - state.errorMessage, - ); - } - - if (state.isVerified) { - return verified(context); - } - return notVerified(context); - }, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md deleted file mode 100644 index 1b238503..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/customBuilder.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# customBuilder property - - - - - *[](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, [EmailVerificationState](../../wyatt_authentication_bloc/EmailVerificationState-class.md))?) customBuilder - -_final_ - - - - - - -## Implementation - -```dart -final Widget Function(BuildContext context, EmailVerificationState)? - customBuilder; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md deleted file mode 100644 index fb67f5a1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/notVerified.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# notVerified property - - - - - *[](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) notVerified - -_final_ - - - - - - -## Implementation - -```dart -final Widget Function(BuildContext context) notVerified; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/onError.md deleted file mode 100644 index caa029d2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/onError.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# onError property - - - - - *[](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, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage) onError - -_final_ - - - - - - -## Implementation - -```dart -final Widget Function( - BuildContext context, - FormStatus status, - String? errorMessage, -) onError; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/verified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/verified.md deleted file mode 100644 index 05f99c91..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationBuilder/verified.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# verified property - - - - - *[](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) verified - -_final_ - - - - - - -## Implementation - -```dart -final Widget Function(BuildContext context) verified; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit-class.md deleted file mode 100644 index f582d49e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit-class.md +++ /dev/null @@ -1,211 +0,0 @@ - - - -# EmailVerificationCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> -- EmailVerificationCubit - - - - - - - - -## Constructors - -[EmailVerificationCubit](../wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [checkEmailVerification](../wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [sendEmailVerification](../wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md deleted file mode 100644 index 4dc46616..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/EmailVerificationCubit.md +++ /dev/null @@ -1,32 +0,0 @@ - - - -# EmailVerificationCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -EmailVerificationCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -EmailVerificationCubit({ - required this.authenticationRepository, -}) : super(const EmailVerificationState()); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md deleted file mode 100644 index 32cdfa2a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/authenticationRepository.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# authenticationRepository property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationRepository authenticationRepository; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md deleted file mode 100644 index 7b602aac..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/checkEmailVerification.md +++ /dev/null @@ -1,65 +0,0 @@ - - - -# checkEmailVerification method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> checkEmailVerification -() - - - - - - - - -## Implementation - -```dart -FutureOr checkEmailVerification() async { - emit(state.copyWith(status: FormStatus.submissionInProgress)); - - final refresh = await authenticationRepository.refresh(); - if (refresh.isErr) { - final refreshError = refresh.err!; - emit( - EmailVerificationState( - errorMessage: refreshError.message, - status: FormStatus.submissionFailure, - ), - ); - return; - } - - final wrapper = await authenticationRepository.sessionStream().last; - final currentAccount = wrapper.session?.account; - if (currentAccount != null) { - emit( - state.copyWith( - isVerified: currentAccount.emailVerified, - status: FormStatus.submissionSuccess, - ), - ); - } else { - const EmailVerificationState( - errorMessage: 'No current session', - status: FormStatus.submissionFailure, - ); - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md deleted file mode 100644 index 5d9d58e5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationCubit/sendEmailVerification.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# sendEmailVerification method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> sendEmailVerification -() - - - - - - - - -## Implementation - -```dart -FutureOr sendEmailVerification() async { - emit(state.copyWith(status: FormStatus.submissionInProgress)); - final response = await authenticationRepository.sendEmailVerification(); - emit( - response.fold( - (value) => state.copyWith(status: FormStatus.submissionSuccess), - (error) => state.copyWith( - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState-class.md deleted file mode 100644 index a1a99c58..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState-class.md +++ /dev/null @@ -1,160 +0,0 @@ - - - -# EmailVerificationState class - - - - - - - *[](https://dart.dev/null-safety)* - - - - - - -**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) -- EmailVerificationState - - - - - - - - -## Constructors - -[EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md) ({[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isVerified = false, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - _const_ - - -## Properties - -##### [errorMessage](../wyatt_authentication_bloc/EmailVerificationState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isVerified](../wyatt_authentication_bloc/EmailVerificationState/isVerified.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - - -_final_ - - - -##### [props](../wyatt_authentication_bloc/EmailVerificationState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [status](../wyatt_authentication_bloc/EmailVerificationState/status.md) → FormStatus - - - - -_final_ - - - -##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## Methods - -##### [copyWith](../wyatt_authentication_bloc/EmailVerificationState/copyWith.md)({FormStatus? status, [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isVerified, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) - - - - - - - - -##### [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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/EmailVerificationState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_override_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md deleted file mode 100644 index 2b2eec71..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/EmailVerificationState.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# EmailVerificationState constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -EmailVerificationState({[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isVerified = false, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - -## Implementation - -```dart -const EmailVerificationState({ - this.isVerified = false, - this.status = FormStatus.pure, - this.errorMessage, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/copyWith.md deleted file mode 100644 index 3828f71a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/copyWith.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -# copyWith method - - - - - *[](https://dart.dev/null-safety)* - - - - -[EmailVerificationState](../../wyatt_authentication_bloc/EmailVerificationState-class.md) copyWith -({FormStatus? status, [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? isVerified, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - - - - -## Implementation - -```dart -EmailVerificationState copyWith({ - FormStatus? status, - bool? isVerified, - String? errorMessage, -}) => - EmailVerificationState( - status: status ?? this.status, - isVerified: isVerified ?? this.isVerified, - errorMessage: errorMessage ?? this.errorMessage, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/errorMessage.md deleted file mode 100644 index 4f0a5b7f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/errorMessage.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# errorMessage property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage - -_final_ - - - - - - -## Implementation - -```dart -final String? errorMessage; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/isVerified.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/isVerified.md deleted file mode 100644 index 5fe39d63..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/isVerified.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# isVerified property - - - - - *[](https://dart.dev/null-safety)* - - - -[bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) isVerified - -_final_ - - - - - - -## Implementation - -```dart -final bool isVerified; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/props.md deleted file mode 100644 index 60e41027..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [status, isVerified, errorMessage]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/status.md deleted file mode 100644 index 5623cccf..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/status.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# status property - - - - - *[](https://dart.dev/null-safety)* - - - -FormStatus status - -_final_ - - - - - - -## Implementation - -```dart -final FormStatus status; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/toString.md deleted file mode 100644 index 3fec7549..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/EmailVerificationState/toString.md +++ /dev/null @@ -1,49 +0,0 @@ - - - -# toString method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString -() - -_override_ - - - -

    A string representation of this object.

    -

    Some classes have a default textual representation, -often paired with a static parse function (like int.parse). -These classes will provide the textual representation as -their string representation.

    -

    Other classes have no meaningful textual representation -that a program will care about. -Such classes will typically override toString to provide -useful information when inspecting the object, -mainly for debugging or logging.

    - - - -## Implementation - -```dart -@override -String toString() => 'EmailVerificationState(status: ${status.name} ' - '${(errorMessage != null) ? " [$errorMessage]" : ""}, ' - 'isVerified: $isVerified)'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md deleted file mode 100644 index a97181ca..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# FetchSignInMethodsForEmailFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the fetch sign in methods if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md) -- FetchSignInMethodsForEmailFailureFirebase - - - - - - - - -## Constructors - -[FetchSignInMethodsForEmailFailureFirebase](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.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]) - - - -[FetchSignInMethodsForEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md deleted file mode 100644 index 3cf4d6c5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.fromCode.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# FetchSignInMethodsForEmailFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -FetchSignInMethodsForEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -FetchSignInMethodsForEmailFailureFirebase.fromCode(String code) - : super.fromCode(code) { - switch (code) { - case 'invalid-email': - msg = 'The email address is badly formatted.'; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md deleted file mode 100644 index 4a74506c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase/FetchSignInMethodsForEmailFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# FetchSignInMethodsForEmailFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -FetchSignInMethodsForEmailFailureFirebase([[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 -FetchSignInMethodsForEmailFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md deleted file mode 100644 index 5986c599..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# FetchSignInMethodsForEmailFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the fetch sign in methods if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- FetchSignInMethodsForEmailFailureInterface - - - -**Implementers** - -- [FetchSignInMethodsForEmailFailureFirebase](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md) - - - - - -## Constructors - -[FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.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 during the fetch sign in methods if a failure occurs. - -[FetchSignInMethodsForEmailFailureInterface.fromCode](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the fetch sign in methods if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md deleted file mode 100644 index 846ff49a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.fromCode.md +++ /dev/null @@ -1,32 +0,0 @@ - - - -# FetchSignInMethodsForEmailFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -FetchSignInMethodsForEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the fetch sign in methods if a failure occurs.

    - - - -## Implementation - -```dart -FetchSignInMethodsForEmailFailureInterface.fromCode(super.code) - : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md deleted file mode 100644 index b38af41e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface/FetchSignInMethodsForEmailFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# FetchSignInMethodsForEmailFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -FetchSignInMethodsForEmailFailureInterface([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 during the fetch sign in methods if a failure occurs.

    - - - -## Implementation - -```dart -FetchSignInMethodsForEmailFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md deleted file mode 100644 index 60876e96..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# ModelParsingFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the model parsing process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface-class.md) -- ModelParsingFailureFirebase - - - - - - - - -## Constructors - -[ModelParsingFailureFirebase](../wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.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]) - - - -[ModelParsingFailureFirebase.fromCode](../wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md deleted file mode 100644 index 0e9ae35c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# ModelParsingFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ModelParsingFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -ModelParsingFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md deleted file mode 100644 index 51b77521..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureFirebase/ModelParsingFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ModelParsingFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ModelParsingFailureFirebase([[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 -ModelParsingFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface-class.md deleted file mode 100644 index d8e2dead..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# ModelParsingFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the model parsing process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- ModelParsingFailureInterface - - - -**Implementers** - -- [ModelParsingFailureFirebase](../wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md) - - - - - -## Constructors - -[ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.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) - - - -[ModelParsingFailureInterface.fromCode](../wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md deleted file mode 100644 index 055991cb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# ModelParsingFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ModelParsingFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -ModelParsingFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md deleted file mode 100644 index 473c347a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ModelParsingFailureInterface/ModelParsingFailureInterface.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# ModelParsingFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ModelParsingFailureInterface([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 -ModelParsingFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit-class.md deleted file mode 100644 index 350b635e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit-class.md +++ /dev/null @@ -1,275 +0,0 @@ - - - -# PasswordResetCubit<Extra> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Cubit that allows user to reset his password

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> -- PasswordResetCubit - - - - - - - - -## Constructors - -[PasswordResetCubit](../wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> - - - - -_final_ - - - -##### [formName](../wyatt_authentication_bloc/PasswordResetCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-only_ - - - -##### [formRepository](../wyatt_authentication_bloc/PasswordResetCubit/formRepository.md) → FormRepository - - - - -_read-only_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [emailChanged](../wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - - - - - -##### [emailCustomChanged](../wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as emailChanged but with a custom Validator. - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/PasswordResetCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [submit](../wyatt_authentication_bloc/PasswordResetCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Sends a password reset email to the user - - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/PasswordResetCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - -##### [validate](../wyatt_authentication_bloc/PasswordResetCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - - - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md deleted file mode 100644 index 71d64822..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/PasswordResetCubit.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# PasswordResetCubit<Extra> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -PasswordResetCubit<Extra>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> authenticationRepository}) - - - - - -## Implementation - -```dart -PasswordResetCubit({ - required this.authenticationRepository, -}) : super( - PasswordResetState( - form: authenticationRepository.formRepository - .accessForm(AuthFormName.passwordResetForm), - ), - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md deleted file mode 100644 index 1662ceda..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/authenticationRepository.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# authenticationRepository property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Extra> authenticationRepository - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationRepository authenticationRepository; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md deleted file mode 100644 index c62e9718..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/dataChanged.md +++ /dev/null @@ -1,53 +0,0 @@ - - - -# dataChanged<Value> method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> dataChanged -<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) - - - - - - - - -## Implementation - -```dart -@override -FutureOr dataChanged( - String key, - FormInputValidator dirtyValue, -) { - final form = formRepository.accessForm(formName).clone(); - - try { - form.updateValidator(key, dirtyValue); - formRepository.updateForm(form); - } catch (e) { - rethrow; - } - - emit( - state.copyWith(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md deleted file mode 100644 index 85e7cc16..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailChanged.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# emailChanged method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailChanged -([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) - - - - - - - - -## Implementation - -```dart -void emailChanged(String value) { - final emailValidatorType = formRepository - .accessForm(formName) - .validatorOf(AuthFormField.email) - .runtimeType; - assert( - emailValidatorType == Email, - 'Use emailCustomChanged(...) with validator $emailValidatorType', - ); - - final Email email = Email.dirty(value); - dataChanged(AuthFormField.email, email); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md deleted file mode 100644 index fa9c4c14..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/emailCustomChanged.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailCustomChanged -<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) - - - - - -

    Same as emailChanged but with a custom Validator.

    -

    Sort of short hand for dataChanged.

    - - - -## Implementation - -```dart -void emailCustomChanged< - Validator extends FormInputValidator>( - Validator validator, -) { - dataChanged(AuthFormField.email, validator); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formName.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formName.md deleted file mode 100644 index 0e18d674..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formName.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# formName property - - - - - *[](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) formName - - - - - - - - -## Implementation - -```dart -@override -String get formName => AuthFormName.passwordResetForm; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formRepository.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formRepository.md deleted file mode 100644 index db8665dd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/formRepository.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# formRepository property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormRepository formRepository - - - - - - - - -## Implementation - -```dart -FormRepository get formRepository => authenticationRepository.formRepository; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/reset.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/reset.md deleted file mode 100644 index 199755fa..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/reset.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# reset method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> reset -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr reset() { - final form = state.form.reset(); - formRepository.updateForm(form); - emit( - state.copyWith(form: form, status: form.validate()), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/submit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/submit.md deleted file mode 100644 index 31bfedc7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/submit.md +++ /dev/null @@ -1,70 +0,0 @@ - - - -# submit method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> submit -() - - - - - -

    Sends a password reset email to the user

    - - - -## Implementation - -```dart -@override -FutureOr submit() async { - if (!state.status.isValidated) { - return; - } - - emit(state.copyWith(status: FormStatus.submissionInProgress)); - - final form = formRepository.accessForm(formName); - final email = form.valueOf(AuthFormField.email); - - if (email.isNullOrEmpty) { - emit( - state.copyWith( - errorMessage: 'An error occured while retrieving data from the form.', - status: FormStatus.submissionFailure, - ), - ); - } - - final response = await authenticationRepository.sendPasswordResetEmail( - email: email!, - ); - - emit( - response.fold( - (value) => state.copyWith(status: FormStatus.submissionSuccess), - (error) => state.copyWith( - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/update.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/update.md deleted file mode 100644 index 23388fad..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/update.md +++ /dev/null @@ -1,51 +0,0 @@ - - - -# update method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> update -(WyattForm form, {SetOperation operation = SetOperation.replace}) - - - - - - - - -## Implementation - -```dart -@override -FutureOr update( - WyattForm form, { - SetOperation operation = SetOperation.replace, -}) { - final WyattForm current = formRepository.accessForm(formName).clone(); - final WyattForm newForm = operation.operation.call(current, form); - formRepository.updateForm(newForm); - - emit( - state.copyWith( - form: newForm, - status: newForm.validate(), - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/validate.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/validate.md deleted file mode 100644 index 5a8e5519..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetCubit/validate.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# validate method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> validate -() - - - - - - - - -## Implementation - -```dart -@override -FutureOr validate() { - emit( - state.copyWith( - status: formRepository.accessForm(formName).validate(), - ), - ); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState-class.md deleted file mode 100644 index 757a9170..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState-class.md +++ /dev/null @@ -1,169 +0,0 @@ - - - -# PasswordResetState class - - - - - - - *[](https://dart.dev/null-safety)* - - - - - - -**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) -- PasswordResetState - - - - - - - - -## Constructors - -[PasswordResetState](../wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - _const_ - - -## Properties - -##### [email](../wyatt_authentication_bloc/PasswordResetState/email.md) → Email - - - - -_read-only_ - - - -##### [errorMessage](../wyatt_authentication_bloc/PasswordResetState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Optional error message. -_finalinherited_ - - - -##### [form](../wyatt_authentication_bloc/PasswordResetState/form.md) → WyattForm - - - -FormData with all inputs, and associated metadata. -_finalinherited_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/PasswordResetState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-only_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [status](../wyatt_authentication_bloc/PasswordResetState/status.md) → FormStatus - - - -Global status of a form. -_finalinherited_ - - - -##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## Methods - -##### [copyWith](../wyatt_authentication_bloc/PasswordResetState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) - - - - - - - - -##### [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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/PasswordResetState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_override_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md deleted file mode 100644 index c6d8f5cf..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/PasswordResetState.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# PasswordResetState constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -PasswordResetState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - -## Implementation - -```dart -const PasswordResetState({ - required super.form, - super.status = FormStatus.pure, - super.errorMessage, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/copyWith.md deleted file mode 100644 index 60199cc6..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/copyWith.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -# copyWith method - - - - - *[](https://dart.dev/null-safety)* - - - - -[PasswordResetState](../../wyatt_authentication_bloc/PasswordResetState-class.md) copyWith -({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - - - - -## Implementation - -```dart -PasswordResetState copyWith({ - WyattForm? form, - FormStatus? status, - String? errorMessage, -}) => - PasswordResetState( - form: form ?? this.form, - status: status ?? this.status, - errorMessage: errorMessage ?? this.errorMessage, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/email.md deleted file mode 100644 index 0e3a2fc7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/email.md +++ /dev/null @@ -1,36 +0,0 @@ - - - -# email property - - - - - *[](https://dart.dev/null-safety)* - - - - - -Email email - - - - - - - - -## Implementation - -```dart -Email get email => form.validatorOf(AuthFormField.email); -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/errorMessage.md deleted file mode 100644 index d0856deb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/errorMessage.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# errorMessage property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage - -_finalinherited_ - - - -

    Optional error message.

    - - - -## Implementation - -```dart -final String? errorMessage; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/form.md deleted file mode 100644 index d3f2da76..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/form.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# form property - - - - - *[](https://dart.dev/null-safety)* - - - -WyattForm form - -_finalinherited_ - - - -

    FormData with all inputs, and associated metadata.

    - - - -## Implementation - -```dart -final WyattForm form; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/props.md deleted file mode 100644 index 4665a84e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> props - - - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [email, status]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/status.md deleted file mode 100644 index 644a9f10..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/status.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# status property - - - - - *[](https://dart.dev/null-safety)* - - - -FormStatus status - -_finalinherited_ - - - -

    Global status of a form.

    - - - -## Implementation - -```dart -final FormStatus status; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/toString.md deleted file mode 100644 index d40bc441..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/PasswordResetState/toString.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# toString method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString -() - -_override_ - - - -

    A string representation of this object.

    -

    Some classes have a default textual representation, -often paired with a static parse function (like int.parse). -These classes will provide the textual representation as -their string representation.

    -

    Other classes have no meaningful textual representation -that a program will care about. -Such classes will typically override toString to provide -useful information when inspecting the object, -mainly for debugging or logging.

    - - - -## Implementation - -```dart -@override -String toString() => 'PasswordResetState(status: ${status.name} ' - '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md deleted file mode 100644 index 527e46f4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# ReauthenticateFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the reauthentication process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md) -- ReauthenticateFailureFirebase - - - - - - - - -## Constructors - -[ReauthenticateFailureFirebase](../wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.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]) - - - -[ReauthenticateFailureFirebase.fromCode](../wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md deleted file mode 100644 index 6ad6eccc..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.fromCode.md +++ /dev/null @@ -1,57 +0,0 @@ - - - -# ReauthenticateFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ReauthenticateFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -ReauthenticateFailureFirebase.fromCode(String code) : super.fromCode(code) { - switch (code) { - case 'user-mismatch': - msg = 'Given credential does not correspond to the user.'; - break; - case 'user-not-found': - msg = 'User is not found, please create an account.'; - break; - case 'invalid-credential': - msg = 'The credential received is malformed or has expired.'; - break; - case 'invalid-email': - msg = 'Email is not valid or badly formatted.'; - break; - case 'wrong-password': - msg = 'Incorrect password, please try again.'; - break; - case 'invalid-verification-code': - msg = 'The credential verification code received is invalid.'; - break; - case 'invalid-verification-id': - msg = 'The credential verification ID received is invalid.'; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md deleted file mode 100644 index e386d710..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureFirebase/ReauthenticateFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# ReauthenticateFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ReauthenticateFailureFirebase([[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 -ReauthenticateFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md deleted file mode 100644 index 7c36e2c0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# ReauthenticateFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the reauthentication process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- ReauthenticateFailureInterface - - - -**Implementers** - -- [ReauthenticateFailureFirebase](../wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md) - - - - - -## Constructors - -[ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.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) - - - -[ReauthenticateFailureInterface.fromCode](../wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md deleted file mode 100644 index c8d73b99..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# ReauthenticateFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ReauthenticateFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -ReauthenticateFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md deleted file mode 100644 index 511d8024..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticateFailureInterface/ReauthenticateFailureInterface.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# ReauthenticateFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -ReauthenticateFailureInterface([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 -ReauthenticateFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent-class.md deleted file mode 100644 index 1184c6f3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# ReauthenticatedEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user re-authenticates (from the logged in state to the -logged in state with a different and fresh access -token and a different login time)

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- ReauthenticatedEvent - - - - - - - - -## Constructors - -[ReauthenticatedEvent](../wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) - - _const_ - - -## Properties - -##### [account](../wyatt_authentication_bloc/ReauthenticatedEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/ReauthenticatedEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md deleted file mode 100644 index 3b8ba4c3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/ReauthenticatedEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# ReauthenticatedEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -ReauthenticatedEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) - - - - - -## Implementation - -```dart -const ReauthenticatedEvent({required this.account}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/account.md deleted file mode 100644 index 671e197e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/account.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# account property - - - - - *[](https://dart.dev/null-safety)* - - - -[Account](../../wyatt_authentication_bloc/Account-class.md) account - -_final_ - - - - - - -## Implementation - -```dart -final Account account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/props.md deleted file mode 100644 index fbde09d1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/ReauthenticatedEvent/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [account]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase-class.md deleted file mode 100644 index 32cdc623..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# RefreshFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the refresh process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface-class.md) -- RefreshFailureFirebase - - - - - - - - -## Constructors - -[RefreshFailureFirebase](../wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.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]) - - - -[RefreshFailureFirebase.fromCode](../wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md deleted file mode 100644 index 4b2cce16..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# RefreshFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -RefreshFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -RefreshFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md deleted file mode 100644 index 4ac4faee..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureFirebase/RefreshFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# RefreshFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -RefreshFailureFirebase([[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 -RefreshFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface-class.md deleted file mode 100644 index f485f140..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# RefreshFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the refresh process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- RefreshFailureInterface - - - -**Implementers** - -- [RefreshFailureFirebase](../wyatt_authentication_bloc/RefreshFailureFirebase-class.md) - - - - - -## Constructors - -[RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.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 during the refresh process if a failure occurs. - -[RefreshFailureInterface.fromCode](../wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the refresh process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md deleted file mode 100644 index 33b4dace..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# RefreshFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -RefreshFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the refresh process if a failure occurs.

    - - - -## Implementation - -```dart -RefreshFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md deleted file mode 100644 index a958f830..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshFailureInterface/RefreshFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# RefreshFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -RefreshFailureInterface([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 during the refresh process if a failure occurs.

    - - - -## Implementation - -```dart -RefreshFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent-class.md deleted file mode 100644 index bdca95f0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent-class.md +++ /dev/null @@ -1,136 +0,0 @@ - - - -# RefreshedEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user access token is refreshed (from the logged in state to the -logged in state with a different access token)

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- RefreshedEvent - - - - - - - - -## Constructors - -[RefreshedEvent](../wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) - - _const_ - - -## Properties - -##### [account](../wyatt_authentication_bloc/RefreshedEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/RefreshedEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md deleted file mode 100644 index 7317339e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/RefreshedEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# RefreshedEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -RefreshedEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) - - - - - -## Implementation - -```dart -const RefreshedEvent({required this.account}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/account.md deleted file mode 100644 index 671e197e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/account.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# account property - - - - - *[](https://dart.dev/null-safety)* - - - -[Account](../../wyatt_authentication_bloc/Account-class.md) account - -_final_ - - - - - - -## Implementation - -```dart -final Account account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/props.md deleted file mode 100644 index fbde09d1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/RefreshedEvent/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [account]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md deleted file mode 100644 index 813d225c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SendEmailVerificationFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the email verification process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md) -- SendEmailVerificationFailureFirebase - - - - - - - - -## Constructors - -[SendEmailVerificationFailureFirebase](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.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]) - - - -[SendEmailVerificationFailureFirebase.fromCode](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md deleted file mode 100644 index 51531fd7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SendEmailVerificationFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendEmailVerificationFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SendEmailVerificationFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md deleted file mode 100644 index e1f740ba..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureFirebase/SendEmailVerificationFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendEmailVerificationFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendEmailVerificationFailureFirebase([[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 -SendEmailVerificationFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md deleted file mode 100644 index 42fff498..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SendEmailVerificationFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the email verification process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SendEmailVerificationFailureInterface - - - -**Implementers** - -- [SendEmailVerificationFailureFirebase](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md) - - - - - -## Constructors - -[SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.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 during the email verification process if a failure occurs. - -[SendEmailVerificationFailureInterface.fromCode](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the email verification process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md deleted file mode 100644 index 26acc0c1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendEmailVerificationFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendEmailVerificationFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the email verification process if a failure occurs.

    - - - -## Implementation - -```dart -SendEmailVerificationFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md deleted file mode 100644 index aeda1679..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendEmailVerificationFailureInterface/SendEmailVerificationFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendEmailVerificationFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendEmailVerificationFailureInterface([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 during the email verification process if a failure occurs.

    - - - -## Implementation - -```dart -SendEmailVerificationFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md deleted file mode 100644 index 55b4b215..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SendPasswordResetEmailFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password reset process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md) -- SendPasswordResetEmailFailureFirebase - - - - - - - - -## Constructors - -[SendPasswordResetEmailFailureFirebase](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.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]) - - - -[SendPasswordResetEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md deleted file mode 100644 index 7b002359..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SendPasswordResetEmailFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendPasswordResetEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SendPasswordResetEmailFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md deleted file mode 100644 index e2fdbeab..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase/SendPasswordResetEmailFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendPasswordResetEmailFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendPasswordResetEmailFailureFirebase([[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 -SendPasswordResetEmailFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md deleted file mode 100644 index 6473ac89..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SendPasswordResetEmailFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password reset process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SendPasswordResetEmailFailureInterface - - - -**Implementers** - -- [SendPasswordResetEmailFailureFirebase](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md) - - - - - -## Constructors - -[SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.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 during the password reset process if a failure occurs. - -[SendPasswordResetEmailFailureInterface.fromCode](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the password reset process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md deleted file mode 100644 index 039bd78b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.fromCode.md +++ /dev/null @@ -1,32 +0,0 @@ - - - -# SendPasswordResetEmailFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendPasswordResetEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the password reset process if a failure occurs.

    - - - -## Implementation - -```dart -SendPasswordResetEmailFailureInterface.fromCode(super.code) - : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md deleted file mode 100644 index cec0a974..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface/SendPasswordResetEmailFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendPasswordResetEmailFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendPasswordResetEmailFailureInterface([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 during the password reset process if a failure occurs.

    - - - -## Implementation - -```dart -SendPasswordResetEmailFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md deleted file mode 100644 index b487ad39..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SendSignInLinkEmailFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in link process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md) -- SendSignInLinkEmailFailureFirebase - - - - - - - - -## Constructors - -[SendSignInLinkEmailFailureFirebase](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.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]) - - - -[SendSignInLinkEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md deleted file mode 100644 index 11ea5805..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SendSignInLinkEmailFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendSignInLinkEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SendSignInLinkEmailFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md deleted file mode 100644 index 27c3a9b9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase/SendSignInLinkEmailFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendSignInLinkEmailFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendSignInLinkEmailFailureFirebase([[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 -SendSignInLinkEmailFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md deleted file mode 100644 index b1887411..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SendSignInLinkEmailFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in link process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SendSignInLinkEmailFailureInterface - - - -**Implementers** - -- [SendSignInLinkEmailFailureFirebase](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md) - - - - - -## Constructors - -[SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.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 during the sign in link process if a failure occurs. - -[SendSignInLinkEmailFailureInterface.fromCode](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in link process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md deleted file mode 100644 index 6e8ab76a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendSignInLinkEmailFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendSignInLinkEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in link process if a failure occurs.

    - - - -## Implementation - -```dart -SendSignInLinkEmailFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md deleted file mode 100644 index eba02b41..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface/SendSignInLinkEmailFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SendSignInLinkEmailFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SendSignInLinkEmailFailureInterface([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 during the sign in link process if a failure occurs.

    - - - -## Implementation - -```dart -SendSignInLinkEmailFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session-class.md deleted file mode 100644 index 29cc3040..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session-class.md +++ /dev/null @@ -1,144 +0,0 @@ - - - -# Session<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    The Session object is used to transport and propagate -the connected user Account and personalized Data in the application.

    - - - -**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) -- Session - - - - - - - - -## Constructors - -[Session](../wyatt_authentication_bloc/Session/Session.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account, Data? data}) - - _const_ - - -## Properties - -##### [account](../wyatt_authentication_bloc/Session/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) - - - - -_final_ - - - -##### [data](../wyatt_authentication_bloc/Session/data.md) → Data? - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/Session/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/Session/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyoverride_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/Session.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/Session.md deleted file mode 100644 index f8c9a635..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/Session.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# Session<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -Session<Data>({required [Account](../../wyatt_authentication_bloc/Account-class.md) account, Data? data}) - - - - - -## Implementation - -```dart -const Session({ - required this.account, - this.data, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/account.md deleted file mode 100644 index 671e197e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/account.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# account property - - - - - *[](https://dart.dev/null-safety)* - - - -[Account](../../wyatt_authentication_bloc/Account-class.md) account - -_final_ - - - - - - -## Implementation - -```dart -final Account account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/data.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/data.md deleted file mode 100644 index b95c07e1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/data.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# data property - - - - - *[](https://dart.dev/null-safety)* - - - -Data? data - -_final_ - - - - - - -## Implementation - -```dart -final Data? data; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/props.md deleted file mode 100644 index 5246eb8f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [account, data]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/stringify.md deleted file mode 100644 index c2fc4fca..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/Session/stringify.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# stringify property - - - - - *[](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 - -_override_ - - - -

    If set to true, the toString method will be overridden to output -this instance's props.

    -

    A global default value for stringify can be set using -EquatableConfig.stringify.

    -

    If this instance's stringify is set to null, the value of -EquatableConfig.stringify will be used instead. This defaults to -false.

    - - - -## Implementation - -```dart -@override -bool? get stringify => true; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper-class.md deleted file mode 100644 index dd0d4a9d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper-class.md +++ /dev/null @@ -1,144 +0,0 @@ - - - -# SessionWrapper<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Contains the AuthenticationChangeEvent initiating the state -change and the current Session.

    - - - -**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) -- SessionWrapper - - - - - - - - -## Constructors - -[SessionWrapper](../wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md) ({required [AuthenticationChangeEvent](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) event, [Session](../wyatt_authentication_bloc/Session-class.md)<Data>? session}) - - _const_ - - -## Properties - -##### [event](../wyatt_authentication_bloc/SessionWrapper/event.md) → [AuthenticationChangeEvent](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/SessionWrapper/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [session](../wyatt_authentication_bloc/SessionWrapper/session.md) → [Session](../wyatt_authentication_bloc/Session-class.md)<Data>? - - - - -_final_ - - - -##### [stringify](../wyatt_authentication_bloc/SessionWrapper/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyoverride_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md deleted file mode 100644 index d26a9969..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/SessionWrapper.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# SessionWrapper<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SessionWrapper<Data>({required [AuthenticationChangeEvent](../../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) event, [Session](../../wyatt_authentication_bloc/Session-class.md)<Data>? session}) - - - - - -## Implementation - -```dart -const SessionWrapper({ - required this.event, - this.session, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/event.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/event.md deleted file mode 100644 index a1e5da09..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/event.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# event property - - - - - *[](https://dart.dev/null-safety)* - - - -[AuthenticationChangeEvent](../../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) event - -_final_ - - - - - - -## Implementation - -```dart -final AuthenticationChangeEvent event; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/props.md deleted file mode 100644 index 318648ca..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [event, session]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/session.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/session.md deleted file mode 100644 index a713c2af..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/session.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# session property - - - - - *[](https://dart.dev/null-safety)* - - - -[Session](../../wyatt_authentication_bloc/Session-class.md)<Data>? session - -_final_ - - - - - - -## Implementation - -```dart -final Session? session; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/stringify.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/stringify.md deleted file mode 100644 index 4fe942de..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SessionWrapper/stringify.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# stringify property - - - - - *[](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 - -_override_ - - - -

    If set to true, the toString method will be overridden to output -this instance's props.

    -

    A global default value for stringify can be set using -EquatableConfig.stringify.

    -

    If this instance's stringify is set to null, the value of -EquatableConfig.stringify will be used instead. This defaults to -false.

    - - - -## Implementation - -```dart -@override -bool get stringify => true; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously-mixin.md deleted file mode 100644 index 3dd086b7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously-mixin.md +++ /dev/null @@ -1,269 +0,0 @@ - - - -# SignInAnonymously<Data> mixin - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Sign in mixin.

    -

    Allows the user to sign in anonymously

    -

    Gives access to the signInAnonymously method and -onSignInAnonymously callback.

    - - -**Superclass Constraints** - -- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> - - - - -**Mixin Applications** - -- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onSignInAnonymously](../wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user signs in anonymously. - - - - -##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [signInAnonymously](../wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Sign in anonymously. - - - - -##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md deleted file mode 100644 index fa83d0b9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/onSignInAnonymously.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# onSignInAnonymously method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onSignInAnonymously -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - - - - - -

    This callback is triggered when a user signs in anonymously.

    - - - -## Implementation - -```dart -FutureOrResult onSignInAnonymously( - Result result, - WyattForm form, -); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md deleted file mode 100644 index 0c21eeb5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md +++ /dev/null @@ -1,79 +0,0 @@ - - - -# signInAnonymously method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signInAnonymously -() - - - - - -

    Sign in anonymously.

    -

    Throws a SignInAnonymouslyFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOr signInAnonymously() async { - if (state.status.isSubmissionInProgress) { - return; - } - - final form = formRepository.accessForm(formName); - emit(SignInState(form: form, status: FormStatus.submissionInProgress)); - - return CustomRoutine( - routine: authenticationRepository.signInAnonymously, - attachedLogic: (routineResult) => onSignInAnonymously( - routineResult, - form, - ), - onError: (error) { - emit( - SignInState( - form: form, - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ); - addError(error); - }, - onSuccess: (account, data) { - authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), - ), - ); - emit( - SignInState( - form: form, - status: FormStatus.submissionSuccess, - ), - ); - }, - ).call(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md deleted file mode 100644 index 23458a20..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SignInAnonymouslyFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md) -- SignInAnonymouslyFailureFirebase - - - - - - - - -## Constructors - -[SignInAnonymouslyFailureFirebase](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.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]) - - - -[SignInAnonymouslyFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md deleted file mode 100644 index 7edb701d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.fromCode.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# SignInAnonymouslyFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInAnonymouslyFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInAnonymouslyFailureFirebase.fromCode(String code) - : super.fromCode(code) { - switch (code) { - case 'operation-not-allowed': - msg = 'Operation is not allowed. Please contact support.'; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md deleted file mode 100644 index 3125f39a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase/SignInAnonymouslyFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInAnonymouslyFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInAnonymouslyFailureFirebase([[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 -SignInAnonymouslyFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md deleted file mode 100644 index df9dd187..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignInAnonymouslyFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInAnonymouslyFailureInterface - - - -**Implementers** - -- [SignInAnonymouslyFailureFirebase](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md) - - - - - -## Constructors - -[SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.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 during the sign in process if a failure occurs. - -[SignInAnonymouslyFailureInterface.fromCode](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md deleted file mode 100644 index 13e4bd31..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInAnonymouslyFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInAnonymouslyFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInAnonymouslyFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md deleted file mode 100644 index 54eeaeb0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInAnonymouslyFailureInterface/SignInAnonymouslyFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInAnonymouslyFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInAnonymouslyFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInAnonymouslyFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit-class.md deleted file mode 100644 index 638a83a7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit-class.md +++ /dev/null @@ -1,354 +0,0 @@ - - - -# SignInCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Fully featured sign in cubit.

    -

    Sufficient in most cases. (Where fine granularity is not required.)

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> -- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> -- SignInCubit - - -**Mixed in types** - -- [SignInAnonymously](../wyatt_authentication_bloc/SignInAnonymously-mixin.md)<Data> -- [SignInWithEmailPassword](../wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md)<Data> -- [SignInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle-mixin.md)<Data> - - - - - - -## Constructors - -[SignInCubit](../wyatt_authentication_bloc/SignInCubit/SignInCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emailChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - -_inherited_ - - - -##### [emailCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as emailChanged but with a custom Validator. -_inherited_ - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onSignInAnonymously](../wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user signs in anonymously. -_override_ - - - -##### [onSignInWithEmailAndPassword](../wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user signs in with email and password. -_override_ - - - -##### [onSignInWithGoogle](../wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user signs in with google. -_override_ - - - -##### [passwordChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - -_inherited_ - - - -##### [passwordCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as passwordChanged but with a custom Validator. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [signInAnonymously](../wyatt_authentication_bloc/SignInAnonymously/signInAnonymously.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Sign in anonymously. -_inherited_ - - - -##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Signs in with the provided email and password. -_inherited_ - - - -##### [signInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Starts the Sign In with Google Flow. -_inherited_ - - - -##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/SignInCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/SignInCubit.md deleted file mode 100644 index f2a52155..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/SignInCubit.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -SignInCubit({required super.authenticationRepository}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md deleted file mode 100644 index 034b1e38..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInAnonymously.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# onSignInAnonymously method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<Data?> onSignInAnonymously -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - -_override_ - - - -

    This callback is triggered when a user signs in anonymously.

    - - - -## Implementation - -```dart -@override -FutureOrResult onSignInAnonymously( - Result result, - WyattForm form, -) => - const Ok(null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md deleted file mode 100644 index 53132dae..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithEmailAndPassword.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# onSignInWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<Data?> onSignInWithEmailAndPassword -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - -_override_ - - - -

    This callback is triggered when a user signs in with email and password.

    - - - -## Implementation - -```dart -@override -FutureOrResult onSignInWithEmailAndPassword( - Result result, - WyattForm form, -) => - const Ok(null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md deleted file mode 100644 index 19904a99..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInCubit/onSignInWithGoogle.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# onSignInWithGoogle method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<Data?> onSignInWithGoogle -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - -_override_ - - - -

    This callback is triggered when a user signs in with google.

    - - - -## Implementation - -```dart -@override -FutureOrResult onSignInWithGoogle( - Result result, - WyattForm form, -) => - const Ok(null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener-class.md deleted file mode 100644 index f048a063..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener-class.md +++ /dev/null @@ -1,236 +0,0 @@ - - - -# SignInListener<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Widget that listens and builds a child based on the state of -the sign in cubit

    - - - -**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) -- SignInListener - - - - - - - - -## Constructors - -[SignInListener](../wyatt_authentication_bloc/SignInListener/SignInListener.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../wyatt_authentication_bloc/SignInState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - _const_ - - -## Properties - -##### [child](../wyatt_authentication_bloc/SignInListener/child.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) - - - - -_final_ - - - -##### [customBuilder](../wyatt_authentication_bloc/SignInListener/customBuilder.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../wyatt_authentication_bloc/SignInState-class.md) state)?) - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? - - - -Controls how one widget replaces another widget in the tree. -_finalinherited_ - - - -##### [onError](../wyatt_authentication_bloc/SignInListener/onError.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) - - - - -_final_ - - - -##### [onProgress](../wyatt_authentication_bloc/SignInListener/onProgress.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) - - - - -_final_ - - - -##### [onSuccess](../wyatt_authentication_bloc/SignInListener/onSuccess.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) - - - - -_final_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [build](../wyatt_authentication_bloc/SignInListener/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. -_override_ - - - -##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) - - - -Creates a StatelessElement to manage this widget's location in the tree. -_inherited_ - - - -##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> - - - -Returns a list of DiagnosticsNode objects describing this node's -children. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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 DiagnosticsNode.toStringDeep. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/SignInListener.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/SignInListener.md deleted file mode 100644 index a9cfeea1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/SignInListener.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# SignInListener<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignInListener<Data>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../../wyatt_authentication_bloc/SignInState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - - - - -## Implementation - -```dart -const SignInListener({ - required this.child, - this.onProgress, - this.onSuccess, - this.onError, - this.customBuilder, - super.key, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/build.md deleted file mode 100644 index d6783753..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/build.md +++ /dev/null @@ -1,92 +0,0 @@ - - - -# build method - - - - - *[](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) - -_override_ - - - -

    Describes the part of the user interface represented by this widget.

    -

    The framework calls this method when this widget is inserted into the tree -in a given BuildContext and when the dependencies of this widget change -(e.g., an InheritedWidget 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.

    -

    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 Widget.canUpdate.

    -

    Typically implementations return a newly created constellation of widgets -that are configured with information from this widget's constructor and -from the given BuildContext.

    -

    The given BuildContext 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 BuildContext -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.

    -

    The implementation of this method must only depend on:

    - -

    If a widget's build method is to depend on anything else, use a -StatefulWidget instead.

    -

    See also:

    -
      -
    • StatelessWidget, which contains the discussion on performance considerations.
    • -
    - - - -## Implementation - -```dart -@override -Widget build(BuildContext context) => - BlocListener, SignInState>( - listener: (context, state) { - if (customBuilder != null) { - return customBuilder!(context, state); - } - - if (onSuccess != null && - state.status == FormStatus.submissionSuccess) { - return onSuccess!(context); - } - if (onProgress != null && - state.status == FormStatus.submissionInProgress) { - return onProgress!(context); - } - if (onError != null && - (state.status == FormStatus.submissionCanceled || - state.status == FormStatus.submissionFailure)) { - return onError!(context, state.status, state.errorMessage); - } - }, - child: child, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/child.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/child.md deleted file mode 100644 index 53bc3682..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/child.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# child property - - - - - *[](https://dart.dev/null-safety)* - - - -[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child - -_final_ - - - - - - -## Implementation - -```dart -final Widget child; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/customBuilder.md deleted file mode 100644 index 132cb4c3..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/customBuilder.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# customBuilder property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignInState](../../wyatt_authentication_bloc/SignInState-class.md) state)?) customBuilder - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context, SignInState state)? customBuilder; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onError.md deleted file mode 100644 index ed94a98f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onError.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# onError property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) onError - -_final_ - - - - - - -## Implementation - -```dart -final void Function( - BuildContext context, - FormStatus status, - String? errorMessage, -)? onError; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onProgress.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onProgress.md deleted file mode 100644 index 4a30ed71..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onProgress.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onProgress property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onProgress - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context)? onProgress; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onSuccess.md deleted file mode 100644 index 4d942f63..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInListener/onSuccess.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onSuccess property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onSuccess - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context)? onSuccess; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState-class.md deleted file mode 100644 index efb514c4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState-class.md +++ /dev/null @@ -1,179 +0,0 @@ - - - -# SignInState class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Sign in cubit state to manage the form.

    - - - -**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) -- SignInState - - - - - - - - -## Constructors - -[SignInState](../wyatt_authentication_bloc/SignInState/SignInState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - _const_ - - -## Properties - -##### [email](../wyatt_authentication_bloc/SignInState/email.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> - - - - -_read-only_ - - - -##### [errorMessage](../wyatt_authentication_bloc/SignInState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Optional error message. -_finalinherited_ - - - -##### [form](../wyatt_authentication_bloc/SignInState/form.md) → WyattForm - - - -FormData with all inputs, and associated metadata. -_finalinherited_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [password](../wyatt_authentication_bloc/SignInState/password.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> - - - - -_read-only_ - - - -##### [props](../wyatt_authentication_bloc/SignInState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-only_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [status](../wyatt_authentication_bloc/SignInState/status.md) → FormStatus - - - -Global status of a form. -_finalinherited_ - - - -##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## Methods - -##### [copyWith](../wyatt_authentication_bloc/SignInState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [SignInState](../wyatt_authentication_bloc/SignInState-class.md) - - - - - - - - -##### [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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/SignInState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_override_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/SignInState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/SignInState.md deleted file mode 100644 index 648fe926..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/SignInState.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# SignInState constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignInState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - -## Implementation - -```dart -const SignInState({ - required super.form, - super.status = FormStatus.pure, - super.errorMessage, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/copyWith.md deleted file mode 100644 index e6b06fe5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/copyWith.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -# copyWith method - - - - - *[](https://dart.dev/null-safety)* - - - - -[SignInState](../../wyatt_authentication_bloc/SignInState-class.md) copyWith -({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - - - - -## Implementation - -```dart -SignInState copyWith({ - WyattForm? form, - FormStatus? status, - String? errorMessage, -}) => - SignInState( - form: form ?? this.form, - status: status ?? this.status, - errorMessage: errorMessage ?? this.errorMessage, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/email.md deleted file mode 100644 index 1ded8043..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/email.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# email property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> email - - - - - - - - -## Implementation - -```dart -FormInputValidator get email => - form.validatorOf(AuthFormField.email); -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/errorMessage.md deleted file mode 100644 index d0856deb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/errorMessage.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# errorMessage property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage - -_finalinherited_ - - - -

    Optional error message.

    - - - -## Implementation - -```dart -final String? errorMessage; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/form.md deleted file mode 100644 index d3f2da76..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/form.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# form property - - - - - *[](https://dart.dev/null-safety)* - - - -WyattForm form - -_finalinherited_ - - - -

    FormData with all inputs, and associated metadata.

    - - - -## Implementation - -```dart -final WyattForm form; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/password.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/password.md deleted file mode 100644 index 77938106..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/password.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# password property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> password - - - - - - - - -## Implementation - -```dart -FormInputValidator get password => - form.validatorOf(AuthFormField.password); -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/props.md deleted file mode 100644 index eab8d26c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> props - - - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [email, password, status]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/status.md deleted file mode 100644 index 644a9f10..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/status.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# status property - - - - - *[](https://dart.dev/null-safety)* - - - -FormStatus status - -_finalinherited_ - - - -

    Global status of a form.

    - - - -## Implementation - -```dart -final FormStatus status; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/toString.md deleted file mode 100644 index 01225d4e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInState/toString.md +++ /dev/null @@ -1,48 +0,0 @@ - - - -# toString method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString -() - -_override_ - - - -

    A string representation of this object.

    -

    Some classes have a default textual representation, -often paired with a static parse function (like int.parse). -These classes will provide the textual representation as -their string representation.

    -

    Other classes have no meaningful textual representation -that a program will care about. -Such classes will typically override toString to provide -useful information when inspecting the object, -mainly for debugging or logging.

    - - - -## Implementation - -```dart -@override -String toString() => 'SignInState(status: ${status.name} ' - '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md deleted file mode 100644 index a188c284..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md +++ /dev/null @@ -1,141 +0,0 @@ - - - -# SignInWithAppleFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) -- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) -- SignInWithAppleFailureFirebase - -**Implemented types** - -- [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) - - - - - - - -## Constructors - -[SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.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]) - - - -[SignInWithAppleFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md deleted file mode 100644 index c07fe58b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithAppleFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithAppleFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInWithAppleFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md deleted file mode 100644 index 4aa51024..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureFirebase/SignInWithAppleFailureFirebase.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithAppleFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithAppleFailureFirebase([[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 -SignInWithAppleFailureFirebase([super.code, super.msg]); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md deleted file mode 100644 index 7b1837ba..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md +++ /dev/null @@ -1,140 +0,0 @@ - - - -# SignInWithAppleFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInWithAppleFailureInterface - - - -**Implementers** - -- [SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md) -- [SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md) - - - - - -## Constructors - -[SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.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 during the sign in process if a failure occurs. - -[SignInWithAppleFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md deleted file mode 100644 index 6786f6d9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithAppleFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithAppleFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithAppleFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md deleted file mode 100644 index 6994d8b8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithAppleFailureInterface/SignInWithAppleFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithAppleFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithAppleFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithAppleFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md deleted file mode 100644 index f9e120f8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md +++ /dev/null @@ -1,143 +0,0 @@ - - - -# SignInWithCredentialFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) -- SignInWithCredentialFailureFirebase - - - -**Implementers** - -- [SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md) -- [SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md) -- [SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md) -- [SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md) - - - - - -## Constructors - -[SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.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]) - - - -[SignInWithCredentialFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md deleted file mode 100644 index d2b1deb1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.fromCode.md +++ /dev/null @@ -1,61 +0,0 @@ - - - -# SignInWithCredentialFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithCredentialFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInWithCredentialFailureFirebase.fromCode(String code) - : super.fromCode(code) { - switch (code) { - case 'account-exists-with-different-credential': - msg = 'Account exists with different credentials.'; - break; - case 'invalid-credential': - msg = 'The credential received is malformed or has expired.'; - break; - case 'operation-not-allowed': - msg = 'Operation is not allowed. Please contact support.'; - 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; - case 'wrong-password': - msg = 'Incorrect password, please try again.'; - break; - case 'invalid-verification-code': - msg = 'The credential verification code received is invalid.'; - break; - case 'invalid-verification-id': - msg = 'The credential verification ID received is invalid.'; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md deleted file mode 100644 index 66f66bb9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureFirebase/SignInWithCredentialFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithCredentialFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithCredentialFailureFirebase([[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 -SignInWithCredentialFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md deleted file mode 100644 index 08473e12..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignInWithCredentialFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInWithCredentialFailureInterface - - - -**Implementers** - -- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) - - - - - -## Constructors - -[SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.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 during the sign in process if a failure occurs. - -[SignInWithCredentialFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md deleted file mode 100644 index 14c794db..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithCredentialFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithCredentialFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithCredentialFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md deleted file mode 100644 index 4030c6cd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithCredentialFailureInterface/SignInWithCredentialFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithCredentialFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithCredentialFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithCredentialFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md deleted file mode 100644 index 5a28b107..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SignInWithEmailAndPasswordFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md) -- SignInWithEmailAndPasswordFailureFirebase - - - - - - - - -## Constructors - -[SignInWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.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]) - - - -[SignInWithEmailAndPasswordFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md deleted file mode 100644 index 5b9663d4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.fromCode.md +++ /dev/null @@ -1,49 +0,0 @@ - - - -# SignInWithEmailAndPasswordFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailAndPasswordFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInWithEmailAndPasswordFailureFirebase.fromCode(String code) - : super.fromCode(code) { - switch (code) { - case 'invalid-email': - msg = 'Email is not valid or badly formatted.'; - 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; - case 'wrong-password': - msg = 'Incorrect password, please try again.'; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md deleted file mode 100644 index 42ec7079..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase/SignInWithEmailAndPasswordFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithEmailAndPasswordFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailAndPasswordFailureFirebase([[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 -SignInWithEmailAndPasswordFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md deleted file mode 100644 index acdf3cf0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignInWithEmailAndPasswordFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInWithEmailAndPasswordFailureInterface - - - -**Implementers** - -- [SignInWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md) - - - - - -## Constructors - -[SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.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 during the sign in process if a failure occurs. - -[SignInWithEmailAndPasswordFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md deleted file mode 100644 index 735df785..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.fromCode.md +++ /dev/null @@ -1,32 +0,0 @@ - - - -# SignInWithEmailAndPasswordFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailAndPasswordFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithEmailAndPasswordFailureInterface.fromCode(super.code) - : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md deleted file mode 100644 index fff1afd8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface/SignInWithEmailAndPasswordFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithEmailAndPasswordFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailAndPasswordFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithEmailAndPasswordFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md deleted file mode 100644 index e2360fe9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SignInWithEmailLinkFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md) -- SignInWithEmailLinkFailureFirebase - - - - - - - - -## Constructors - -[SignInWithEmailLinkFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.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]) - - - -[SignInWithEmailLinkFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md deleted file mode 100644 index a8ccdec9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.fromCode.md +++ /dev/null @@ -1,46 +0,0 @@ - - - -# SignInWithEmailLinkFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailLinkFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInWithEmailLinkFailureFirebase.fromCode(String code) - : super.fromCode(code) { - switch (code) { - case 'expired-action-code': - msg = 'Action code has expired.'; - break; - case 'invalid-email': - msg = 'Email is not valid or badly formatted.'; - break; - case 'user-disabled': - msg = 'This user has been disabled. Please contact support for help.'; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md deleted file mode 100644 index 456995ec..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase/SignInWithEmailLinkFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithEmailLinkFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailLinkFailureFirebase([[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 -SignInWithEmailLinkFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md deleted file mode 100644 index e087037b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignInWithEmailLinkFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInWithEmailLinkFailureInterface - - - -**Implementers** - -- [SignInWithEmailLinkFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md) - - - - - -## Constructors - -[SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.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 during the sign in process if a failure occurs. - -[SignInWithEmailLinkFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md deleted file mode 100644 index 3d4531a9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithEmailLinkFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailLinkFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithEmailLinkFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md deleted file mode 100644 index 73f298cb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface/SignInWithEmailLinkFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithEmailLinkFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithEmailLinkFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithEmailLinkFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md deleted file mode 100644 index 78cf1a73..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md +++ /dev/null @@ -1,305 +0,0 @@ - - - -# SignInWithEmailPassword<Data> mixin - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Sign in mixin.

    -

    Allows the user to sign in with email and password

    -

    Gives access to the signInWithEmailAndPassword method and -onSignInWithEmailAndPassword callback.

    - - -**Superclass Constraints** - -- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> - - - - -**Mixin Applications** - -- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emailChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - - - - - -##### [emailCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as emailChanged but with a custom Validator. - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onSignInWithEmailAndPassword](../wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user signs in with email and password. - - - - -##### [passwordChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - - - - - -##### [passwordCustomChanged](../wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as passwordChanged but with a custom Validator. - - - - -##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [signInWithEmailAndPassword](../wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Signs in with the provided email and password. - - - - -##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md deleted file mode 100644 index 85e7cc16..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailChanged.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# emailChanged method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailChanged -([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) - - - - - - - - -## Implementation - -```dart -void emailChanged(String value) { - final emailValidatorType = formRepository - .accessForm(formName) - .validatorOf(AuthFormField.email) - .runtimeType; - assert( - emailValidatorType == Email, - 'Use emailCustomChanged(...) with validator $emailValidatorType', - ); - - final Email email = Email.dirty(value); - dataChanged(AuthFormField.email, email); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md deleted file mode 100644 index fcb48b24..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/emailCustomChanged.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailCustomChanged -<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) - - - - - -

    Same as emailChanged but with a custom Validator.

    -

    Sort of short hand for dataChanged.

    - - - -## Implementation - -```dart -void emailCustomChanged< - Validator extends FormInputValidator>( - Validator validator, -) { - dataChanged(AuthFormField.email, validator); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md deleted file mode 100644 index 0a35342a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/onSignInWithEmailAndPassword.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# onSignInWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onSignInWithEmailAndPassword -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - - - - - -

    This callback is triggered when a user signs in with email and password.

    - - - -## Implementation - -```dart -FutureOrResult onSignInWithEmailAndPassword( - Result result, - WyattForm form, -); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md deleted file mode 100644 index 8db9fda0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordChanged.md +++ /dev/null @@ -1,46 +0,0 @@ - - - -# passwordChanged method - - - - - *[](https://dart.dev/null-safety)* - - - - -void passwordChanged -([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) - - - - - - - - -## Implementation - -```dart -void passwordChanged(String value) { - final passwordValidatorType = formRepository - .accessForm(formName) - .validatorOf(AuthFormField.password) - .runtimeType; - assert( - passwordValidatorType == Password, - 'Use passwordCustomChanged(...) with validator $passwordValidatorType', - ); - final Password password = Password.dirty(value); - dataChanged(AuthFormField.password, password); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md deleted file mode 100644 index cca9b5ad..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/passwordCustomChanged.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# passwordCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method - - - - - *[](https://dart.dev/null-safety)* - - - - -void passwordCustomChanged -<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) - - - - - -

    Same as passwordChanged but with a custom Validator.

    -

    Sort of short hand for dataChanged.

    - - - -## Implementation - -```dart -void passwordCustomChanged< - Validator extends FormInputValidator>( - Validator validator, -) { - dataChanged(AuthFormField.password, validator); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md deleted file mode 100644 index 808606f8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithEmailPassword/signInWithEmailAndPassword.md +++ /dev/null @@ -1,105 +0,0 @@ - - - -# signInWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signInWithEmailAndPassword -() - - - - - -

    Signs in with the provided email and password.

    -

    Throws a SignInWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOr signInWithEmailAndPassword() async { - if (state.status.isSubmissionInProgress) { - return; - } - - if (!state.status.isValidated) { - return; - } - - final form = formRepository.accessForm(formName); - emit( - SignInState( - form: form, - status: FormStatus.submissionInProgress, - ), - ); - - final email = form.valueOf(AuthFormField.email); - final password = form.valueOf(AuthFormField.password); - - if (email.isNullOrEmpty || password.isNullOrEmpty) { - emit( - SignInState( - form: form, - errorMessage: 'An error occured while retrieving data from the form.', - status: FormStatus.submissionFailure, - ), - ); - } - - return CustomRoutine( - routine: () => authenticationRepository.signInWithEmailAndPassword( - email: email!, - password: password!, - ), - attachedLogic: (routineResult) => onSignInWithEmailAndPassword( - routineResult, - form, - ), - onError: (error) { - emit( - SignInState( - form: form, - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ); - addError(error); - }, - onSuccess: (account, data) { - authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), - ), - ); - emit( - SignInState( - form: form, - status: FormStatus.submissionSuccess, - ), - ); - }, - ).call(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md deleted file mode 100644 index f1e15f55..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md +++ /dev/null @@ -1,141 +0,0 @@ - - - -# SignInWithFacebookFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) -- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) -- SignInWithFacebookFailureFirebase - -**Implemented types** - -- [SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md) - - - - - - - -## Constructors - -[SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.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]) - - - -[SignInWithFacebookFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md deleted file mode 100644 index 10c11c0b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithFacebookFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithFacebookFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInWithFacebookFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md deleted file mode 100644 index df7ed863..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureFirebase/SignInWithFacebookFailureFirebase.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithFacebookFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithFacebookFailureFirebase([[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 -SignInWithFacebookFailureFirebase([super.code, super.msg]); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md deleted file mode 100644 index c0ad332f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignInWithFacebookFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInWithFacebookFailureInterface - - - -**Implementers** - -- [SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md) - - - - - -## Constructors - -[SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.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 during the sign in process if a failure occurs. - -[SignInWithFacebookFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md deleted file mode 100644 index 539c8a5a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithFacebookFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithFacebookFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithFacebookFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md deleted file mode 100644 index abace647..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithFacebookFailureInterface/SignInWithFacebookFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithFacebookFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithFacebookFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithFacebookFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle-mixin.md deleted file mode 100644 index ff62c2b5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle-mixin.md +++ /dev/null @@ -1,269 +0,0 @@ - - - -# SignInWithGoogle<Data> mixin - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Sign in mixin.

    -

    Allows the user to sign in with google

    -

    Gives access to the signInWithGoogle method and -onSignInWithGoogle callback.

    - - -**Superclass Constraints** - -- [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> - - - - -**Mixin Applications** - -- [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md) - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignInCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignInCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignInCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignInState](../wyatt_authentication_bloc/SignInState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignInCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignInState](../wyatt_authentication_bloc/SignInState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignInState](../wyatt_authentication_bloc/SignInState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onSignInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user signs in with google. - - - - -##### [reset](../wyatt_authentication_bloc/BaseSignInCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [signInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Starts the Sign In with Google Flow. - - - - -##### [submit](../wyatt_authentication_bloc/BaseSignInCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignInCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [validate](../wyatt_authentication_bloc/BaseSignInCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md deleted file mode 100644 index 2f91ea65..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/onSignInWithGoogle.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# onSignInWithGoogle method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onSignInWithGoogle -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - - - - - -

    This callback is triggered when a user signs in with google.

    - - - -## Implementation - -```dart -FutureOrResult onSignInWithGoogle( - Result result, - WyattForm form, -); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md deleted file mode 100644 index 5f6d2741..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogle/signInWithGoogle.md +++ /dev/null @@ -1,78 +0,0 @@ - - - -# signInWithGoogle method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signInWithGoogle -() - - - - - -

    Starts the Sign In with Google Flow.

    -

    Throws a SignInWithGoogleFailureInterface if an exception occurs.

    - - - -## Implementation - -```dart -FutureOr signInWithGoogle() async { - if (state.status.isSubmissionInProgress) { - return; - } - final form = formRepository.accessForm(formName); - emit(SignInState(form: form, status: FormStatus.submissionInProgress)); - - return CustomRoutine( - routine: authenticationRepository.signInWithGoogle, - attachedLogic: (routineResult) => onSignInWithGoogle( - routineResult, - form, - ), - onError: (error) { - emit( - SignInState( - form: form, - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ); - addError(error); - }, - onSuccess: (account, data) { - authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), - ), - ); - emit( - SignInState( - form: form, - status: FormStatus.submissionSuccess, - ), - ); - }, - ).call(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md deleted file mode 100644 index 91cf6845..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md +++ /dev/null @@ -1,141 +0,0 @@ - - - -# SignInWithGoogleFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) -- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) -- SignInWithGoogleFailureFirebase - -**Implemented types** - -- [SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md) - - - - - - - -## Constructors - -[SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.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]) - - - -[SignInWithGoogleFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md deleted file mode 100644 index c189a40e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithGoogleFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithGoogleFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInWithGoogleFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md deleted file mode 100644 index 2a67c09d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureFirebase/SignInWithGoogleFailureFirebase.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithGoogleFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithGoogleFailureFirebase([[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 -SignInWithGoogleFailureFirebase([super.code, super.msg]); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md deleted file mode 100644 index 0712ff53..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignInWithGoogleFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInWithGoogleFailureInterface - - - -**Implementers** - -- [SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md) - - - - - -## Constructors - -[SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.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 during the sign in process if a failure occurs. - -[SignInWithGoogleFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md deleted file mode 100644 index 16441dda..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithGoogleFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithGoogleFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithGoogleFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md deleted file mode 100644 index 9337f2db..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithGoogleFailureInterface/SignInWithGoogleFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithGoogleFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithGoogleFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithGoogleFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md deleted file mode 100644 index 5aeb8957..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md +++ /dev/null @@ -1,141 +0,0 @@ - - - -# SignInWithTwitterFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) -- [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) -- SignInWithTwitterFailureFirebase - -**Implemented types** - -- [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) - - - - - - - -## Constructors - -[SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.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]) - - - -[SignInWithTwitterFailureFirebase.fromCode](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md deleted file mode 100644 index ce958339..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithTwitterFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithTwitterFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignInWithTwitterFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md deleted file mode 100644 index 8d824501..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureFirebase/SignInWithTwitterFailureFirebase.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignInWithTwitterFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithTwitterFailureFirebase([[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 -SignInWithTwitterFailureFirebase([super.code, super.msg]); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md deleted file mode 100644 index 3fbd2788..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md +++ /dev/null @@ -1,136 +0,0 @@ - - - -# SignInWithTwitterFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign in process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignInWithTwitterFailureInterface - - - - - - - - -## Constructors - -[SignInWithTwitterFailureInterface](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.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 during the sign in process if a failure occurs. - -[SignInWithTwitterFailureInterface.fromCode](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign in process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md deleted file mode 100644 index 9d541237..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithTwitterFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithTwitterFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithTwitterFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md deleted file mode 100644 index 14919bef..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignInWithTwitterFailureInterface/SignInWithTwitterFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignInWithTwitterFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignInWithTwitterFailureInterface([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 during the sign in process if a failure occurs.

    - - - -## Implementation - -```dart -SignInWithTwitterFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase-class.md deleted file mode 100644 index 3421331f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SignOutFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign out process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface-class.md) -- SignOutFailureFirebase - - - - - - - - -## Constructors - -[SignOutFailureFirebase](../wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.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]) - - - -[SignOutFailureFirebase.fromCode](../wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md deleted file mode 100644 index 6cf59631..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignOutFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignOutFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignOutFailureFirebase.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md deleted file mode 100644 index c6fc7d7a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureFirebase/SignOutFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignOutFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignOutFailureFirebase([[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 -SignOutFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface-class.md deleted file mode 100644 index cf527a70..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignOutFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the sign out process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignOutFailureInterface - - - -**Implementers** - -- [SignOutFailureFirebase](../wyatt_authentication_bloc/SignOutFailureFirebase-class.md) - - - - - -## Constructors - -[SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.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 during the sign out process if a failure occurs. - -[SignOutFailureInterface.fromCode](../wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the sign out process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md deleted file mode 100644 index bde9935f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignOutFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignOutFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the sign out process if a failure occurs.

    - - - -## Implementation - -```dart -SignOutFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md deleted file mode 100644 index a59596a0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignOutFailureInterface/SignOutFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignOutFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignOutFailureInterface([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 during the sign out process if a failure occurs.

    - - - -## Implementation - -```dart -SignOutFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit-class.md deleted file mode 100644 index b8229ff4..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit-class.md +++ /dev/null @@ -1,316 +0,0 @@ - - - -# SignUpCubit<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Fully featured sign up cubit.

    -

    Sufficient in most cases. (Where fine granularity is not required.)

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [BlocBase](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> -- [Cubit](https://pub.dev/documentation/bloc/8.1.0/bloc/Cubit-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> -- [BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit-class.md)<Data> -- SignUpCubit - - -**Mixed in types** - -- [SignUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md)<Data> - - - - - - -## Constructors - -[SignUpCubit](../wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md) ({required [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignUpCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emailChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - -_inherited_ - - - -##### [emailCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as emailChanged but with a custom Validator. -_inherited_ - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onSignUpWithEmailAndPassword](../wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user creates an account. -_override_ - - - -##### [passwordChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - -_inherited_ - - - -##### [passwordCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as passwordChanged but with a custom Validator. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/BaseSignUpCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [signUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Creates a new user with the provided email and password. -_inherited_ - - - -##### [submit](../wyatt_authentication_bloc/BaseSignUpCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignUpCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [validate](../wyatt_authentication_bloc/BaseSignUpCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md deleted file mode 100644 index 0306f024..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/SignUpCubit.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignUpCubit<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignUpCubit<Data>({required [AuthenticationRepository](../../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> authenticationRepository}) - - - - - -## Implementation - -```dart -SignUpCubit({required super.authenticationRepository}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md deleted file mode 100644 index e70dfa91..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpCubit/onSignUpWithEmailAndPassword.md +++ /dev/null @@ -1,43 +0,0 @@ - - - -# onSignUpWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -FutureOrResult<Data?> onSignUpWithEmailAndPassword -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - -_override_ - - - -

    This callback is triggered when a user creates an account.

    -

    For example: when a user sign up in firebase.

    - - - -## Implementation - -```dart -@override -FutureOrResult onSignUpWithEmailAndPassword( - Result result, - WyattForm form, -) => - const Ok(null); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener-class.md deleted file mode 100644 index ea1477a1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener-class.md +++ /dev/null @@ -1,236 +0,0 @@ - - - -# SignUpListener<Data> class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Widget that listens and builds a child based on the state of -the sign up cubit

    - - - -**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) -- SignUpListener - - - - - - - - -## Constructors - -[SignUpListener](../wyatt_authentication_bloc/SignUpListener/SignUpListener.md) ({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - _const_ - - -## Properties - -##### [child](../wyatt_authentication_bloc/SignUpListener/child.md) → [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) - - - - -_final_ - - - -##### [customBuilder](../wyatt_authentication_bloc/SignUpListener/customBuilder.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state)?) - - - - -_final_ - - - -##### [hashCode](https://api.flutter.dev/flutter/widgets/Widget/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [key](https://api.flutter.dev/flutter/widgets/Widget/key.html) → [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? - - - -Controls how one widget replaces another widget in the tree. -_finalinherited_ - - - -##### [onError](../wyatt_authentication_bloc/SignUpListener/onError.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) - - - - -_final_ - - - -##### [onProgress](../wyatt_authentication_bloc/SignUpListener/onProgress.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) - - - - -_final_ - - - -##### [onSuccess](../wyatt_authentication_bloc/SignUpListener/onSuccess.md) → (void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) - - - - -_final_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## Methods - -##### [build](../wyatt_authentication_bloc/SignUpListener/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. -_override_ - - - -##### [createElement](https://api.flutter.dev/flutter/widgets/StatelessWidget/createElement.html)() [StatelessElement](https://api.flutter.dev/flutter/widgets/StatelessElement-class.html) - - - -Creates a StatelessElement to manage this widget's location in the tree. -_inherited_ - - - -##### [debugDescribeChildren](https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html)() [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[DiagnosticsNode](https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html)> - - - -Returns a list of DiagnosticsNode objects describing this node's -children. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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 DiagnosticsNode.toStringDeep. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/SignUpListener.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/SignUpListener.md deleted file mode 100644 index 8eb3409d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/SignUpListener.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# SignUpListener<Data> constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignUpListener<Data>({required [Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child, void onProgress([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onSuccess([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?, void onError([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?, void customBuilder([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../../wyatt_authentication_bloc/SignUpState-class.md) state)?, [Key](https://api.flutter.dev/flutter/foundation/Key-class.html)? key}) - - - - - -## Implementation - -```dart -const SignUpListener({ - required this.child, - this.onProgress, - this.onSuccess, - this.onError, - this.customBuilder, - super.key, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/build.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/build.md deleted file mode 100644 index 8843765f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/build.md +++ /dev/null @@ -1,92 +0,0 @@ - - - -# build method - - - - - *[](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) - -_override_ - - - -

    Describes the part of the user interface represented by this widget.

    -

    The framework calls this method when this widget is inserted into the tree -in a given BuildContext and when the dependencies of this widget change -(e.g., an InheritedWidget 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.

    -

    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 Widget.canUpdate.

    -

    Typically implementations return a newly created constellation of widgets -that are configured with information from this widget's constructor and -from the given BuildContext.

    -

    The given BuildContext 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 BuildContext -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.

    -

    The implementation of this method must only depend on:

    - -

    If a widget's build method is to depend on anything else, use a -StatefulWidget instead.

    -

    See also:

    -
      -
    • StatelessWidget, which contains the discussion on performance considerations.
    • -
    - - - -## Implementation - -```dart -@override -Widget build(BuildContext context) => - BlocListener, SignUpState>( - listener: (context, state) { - if (customBuilder != null) { - return customBuilder!(context, state); - } - - if (onSuccess != null && - state.status == FormStatus.submissionSuccess) { - return onSuccess!(context); - } - if (onProgress != null && - state.status == FormStatus.submissionInProgress) { - return onProgress!(context); - } - if (onError != null && - (state.status == FormStatus.submissionCanceled || - state.status == FormStatus.submissionFailure)) { - return onError!(context, state.status, state.errorMessage); - } - }, - child: child, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/child.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/child.md deleted file mode 100644 index 53bc3682..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/child.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# child property - - - - - *[](https://dart.dev/null-safety)* - - - -[Widget](https://api.flutter.dev/flutter/widgets/Widget-class.html) child - -_final_ - - - - - - -## Implementation - -```dart -final Widget child; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/customBuilder.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/customBuilder.md deleted file mode 100644 index e59261e0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/customBuilder.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# customBuilder property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, [SignUpState](../../wyatt_authentication_bloc/SignUpState-class.md) state)?) customBuilder - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context, SignUpState state)? customBuilder; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onError.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onError.md deleted file mode 100644 index ed94a98f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onError.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# onError property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context, FormStatus status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage)?) onError - -_final_ - - - - - - -## Implementation - -```dart -final void Function( - BuildContext context, - FormStatus status, - String? errorMessage, -)? onError; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onProgress.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onProgress.md deleted file mode 100644 index 4a30ed71..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onProgress.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onProgress property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onProgress - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context)? onProgress; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onSuccess.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onSuccess.md deleted file mode 100644 index 4d942f63..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpListener/onSuccess.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# onSuccess property - - - - - *[](https://dart.dev/null-safety)* - - - -(void Function([BuildContext](https://api.flutter.dev/flutter/widgets/BuildContext-class.html) context)?) onSuccess - -_final_ - - - - - - -## Implementation - -```dart -final void Function(BuildContext context)? onSuccess; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState-class.md deleted file mode 100644 index d1a945ac..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState-class.md +++ /dev/null @@ -1,179 +0,0 @@ - - - -# SignUpState class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Sign up cubit state to manage the form.

    - - - -**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) -- SignUpState - - - - - - - - -## Constructors - -[SignUpState](../wyatt_authentication_bloc/SignUpState/SignUpState.md) ({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - _const_ - - -## Properties - -##### [email](../wyatt_authentication_bloc/SignUpState/email.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> - - - - -_read-only_ - - - -##### [errorMessage](../wyatt_authentication_bloc/SignUpState/errorMessage.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? - - - -Optional error message. -_finalinherited_ - - - -##### [form](../wyatt_authentication_bloc/SignUpState/form.md) → WyattForm - - - -FormData with all inputs, and associated metadata. -_finalinherited_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [password](../wyatt_authentication_bloc/SignUpState/password.md) → FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> - - - - -_read-only_ - - - -##### [props](../wyatt_authentication_bloc/SignUpState/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-only_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [status](../wyatt_authentication_bloc/SignUpState/status.md) → FormStatus - - - -Global status of a form. -_finalinherited_ - - - -##### [stringify](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/stringify.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html)? - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## Methods - -##### [copyWith](../wyatt_authentication_bloc/SignUpState/copyWith.md)({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) - - - - - - - - -##### [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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/SignUpState/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_override_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/SignUpState.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/SignUpState.md deleted file mode 100644 index 2225e87b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/SignUpState.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# SignUpState constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignUpState({required WyattForm form, FormStatus status = FormStatus.pure, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - -## Implementation - -```dart -const SignUpState({ - required super.form, - super.status = FormStatus.pure, - super.errorMessage, -}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/copyWith.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/copyWith.md deleted file mode 100644 index 35561e0b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/copyWith.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -# copyWith method - - - - - *[](https://dart.dev/null-safety)* - - - - -[SignUpState](../../wyatt_authentication_bloc/SignUpState-class.md) copyWith -({WyattForm? form, FormStatus? status, [String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage}) - - - - - - - - -## Implementation - -```dart -SignUpState copyWith({ - WyattForm? form, - FormStatus? status, - String? errorMessage, -}) => - SignUpState( - form: form ?? this.form, - status: status ?? this.status, - errorMessage: errorMessage ?? this.errorMessage, - ); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/email.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/email.md deleted file mode 100644 index 1ded8043..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/email.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# email property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> email - - - - - - - - -## Implementation - -```dart -FormInputValidator get email => - form.validatorOf(AuthFormField.email); -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/errorMessage.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/errorMessage.md deleted file mode 100644 index d0856deb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/errorMessage.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# errorMessage property - - - - - *[](https://dart.dev/null-safety)* - - - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html)? errorMessage - -_finalinherited_ - - - -

    Optional error message.

    - - - -## Implementation - -```dart -final String? errorMessage; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/form.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/form.md deleted file mode 100644 index d3f2da76..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/form.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# form property - - - - - *[](https://dart.dev/null-safety)* - - - -WyattForm form - -_finalinherited_ - - - -

    FormData with all inputs, and associated metadata.

    - - - -## Implementation - -```dart -final WyattForm form; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/password.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/password.md deleted file mode 100644 index 77938106..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/password.md +++ /dev/null @@ -1,37 +0,0 @@ - - - -# password property - - - - - *[](https://dart.dev/null-safety)* - - - - - -FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError> password - - - - - - - - -## Implementation - -```dart -FormInputValidator get password => - form.validatorOf(AuthFormField.password); -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/props.md deleted file mode 100644 index 2b5a46b8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - - - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [email, password, status, form]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/status.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/status.md deleted file mode 100644 index 644a9f10..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/status.md +++ /dev/null @@ -1,34 +0,0 @@ - - - -# status property - - - - - *[](https://dart.dev/null-safety)* - - - -FormStatus status - -_finalinherited_ - - - -

    Global status of a form.

    - - - -## Implementation - -```dart -final FormStatus status; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/toString.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/toString.md deleted file mode 100644 index e53f76d6..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpState/toString.md +++ /dev/null @@ -1,50 +0,0 @@ - - - -# toString method - - - - - *[](https://dart.dev/null-safety)* - - - -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) -- @[override](https://api.flutter.dev/flutter/dart-core/override-constant.html) - -[String](https://api.flutter.dev/flutter/dart-core/String-class.html) toString -() - -_override_ - - - -

    A string representation of this object.

    -

    Some classes have a default textual representation, -often paired with a static parse function (like int.parse). -These classes will provide the textual representation as -their string representation.

    -

    Other classes have no meaningful textual representation -that a program will care about. -Such classes will typically override toString to provide -useful information when inspecting the object, -mainly for debugging or logging.

    - - - -## Implementation - -```dart -@override -@override -String toString() => 'SignUpState(status: ${status.name} ' - '${(errorMessage != null) ? " [$errorMessage]" : ""}, $form)'; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md deleted file mode 100644 index 0b725844..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# SignUpWithEmailAndPasswordFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown if during the sign up process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md) -- SignUpWithEmailAndPasswordFailureFirebase - - - - - - - - -## Constructors - -[SignUpWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.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]) - - - -[SignUpWithEmailAndPasswordFailureFirebase.fromCode](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md deleted file mode 100644 index a88070e0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.fromCode.md +++ /dev/null @@ -1,52 +0,0 @@ - - - -# SignUpWithEmailAndPasswordFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignUpWithEmailAndPasswordFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -SignUpWithEmailAndPasswordFailureFirebase.fromCode(String code) - : super.fromCode(code) { - switch (code) { - case 'invalid-email': - msg = 'The email address is badly formatted.'; - break; - case 'user-disabled': - msg = 'This user has been disabled. Please contact support for help.'; - break; - case 'email-already-in-use': - msg = 'An account already exists for that email.'; - break; - case 'operation-not-allowed': - msg = 'Operation is not allowed. Please contact support.'; - break; - case 'weak-password': - msg = 'Please enter a stronger password.'; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md deleted file mode 100644 index 3c589850..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase/SignUpWithEmailAndPasswordFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignUpWithEmailAndPasswordFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignUpWithEmailAndPasswordFailureFirebase([[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 -SignUpWithEmailAndPasswordFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md deleted file mode 100644 index 934c07dd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# SignUpWithEmailAndPasswordFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown if during the sign up process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- SignUpWithEmailAndPasswordFailureInterface - - - -**Implementers** - -- [SignUpWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md) - - - - - -## Constructors - -[SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.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 sign up process if a failure occurs. - -[SignUpWithEmailAndPasswordFailureInterface.fromCode](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown if during the sign up process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md deleted file mode 100644 index 4eba5121..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.fromCode.md +++ /dev/null @@ -1,32 +0,0 @@ - - - -# SignUpWithEmailAndPasswordFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignUpWithEmailAndPasswordFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown if during the sign up process if a failure occurs.

    - - - -## Implementation - -```dart -SignUpWithEmailAndPasswordFailureInterface.fromCode(super.code) - : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md deleted file mode 100644 index 105e574d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface/SignUpWithEmailAndPasswordFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# SignUpWithEmailAndPasswordFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -SignUpWithEmailAndPasswordFailureInterface([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 sign up process if a failure occurs.

    - - - -## Implementation - -```dart -SignUpWithEmailAndPasswordFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md deleted file mode 100644 index 220af3ad..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md +++ /dev/null @@ -1,305 +0,0 @@ - - - -# SignUpWithEmailPassword<Data> mixin - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Sign up mixin.

    -

    Allows the user to register with an email and a password.

    -

    Gives access to the signUpWithEmailPassword method and -onSignUpWithEmailAndPassword callback.

    - - -**Superclass Constraints** - -- [BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit-class.md)<Data> - - - - -**Mixin Applications** - -- [SignUpCubit](../wyatt_authentication_bloc/SignUpCubit-class.md) - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseSignUpCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseSignUpCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseSignUpCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseSignUpCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emailChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - - - - - -##### [emailCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as emailChanged but with a custom Validator. - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[SignUpState](../wyatt_authentication_bloc/SignUpState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onSignUpWithEmailAndPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user creates an account. - - - - -##### [passwordChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - - - - - -##### [passwordCustomChanged](../wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as passwordChanged but with a custom Validator. - - - - -##### [reset](../wyatt_authentication_bloc/BaseSignUpCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [signUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Creates a new user with the provided email and password. - - - - -##### [submit](../wyatt_authentication_bloc/BaseSignUpCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseSignUpCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [validate](../wyatt_authentication_bloc/BaseSignUpCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md deleted file mode 100644 index 85e7cc16..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailChanged.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# emailChanged method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailChanged -([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) - - - - - - - - -## Implementation - -```dart -void emailChanged(String value) { - final emailValidatorType = formRepository - .accessForm(formName) - .validatorOf(AuthFormField.email) - .runtimeType; - assert( - emailValidatorType == Email, - 'Use emailCustomChanged(...) with validator $emailValidatorType', - ); - - final Email email = Email.dirty(value); - dataChanged(AuthFormField.email, email); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md deleted file mode 100644 index 8915ba03..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/emailCustomChanged.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailCustomChanged -<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) - - - - - -

    Same as emailChanged but with a custom Validator.

    -

    Sort of short hand for dataChanged.

    - - - -## Implementation - -```dart -void emailCustomChanged< - Validator extends FormInputValidator>( - Validator validator, -) { - dataChanged(AuthFormField.email, validator); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md deleted file mode 100644 index cd7c1a80..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/onSignUpWithEmailAndPassword.md +++ /dev/null @@ -1,40 +0,0 @@ - - - -# onSignUpWithEmailAndPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onSignUpWithEmailAndPassword -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - - - - - -

    This callback is triggered when a user creates an account.

    -

    For example: when a user sign up in firebase.

    - - - -## Implementation - -```dart -FutureOrResult onSignUpWithEmailAndPassword( - Result result, - WyattForm form, -); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md deleted file mode 100644 index 8db9fda0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordChanged.md +++ /dev/null @@ -1,46 +0,0 @@ - - - -# passwordChanged method - - - - - *[](https://dart.dev/null-safety)* - - - - -void passwordChanged -([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) - - - - - - - - -## Implementation - -```dart -void passwordChanged(String value) { - final passwordValidatorType = formRepository - .accessForm(formName) - .validatorOf(AuthFormField.password) - .runtimeType; - assert( - passwordValidatorType == Password, - 'Use passwordCustomChanged(...) with validator $passwordValidatorType', - ); - final Password password = Password.dirty(value); - dataChanged(AuthFormField.password, password); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md deleted file mode 100644 index 5e3b39bd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/passwordCustomChanged.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# passwordCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method - - - - - *[](https://dart.dev/null-safety)* - - - - -void passwordCustomChanged -<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) - - - - - -

    Same as passwordChanged but with a custom Validator.

    -

    Sort of short hand for dataChanged.

    - - - -## Implementation - -```dart -void passwordCustomChanged< - Validator extends FormInputValidator>( - Validator validator, -) { - dataChanged(AuthFormField.password, validator); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md deleted file mode 100644 index 0fd593ac..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignUpWithEmailPassword/signUpWithEmailPassword.md +++ /dev/null @@ -1,97 +0,0 @@ - - - -# signUpWithEmailPassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> signUpWithEmailPassword -() - - - - - -

    Creates a new user with the provided email and password.

    -

    Returns the newly created user's unique identifier.

    -

    Throws a SignUpWithEmailAndPasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOr signUpWithEmailPassword() async { - if (!state.status.isValidated) { - return; - } - - final form = formRepository.accessForm(formName); - emit(SignUpState(form: form, status: FormStatus.submissionInProgress)); - - final email = form.valueOf(AuthFormField.email); - final password = form.valueOf(AuthFormField.password); - - if (email.isNullOrEmpty || password.isNullOrEmpty) { - emit( - SignUpState( - form: form, - errorMessage: 'An error occured while retrieving data from the form.', - status: FormStatus.submissionFailure, - ), - ); - } - - return CustomRoutine( - routine: () => authenticationRepository.signUpWithEmailAndPassword( - email: email!, - password: password!, - ), - attachedLogic: (routineResult) => onSignUpWithEmailAndPassword( - routineResult, - form, - ), - onError: (error) { - emit( - SignUpState( - form: form, - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ); - addError(error); - }, - onSuccess: (account, data) { - authenticationRepository.addSession( - SessionWrapper( - event: SignedUpEvent(account: account), - session: Session( - account: account, - data: data, - ), - ), - ); - emit( - SignUpState( - form: form, - status: FormStatus.submissionSuccess, - ), - ); - }, - ).call(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent-class.md deleted file mode 100644 index c3b76749..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent-class.md +++ /dev/null @@ -1,135 +0,0 @@ - - - -# SignedInEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user authenticates (from not logged in to logged in).

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- SignedInEvent - - - - - - - - -## Constructors - -[SignedInEvent](../wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) - - _const_ - - -## Properties - -##### [account](../wyatt_authentication_bloc/SignedInEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/SignedInEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md deleted file mode 100644 index cdc4ad73..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/SignedInEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignedInEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignedInEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) - - - - - -## Implementation - -```dart -const SignedInEvent({required this.account}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/account.md deleted file mode 100644 index 671e197e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/account.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# account property - - - - - *[](https://dart.dev/null-safety)* - - - -[Account](../../wyatt_authentication_bloc/Account-class.md) account - -_final_ - - - - - - -## Implementation - -```dart -final Account account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/props.md deleted file mode 100644 index fbde09d1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInEvent/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [account]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent-class.md deleted file mode 100644 index fd2ab1bb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent-class.md +++ /dev/null @@ -1,135 +0,0 @@ - - - -# SignedInFromCacheEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user authenticates automatically (from not logged in to logged in).

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- SignedInFromCacheEvent - - - - - - - - -## Constructors - -[SignedInFromCacheEvent](../wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) - - _const_ - - -## Properties - -##### [account](../wyatt_authentication_bloc/SignedInFromCacheEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/SignedInFromCacheEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md deleted file mode 100644 index 99d1d86f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/SignedInFromCacheEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignedInFromCacheEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignedInFromCacheEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) - - - - - -## Implementation - -```dart -const SignedInFromCacheEvent({required this.account}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/account.md deleted file mode 100644 index 671e197e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/account.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# account property - - - - - *[](https://dart.dev/null-safety)* - - - -[Account](../../wyatt_authentication_bloc/Account-class.md) account - -_final_ - - - - - - -## Implementation - -```dart -final Account account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/props.md deleted file mode 100644 index fbde09d1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedInFromCacheEvent/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [account]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent-class.md deleted file mode 100644 index 0075e9eb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent-class.md +++ /dev/null @@ -1,126 +0,0 @@ - - - -# SignedOutEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user logs out.

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- SignedOutEvent - - - - - - - - -## Constructors - -[SignedOutEvent](../wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md) () - - _const_ - - -## Properties - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md deleted file mode 100644 index 734b4c5d..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedOutEvent/SignedOutEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignedOutEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignedOutEvent() - - - - - -## Implementation - -```dart -const SignedOutEvent(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent-class.md deleted file mode 100644 index c53aeb32..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent-class.md +++ /dev/null @@ -1,135 +0,0 @@ - - - -# SignedUpEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user creates an account.

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- SignedUpEvent - - - - - - - - -## Constructors - -[SignedUpEvent](../wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) - - _const_ - - -## Properties - -##### [account](../wyatt_authentication_bloc/SignedUpEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/SignedUpEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md deleted file mode 100644 index 4a68b5f5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/SignedUpEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# SignedUpEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -SignedUpEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) - - - - - -## Implementation - -```dart -const SignedUpEvent({required this.account}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/account.md deleted file mode 100644 index 671e197e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/account.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# account property - - - - - *[](https://dart.dev/null-safety)* - - - -[Account](../../wyatt_authentication_bloc/Account-class.md) account - -_final_ - - - - - - -## Implementation - -```dart -final Account account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/props.md deleted file mode 100644 index fbde09d1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/SignedUpEvent/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [account]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md deleted file mode 100644 index 1b5a7161..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md +++ /dev/null @@ -1,126 +0,0 @@ - - - -# UnknownAuthenticationEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When a user's login status is unknown.

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- UnknownAuthenticationEvent - - - - - - - - -## Constructors - -[UnknownAuthenticationEvent](../wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md) () - - _const_ - - -## Properties - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/AuthenticationChangeEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md deleted file mode 100644 index 6e9d242a..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UnknownAuthenticationEvent/UnknownAuthenticationEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# UnknownAuthenticationEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -UnknownAuthenticationEvent() - - - - - -## Implementation - -```dart -const UnknownAuthenticationEvent(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail-mixin.md deleted file mode 100644 index 0673d44e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail-mixin.md +++ /dev/null @@ -1,287 +0,0 @@ - - - -# UpdateEmail<Data> mixin - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Edit account mixin.

    -

    Allows the user to edit his email

    -

    Gives access to the updateEmail method and -onEmailUpdated callback.

    - - -**Superclass Constraints** - -- [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> - - - - -**Mixin Applications** - -- [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md) - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emailChanged](../wyatt_authentication_bloc/UpdateEmail/emailChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - - - - - -##### [emailCustomChanged](../wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as emailChanged but with a custom Validator. - - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onEmailUpdated](../wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when user updates his email - - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [updateEmail](../wyatt_authentication_bloc/UpdateEmail/updateEmail.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Update or add email. - - - - -##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailChanged.md deleted file mode 100644 index 85e7cc16..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailChanged.md +++ /dev/null @@ -1,47 +0,0 @@ - - - -# emailChanged method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailChanged -([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) - - - - - - - - -## Implementation - -```dart -void emailChanged(String value) { - final emailValidatorType = formRepository - .accessForm(formName) - .validatorOf(AuthFormField.email) - .runtimeType; - assert( - emailValidatorType == Email, - 'Use emailCustomChanged(...) with validator $emailValidatorType', - ); - - final Email email = Email.dirty(value); - dataChanged(AuthFormField.email, email); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md deleted file mode 100644 index 7ec149cb..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/emailCustomChanged.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# emailCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method - - - - - *[](https://dart.dev/null-safety)* - - - - -void emailCustomChanged -<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) - - - - - -

    Same as emailChanged but with a custom Validator.

    -

    Sort of short hand for dataChanged.

    - - - -## Implementation - -```dart -void emailCustomChanged< - Validator extends FormInputValidator>( - Validator validator, -) { - dataChanged(AuthFormField.email, validator); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md deleted file mode 100644 index 7e3757f2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/onEmailUpdated.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# onEmailUpdated method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onEmailUpdated -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - - - - - -

    This callback is triggered when user updates his email

    - - - -## Implementation - -```dart -FutureOrResult onEmailUpdated( - Result result, - WyattForm form, -); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/updateEmail.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/updateEmail.md deleted file mode 100644 index 7c814f89..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmail/updateEmail.md +++ /dev/null @@ -1,103 +0,0 @@ - - - -# updateEmail method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> updateEmail -() - - - - - -

    Update or add email.

    -

    Throws a UpdateEmailFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOr updateEmail() async { - if (state.status.isSubmissionInProgress) { - return; - } - - if (!state.status.isValidated) { - return; - } - - final form = formRepository.accessForm(formName); - emit( - EditAccountState( - form: form, - status: FormStatus.submissionInProgress, - ), - ); - - final email = form.valueOf(AuthFormField.email); - - if (email.isNullOrEmpty) { - emit( - EditAccountState( - form: form, - errorMessage: 'An error occured while retrieving data from the form.', - status: FormStatus.submissionFailure, - ), - ); - } - - return CustomRoutine( - routine: () => authenticationRepository.updateEmail( - email: email!, - ), - attachedLogic: (routineResult) => onEmailUpdated( - routineResult, - form, - ), - onError: (error) { - emit( - EditAccountState( - form: form, - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ); - addError(error); - }, - onSuccess: (account, data) { - authenticationRepository.addSession( - SessionWrapper( - event: UpdatedEvent(account: account), - session: Session( - account: account, - data: data, - ), - ), - ); - emit( - EditAccountState( - form: form, - status: FormStatus.submissionSuccess, - ), - ); - }, - ).call(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md deleted file mode 100644 index aa440929..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# UpdateEmailFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the email modification process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md) -- UpdateEmailFailureFirebase - - - - - - - - -## Constructors - -[UpdateEmailFailureFirebase](../wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.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]) - - - -[UpdateEmailFailureFirebase.fromCode](../wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md deleted file mode 100644 index d9c01e20..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.fromCode.md +++ /dev/null @@ -1,45 +0,0 @@ - - - -# UpdateEmailFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdateEmailFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -UpdateEmailFailureFirebase.fromCode(String code) : super.fromCode(code) { - switch (code) { - case 'invalid-email': - msg = 'Email is not valid or badly formatted.'; - break; - case 'email-already-in-use': - msg = 'An account already exists for that email.'; - break; - case 'requires-recent-login': - msg = "User's last sign-in time does not meet the security threshold."; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md deleted file mode 100644 index 7c7e5fe5..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureFirebase/UpdateEmailFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# UpdateEmailFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdateEmailFailureFirebase([[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 -UpdateEmailFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md deleted file mode 100644 index 29d54938..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# UpdateEmailFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the email modification process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- UpdateEmailFailureInterface - - - -**Implementers** - -- [UpdateEmailFailureFirebase](../wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md) - - - - - -## Constructors - -[UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.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) - - - -[UpdateEmailFailureInterface.fromCode](../wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md deleted file mode 100644 index 656a17b9..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# UpdateEmailFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdateEmailFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -UpdateEmailFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md deleted file mode 100644 index ffa1fd03..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdateEmailFailureInterface/UpdateEmailFailureInterface.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# UpdateEmailFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdateEmailFailureInterface([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 -UpdateEmailFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword-mixin.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword-mixin.md deleted file mode 100644 index cea1271f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword-mixin.md +++ /dev/null @@ -1,287 +0,0 @@ - - - -# UpdatePassword<Data> mixin - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Edit account mixin.

    -

    Allows the user to edit his password

    -

    Gives access to the updatePassword method and -onPasswordUpdated callback.

    - - -**Superclass Constraints** - -- [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> - - - - -**Mixin Applications** - -- [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md) - - - -## Properties - -##### [authenticationRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/authenticationRepository.md) → [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - -_finalinherited_ - - - -##### [formName](../wyatt_authentication_bloc/BaseEditAccountCubit/formName.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [formRepository](../wyatt_authentication_bloc/BaseEditAccountCubit/formRepository.md) → FormRepository - - - - -_read-onlyinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [isClosed](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/isClosed.html) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -Whether the bloc is closed. -_read-onlyinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [state](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/state.html) → [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) - - - -The current state. -_read-onlyinherited_ - - - -##### [stream](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/stream.html) → [Stream](https://api.flutter.dev/flutter/dart-async/Stream-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> - - - -The current stream of states. -_read-onlyinherited_ - - - - - -## Methods - -##### [addError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/addError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [[StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html)? stackTrace]) void - - - -Reports an error which triggers onError with an optional StackTrace. -_inherited_ - - - -##### [close](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/close.html)() [Future](https://api.flutter.dev/flutter/dart-async/Future-class.html)<void> - - - -Closes the instance. -This method should be called when the instance is no longer needed. -Once close is called, the instance can no longer be used. -_inherited_ - - - -##### [dataChanged](../wyatt_authentication_bloc/BaseEditAccountCubit/dataChanged.md)<Value>([String](https://api.flutter.dev/flutter/dart-core/String-class.html) key, FormInputValidator<Value, ValidationError> dirtyValue) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [emit](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/emit.html)([EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) state) void - - - -Updates the state to the provided state. -emit does nothing if the state being emitted -is equal to the current state. -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [onChange](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onChange.html)([Change](https://pub.dev/documentation/bloc/8.1.0/bloc/Change-class.html)<[EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md)> change) void - - - -Called whenever a change occurs with the given change. -A change occurs when a new state is emitted. -onChange is called before the state of the cubit is updated. -onChange is a great spot to add logging/analytics for a specific cubit. -_inherited_ - - - -##### [onError](https://pub.dev/documentation/bloc/8.1.0/bloc/BlocBase/onError.html)([Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) error, [StackTrace](https://api.flutter.dev/flutter/dart-core/StackTrace-class.html) stackTrace) void - - - -Called whenever an error occurs and notifies BlocObserver.onError. -_inherited_ - - - -##### [onPasswordUpdated](../wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md)(Result<[Account](../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) FutureOrResult<Data?> - - - -This callback is triggered when a user edits his password. - - - - -##### [passwordChanged](../wyatt_authentication_bloc/UpdatePassword/passwordChanged.md)([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) void - - - - - - - - -##### [passwordCustomChanged](../wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md)<Validator extends FormInputValidator<[String](https://api.flutter.dev/flutter/dart-core/String-class.html)?, ValidationError>>(Validator validator) void - - - -Same as passwordChanged but with a custom Validator. - - - - -##### [reset](../wyatt_authentication_bloc/BaseEditAccountCubit/reset.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [submit](../wyatt_authentication_bloc/BaseEditAccountCubit/submit.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [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. -_inherited_ - - - -##### [update](../wyatt_authentication_bloc/BaseEditAccountCubit/update.md)(WyattForm form, {SetOperation operation = SetOperation.replace}) [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - -##### [updatePassword](../wyatt_authentication_bloc/UpdatePassword/updatePassword.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - -Update or add password. - - - - -##### [validate](../wyatt_authentication_bloc/BaseEditAccountCubit/validate.md)() [FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> - - - - -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md deleted file mode 100644 index b0354384..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/onPasswordUpdated.md +++ /dev/null @@ -1,39 +0,0 @@ - - - -# onPasswordUpdated method - - - - - *[](https://dart.dev/null-safety)* - - - - -FutureOrResult<Data?> onPasswordUpdated -(Result<[Account](../../wyatt_authentication_bloc/Account-class.md), AppException> result, WyattForm form) - - - - - -

    This callback is triggered when a user edits his password.

    - - - -## Implementation - -```dart -FutureOrResult onPasswordUpdated( - Result result, - WyattForm form, -); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordChanged.md deleted file mode 100644 index 8db9fda0..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordChanged.md +++ /dev/null @@ -1,46 +0,0 @@ - - - -# passwordChanged method - - - - - *[](https://dart.dev/null-safety)* - - - - -void passwordChanged -([String](https://api.flutter.dev/flutter/dart-core/String-class.html) value) - - - - - - - - -## Implementation - -```dart -void passwordChanged(String value) { - final passwordValidatorType = formRepository - .accessForm(formName) - .validatorOf(AuthFormField.password) - .runtimeType; - assert( - passwordValidatorType == Password, - 'Use passwordCustomChanged(...) with validator $passwordValidatorType', - ); - final Password password = Password.dirty(value); - dataChanged(AuthFormField.password, password); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md deleted file mode 100644 index 2cb08454..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/passwordCustomChanged.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# passwordCustomChanged<Validator extends FormInputValidator<String?, ValidationError>> method - - - - - *[](https://dart.dev/null-safety)* - - - - -void passwordCustomChanged -<Validator extends FormInputValidator<String?, ValidationError>>(Validator validator) - - - - - -

    Same as passwordChanged but with a custom Validator.

    -

    Sort of short hand for dataChanged.

    - - - -## Implementation - -```dart -void passwordCustomChanged< - Validator extends FormInputValidator>( - Validator validator, -) { - dataChanged(AuthFormField.password, validator); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/updatePassword.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/updatePassword.md deleted file mode 100644 index fae26194..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePassword/updatePassword.md +++ /dev/null @@ -1,103 +0,0 @@ - - - -# updatePassword method - - - - - *[](https://dart.dev/null-safety)* - - - - -[FutureOr](https://api.flutter.dev/flutter/dart-async/FutureOr-class.html)<void> updatePassword -() - - - - - -

    Update or add password.

    -

    Throws a UpdatePasswordFailureInterface if -an exception occurs.

    - - - -## Implementation - -```dart -FutureOr updatePassword() async { - if (state.status.isSubmissionInProgress) { - return; - } - - if (!state.status.isValidated) { - return; - } - - final form = formRepository.accessForm(formName); - emit( - EditAccountState( - form: form, - status: FormStatus.submissionInProgress, - ), - ); - - final password = form.valueOf(AuthFormField.password); - - if (password.isNullOrEmpty) { - emit( - EditAccountState( - form: form, - errorMessage: 'An error occured while retrieving data from the form.', - status: FormStatus.submissionFailure, - ), - ); - } - - return CustomRoutine( - routine: () => authenticationRepository.updatePassword( - password: password!, - ), - attachedLogic: (routineResult) => onPasswordUpdated( - routineResult, - form, - ), - onError: (error) { - emit( - EditAccountState( - form: form, - errorMessage: error.message, - status: FormStatus.submissionFailure, - ), - ); - addError(error); - }, - onSuccess: (account, data) { - authenticationRepository.addSession( - SessionWrapper( - event: SignedInEvent(account: account), - session: Session( - account: account, - data: data, - ), - ), - ); - emit( - EditAccountState( - form: form, - status: FormStatus.submissionSuccess, - ), - ); - }, - ).call(); -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md deleted file mode 100644 index 75e3bd3b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# UpdatePasswordFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password modification process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md) -- UpdatePasswordFailureFirebase - - - - - - - - -## Constructors - -[UpdatePasswordFailureFirebase](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.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]) - - - -[UpdatePasswordFailureFirebase.fromCode](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md deleted file mode 100644 index 1aa2ae7c..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.fromCode.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# UpdatePasswordFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdatePasswordFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -UpdatePasswordFailureFirebase.fromCode(String code) : super.fromCode(code) { - switch (code) { - case 'weak-password': - msg = 'Please enter a stronger password.'; - break; - case 'requires-recent-login': - msg = "User's last sign-in time does not meet the security threshold."; - break; - default: - this.code = 'unknown'; - msg = 'An unknown error occurred.'; - } -} -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md deleted file mode 100644 index 0f38d6b8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureFirebase/UpdatePasswordFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# UpdatePasswordFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdatePasswordFailureFirebase([[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 -UpdatePasswordFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md deleted file mode 100644 index d7a95cd8..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# UpdatePasswordFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password modification process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- UpdatePasswordFailureInterface - - - -**Implementers** - -- [UpdatePasswordFailureFirebase](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md) - - - - - -## Constructors - -[UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.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) - - - -[UpdatePasswordFailureInterface.fromCode](../wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md deleted file mode 100644 index d459010f..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.fromCode.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# UpdatePasswordFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdatePasswordFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -UpdatePasswordFailureInterface.fromCode(super.code) : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md deleted file mode 100644 index bbba2c50..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatePasswordFailureInterface/UpdatePasswordFailureInterface.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# UpdatePasswordFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -UpdatePasswordFailureInterface([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 -UpdatePasswordFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent-class.md deleted file mode 100644 index 1097b97b..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent-class.md +++ /dev/null @@ -1,135 +0,0 @@ - - - -# UpdatedEvent class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    When the user's account has been updated.

    - - - -**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](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) -- UpdatedEvent - - - - - - - - -## Constructors - -[UpdatedEvent](../wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md) ({required [Account](../wyatt_authentication_bloc/Account-class.md) account}) - - _const_ - - -## Properties - -##### [account](../wyatt_authentication_bloc/UpdatedEvent/account.md) → [Account](../wyatt_authentication_bloc/Account-class.md) - - - - -_final_ - - - -##### [hashCode](https://pub.dev/documentation/equatable/2.0.5/equatable/Equatable/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [props](../wyatt_authentication_bloc/UpdatedEvent/props.md) → [List](https://api.flutter.dev/flutter/dart-core/List-class.html)<[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. -_read-onlyoverride_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - -##### [stringify](../wyatt_authentication_bloc/AuthenticationChangeEvent/stringify.md) → [bool](https://api.flutter.dev/flutter/dart-core/bool-class.html) - - - -If set to true, the toString method will be overridden to output -this instance's props. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [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. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md deleted file mode 100644 index cb29ebfe..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/UpdatedEvent.md +++ /dev/null @@ -1,30 +0,0 @@ - - - -# UpdatedEvent constructor - - - - - *[](https://dart.dev/null-safety)* - - -const -UpdatedEvent({required [Account](../../wyatt_authentication_bloc/Account-class.md) account}) - - - - - -## Implementation - -```dart -const UpdatedEvent({required this.account}); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/account.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/account.md deleted file mode 100644 index 671e197e..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/account.md +++ /dev/null @@ -1,33 +0,0 @@ - - - -# account property - - - - - *[](https://dart.dev/null-safety)* - - - -[Account](../../wyatt_authentication_bloc/Account-class.md) account - -_final_ - - - - - - -## Implementation - -```dart -final Account account; -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/props.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/props.md deleted file mode 100644 index fbde09d1..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/UpdatedEvent/props.md +++ /dev/null @@ -1,42 +0,0 @@ - - - -# props property - - - - - *[](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)<[Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)?> props - -_override_ - - - -

    The list of properties that will be used to determine whether -two instances are equal.

    - - - -## Implementation - -```dart -@override -List get props => [account]; -``` - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md deleted file mode 100644 index 3a40b1bd..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md +++ /dev/null @@ -1,137 +0,0 @@ - - - -# VerifyPasswordResetCodeFailureFirebase class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password reset process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- [VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md) -- VerifyPasswordResetCodeFailureFirebase - - - - - - - - -## Constructors - -[VerifyPasswordResetCodeFailureFirebase](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.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]) - - - -[VerifyPasswordResetCodeFailureFirebase.fromCode](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md deleted file mode 100644 index 7b721f98..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.fromCode.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# VerifyPasswordResetCodeFailureFirebase.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -VerifyPasswordResetCodeFailureFirebase.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - - - - -## Implementation - -```dart -VerifyPasswordResetCodeFailureFirebase.fromCode(super.code) - : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md deleted file mode 100644 index 22f49092..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase/VerifyPasswordResetCodeFailureFirebase.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# VerifyPasswordResetCodeFailureFirebase constructor - - - - - *[](https://dart.dev/null-safety)* - - - -VerifyPasswordResetCodeFailureFirebase([[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 -VerifyPasswordResetCodeFailureFirebase([String? code, String? msg]) - : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md deleted file mode 100644 index 47e2e9b2..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md +++ /dev/null @@ -1,139 +0,0 @@ - - - -# VerifyPasswordResetCodeFailureInterface class - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    Thrown during the password reset process if a failure occurs.

    - - - -**Inheritance** - -- [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html) -- [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) -- VerifyPasswordResetCodeFailureInterface - - - -**Implementers** - -- [VerifyPasswordResetCodeFailureFirebase](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md) - - - - - -## Constructors - -[VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.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 during the password reset process if a failure occurs. - -[VerifyPasswordResetCodeFailureInterface.fromCode](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md) ([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - -Thrown during the password reset process if a failure occurs. - - -## Properties - -##### [code](../wyatt_authentication_bloc/AuthenticationFailureInterface/code.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [hashCode](https://api.flutter.dev/flutter/dart-core/Object/hashCode.html) → [int](https://api.flutter.dev/flutter/dart-core/int-class.html) - - - -The hash code for this object. -_read-onlyinherited_ - - - -##### [message](../wyatt_authentication_bloc/AuthenticationFailureInterface/message.md) → [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read-onlyinherited_ - - - -##### [msg](../wyatt_authentication_bloc/AuthenticationFailureInterface/msg.md) ↔ [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - - -_read / writeinherited_ - - - -##### [runtimeType](https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html) → [Type](https://api.flutter.dev/flutter/dart-core/Type-class.html) - - - -A representation of the runtime type of the object. -_read-onlyinherited_ - - - - - -## 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. -_inherited_ - - - -##### [toString](../wyatt_authentication_bloc/AuthenticationFailureInterface/toString.md)() [String](https://api.flutter.dev/flutter/dart-core/String-class.html) - - - -A string representation of this object. -_inherited_ - - - - - -## 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. -_inherited_ - - - - - - - - - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md deleted file mode 100644 index ed57be88..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.fromCode.md +++ /dev/null @@ -1,32 +0,0 @@ - - - -# VerifyPasswordResetCodeFailureInterface.fromCode constructor - - - - - *[](https://dart.dev/null-safety)* - - - -VerifyPasswordResetCodeFailureInterface.fromCode([String](https://api.flutter.dev/flutter/dart-core/String-class.html) code) - - -

    Thrown during the password reset process if a failure occurs.

    - - - -## Implementation - -```dart -VerifyPasswordResetCodeFailureInterface.fromCode(super.code) - : super.fromCode(); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md deleted file mode 100644 index e03ad3b7..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface/VerifyPasswordResetCodeFailureInterface.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -# VerifyPasswordResetCodeFailureInterface constructor - - - - - *[](https://dart.dev/null-safety)* - - - -VerifyPasswordResetCodeFailureInterface([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 during the password reset process if a failure occurs.

    - - - -## Implementation - -```dart -VerifyPasswordResetCodeFailureInterface(super.code, super.msg); -``` - - - - - - - diff --git a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/wyatt_authentication_bloc-library.md b/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/wyatt_authentication_bloc-library.md deleted file mode 100644 index 46d7f563..00000000 --- a/packages/wyatt_authentication_bloc/doc/api/wyatt_authentication_bloc/wyatt_authentication_bloc-library.md +++ /dev/null @@ -1,727 +0,0 @@ - - - - -# wyatt_authentication_bloc library - - - - - - - *[](https://dart.dev/null-safety)* - - - -

    An authentication library for BLoC.

    - - -## Classes - -##### [Account](../wyatt_authentication_bloc/Account-class.md) - - - -Represents a user Account in the -various identity provisioning systems. - - -##### [AccountModel](../wyatt_authentication_bloc/AccountModel-class.md) - - - -Account Model to parse Firebase User data - - -##### [AuthenticationBuilder](../wyatt_authentication_bloc/AuthenticationBuilder-class.md)<Data> - - - - - - -##### [AuthenticationChangeEvent](../wyatt_authentication_bloc/AuthenticationChangeEvent-class.md) - - - -Represents an event initiated by a change in -the user's authentication status. - - -##### [AuthenticationCubit](../wyatt_authentication_bloc/AuthenticationCubit-class.md)<Data> - - - -Abstract authentication cubit class needs to be implemented in application. - - -##### [AuthenticationFirebaseDataSourceImpl](../wyatt_authentication_bloc/AuthenticationFirebaseDataSourceImpl-class.md)<Data> - - - - - - -##### [AuthenticationRemoteDataSource](../wyatt_authentication_bloc/AuthenticationRemoteDataSource-class.md)<Data> - - - -Is responsible for abstracting the provenance of the data. - - -##### [AuthenticationRepository](../wyatt_authentication_bloc/AuthenticationRepository-class.md)<Data> - - - - - - -##### [AuthenticationRepositoryImpl](../wyatt_authentication_bloc/AuthenticationRepositoryImpl-class.md)<Data extends [Object](https://api.flutter.dev/flutter/dart-core/Object-class.html)> - - - - - - -##### [AuthenticationState](../wyatt_authentication_bloc/AuthenticationState-class.md)<Data> - - - - - - -##### [AuthFormField](../wyatt_authentication_bloc/AuthFormField-class.md) - - - -Default authentication form fields name - - -##### [AuthFormName](../wyatt_authentication_bloc/AuthFormName-class.md) - - - -Default authentication form name - - -##### [BaseEditAccountCubit](../wyatt_authentication_bloc/BaseEditAccountCubit-class.md)<Data> - - - -Abstract edit account cubit useful for implementing a cubit with fine -granularity by adding only the required mixins. - - -##### [BaseSignInCubit](../wyatt_authentication_bloc/BaseSignInCubit-class.md)<Data> - - - -Abstract sign in cubit useful for implementing a cubit with fine -granularity by adding only the required mixins. - - -##### [BaseSignUpCubit](../wyatt_authentication_bloc/BaseSignUpCubit-class.md)<Data> - - - -Abstract sign up cubit useful for implementing a cubit with fine -granularity by adding only the required mixins. - - -##### [CustomRoutine](../wyatt_authentication_bloc/CustomRoutine-class.md)<R, Data> - - - -Calls on each cubit action of this package. - - -##### [DeletedEvent](../wyatt_authentication_bloc/DeletedEvent-class.md) - - - -When a user deleted his account. - - -##### [EditAccountCubit](../wyatt_authentication_bloc/EditAccountCubit-class.md)<Data> - - - -Fully featured edit account cubit. - - -##### [EditAccountListener](../wyatt_authentication_bloc/EditAccountListener-class.md)<Data> - - - -Widget that listens and builds a child based on the state of -the edit account cubit - - -##### [EditAccountState](../wyatt_authentication_bloc/EditAccountState-class.md) - - - -Edit account cubit state to manage the form. - - -##### [EmailVerificationBuilder](../wyatt_authentication_bloc/EmailVerificationBuilder-class.md)<Extra> - - - - - - -##### [EmailVerificationCubit](../wyatt_authentication_bloc/EmailVerificationCubit-class.md)<Data> - - - - - - -##### [EmailVerificationState](../wyatt_authentication_bloc/EmailVerificationState-class.md) - - - - - - -##### [PasswordResetCubit](../wyatt_authentication_bloc/PasswordResetCubit-class.md)<Extra> - - - -Cubit that allows user to reset his password - - -##### [PasswordResetState](../wyatt_authentication_bloc/PasswordResetState-class.md) - - - - - - -##### [ReauthenticatedEvent](../wyatt_authentication_bloc/ReauthenticatedEvent-class.md) - - - -When a user re-authenticates (from the logged in state to the -logged in state with a different and fresh access -token and a different login time) - - -##### [RefreshedEvent](../wyatt_authentication_bloc/RefreshedEvent-class.md) - - - -When a user access token is refreshed (from the logged in state to the -logged in state with a different access token) - - -##### [Session](../wyatt_authentication_bloc/Session-class.md)<Data> - - - -The Session object is used to transport and propagate -the connected user Account and personalized Data in the application. - - -##### [SessionWrapper](../wyatt_authentication_bloc/SessionWrapper-class.md)<Data> - - - -Contains the AuthenticationChangeEvent initiating the state -change and the current Session. - - -##### [SignedInEvent](../wyatt_authentication_bloc/SignedInEvent-class.md) - - - -When a user authenticates (from not logged in to logged in). - - -##### [SignedInFromCacheEvent](../wyatt_authentication_bloc/SignedInFromCacheEvent-class.md) - - - -When a user authenticates automatically (from not logged in to logged in). - - -##### [SignedOutEvent](../wyatt_authentication_bloc/SignedOutEvent-class.md) - - - -When a user logs out. - - -##### [SignedUpEvent](../wyatt_authentication_bloc/SignedUpEvent-class.md) - - - -When a user creates an account. - - -##### [SignInCubit](../wyatt_authentication_bloc/SignInCubit-class.md)<Data> - - - -Fully featured sign in cubit. - - -##### [SignInListener](../wyatt_authentication_bloc/SignInListener-class.md)<Data> - - - -Widget that listens and builds a child based on the state of -the sign in cubit - - -##### [SignInState](../wyatt_authentication_bloc/SignInState-class.md) - - - -Sign in cubit state to manage the form. - - -##### [SignUpCubit](../wyatt_authentication_bloc/SignUpCubit-class.md)<Data> - - - -Fully featured sign up cubit. - - -##### [SignUpListener](../wyatt_authentication_bloc/SignUpListener-class.md)<Data> - - - -Widget that listens and builds a child based on the state of -the sign up cubit - - -##### [SignUpState](../wyatt_authentication_bloc/SignUpState-class.md) - - - -Sign up cubit state to manage the form. - - -##### [UnknownAuthenticationEvent](../wyatt_authentication_bloc/UnknownAuthenticationEvent-class.md) - - - -When a user's login status is unknown. - - -##### [UpdatedEvent](../wyatt_authentication_bloc/UpdatedEvent-class.md) - - - -When the user's account has been updated. - - - -## Mixins - -##### [SignInAnonymously](../wyatt_authentication_bloc/SignInAnonymously-mixin.md)<Data> - - - -Sign in mixin. - - -##### [SignInWithEmailPassword](../wyatt_authentication_bloc/SignInWithEmailPassword-mixin.md)<Data> - - - -Sign in mixin. - - -##### [SignInWithGoogle](../wyatt_authentication_bloc/SignInWithGoogle-mixin.md)<Data> - - - -Sign in mixin. - - -##### [SignUpWithEmailPassword](../wyatt_authentication_bloc/SignUpWithEmailPassword-mixin.md)<Data> - - - -Sign up mixin. - - -##### [UpdateEmail](../wyatt_authentication_bloc/UpdateEmail-mixin.md)<Data> - - - -Edit account mixin. - - -##### [UpdatePassword](../wyatt_authentication_bloc/UpdatePassword-mixin.md)<Data> - - - -Edit account mixin. - - - -## Extensions - -##### [BuildContextExtension](../wyatt_authentication_bloc/BuildContextExtension.md) - - - -Extension that helps to quickly access useful resources like wrapper, -session, account or data. - - - - - - -## Enums - -##### [AuthenticationStatus](../wyatt_authentication_bloc/AuthenticationStatus.md) - - - -Different authentication status - - - - -## Exceptions / Errors - -##### [ApplyActionCodeFailureFirebase](../wyatt_authentication_bloc/ApplyActionCodeFailureFirebase-class.md) - - - -Thrown if during the apply action code process if a failure occurs. - - -##### [ApplyActionCodeFailureInterface](../wyatt_authentication_bloc/ApplyActionCodeFailureInterface-class.md) - - - -Thrown if during the apply action code process if a failure occurs. - - -##### [AuthenticationFailureInterface](../wyatt_authentication_bloc/AuthenticationFailureInterface-class.md) - - - -Base exception used in Wyatt Authentication - - -##### [ConfirmPasswordResetFailureFirebase](../wyatt_authentication_bloc/ConfirmPasswordResetFailureFirebase-class.md) - - - -Thrown during the password reset process if a failure occurs. - - -##### [ConfirmPasswordResetFailureInterface](../wyatt_authentication_bloc/ConfirmPasswordResetFailureInterface-class.md) - - - -Thrown during the password reset process if a failure occurs. - - -##### [DeleteAccountFailureFirebase](../wyatt_authentication_bloc/DeleteAccountFailureFirebase-class.md) - - - -Thrown during the account deletion if a failure occurs. - - -##### [DeleteAccountFailureInterface](../wyatt_authentication_bloc/DeleteAccountFailureInterface-class.md) - - - -Thrown during the account deletion if a failure occurs. - - -##### [FetchSignInMethodsForEmailFailureFirebase](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureFirebase-class.md) - - - -Thrown during the fetch sign in methods if a failure occurs. - - -##### [FetchSignInMethodsForEmailFailureInterface](../wyatt_authentication_bloc/FetchSignInMethodsForEmailFailureInterface-class.md) - - - -Thrown during the fetch sign in methods if a failure occurs. - - -##### [ModelParsingFailureFirebase](../wyatt_authentication_bloc/ModelParsingFailureFirebase-class.md) - - - -Thrown during the model parsing process if a failure occurs. - - -##### [ModelParsingFailureInterface](../wyatt_authentication_bloc/ModelParsingFailureInterface-class.md) - - - -Thrown during the model parsing process if a failure occurs. - - -##### [ReauthenticateFailureFirebase](../wyatt_authentication_bloc/ReauthenticateFailureFirebase-class.md) - - - -Thrown during the reauthentication process if a failure occurs. - - -##### [ReauthenticateFailureInterface](../wyatt_authentication_bloc/ReauthenticateFailureInterface-class.md) - - - -Thrown during the reauthentication process if a failure occurs. - - -##### [RefreshFailureFirebase](../wyatt_authentication_bloc/RefreshFailureFirebase-class.md) - - - -Thrown during the refresh process if a failure occurs. - - -##### [RefreshFailureInterface](../wyatt_authentication_bloc/RefreshFailureInterface-class.md) - - - -Thrown during the refresh process if a failure occurs. - - -##### [SendEmailVerificationFailureFirebase](../wyatt_authentication_bloc/SendEmailVerificationFailureFirebase-class.md) - - - -Thrown during the email verification process if a failure occurs. - - -##### [SendEmailVerificationFailureInterface](../wyatt_authentication_bloc/SendEmailVerificationFailureInterface-class.md) - - - -Thrown during the email verification process if a failure occurs. - - -##### [SendPasswordResetEmailFailureFirebase](../wyatt_authentication_bloc/SendPasswordResetEmailFailureFirebase-class.md) - - - -Thrown during the password reset process if a failure occurs. - - -##### [SendPasswordResetEmailFailureInterface](../wyatt_authentication_bloc/SendPasswordResetEmailFailureInterface-class.md) - - - -Thrown during the password reset process if a failure occurs. - - -##### [SendSignInLinkEmailFailureFirebase](../wyatt_authentication_bloc/SendSignInLinkEmailFailureFirebase-class.md) - - - -Thrown during the sign in link process if a failure occurs. - - -##### [SendSignInLinkEmailFailureInterface](../wyatt_authentication_bloc/SendSignInLinkEmailFailureInterface-class.md) - - - -Thrown during the sign in link process if a failure occurs. - - -##### [SignInAnonymouslyFailureFirebase](../wyatt_authentication_bloc/SignInAnonymouslyFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInAnonymouslyFailureInterface](../wyatt_authentication_bloc/SignInAnonymouslyFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithAppleFailureFirebase](../wyatt_authentication_bloc/SignInWithAppleFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithAppleFailureInterface](../wyatt_authentication_bloc/SignInWithAppleFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithCredentialFailureFirebase](../wyatt_authentication_bloc/SignInWithCredentialFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithCredentialFailureInterface](../wyatt_authentication_bloc/SignInWithCredentialFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignInWithEmailAndPasswordFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithEmailLinkFailureFirebase](../wyatt_authentication_bloc/SignInWithEmailLinkFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithEmailLinkFailureInterface](../wyatt_authentication_bloc/SignInWithEmailLinkFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithFacebookFailureFirebase](../wyatt_authentication_bloc/SignInWithFacebookFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithFacebookFailureInterface](../wyatt_authentication_bloc/SignInWithFacebookFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithGoogleFailureFirebase](../wyatt_authentication_bloc/SignInWithGoogleFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithGoogleFailureInterface](../wyatt_authentication_bloc/SignInWithGoogleFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithTwitterFailureFirebase](../wyatt_authentication_bloc/SignInWithTwitterFailureFirebase-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignInWithTwitterFailureInterface](../wyatt_authentication_bloc/SignInWithTwitterFailureInterface-class.md) - - - -Thrown during the sign in process if a failure occurs. - - -##### [SignOutFailureFirebase](../wyatt_authentication_bloc/SignOutFailureFirebase-class.md) - - - -Thrown during the sign out process if a failure occurs. - - -##### [SignOutFailureInterface](../wyatt_authentication_bloc/SignOutFailureInterface-class.md) - - - -Thrown during the sign out process if a failure occurs. - - -##### [SignUpWithEmailAndPasswordFailureFirebase](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureFirebase-class.md) - - - -Thrown if during the sign up process if a failure occurs. - - -##### [SignUpWithEmailAndPasswordFailureInterface](../wyatt_authentication_bloc/SignUpWithEmailAndPasswordFailureInterface-class.md) - - - -Thrown if during the sign up process if a failure occurs. - - -##### [UpdateEmailFailureFirebase](../wyatt_authentication_bloc/UpdateEmailFailureFirebase-class.md) - - - -Thrown during the email modification process if a failure occurs. - - -##### [UpdateEmailFailureInterface](../wyatt_authentication_bloc/UpdateEmailFailureInterface-class.md) - - - -Thrown during the email modification process if a failure occurs. - - -##### [UpdatePasswordFailureFirebase](../wyatt_authentication_bloc/UpdatePasswordFailureFirebase-class.md) - - - -Thrown during the password modification process if a failure occurs. - - -##### [UpdatePasswordFailureInterface](../wyatt_authentication_bloc/UpdatePasswordFailureInterface-class.md) - - - -Thrown during the password modification process if a failure occurs. - - -##### [VerifyPasswordResetCodeFailureFirebase](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureFirebase-class.md) - - - -Thrown during the password reset process if a failure occurs. - - -##### [VerifyPasswordResetCodeFailureInterface](../wyatt_authentication_bloc/VerifyPasswordResetCodeFailureInterface-class.md) - - - -Thrown during the password reset process if a failure occurs. - - - - - - - diff --git a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart index a4833f56..2961e7cb 100644 --- a/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart +++ b/packages/wyatt_authentication_bloc/example/lib/core/dependency_injection/get_it.dart @@ -19,8 +19,10 @@ import 'dart:async'; import 'package:example_router/core/enums/dev_mode.dart'; import 'package:example_router/core/flavors/flavor.dart'; import 'package:example_router/firebase_options.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:get_it/get_it.dart'; +import 'package:google_sign_in/google_sign_in.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; final getIt = GetIt.I; diff --git a/packages/wyatt_authentication_bloc/example/pubspec.yaml b/packages/wyatt_authentication_bloc/example/pubspec.yaml index 28001220..e1fbdb31 100644 --- a/packages/wyatt_authentication_bloc/example/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/example/pubspec.yaml @@ -33,6 +33,8 @@ dependencies: go_router: ^5.1.5 firebase_core: ^2.1.1 flutter_bloc: ^8.1.1 + firebase_auth: ^4.2.0 + google_sign_in: ^5.4.2 get_it: ^7.2.0 wyatt_authentication_bloc: diff --git a/packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart b/packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart index e3875066..5211fe72 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/constants/storage.dart @@ -14,9 +14,17 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +/// Default name for storage keys abstract class AuthStorage { + /// Refresh token, `wyattRefreshToken` static const String refreshToken = 'wyattRefreshToken'; + + /// Access token, `wyattAccessToken` static const String accessToken = 'wyattAccessToken'; + + /// User email, `wyattEmail` static const String email = 'wyattEmail'; + + /// User id, `wyattId` static const String id = 'wyattId'; } diff --git a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart index 910887c2..53aef590 100644 --- a/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart +++ b/packages/wyatt_authentication_bloc/lib/src/data/data_sources/local/authentication_firebase_cache_data_source_impl.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_cache_data_source.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; /// {@template authentication_firebase_cache_data_source_impl} diff --git a/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart b/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart index b8c28dca..4ed48bd0 100644 --- a/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart +++ b/packages/wyatt_authentication_bloc/lib/wyatt_authentication_bloc.dart @@ -17,7 +17,4 @@ /// An authentication library for BLoC. library wyatt_authentication_bloc; -export 'package:firebase_auth/firebase_auth.dart'; -export 'package:google_sign_in/google_sign_in.dart'; - export 'src/src.dart'; diff --git a/packages/wyatt_authentication_bloc/pubspec.yaml b/packages/wyatt_authentication_bloc/pubspec.yaml index 429aa524..6c8e1f57 100644 --- a/packages/wyatt_authentication_bloc/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/pubspec.yaml @@ -39,4 +39,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.4.1 + version: ^2.4.1 -- 2.47.2 From 6152436411ecce038526e1212ea32aab460cc7c3 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 23:44:25 +0200 Subject: [PATCH 271/320] test(auth): fix mock --- .../test/authentication/authentication_cubit_test.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart b/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart index f5c26033..5469c51b 100644 --- a/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/authentication/authentication_cubit_test.dart @@ -67,6 +67,9 @@ void main() { when(() => authenticationRepository.sessionStream()).thenAnswer( (_) => const Stream.empty(), ); + when(() => authenticationRepository.checkForCachedAccount()).thenAnswer( + (_) => Future.value(), + ); }); test('initial auth state is `unknown`', () { -- 2.47.2 From b427aff63d74aa6f715bc7809eb1289eb75f4785 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 13 Apr 2023 23:47:19 +0200 Subject: [PATCH 272/320] style: dart format fix --- .../authentication/authentication_cubit.dart | 11 ++++---- .../sign_in/blocs/sign_in_cubit.dart | 7 +++--- .../sign_up/blocs/sign_up_cubit.dart | 3 ++- .../blocs/edit_account_cubit.dart | 5 ++-- .../src/core/exceptions/exceptions_mock.dart | 24 ++++++------------ .../email_verification_cubit_test.dart | 4 +-- .../password_reset_cubit_test.dart | 2 +- .../test/sign_in/sign_in_cubit_test.dart | 4 +-- .../test/sign_up/sign_up_cubit_test.dart | 2 +- .../lib/src/core/mixins/operation.dart | 12 ++++++--- .../wyatt_http_client/lib/src/pipeline.dart | 2 +- .../bars/widgets/navigation_item.dart | 25 ++++++++++--------- 12 files changed, 51 insertions(+), 50 deletions(-) diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart index ba34a213..04153f31 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/authentication_cubit.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/foundation.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_type_utils/wyatt_type_utils.dart'; @@ -24,35 +25,35 @@ class ExampleAuthenticationCubit extends AuthenticationCubit { @override FutureOrResult onReauthenticate( Result result) async { - print('onReauthenticate'); + debugPrint('onReauthenticate'); return const Ok(1); } @override FutureOrResult onRefresh(Result result) { - print('onRefresh'); + debugPrint('onRefresh'); return const Ok(1); } @override FutureOrResult onSignInFromCache(AuthenticationSession session) { - print('onSignInFromCache'); + debugPrint('onSignInFromCache'); return const Ok(1); } @override FutureOrResult onSignOut() { - print('onSignOut'); + debugPrint('onSignOut'); return const Ok(null); } @override FutureOrResult onDelete() { - print('onDelete'); + debugPrint('onDelete'); return const Ok(null); } diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart index f8ad2ba2..0b391624 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_in/blocs/sign_in_cubit.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/foundation.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; @@ -27,7 +28,7 @@ class ExampleSignInCubit extends SignInCubit { @override FutureOrResult onSignInWithEmailAndPassword( Result result, WyattForm form) { - print('onSignInWithEmailAndPassword: ${result.ok?.accessToken}'); + debugPrint('onSignInWithEmailAndPassword: ${result.ok?.accessToken}'); return const Ok(1); } @@ -35,7 +36,7 @@ class ExampleSignInCubit extends SignInCubit { @override FutureOrResult onSignInAnonymously( Result result, WyattForm form) { - print('onSignInAnonymously'); + debugPrint('onSignInAnonymously'); return const Ok(1); } @@ -43,7 +44,7 @@ class ExampleSignInCubit extends SignInCubit { @override FutureOrResult onSignInWithGoogle( Result result, WyattForm form) { - print('onSignInWithGoogle'); + debugPrint('onSignInWithGoogle'); return const Ok(1); } diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_up/blocs/sign_up_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_up/blocs/sign_up_cubit.dart index 3f5bb9a1..93c4509e 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_up/blocs/sign_up_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/authentication/sign_up/blocs/sign_up_cubit.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/foundation.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; @@ -27,7 +28,7 @@ class ExampleSignUpCubit extends SignUpCubit { @override FutureOrResult onSignUpWithEmailAndPassword( Result result, WyattForm form) async { - print('onSignUpWithEmailAndPassword'); + debugPrint('onSignUpWithEmailAndPassword'); return const Ok(1); } diff --git a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_account/blocs/edit_account_cubit.dart b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_account/blocs/edit_account_cubit.dart index 1a5d2b8c..ae964202 100644 --- a/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_account/blocs/edit_account_cubit.dart +++ b/packages/wyatt_authentication_bloc/example/lib/presentation/features/edit_account/blocs/edit_account_cubit.dart @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:flutter/foundation.dart'; import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; @@ -25,7 +26,7 @@ class ExampleEditAccountCubit extends EditAccountCubit { @override FutureOrResult onEmailUpdated( Result result, WyattForm form) async { - print('onEmailUpdated'); + debugPrint('onEmailUpdated'); return const Ok(1); } @@ -33,7 +34,7 @@ class ExampleEditAccountCubit extends EditAccountCubit { @override FutureOrResult onPasswordUpdated( Result result, WyattForm form) async { - print('onPasswordUpdated'); + debugPrint('onPasswordUpdated'); return const Ok(1); } diff --git a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart index ad8b6826..57a960e4 100644 --- a/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart +++ b/packages/wyatt_authentication_bloc/lib/src/core/exceptions/exceptions_mock.dart @@ -91,12 +91,10 @@ class FetchSignInMethodsForEmailFailureMock } /// {@macro sign_in_anonymously_failure} -class SignInAnonymouslyFailureMock - extends SignInAnonymouslyFailureInterface { +class SignInAnonymouslyFailureMock extends SignInAnonymouslyFailureInterface { SignInAnonymouslyFailureMock([String? code, String? msg]) : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); - SignInAnonymouslyFailureMock.fromCode(String code) - : super.fromCode(code) { + SignInAnonymouslyFailureMock.fromCode(String code) : super.fromCode(code) { switch (code) { case 'operation-not-allowed': msg = 'Operation is not allowed. Please contact support.'; @@ -113,8 +111,7 @@ class SignInWithCredentialFailureMock extends SignInWithCredentialFailureInterface { SignInWithCredentialFailureMock([String? code, String? msg]) : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); - SignInWithCredentialFailureMock.fromCode(String code) - : super.fromCode(code) { + SignInWithCredentialFailureMock.fromCode(String code) : super.fromCode(code) { switch (code) { case 'account-exists-with-different-credential': msg = 'Account exists with different credentials.'; @@ -148,16 +145,14 @@ class SignInWithCredentialFailureMock } /// {@macro sign_in_with_google_failure} -class SignInWithGoogleFailureMock - extends SignInWithCredentialFailureMock +class SignInWithGoogleFailureMock extends SignInWithCredentialFailureMock implements SignInWithGoogleFailureInterface { SignInWithGoogleFailureMock([super.code, super.msg]); SignInWithGoogleFailureMock.fromCode(super.code) : super.fromCode(); } /// {@macro sign_in_with_facebook_failure} -class SignInWithFacebookFailureMock - extends SignInWithCredentialFailureMock +class SignInWithFacebookFailureMock extends SignInWithCredentialFailureMock implements SignInWithFacebookFailureInterface { SignInWithFacebookFailureMock([super.code, super.msg]); SignInWithFacebookFailureMock.fromCode(super.code) : super.fromCode(); @@ -171,8 +166,7 @@ class SignInWithAppleFailureMock extends SignInWithCredentialFailureMock } /// {@macro sign_in_with_twitter_failure} -class SignInWithTwitterFailureMock - extends SignInWithCredentialFailureMock +class SignInWithTwitterFailureMock extends SignInWithCredentialFailureMock implements SignInWithAppleFailureInterface { SignInWithTwitterFailureMock([super.code, super.msg]); SignInWithTwitterFailureMock.fromCode(super.code) : super.fromCode(); @@ -183,8 +177,7 @@ class SignInWithEmailLinkFailureMock extends SignInWithEmailLinkFailureInterface { SignInWithEmailLinkFailureMock([String? code, String? msg]) : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); - SignInWithEmailLinkFailureMock.fromCode(String code) - : super.fromCode(code) { + SignInWithEmailLinkFailureMock.fromCode(String code) : super.fromCode(code) { switch (code) { case 'expired-action-code': msg = 'Action code has expired.'; @@ -270,8 +263,7 @@ class VerifyPasswordResetCodeFailureMock VerifyPasswordResetCodeFailureMock([String? code, String? msg]) : super(code ?? 'unknown', msg ?? 'An unknown error occurred.'); - VerifyPasswordResetCodeFailureMock.fromCode(super.code) - : super.fromCode(); + VerifyPasswordResetCodeFailureMock.fromCode(super.code) : super.fromCode(); } /// {@macro refresh_failure} diff --git a/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart b/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart index c6b944c5..29e0c9b4 100644 --- a/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/email_verification/email_verification_cubit_test.dart @@ -121,7 +121,7 @@ void main() { 'emits failure', setUp: () { when(() => authenticationRepository.sendEmailVerification()) - .thenAnswer((_) async => Err(ServerException('erreur'))); + .thenAnswer((_) async => const Err(ServerException('erreur'))); }, build: () => EmailVerificationCubit( authenticationRepository: authenticationRepository, @@ -222,7 +222,7 @@ void main() { 'emits failure on refresh error', setUp: () { when(() => authenticationRepository.refresh()) - .thenAnswer((_) async => Err(ServerException('erreur'))); + .thenAnswer((_) async => const Err(ServerException('erreur'))); }, build: () => EmailVerificationCubit( authenticationRepository: authenticationRepository, diff --git a/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart b/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart index a668a948..11c98b59 100644 --- a/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/password_reset/password_reset_cubit_test.dart @@ -272,7 +272,7 @@ void main() { () => authenticationRepository.sendPasswordResetEmail( email: any(named: 'email'), ), - ).thenAnswer((_) async => Err(ServerException())); + ).thenAnswer((_) async => const Err(ServerException())); when( () => formRepository.accessForm(AuthFormName.passwordResetForm), ).thenAnswer( diff --git a/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart b/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart index 62d9d5b9..bc517187 100644 --- a/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/sign_in/sign_in_cubit_test.dart @@ -435,7 +435,7 @@ void main() { email: any(named: 'email'), password: any(named: 'password'), ), - ).thenAnswer((_) async => Err(ServerException())); + ).thenAnswer((_) async => const Err(ServerException())); when( () => formRepository.accessForm(AuthFormName.signInForm), ).thenAnswer( @@ -615,7 +615,7 @@ void main() { setUp: () { when( () => authenticationRepository.signInAnonymously(), - ).thenAnswer((_) async => Err(ServerException())); + ).thenAnswer((_) async => const Err(ServerException())); }, build: () => SignInCubit( authenticationRepository: authenticationRepository, diff --git a/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart b/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart index 7524bc0b..d437c339 100644 --- a/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart +++ b/packages/wyatt_authentication_bloc/test/sign_up/sign_up_cubit_test.dart @@ -406,7 +406,7 @@ void main() { email: any(named: 'email'), password: any(named: 'password'), ), - ).thenAnswer((_) async => Err(ServerException())); + ).thenAnswer((_) async => const Err(ServerException())); when( () => formRepository.accessForm(AuthFormName.signUpForm), ).thenAnswer( diff --git a/packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart b/packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart index 7a1b9b09..dbfc08ff 100644 --- a/packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart +++ b/packages/wyatt_crud_bloc/lib/src/core/mixins/operation.dart @@ -18,13 +18,17 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; /// Defines every write operation in CRUD. -mixin CreateOperation on AsyncUseCase {} +mixin CreateOperation + on AsyncUseCase {} /// Defines every read operation in CRUD. -mixin ReadOperation on AsyncUseCase {} +mixin ReadOperation + on AsyncUseCase {} /// Defines every update operation in CRUD. -mixin UpdateOperation on AsyncUseCase {} +mixin UpdateOperation + on AsyncUseCase {} /// Defines every delete operation in CRUD. -mixin DeleteOperation on AsyncUseCase {} +mixin DeleteOperation + on AsyncUseCase {} diff --git a/packages/wyatt_http_client/lib/src/pipeline.dart b/packages/wyatt_http_client/lib/src/pipeline.dart index 7e1c2900..d68e7e39 100644 --- a/packages/wyatt_http_client/lib/src/pipeline.dart +++ b/packages/wyatt_http_client/lib/src/pipeline.dart @@ -29,7 +29,7 @@ class Pipeline { /// {@macro pipeline} Pipeline.fromIterable(Iterable middlewares) : _middlewares = middlewares.toList(); - + final List _middlewares; /// The length of the [Pipeline]. diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart index 8b608cb0..5750eb26 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart @@ -38,7 +38,7 @@ class NavigationItem extends StatelessWidget { context .themeExtension() ?.selectedIndicatorHeight, - // TODO: move default value + // TODO(wyatt): move default value 5, ], valueValidator: (value) => value != null, @@ -49,7 +49,7 @@ class NavigationItem extends StatelessWidget { context .themeExtension() ?.selectedIndicatorWidth, - // TODO: move default value + // TODO(wyatt): move default value 70, ], valueValidator: (value) => value != null, @@ -72,16 +72,17 @@ class NavigationItem extends StatelessWidget { ConstrainedBox( constraints: BoxConstraints( minWidth: ThemeHelper.getThemeElement( - [ - context - .themeExtension() - ?.selectedIndicatorWidth, - // TODO: move default value - 70, - ], - valueValidator: (value) => value != null, - transform: (value) => value, - ) ?? double.infinity, + [ + context + .themeExtension() + ?.selectedIndicatorWidth, + // TODO(wyatt): move default value + 70, + ], + valueValidator: (value) => value != null, + transform: (value) => value, + ) ?? + double.infinity, ), child: SizedBox( height: 50, -- 2.47.2 From 5e6de11e3918a66271407fffd7c526f2ba28f8fd Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 00:07:43 +0200 Subject: [PATCH 273/320] refactor(cw_gen)!: rename file --- .../wyatt_component_copy_with_extension.dart | 22 +++++++++++++++++++ .../lib/wyatt_component_copy_with_gen.dart | 21 ++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart create mode 100644 packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart diff --git a/packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart b/packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart new file mode 100644 index 00000000..9ba9c518 --- /dev/null +++ b/packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart @@ -0,0 +1,22 @@ +// 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 . + +/// Extension for component copy with feature +library component_copy_with_extension; + +export './src/domain/domain.dart'; +export 'src/component_copy_with_extension.dart'; +export 'src/component_proxy_extension.dart'; diff --git a/packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart b/packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart new file mode 100644 index 00000000..6e51cdd6 --- /dev/null +++ b/packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart @@ -0,0 +1,21 @@ +// 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 . + +/// Generator for copywith method for components +library component_copy_with_gen; + +export 'src/builder.dart'; +export 'src/generators/component_copy_with_generator.dart'; -- 2.47.2 From e08ae9784b89ffdf8bdcf74bc7a5f22a118e3cb2 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 00:08:14 +0200 Subject: [PATCH 274/320] fix: remove wyatt arch ios example --- README.md | 31 +- melos.yaml | 5 +- .../wyatt_architecture/example/ios/.gitignore | 34 -- .../ios/Flutter/AppFrameworkInfo.plist | 26 - .../example/ios/Flutter/Debug.xcconfig | 2 - .../example/ios/Flutter/Release.xcconfig | 2 - .../wyatt_architecture/example/ios/Podfile | 41 -- .../ios/Runner.xcodeproj/project.pbxproj | 552 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 87 --- .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../example/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 122 ---- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - .../example/ios/Runner/Info.plist | 51 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - .../lib/components/custom_app_bar.dart | 2 +- .../lib/components/custom_bottom_bar.dart | 2 +- .../lib/components/custom_error_widget.dart | 2 +- .../lib/components/custom_loading_widget.dart | 2 +- .../example/lib/main.dart | 2 +- .../lib/component_copy_with_extension.dart | 22 - .../src/component_copy_with_extension.dart | 2 +- .../example/lib/custom_top_bar_example.dart | 2 +- .../lib/component_copy_with_gen.dart | 21 - .../component_copy_with_generator.dart | 2 +- .../generators/component_proxy_generator.dart | 2 +- .../lib/components/custom_app_bar.dart | 2 +- .../lib/components/custom_bottom_bar.dart | 2 +- .../lib/components/custom_error_widget.dart | 2 +- .../lib/components/custom_loading_widget.dart | 2 +- .../bars/bottom_navigation_bar_component.dart | 2 +- .../entities/bars/top_app_bar_component.dart | 2 +- .../bars/top_navigation_bar_component.dart | 2 +- .../file_selection_button_component.dart | 2 +- .../buttons/flat_button_component.dart | 2 +- .../buttons/simple_icon_button_component.dart | 2 +- .../buttons/symbol_button_component.dart | 2 +- .../cards/information_card_component.dart | 2 +- .../cards/portfolio_card_component.dart | 2 +- .../entities/cards/quote_card_component.dart | 2 +- .../entities/cards/skill_card_component.dart | 2 +- .../entities/error_widget_component.dart | 2 +- .../entities/loader/loader_component.dart | 2 +- .../entities/loading_widget_component.dart | 2 +- .../rich_text_builder_component.dart | 2 +- .../text_inputs/text_input_component.dart | 2 +- .../lib/src/components/bars/top_app_bar.dart | 2 +- .../components/bars/top_navigation_bar.dart | 2 +- .../file_selection_button.dart | 2 +- .../buttons/flat_button/flat_button.dart | 2 +- .../simple_icon_button.dart | 2 +- .../buttons/symbol_button/symbol_button.dart | 2 +- .../information_card/information_card.dart | 2 +- .../cards/portfolio_card/portfolio_card.dart | 2 +- .../cards/quote_card/quote_card.dart | 2 +- .../cards/skill_card/skill_card.dart | 2 +- .../lib/src/components/loader/loader.dart | 2 +- .../rich_text_builder/rich_text_builder.dart | 2 +- .../components/text_inputs/text_input.dart | 2 +- .../lib/components/custom_app_bar.dart | 2 +- .../custom_bottom_navigation_bar.dart | 2 +- 87 files changed, 64 insertions(+), 1174 deletions(-) delete mode 100644 packages/wyatt_architecture/example/ios/.gitignore delete mode 100644 packages/wyatt_architecture/example/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 packages/wyatt_architecture/example/ios/Flutter/Debug.xcconfig delete mode 100644 packages/wyatt_architecture/example/ios/Flutter/Release.xcconfig delete mode 100644 packages/wyatt_architecture/example/ios/Podfile delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_architecture/example/ios/Runner/AppDelegate.swift delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Info.plist delete mode 100644 packages/wyatt_architecture/example/ios/Runner/Runner-Bridging-Header.h delete mode 100644 packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart delete mode 100644 packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart diff --git a/README.md b/README.md index 8b78891e..debda7d1 100644 --- a/README.md +++ b/README.md @@ -36,23 +36,23 @@ -- [About](#about) -- [Contribution](#contribution) - - [Prerequisite](#prerequisite) - - [Create a new package](#create-a-new-package) +* [About](#about) +* [Contribution](#contribution) + + [Prerequisite](#prerequisite) + + [Create a new package](#create-a-new-package) - [Naming](#naming) - - [Create issues](#create-issues) - - [Branches](#branches) - - [Commits](#commits) + + [Create issues](#create-issues) + + [Branches](#branches) + + [Commits](#commits) - [Before pushing](#before-pushing) - - [Merge your work](#merge-your-work) - - [Update version.](#update-version) - - [Publish your package](#publish-your-package) - - [Badging](#badging) -- [Usage](#usage) -- [Simple work flow diagramm](#simple-work-flow-diagramm) -- [Status](#status) -- [License](#license) + + [Merge your work](#merge-your-work) + + [Update version.](#update-version) + + [Publish your package](#publish-your-package) + + [Badging](#badging) +* [Usage](#usage) +* [Simple work flow diagramm](#simple-work-flow-diagramm) +* [Status](#status) +* [License](#license) @@ -188,6 +188,7 @@ 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:validate-local # same as above but without Drone env variables melos run publish # this will publish packages ``` diff --git a/melos.yaml b/melos.yaml index 627be29e..2af93a3d 100644 --- a/melos.yaml +++ b/melos.yaml @@ -70,10 +70,13 @@ scripts: publish:validate: run: melos publish --diff="origin/$DRONE_COMMIT_BRANCH...HEAD" --yes + + publish:validate-local: + run: melos publish --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. postclean: > - melos exec -c 6 -- "flutter clean" \ No newline at end of file + melos exec -c 6 -- "flutter clean" diff --git a/packages/wyatt_architecture/example/ios/.gitignore b/packages/wyatt_architecture/example/ios/.gitignore deleted file mode 100644 index 7a7f9873..00000000 --- a/packages/wyatt_architecture/example/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/packages/wyatt_architecture/example/ios/Flutter/AppFrameworkInfo.plist b/packages/wyatt_architecture/example/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 9625e105..00000000 --- a/packages/wyatt_architecture/example/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 11.0 - - diff --git a/packages/wyatt_architecture/example/ios/Flutter/Debug.xcconfig b/packages/wyatt_architecture/example/ios/Flutter/Debug.xcconfig deleted file mode 100644 index ec97fc6f..00000000 --- a/packages/wyatt_architecture/example/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/packages/wyatt_architecture/example/ios/Flutter/Release.xcconfig b/packages/wyatt_architecture/example/ios/Flutter/Release.xcconfig deleted file mode 100644 index c4855bfe..00000000 --- a/packages/wyatt_architecture/example/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/packages/wyatt_architecture/example/ios/Podfile b/packages/wyatt_architecture/example/ios/Podfile deleted file mode 100644 index 88359b22..00000000 --- a/packages/wyatt_architecture/example/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '11.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.pbxproj b/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 080f6a48..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,552 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - 9D08BF82920EBA33F23464F5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E946B0F0AD8828F4A7866A40 /* Pods_Runner.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 06DDDDC67790BA3B67292B88 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 082A1BEB8CE5B02C4AABB40D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 0B7103FC187D9782DF68E292 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E946B0F0AD8828F4A7866A40 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9D08BF82920EBA33F23464F5 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 2C514ED236D54DCA1D9DFFC4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E946B0F0AD8828F4A7866A40 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - AD70810057DA8269974A316F /* Pods */, - 2C514ED236D54DCA1D9DFFC4 /* Frameworks */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - AD70810057DA8269974A316F /* Pods */ = { - isa = PBXGroup; - children = ( - 0B7103FC187D9782DF68E292 /* Pods-Runner.debug.xcconfig */, - 082A1BEB8CE5B02C4AABB40D /* Pods-Runner.release.xcconfig */, - 06DDDDC67790BA3B67292B88 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - FBD8EC5BAF7097A0A31AD63E /* [CP] Check Pods Manifest.lock */, - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 374960F8815E0EA685AB7576 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 374960F8815E0EA685AB7576 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - FBD8EC5BAF7097A0A31AD63E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 6Z5P8GG96U; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 6Z5P8GG96U; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 6Z5P8GG96U; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/wyatt_architecture/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index c87d15a3..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/wyatt_architecture/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/wyatt_architecture/example/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_architecture/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_architecture/example/ios/Runner/AppDelegate.swift b/packages/wyatt_architecture/example/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a..00000000 --- a/packages/wyatt_architecture/example/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fab..00000000 --- a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10932 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 diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0bca859a3f474b03065bef75ba58a9e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7edb86cdfe0d15b4b0d98334a86163658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 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 diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5cee1c98386d13b17e89f719e83555b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831 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 diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b..00000000 --- a/packages/wyatt_architecture/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/packages/wyatt_architecture/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/wyatt_architecture/example/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7..00000000 --- a/packages/wyatt_architecture/example/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/wyatt_architecture/example/ios/Runner/Base.lproj/Main.storyboard b/packages/wyatt_architecture/example/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516..00000000 --- a/packages/wyatt_architecture/example/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/wyatt_architecture/example/ios/Runner/Info.plist b/packages/wyatt_architecture/example/ios/Runner/Info.plist deleted file mode 100644 index 7f553465..00000000 --- a/packages/wyatt_architecture/example/ios/Runner/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Example - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - example - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/packages/wyatt_architecture/example/ios/Runner/Runner-Bridging-Header.h b/packages/wyatt_architecture/example/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a56..00000000 --- a/packages/wyatt_architecture/example/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart index 1ca3cab4..6e9c8c1c 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_app_bar.g.dart'; diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart index 34417c03..5a213cd8 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_bottom_bar.g.dart'; diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart index 5d9cfee7..bbd5ee99 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_error_widget.g.dart'; diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart index fe53a631..bfc75ab2 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_loading_widget.g.dart'; diff --git a/packages/wyatt_component_copy_with_extension/example/lib/main.dart b/packages/wyatt_component_copy_with_extension/example/lib/main.dart index f728d06c..25f5fbc8 100644 --- a/packages/wyatt_component_copy_with_extension/example/lib/main.dart +++ b/packages/wyatt_component_copy_with_extension/example/lib/main.dart @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; @ComponentProxyExtension() class BasicComponentAnnotationExemple {} diff --git a/packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart b/packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart deleted file mode 100644 index 9ba9c518..00000000 --- a/packages/wyatt_component_copy_with_extension/lib/component_copy_with_extension.dart +++ /dev/null @@ -1,22 +0,0 @@ -// 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 . - -/// Extension for component copy with feature -library component_copy_with_extension; - -export './src/domain/domain.dart'; -export 'src/component_copy_with_extension.dart'; -export 'src/component_proxy_extension.dart'; diff --git a/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart b/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart index a71e23bf..ec55aa5f 100644 --- a/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart +++ b/packages/wyatt_component_copy_with_extension/lib/src/component_copy_with_extension.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:meta/meta_meta.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; /// {@template component_copy_with_extension} /// This annotation class is used to annotate the implementation of components diff --git a/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.dart b/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.dart index 4210f8a1..b9404eab 100644 --- a/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.dart +++ b/packages/wyatt_component_copy_with_gen/example/lib/custom_top_bar_example.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_top_bar_example.g.dart'; diff --git a/packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart b/packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart deleted file mode 100644 index 6e51cdd6..00000000 --- a/packages/wyatt_component_copy_with_gen/lib/component_copy_with_gen.dart +++ /dev/null @@ -1,21 +0,0 @@ -// 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 . - -/// Generator for copywith method for components -library component_copy_with_gen; - -export 'src/builder.dart'; -export 'src/generators/component_copy_with_generator.dart'; diff --git a/packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart index 0c9994cb..d64b2b25 100644 --- a/packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart +++ b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_copy_with_generator.dart @@ -19,7 +19,7 @@ import 'dart:async'; import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; class ComponentCopyWithGenerator extends GeneratorForAnnotation { diff --git a/packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart index f8d71a9b..3dd4f79a 100644 --- a/packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart +++ b/packages/wyatt_component_copy_with_gen/lib/src/generators/component_proxy_generator.dart @@ -19,7 +19,7 @@ import 'dart:async'; import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:source_gen/source_gen.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; class ComponentProxyGenerator extends GeneratorForAnnotation { diff --git a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart index 48df99b4..e14c228f 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_app_bar.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_app_bar.g.dart'; diff --git a/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart b/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart index b340eb14..e3a7937f 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_bottom_bar.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_bottom_bar.g.dart'; diff --git a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart index 4eaa2406..cd7fc7d3 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_error_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_error_widget.g.dart'; diff --git a/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart b/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart index 57bdf1b1..2c7489f6 100644 --- a/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart +++ b/packages/wyatt_ui_components/example/lib/components/custom_loading_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_loading_widget.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.dart index af313e63..99b5f93b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bottom_navigation_bar_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart index d77be6f9..4e9dc220 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_app_bar_component.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'top_app_bar_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart index fbccee73..8abde68c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'top_navigation_bar_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart index 9bbf1c19..b229a2f9 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'file_selection_button_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index e0615d21..d2074eaf 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'flat_button_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart index a8fad5be..bdf15a67 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'simple_icon_button_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart index a68caa7e..4be4759b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'symbol_button_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart index 8e90ecc5..2260ef59 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/information_card_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart index 19fbc732..6579b04c 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/portfolio_card_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart index 1c96157f..e6c565ed 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/quote_card_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart index 555c126e..a97570f2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/cards/skill_card_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/domain/entities/cards/card_component.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart index 0764d0d6..21980ea3 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/error_widget_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'error_widget_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart index d30fefda..65f9da6e 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loader/loader_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'loader_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart index 41783f4e..e9a76662 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/loading_widget_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart index a878979e..978162ed 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/rich_text_builder/rich_text_builder_component.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/widgets.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'rich_text_builder_component.g.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.dart index 35ed7e9f..cbb688f2 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/text_inputs/text_input_component.dart @@ -19,7 +19,7 @@ import 'dart:ui'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'text_input_component.g.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart index 70c7a669..dc9cad81 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; part 'top_app_bar.g.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart index 36cabf61..7b089b9d 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/bars/widgets/navigation_item.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart index 9ef86fe4..3c1d7786 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart' hide ButtonStyle; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index e1bf0b7d..111a6e46 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart' hide ButtonStyle; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_theme_resolver.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart index d13ee298..6db08d03 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart' hide ButtonStyle; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart'; import 'package:wyatt_ui_kit/src/components/buttons/simple_icon_button/simple_icon_screen.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart index aff476bc..98b26980 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart' hide ButtonStyle; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_screen.dart'; import 'package:wyatt_ui_kit/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart index 199d6421..bcd22e82 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/information_card/information_card.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_horizontal_header.dart'; import 'package:wyatt_ui_kit/src/components/cards/information_card/widgets/information_card_vertical_header.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart index 531050da..aa37c08c 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/portfolio_card/portfolio_card.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart'; import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart index 8b27ca1a..93a44943 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/quote_card/quote_card.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_text.dart'; import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart index bf8bd339..3fd7a206 100644 --- a/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart +++ b/packages/wyatt_ui_kit/lib/src/components/cards/skill_card/skill_card.dart @@ -16,7 +16,7 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_header.dart'; import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_skills.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart index 16bc25b6..3c9bd46e 100644 --- a/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart +++ b/packages/wyatt_ui_kit/lib/src/components/loader/loader.dart @@ -18,7 +18,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart index c278582d..e5bd8b6f 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart index b75aab7d..8f89713b 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart @@ -18,7 +18,7 @@ import 'dart:ui'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/text_inputs/text_input_screen.dart'; part 'text_input.g.dart'; diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart index a11def2b..9c7da189 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_app_bar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_app_bar.g.dart'; diff --git a/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart b/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart index 70520c8f..046bf666 100644 --- a/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart +++ b/packages/wyatt_ui_layout/example/lib/components/custom_bottom_navigation_bar.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; +import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart'; part 'custom_bottom_navigation_bar.g.dart'; -- 2.47.2 From 10117ab39b134e67b3f278e3bce3f7180fac00c8 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 00:12:52 +0200 Subject: [PATCH 275/320] chore(release): publish packages - wyatt_analysis@2.4.2 - wyatt_architecture@0.2.0 - wyatt_authentication_bloc@0.5.0 - wyatt_bloc_helper@2.0.1 - wyatt_bloc_layout@0.0.2 - wyatt_component_copy_with_extension@2.0.0 - wyatt_component_copy_with_gen@2.0.0 - wyatt_crud_bloc@0.1.1 - wyatt_form_bloc@0.2.0+3 - wyatt_http_client@2.0.0 - wyatt_i18n@2.0.0 - wyatt_type_utils@0.0.5 - wyatt_ui_components@0.1.0 - wyatt_ui_kit@2.0.0 - wyatt_ui_layout@0.0.2 --- CHANGELOG.md | 306 ++++++++++++++++++ packages/wyatt_analysis/CHANGELOG.md | 5 + packages/wyatt_analysis/pubspec.yaml | 2 +- packages/wyatt_architecture/CHANGELOG.md | 11 + .../wyatt_architecture/example/pubspec.yaml | 8 +- packages/wyatt_architecture/pubspec.yaml | 6 +- .../wyatt_authentication_bloc/CHANGELOG.md | 27 ++ .../example/pubspec.yaml | 6 +- .../wyatt_authentication_bloc/pubspec.yaml | 10 +- packages/wyatt_bloc_helper/CHANGELOG.md | 4 + packages/wyatt_bloc_helper/pubspec.yaml | 4 +- packages/wyatt_bloc_layout/CHANGELOG.md | 22 ++ .../wyatt_bloc_layout/example/pubspec.yaml | 10 +- packages/wyatt_bloc_layout/pubspec.yaml | 12 +- .../CHANGELOG.md | 9 + .../example/pubspec.yaml | 2 +- .../pubspec.yaml | 4 +- .../CHANGELOG.md | 14 + .../example/pubspec.yaml | 2 +- .../pubspec.yaml | 6 +- packages/wyatt_crud_bloc/CHANGELOG.md | 6 + packages/wyatt_crud_bloc/pubspec.yaml | 8 +- packages/wyatt_form_bloc/CHANGELOG.md | 5 + packages/wyatt_form_bloc/pubspec.yaml | 8 +- packages/wyatt_http_client/CHANGELOG.md | 7 + packages/wyatt_http_client/pubspec.yaml | 4 +- packages/wyatt_i18n/CHANGELOG.md | 14 + packages/wyatt_i18n/example/pubspec.yaml | 2 +- packages/wyatt_i18n/pubspec.yaml | 10 +- packages/wyatt_type_utils/CHANGELOG.md | 6 + .../wyatt_type_utils/example/pubspec.yaml | 2 +- packages/wyatt_type_utils/pubspec.yaml | 4 +- packages/wyatt_ui_components/CHANGELOG.md | 77 +++++ .../wyatt_ui_components/example/pubspec.yaml | 2 +- packages/wyatt_ui_components/pubspec.yaml | 8 +- packages/wyatt_ui_kit/CHANGELOG.md | 62 ++++ packages/wyatt_ui_kit/example/pubspec.yaml | 2 +- packages/wyatt_ui_kit/pubspec.yaml | 12 +- packages/wyatt_ui_layout/CHANGELOG.md | 23 ++ packages/wyatt_ui_layout/example/pubspec.yaml | 2 +- packages/wyatt_ui_layout/pubspec.yaml | 6 +- 41 files changed, 669 insertions(+), 71 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7794040e..2276eae6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,312 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2023-04-14 + +### Changes + +--- + +Packages with breaking changes: + + - [`wyatt_architecture` - `v0.2.0`](#wyatt_architecture---v020) + - [`wyatt_authentication_bloc` - `v0.5.0`](#wyatt_authentication_bloc---v050) + - [`wyatt_component_copy_with_extension` - `v2.0.0`](#wyatt_component_copy_with_extension---v200) + - [`wyatt_component_copy_with_gen` - `v2.0.0`](#wyatt_component_copy_with_gen---v200) + - [`wyatt_http_client` - `v2.0.0`](#wyatt_http_client---v200) + - [`wyatt_i18n` - `v2.0.0`](#wyatt_i18n---v200) + - [`wyatt_ui_components` - `v0.1.0`](#wyatt_ui_components---v010) + - [`wyatt_ui_kit` - `v2.0.0`](#wyatt_ui_kit---v200) + +Packages with other changes: + + - [`wyatt_analysis` - `v2.4.2`](#wyatt_analysis---v242) + - [`wyatt_bloc_helper` - `v2.0.1`](#wyatt_bloc_helper---v201) + - [`wyatt_bloc_layout` - `v0.0.2`](#wyatt_bloc_layout---v002) + - [`wyatt_crud_bloc` - `v0.1.1`](#wyatt_crud_bloc---v011) + - [`wyatt_form_bloc` - `v0.2.0+3`](#wyatt_form_bloc---v0203) + - [`wyatt_type_utils` - `v0.0.5`](#wyatt_type_utils---v005) + - [`wyatt_ui_layout` - `v0.0.2`](#wyatt_ui_layout---v002) + +--- + +#### `wyatt_architecture` - `v0.2.0` + + - **REFACTOR**: move to dart package. + - **FIX**: remove wyatt arch ios example. + - **DOCS**: change some documentation. + - **DOCS**: add documentation. + - **DOCS**: update readme. + - **BREAKING** **REFACTOR**: fix cascade dart good practices + docs. + +#### `wyatt_authentication_bloc` - `v0.5.0` + + - **REFACTOR**: remove cross package export. + - **REFACTOR**: remove cross package export. + - **REFACTOR**: use custom user changes stream. + - **REFACTOR**: make signup/in, passwordreset cubit extendable. + - **FIX**: make sur access token is available on every steps. + - **FIX**: anonymous sign in event. + - **FIX**: initialize account stream transformer. + - **FIX**: stream on null account. + - **FIX**: handle empty provider list (closes #113). + - **FEAT**: add mock + local storage. + - **FEAT**: remove session wrapper for AuthenticationSession. + - **FEAT**: add account edit cubit. + - **FEAT**: add custom routine, and documentation. + - **FEAT**: add full event support. + - **DOCS**: update example with multiple data sources. + - **DOCS**: add full dartdoc. + - **DOCS**: add wiki script. + - **DOCS**: update example. + - **DOCS**: update example. + - **BREAKING** **REFACTOR**: split data sources (cache, session, external). + - **BREAKING** **REFACTOR**: use mixins, and remove use of onSignUpSuccess. + - **BREAKING** **FEAT**: add event type on auth change. + +#### `wyatt_component_copy_with_extension` - `v2.0.0` + + - **FIX**: remove wyatt arch ios example. + - **FEAT**: add class annotation for component code generators. + - **DOCS**: add some documentation. + - **BREAKING** **REFACTOR**: rename file. + +#### `wyatt_component_copy_with_gen` - `v2.0.0` + + - **REFACTOR**: migrate components using code generator packages (#115). + - **FIX**: remove wyatt arch ios example. + - **FIX**: change example to be compatible with new AppTopBar and TextWrapper. + - **FIX**: fix textwrapper. + - **FIX**: update example (#118). + - **FIX**: copywith method takes non nullable fields too (#118). + - **FEAT**: add generators for components proxy and mixins to enable copywith methods. + - **DOCS**: add some documentation. + - **BREAKING** **REFACTOR**: rename file. + +#### `wyatt_http_client` - `v2.0.0` + + - **DOCS**: add simple example. + - **BREAKING** **REFACTOR**: fix cascade dart good practices + docs. + +#### `wyatt_i18n` - `v2.0.0` + + - **FEAT**: change gitignore for symbolic link. + - **FEAT**: add i18n delegate + example. + - **FEAT**: implements network data source. + - **FEAT**: add default locale. + - **FEAT**: add getter/setter. + - **FEAT**: add ICU parser. + - **FEAT**: add arb, json and yaml parsers. + - **DOCS**: add docstrings on every classes. + - **BREAKING** **FEAT**: rename few files + add clearer documentation. + +#### `wyatt_ui_components` - `v0.1.0` + + - **REFACTOR**: update example (#92). + - **REFACTOR**: replace ThemeResolver by ThemeHelper in Loader / RichTextBuilder (closes #148). + - **REFACTOR**: migrate top nav bar using generify top bar. + - **REFACTOR**: move borderColors type. + - **REFACTOR**: add CopyWith method in ThemeStyle. + - **REFACTOR**: update colors using Multicolor class (#138). + - **REFACTOR**: rework text gradient and text wrapper. + - **REFACTOR**: remove CopyWith extension. + - **REFACTOR**: move extensions. + - **REFACTOR**: merge flat and outline buttons in only one style. + - **REFACTOR**: update example (close #115). + - **REFACTOR**: migrate components using code generator packages (#115). + - **REFACTOR**: update example (#92). + - **FIX**: fix extra value in compute extension function. + - **FIX**: remove darkmode enable field in cards. + - **FIX**: add loader to theme data (close #152). + - **FIX**: inverse merge in TextInputStyle. + - **FIX**: use multicolor in cards. + - **FIX**: fix MultiColor lerp method. + - **FIX**: remove null check operator in RichTextBuilder component. + - **FIX**: remove wyatt arch ios example. + - **FIX**: add style merge in Theme Resolver. + - **FIX**: generate new files after generator fixes (close #118). + - **FIX**: move theme_resolver in compnoent to fix code generation. + - **FIX**: add generated component with theme resolver. + - **FEAT**: add text input components, theme extension and worked on utils (#138). + - **FEAT**: add isColor getter in multicolor helper. + - **FEAT**: add loading & error widget to component theme (close #69). + - **FEAT**: add text input abstract class (#138). + - **FEAT**: add rich text builder / parser. + - **FEAT**: update example & move configure function (#69). + - **FEAT**: add top navigation bar component to theme data. + - **FEAT**: add extra state. + - **FEAT**: update layouts to allow more control on components. + - **FEAT**: add some useful text customization in TextWrapper (closes #149). + - **FEAT**: update attributs and proxy most of appbar attributs. + - **FEAT**: add new components to theme data (close #152). + - **FEAT**: move style implementation from component to ui_kit with theme resolver. + - **FEAT**: add copyWith gen and make button style lerping. + - **FEAT**: make component theme data copyable. + - **FEAT**: add loader component and style. + - **FEAT**: add file selection component. + - **FEAT**: add simple icon button and dimension style. + - **FEAT**: add symbol button. + - **FEAT**: implement top nav bar. + - **FEAT**: add tapped control state. + - **FEAT**: add MultiColor util class. + - **FEAT**: create new package to split components and layouts. + - **FEAT**: add button components. + - **FEAT**: make app bar leading & actions customizable. + - **FEAT**: add quote / skill / portfolio cards (#126). + - **FEAT**: add gradient attribut to text wrapper. + - **FEAT**: add string extension to easely wrap text. + - **FEAT**: export cards #126. + - **FEAT**: add portfolio & skill cards #126. + - **FEAT**: make text wrapper constructor constant. + - **FEAT**: add text wrapper instead of String/Widget for Texts. + - **FEAT**: make fields nullable and not required in quote card. + - **FEAT**: add card theme extension, fix bugs & update example (close #126). + - **FEAT**: export components and add license header. + - **FEAT**: add information_card & quote_card (#126). + - **FEAT**: add Top Navigation Bar Component. + - **FEAT**: generate new skillcard component. + - **FEAT**: generify bars. + - **FEAT**: rework on structure using new components and layouts. + - **FEAT**: add centerTitle property to app bar component. + - **FEAT**: make component data field nullable (#92). + - **FEAT**: add lerp on multicolor. + - **FEAT**: add flat/outlined button styles. + - **DOCS**: add some documentation + readme. + - **DOCS**: update models. + - **BREAKING** **REFACTOR**: remove bloc export in buttons to be state management solution agnostic (closes #147). + +#### `wyatt_ui_kit` - `v2.0.0` + + - **REFACTOR**: use tapped state and merged styles. + - **REFACTOR**: remove selection area of rich text, its not his reponsibility. + - **REFACTOR**: replace ThemeResolver by ThemeHelper in Loader / RichTextBuilder (closes #148). + - **REFACTOR**: adapt ui_kit. + - **REFACTOR**: use ThemeHelper in cards. + - **REFACTOR**: rename GradientBoxBorder. + - **REFACTOR**: update textinput component using borderColors as Color. + - **REFACTOR**: rework text gradient and text wrapper. + - **REFACTOR**: move exportable bloc from mixin to widget. + - **REFACTOR**: make resolve private and dotter child a widget. + - **FIX**: fix text align, add selection and update example for rich text builder. + - **FIX**: remove useless file. + - **FIX**: fix tab action focus on textinputs. + - **FIX**: inverse merge in TextInputStyle. + - **FIX**: use multicolor in cards. + - **FIX**: fix export theme file. + - **FIX**: remove wyatt arch ios example. + - **FIX**: remove null check operator in RichTextBuilder component. + - **FIX**: remove null check operator in Loader component. + - **FIX**: fix conflicts in card component after rebase. + - **FIX**: move theme_resolver in compnoent to fix code generation. + - **FIX**: make card core stateless. + - **FIX**: add cacheExtend as a trade-off in listview example. + - **FIX**: add local font assets + compress images. + - **FEAT**: make top bar selector customizable. + - **FEAT**: update example (#138). + - **FEAT**: implemement text inputs (#138). + - **FEAT**: add text input theme extension (#138). + - **FEAT**: add some useful text customization in TextWrapper (closes #149). + - **FEAT**: implement rich text builder (closes #141). + - **FEAT**: remove .raw call. + - **FEAT**: add loader implementation. + - **FEAT**: export ui kit as component theme data. + - **FEAT**: implement top app bar and update example. + - **FEAT**: update example with full studio button theme. + - **FEAT**: add theme control in example. + - **FEAT**: finalize material ready buttons. + - **FEAT**: implement information card (#126). + - **FEAT**: implement flat button. + - **FEAT**: add theme extension support in buttons + theme negociation. + - **FEAT**: add theme extension shortcut. + - **FEAT**: add card theme extension, fix bugs & update example (close #126). + - **FEAT**: add quote / skill / portfolio cards (#126). + - **FEAT**: make skillcard header icon customizable. + - **FEAT**: update example with drawer and custom launch parameters. + - **FEAT**: add multicolor support in linear gradient helper. + - **FEAT**: implement file selection button with invalid cubit and dotted package. + - **FEAT**: implement simple icon button and use dimension style. + - **FEAT**: add symbol button + enhance bloc control over state. + - **FEAT**: implement top nav bar. + - **FEAT**: use MultiColor in button style. + - **FEAT**: implement flat/outlined button. + - **FEAT**: move style implementation from component to ui_kit with theme resolver. + - **FEAT**: allow to cascade styles in ThemeHelper. + - **DOCS**: add some documentation + readme. + - **DOCS**: add theme negociation explaination. + - **BREAKING** **REFACTOR**: remove bloc export in buttons to be state management solution agnostic (closes #147). + +#### `wyatt_analysis` - `v2.4.2` + + - **REFACTOR**: remove cross package export. + - **DOCS**: change some documentation. + +#### `wyatt_bloc_helper` - `v2.0.1` + + - **REFACTOR**: docs + nullable multiprovider attributes. + +#### `wyatt_bloc_layout` - `v0.0.2` + + - **REFACTOR**: remove cross package export. + - **REFACTOR**: migrate bloc layouts using copywith component method (close #121). + - **REFACTOR**: update example (#92). + - **REFACTOR**: update package using nullable component data (#92). + - **REFACTOR**: update example with new app bar entity (#90). + - **FIX**: remove wyatt arch ios example. + - **FIX**: change example to be compatible with new AppTopBar and TextWrapper. + - **FIX**: fix textwrapper. + - **FIX**: update export file. + - **FIX**: rename file. + - **FEAT**: add attributs available for grid bloc layouts. + - **FEAT**: add grid content implementations. + - **FEAT**: rework on structure using new components and layouts. + - **FEAT**: make package compatible with crud cubit (close #111). + - **FEAT**: export layout_package & adapt imports. + - **FEAT**: export useful packages (close #88). + - **FEAT**: add all layout avalaible with crud bloc. + - **FEAT**: link error widget to error state. + - **FEAT**: add new package to combine bloc_helper, crud_bloc, ui_components, and ui_layout. + +#### `wyatt_crud_bloc` - `v0.1.1` + + - **REFACTOR**: remove cross package export. + - **REFACTOR**: update package using new architecture usecase execute method (close #77). + - **FEAT**: change responsibility of blocs (closes #45, closes #44). + +#### `wyatt_form_bloc` - `v0.2.0+3` + + - **REFACTOR**: remove cross package export. + - **FIX**: fix textController rebuild. + +#### `wyatt_type_utils` - `v0.0.5` + + - **FEAT**: add nullable num comparison. + - **DOCS**: change some documentation. + - **DOCS**: add some documentation. + +#### `wyatt_ui_layout` - `v0.0.2` + + - **REFACTOR**: update exemple (close #116). + - **REFACTOR**: migrate layouts using copywith component method (#116). + - **REFACTOR**: update example (#92). + - **REFACTOR**: update package using nullable component data (#92). + - **REFACTOR**: update example with components updates (close #90). + - **REFACTOR**: update appbar component (close #78). + - **REFACTOR**: update field name. + - **FIX**: remove wyatt arch ios example. + - **FIX**: change example to be compatible with new AppTopBar and TextWrapper. + - **FIX**: fix textwrapper. + - **FIX**: fix emample after splititng packages. + - **FIX**: remove unecessary dependencies. + - **FEAT**: add grid content implementations. + - **FEAT**: update layouts to allow more control on components. + - **FEAT**: make field nullable & add new app bar fields (#97). + - **FEAT**: add frame layout (close #67). + - **FEAT**: add new package for app compenant and start implementing layouts. + - **DOCS**: add some documentation + readme. + - **DOCS**: add doc. + - **DOCS**: update models. + + ## 2023-02-24 ### Changes diff --git a/packages/wyatt_analysis/CHANGELOG.md b/packages/wyatt_analysis/CHANGELOG.md index 78d43938..8a9fb04f 100644 --- a/packages/wyatt_analysis/CHANGELOG.md +++ b/packages/wyatt_analysis/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.4.2 + + - **REFACTOR**: remove cross package export. + - **DOCS**: change some documentation. + ## 2.4.1 - **FEAT**: add latest version persistence between script executions. diff --git a/packages/wyatt_analysis/pubspec.yaml b/packages/wyatt_analysis/pubspec.yaml index 399c7794..5440b468 100644 --- a/packages/wyatt_analysis/pubspec.yaml +++ b/packages/wyatt_analysis/pubspec.yaml @@ -17,7 +17,7 @@ name: wyatt_analysis 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 -version: 2.4.1 +version: 2.4.2 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub diff --git a/packages/wyatt_architecture/CHANGELOG.md b/packages/wyatt_architecture/CHANGELOG.md index 4e3f81ad..bf4e89fe 100644 --- a/packages/wyatt_architecture/CHANGELOG.md +++ b/packages/wyatt_architecture/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.2.0 + +> Note: This release has breaking changes. + + - **REFACTOR**: move to dart package. + - **FIX**: remove wyatt arch ios example. + - **DOCS**: change some documentation. + - **DOCS**: add documentation. + - **DOCS**: update readme. + - **BREAKING** **REFACTOR**: fix cascade dart good practices + docs. + ## 0.1.0+1 - Update a dependency to the latest release. diff --git a/packages/wyatt_architecture/example/pubspec.yaml b/packages/wyatt_architecture/example/pubspec.yaml index 0d208bb9..6bdb8d97 100644 --- a/packages/wyatt_architecture/example/pubspec.yaml +++ b/packages/wyatt_architecture/example/pubspec.yaml @@ -36,12 +36,12 @@ dependencies: wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.4 + version: ^0.0.5 wyatt_http_client: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_http_client-v1.2.0 + ref: wyatt_http_client-v2.0.0 path: packages/wyatt_http_client get_it: ^7.2.0 hive: ^2.2.3 @@ -49,7 +49,7 @@ dependencies: wyatt_bloc_helper: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^2.0.0 + version: ^2.0.1 equatable: ^2.0.5 stream_transform: ^2.1.0 bloc_concurrency: ^0.2.0 @@ -67,7 +67,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 + ref: wyatt_analysis-v2.4.2 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_architecture/pubspec.yaml b/packages/wyatt_architecture/pubspec.yaml index e447fa29..2c03ab8f 100644 --- a/packages/wyatt_architecture/pubspec.yaml +++ b/packages/wyatt_architecture/pubspec.yaml @@ -17,7 +17,7 @@ name: wyatt_architecture description: Wyatt Architecture contains useful classes to help you to create a clean architecture following the Wyatt Architecture principles. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_architecture -version: 0.1.0+1 +version: 0.2.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -27,9 +27,9 @@ environment: dependencies: wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.4 + version: ^0.0.5 dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_authentication_bloc/CHANGELOG.md b/packages/wyatt_authentication_bloc/CHANGELOG.md index 5a5ae944..0ea6241f 100644 --- a/packages/wyatt_authentication_bloc/CHANGELOG.md +++ b/packages/wyatt_authentication_bloc/CHANGELOG.md @@ -1,3 +1,30 @@ +## 0.5.0 + +> Note: This release has breaking changes. + + - **REFACTOR**: remove cross package export. + - **REFACTOR**: remove cross package export. + - **REFACTOR**: use custom user changes stream. + - **REFACTOR**: make signup/in, passwordreset cubit extendable. + - **FIX**: make sur access token is available on every steps. + - **FIX**: anonymous sign in event. + - **FIX**: initialize account stream transformer. + - **FIX**: stream on null account. + - **FIX**: handle empty provider list (closes #113). + - **FEAT**: add mock + local storage. + - **FEAT**: remove session wrapper for AuthenticationSession. + - **FEAT**: add account edit cubit. + - **FEAT**: add custom routine, and documentation. + - **FEAT**: add full event support. + - **DOCS**: update example with multiple data sources. + - **DOCS**: add full dartdoc. + - **DOCS**: add wiki script. + - **DOCS**: update example. + - **DOCS**: update example. + - **BREAKING** **REFACTOR**: split data sources (cache, session, external). + - **BREAKING** **REFACTOR**: use mixins, and remove use of onSignUpSuccess. + - **BREAKING** **FEAT**: add event type on auth change. + ## 0.4.1 - **REFACTOR**: use fromFirebaseUser factory to parse user. diff --git a/packages/wyatt_authentication_bloc/example/pubspec.yaml b/packages/wyatt_authentication_bloc/example/pubspec.yaml index e1fbdb31..b269e5d6 100644 --- a/packages/wyatt_authentication_bloc/example/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/example/pubspec.yaml @@ -42,15 +42,15 @@ dependencies: wyatt_form_bloc: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 0.2.0+2 + version: 0.2.0+3 wyatt_architecture: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 0.1.0+1 + version: 0.2.0 wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 0.0.4 + version: 0.0.5 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. diff --git a/packages/wyatt_authentication_bloc/pubspec.yaml b/packages/wyatt_authentication_bloc/pubspec.yaml index 6c8e1f57..aa668c91 100644 --- a/packages/wyatt_authentication_bloc/pubspec.yaml +++ b/packages/wyatt_authentication_bloc/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_authentication_bloc description: Authentication BLoC for Flutter repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_authentication_bloc -version: 0.4.1 +version: 0.5.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -20,15 +20,15 @@ dependencies: wyatt_form_bloc: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^0.2.0+2 + version: ^0.2.0+3 wyatt_architecture: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^0.1.0+1 + version: ^0.2.0 wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^0.0.4 + version: ^0.0.5 flutter_secure_storage: ^8.0.0 http: ^0.13.5 @@ -39,4 +39,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_bloc_helper/CHANGELOG.md b/packages/wyatt_bloc_helper/CHANGELOG.md index e0e380c8..492d3534 100644 --- a/packages/wyatt_bloc_helper/CHANGELOG.md +++ b/packages/wyatt_bloc_helper/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.1 + + - **REFACTOR**: docs + nullable multiprovider attributes. + ## 2.0.0 > Note: This release has breaking changes. diff --git a/packages/wyatt_bloc_helper/pubspec.yaml b/packages/wyatt_bloc_helper/pubspec.yaml index a133308c..3c4744cc 100644 --- a/packages/wyatt_bloc_helper/pubspec.yaml +++ b/packages/wyatt_bloc_helper/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_bloc_helper description: Your best friend for blocs in Flutter repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_bloc_helper -version: 2.0.0 +version: 2.0.1 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -20,4 +20,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_bloc_layout/CHANGELOG.md b/packages/wyatt_bloc_layout/CHANGELOG.md index 7ad72ac3..dc26b9b2 100644 --- a/packages/wyatt_bloc_layout/CHANGELOG.md +++ b/packages/wyatt_bloc_layout/CHANGELOG.md @@ -1,3 +1,25 @@ +## 0.0.2 + + - **REFACTOR**: remove cross package export. + - **REFACTOR**: migrate bloc layouts using copywith component method (close #121). + - **REFACTOR**: update example (#92). + - **REFACTOR**: update package using nullable component data (#92). + - **REFACTOR**: update example with new app bar entity (#90). + - **FIX**: remove wyatt arch ios example. + - **FIX**: change example to be compatible with new AppTopBar and TextWrapper. + - **FIX**: fix textwrapper. + - **FIX**: update export file. + - **FIX**: rename file. + - **FEAT**: add attributs available for grid bloc layouts. + - **FEAT**: add grid content implementations. + - **FEAT**: rework on structure using new components and layouts. + - **FEAT**: make package compatible with crud cubit (close #111). + - **FEAT**: export layout_package & adapt imports. + - **FEAT**: export useful packages (close #88). + - **FEAT**: add all layout avalaible with crud bloc. + - **FEAT**: link error widget to error state. + - **FEAT**: add new package to combine bloc_helper, crud_bloc, ui_components, and ui_layout. + # 0.0.1 - TODO: Describe initial release. diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml index 8d19be75..241b3f1f 100644 --- a/packages/wyatt_bloc_layout/example/pubspec.yaml +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -37,19 +37,19 @@ dependencies: wyatt_bloc_helper: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.0.0 + version: ^2.0.1 wyatt_ui_layout: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.1 + version: ^0.0.2 wyatt_crud_bloc: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.1.0+2 + version: ^0.1.1 wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.1 + version: ^0.1.0 wyatt_component_copy_with_extension: git: @@ -69,7 +69,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 + ref: wyatt_analysis-v2.4.2 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_bloc_layout/pubspec.yaml b/packages/wyatt_bloc_layout/pubspec.yaml index 538ebf97..b54b6d2d 100644 --- a/packages/wyatt_bloc_layout/pubspec.yaml +++ b/packages/wyatt_bloc_layout/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_bloc_layout description: Layouts based on bloc helper library repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_bloc_layout -version: 0.0.1 +version: 0.0.2 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -15,23 +15,23 @@ dependencies: wyatt_bloc_helper: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.0.0 + version: ^2.0.1 wyatt_ui_layout: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.1 + version: ^0.0.2 wyatt_crud_bloc: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.1.0+2 + version: ^0.1.1 wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.1 + version: ^0.1.0 dev_dependencies: flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_component_copy_with_extension/CHANGELOG.md b/packages/wyatt_component_copy_with_extension/CHANGELOG.md index effe43c8..db7d57e6 100644 --- a/packages/wyatt_component_copy_with_extension/CHANGELOG.md +++ b/packages/wyatt_component_copy_with_extension/CHANGELOG.md @@ -1,3 +1,12 @@ +## 2.0.0 + +> Note: This release has breaking changes. + + - **FIX**: remove wyatt arch ios example. + - **FEAT**: add class annotation for component code generators. + - **DOCS**: add some documentation. + - **BREAKING** **REFACTOR**: rename file. + ## 1.0.0 - Initial version. diff --git a/packages/wyatt_component_copy_with_extension/example/pubspec.yaml b/packages/wyatt_component_copy_with_extension/example/pubspec.yaml index 82995754..ffdf3783 100644 --- a/packages/wyatt_component_copy_with_extension/example/pubspec.yaml +++ b/packages/wyatt_component_copy_with_extension/example/pubspec.yaml @@ -20,7 +20,7 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 # The following section is specific to Flutter. flutter: diff --git a/packages/wyatt_component_copy_with_extension/pubspec.yaml b/packages/wyatt_component_copy_with_extension/pubspec.yaml index 4b0375c5..80de1370 100644 --- a/packages/wyatt_component_copy_with_extension/pubspec.yaml +++ b/packages/wyatt_component_copy_with_extension/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_component_copy_with_extension description: Extension for component copy with feature. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/component_copy_with_extension -version: 1.0.0 +version: 2.0.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -14,4 +14,4 @@ dependencies: dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_component_copy_with_gen/CHANGELOG.md b/packages/wyatt_component_copy_with_gen/CHANGELOG.md index effe43c8..df552798 100644 --- a/packages/wyatt_component_copy_with_gen/CHANGELOG.md +++ b/packages/wyatt_component_copy_with_gen/CHANGELOG.md @@ -1,3 +1,17 @@ +## 2.0.0 + +> Note: This release has breaking changes. + + - **REFACTOR**: migrate components using code generator packages (#115). + - **FIX**: remove wyatt arch ios example. + - **FIX**: change example to be compatible with new AppTopBar and TextWrapper. + - **FIX**: fix textwrapper. + - **FIX**: update example (#118). + - **FIX**: copywith method takes non nullable fields too (#118). + - **FEAT**: add generators for components proxy and mixins to enable copywith methods. + - **DOCS**: add some documentation. + - **BREAKING** **REFACTOR**: rename file. + ## 1.0.0 - Initial version. diff --git a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml index ab05f5a8..ead8d7d2 100644 --- a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml @@ -25,4 +25,4 @@ dev_dependencies: path: "../" wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_component_copy_with_gen/pubspec.yaml b/packages/wyatt_component_copy_with_gen/pubspec.yaml index 301cb28c..6b08889b 100644 --- a/packages/wyatt_component_copy_with_gen/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_component_copy_with_gen description: Generator for copywith method for components. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/component_copy_with_gen -version: 1.0.0 +version: 2.0.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -15,11 +15,11 @@ dependencies: wyatt_component_copy_with_extension: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 dev_dependencies: test: ^1.21.0 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_crud_bloc/CHANGELOG.md b/packages/wyatt_crud_bloc/CHANGELOG.md index 8690ac22..8aabadb5 100644 --- a/packages/wyatt_crud_bloc/CHANGELOG.md +++ b/packages/wyatt_crud_bloc/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.1.1 + + - **REFACTOR**: remove cross package export. + - **REFACTOR**: update package using new architecture usecase execute method (close #77). + - **FEAT**: change responsibility of blocs (closes #45, closes #44). + ## 0.1.0+2 - Update a dependency to the latest release. diff --git a/packages/wyatt_crud_bloc/pubspec.yaml b/packages/wyatt_crud_bloc/pubspec.yaml index 09b9d2b2..d90a12db 100644 --- a/packages/wyatt_crud_bloc/pubspec.yaml +++ b/packages/wyatt_crud_bloc/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_crud_bloc description: Create/Read/Update/Delete BLoC for Flutter repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_crud_bloc -version: 0.1.0+2 +version: 0.1.1 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -18,15 +18,15 @@ dependencies: wyatt_architecture: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^0.1.0+1 + version: ^0.2.0 wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^0.0.4 + version: ^0.0.5 dev_dependencies: flutter_test: { sdk: flutter } bloc_test: ^9.1.0 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_form_bloc/CHANGELOG.md b/packages/wyatt_form_bloc/CHANGELOG.md index 3c1cfc37..64c2926f 100644 --- a/packages/wyatt_form_bloc/CHANGELOG.md +++ b/packages/wyatt_form_bloc/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.2.0+3 + + - **REFACTOR**: remove cross package export. + - **FIX**: fix textController rebuild. + ## 0.2.0+2 - Update a dependency to the latest release. diff --git a/packages/wyatt_form_bloc/pubspec.yaml b/packages/wyatt_form_bloc/pubspec.yaml index b4ddf0a2..c962df98 100644 --- a/packages/wyatt_form_bloc/pubspec.yaml +++ b/packages/wyatt_form_bloc/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_form_bloc description: Manage forms in Dart & Flutter with Bloc repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_form_bloc -version: 0.2.0+2 +version: 0.2.0+3 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -17,11 +17,11 @@ dependencies: wyatt_architecture: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^0.1.0+1 + version: ^0.2.0 wyatt_type_utils: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^0.0.4 + version: ^0.0.5 dev_dependencies: @@ -30,4 +30,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_http_client/CHANGELOG.md b/packages/wyatt_http_client/CHANGELOG.md index f597ef73..d8a9e94b 100644 --- a/packages/wyatt_http_client/CHANGELOG.md +++ b/packages/wyatt_http_client/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.0.0 + +> Note: This release has breaking changes. + + - **DOCS**: add simple example. + - **BREAKING** **REFACTOR**: fix cascade dart good practices + docs. + ## 1.2.0 - **FEAT**: add new middleware feature. diff --git a/packages/wyatt_http_client/pubspec.yaml b/packages/wyatt_http_client/pubspec.yaml index 357e00a8..69b778c3 100644 --- a/packages/wyatt_http_client/pubspec.yaml +++ b/packages/wyatt_http_client/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_http_client description: A Dart client for RESTful APIs with authentication. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_http_client -version: 1.2.0 +version: 2.0.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -15,4 +15,4 @@ dependencies: dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_i18n/CHANGELOG.md b/packages/wyatt_i18n/CHANGELOG.md index effe43c8..8d4adffe 100644 --- a/packages/wyatt_i18n/CHANGELOG.md +++ b/packages/wyatt_i18n/CHANGELOG.md @@ -1,3 +1,17 @@ +## 2.0.0 + +> Note: This release has breaking changes. + + - **FEAT**: change gitignore for symbolic link. + - **FEAT**: add i18n delegate + example. + - **FEAT**: implements network data source. + - **FEAT**: add default locale. + - **FEAT**: add getter/setter. + - **FEAT**: add ICU parser. + - **FEAT**: add arb, json and yaml parsers. + - **DOCS**: add docstrings on every classes. + - **BREAKING** **FEAT**: rename few files + add clearer documentation. + ## 1.0.0 - Initial version. diff --git a/packages/wyatt_i18n/example/pubspec.yaml b/packages/wyatt_i18n/example/pubspec.yaml index fd74a367..660a0fda 100644 --- a/packages/wyatt_i18n/example/pubspec.yaml +++ b/packages/wyatt_i18n/example/pubspec.yaml @@ -13,7 +13,7 @@ dev_dependencies: flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.0 + version: ^2.4.2 # The following section is specific to Flutter. flutter: uses-material-design: true diff --git a/packages/wyatt_i18n/pubspec.yaml b/packages/wyatt_i18n/pubspec.yaml index a0336a93..76f46740 100644 --- a/packages/wyatt_i18n/pubspec.yaml +++ b/packages/wyatt_i18n/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_i18n description: Library to handle internationalization in Flutter apps. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_i18n -version: 1.0.0 +version: 2.0.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -22,17 +22,17 @@ dependencies: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_architecture - version: ^0.1.0+1 + version: ^0.2.0 wyatt_bloc_helper: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_bloc_helper - version: ^2.0.0 + version: ^2.0.1 wyatt_type_utils: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_type_utils - version: ^0.0.4 + version: ^0.0.5 yaml: ^3.1.1 dev_dependencies: @@ -40,4 +40,4 @@ dev_dependencies: dart_code_metrics: ^5.5.1 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_type_utils/CHANGELOG.md b/packages/wyatt_type_utils/CHANGELOG.md index e5fe7f83..5ae8ee9c 100644 --- a/packages/wyatt_type_utils/CHANGELOG.md +++ b/packages/wyatt_type_utils/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.0.5 + + - **FEAT**: add nullable num comparison. + - **DOCS**: change some documentation. + - **DOCS**: add some documentation. + ## 0.0.4 - **FEAT**: add Result extension on FutureOr type (close #40). diff --git a/packages/wyatt_type_utils/example/pubspec.yaml b/packages/wyatt_type_utils/example/pubspec.yaml index a2e63491..89bbd10e 100644 --- a/packages/wyatt_type_utils/example/pubspec.yaml +++ b/packages/wyatt_type_utils/example/pubspec.yaml @@ -36,7 +36,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 + ref: wyatt_analysis-v2.4.2 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/wyatt_type_utils/pubspec.yaml b/packages/wyatt_type_utils/pubspec.yaml index 94d5faf7..857dc5b1 100644 --- a/packages/wyatt_type_utils/pubspec.yaml +++ b/packages/wyatt_type_utils/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_type_utils description: Either, Option and other useful types and extensions. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_type_utils -version: 0.0.4 +version: 0.0.5 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -13,4 +13,4 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 diff --git a/packages/wyatt_ui_components/CHANGELOG.md b/packages/wyatt_ui_components/CHANGELOG.md index 7ad72ac3..487bf052 100644 --- a/packages/wyatt_ui_components/CHANGELOG.md +++ b/packages/wyatt_ui_components/CHANGELOG.md @@ -1,3 +1,80 @@ +## 0.1.0 + +> Note: This release has breaking changes. + + - **REFACTOR**: update example (#92). + - **REFACTOR**: replace ThemeResolver by ThemeHelper in Loader / RichTextBuilder (closes #148). + - **REFACTOR**: migrate top nav bar using generify top bar. + - **REFACTOR**: move borderColors type. + - **REFACTOR**: add CopyWith method in ThemeStyle. + - **REFACTOR**: update colors using Multicolor class (#138). + - **REFACTOR**: rework text gradient and text wrapper. + - **REFACTOR**: remove CopyWith extension. + - **REFACTOR**: move extensions. + - **REFACTOR**: merge flat and outline buttons in only one style. + - **REFACTOR**: update example (close #115). + - **REFACTOR**: migrate components using code generator packages (#115). + - **REFACTOR**: update example (#92). + - **FIX**: fix extra value in compute extension function. + - **FIX**: remove darkmode enable field in cards. + - **FIX**: add loader to theme data (close #152). + - **FIX**: inverse merge in TextInputStyle. + - **FIX**: use multicolor in cards. + - **FIX**: fix MultiColor lerp method. + - **FIX**: remove null check operator in RichTextBuilder component. + - **FIX**: remove wyatt arch ios example. + - **FIX**: add style merge in Theme Resolver. + - **FIX**: generate new files after generator fixes (close #118). + - **FIX**: move theme_resolver in compnoent to fix code generation. + - **FIX**: add generated component with theme resolver. + - **FEAT**: add text input components, theme extension and worked on utils (#138). + - **FEAT**: add isColor getter in multicolor helper. + - **FEAT**: add loading & error widget to component theme (close #69). + - **FEAT**: add text input abstract class (#138). + - **FEAT**: add rich text builder / parser. + - **FEAT**: update example & move configure function (#69). + - **FEAT**: add top navigation bar component to theme data. + - **FEAT**: add extra state. + - **FEAT**: update layouts to allow more control on components. + - **FEAT**: add some useful text customization in TextWrapper (closes #149). + - **FEAT**: update attributs and proxy most of appbar attributs. + - **FEAT**: add new components to theme data (close #152). + - **FEAT**: move style implementation from component to ui_kit with theme resolver. + - **FEAT**: add copyWith gen and make button style lerping. + - **FEAT**: make component theme data copyable. + - **FEAT**: add loader component and style. + - **FEAT**: add file selection component. + - **FEAT**: add simple icon button and dimension style. + - **FEAT**: add symbol button. + - **FEAT**: implement top nav bar. + - **FEAT**: add tapped control state. + - **FEAT**: add MultiColor util class. + - **FEAT**: create new package to split components and layouts. + - **FEAT**: add button components. + - **FEAT**: make app bar leading & actions customizable. + - **FEAT**: add quote / skill / portfolio cards (#126). + - **FEAT**: add gradient attribut to text wrapper. + - **FEAT**: add string extension to easely wrap text. + - **FEAT**: export cards #126. + - **FEAT**: add portfolio & skill cards #126. + - **FEAT**: make text wrapper constructor constant. + - **FEAT**: add text wrapper instead of String/Widget for Texts. + - **FEAT**: make fields nullable and not required in quote card. + - **FEAT**: add card theme extension, fix bugs & update example (close #126). + - **FEAT**: export components and add license header. + - **FEAT**: add information_card & quote_card (#126). + - **FEAT**: add Top Navigation Bar Component. + - **FEAT**: generate new skillcard component. + - **FEAT**: generify bars. + - **FEAT**: rework on structure using new components and layouts. + - **FEAT**: add centerTitle property to app bar component. + - **FEAT**: make component data field nullable (#92). + - **FEAT**: add lerp on multicolor. + - **FEAT**: add flat/outlined button styles. + - **DOCS**: add some documentation + readme. + - **DOCS**: update models. + - **BREAKING** **REFACTOR**: remove bloc export in buttons to be state management solution agnostic (closes #147). + # 0.0.1 - TODO: Describe initial release. diff --git a/packages/wyatt_ui_components/example/pubspec.yaml b/packages/wyatt_ui_components/example/pubspec.yaml index dc9412e9..ee67d07f 100644 --- a/packages/wyatt_ui_components/example/pubspec.yaml +++ b/packages/wyatt_ui_components/example/pubspec.yaml @@ -51,7 +51,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 + ref: wyatt_analysis-v2.4.2 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index eecf6f81..9af84894 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_ui_components description: Components that can be implemented in any application with copy constructor. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_components -version: 0.0.1 +version: 0.1.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -13,16 +13,16 @@ dependencies: copy_with_extension: ^5.0.0 wyatt_component_copy_with_extension: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 dev_dependencies: flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 build_runner: ^2.3.3 copy_with_extension_gen: ^5.0.0 wyatt_component_copy_with_gen: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 diff --git a/packages/wyatt_ui_kit/CHANGELOG.md b/packages/wyatt_ui_kit/CHANGELOG.md index effe43c8..9f6b88af 100644 --- a/packages/wyatt_ui_kit/CHANGELOG.md +++ b/packages/wyatt_ui_kit/CHANGELOG.md @@ -1,3 +1,65 @@ +## 2.0.0 + +> Note: This release has breaking changes. + + - **REFACTOR**: use tapped state and merged styles. + - **REFACTOR**: remove selection area of rich text, its not his reponsibility. + - **REFACTOR**: replace ThemeResolver by ThemeHelper in Loader / RichTextBuilder (closes #148). + - **REFACTOR**: adapt ui_kit. + - **REFACTOR**: use ThemeHelper in cards. + - **REFACTOR**: rename GradientBoxBorder. + - **REFACTOR**: update textinput component using borderColors as Color. + - **REFACTOR**: rework text gradient and text wrapper. + - **REFACTOR**: move exportable bloc from mixin to widget. + - **REFACTOR**: make resolve private and dotter child a widget. + - **FIX**: fix text align, add selection and update example for rich text builder. + - **FIX**: remove useless file. + - **FIX**: fix tab action focus on textinputs. + - **FIX**: inverse merge in TextInputStyle. + - **FIX**: use multicolor in cards. + - **FIX**: fix export theme file. + - **FIX**: remove wyatt arch ios example. + - **FIX**: remove null check operator in RichTextBuilder component. + - **FIX**: remove null check operator in Loader component. + - **FIX**: fix conflicts in card component after rebase. + - **FIX**: move theme_resolver in compnoent to fix code generation. + - **FIX**: make card core stateless. + - **FIX**: add cacheExtend as a trade-off in listview example. + - **FIX**: add local font assets + compress images. + - **FEAT**: make top bar selector customizable. + - **FEAT**: update example (#138). + - **FEAT**: implemement text inputs (#138). + - **FEAT**: add text input theme extension (#138). + - **FEAT**: add some useful text customization in TextWrapper (closes #149). + - **FEAT**: implement rich text builder (closes #141). + - **FEAT**: remove .raw call. + - **FEAT**: add loader implementation. + - **FEAT**: export ui kit as component theme data. + - **FEAT**: implement top app bar and update example. + - **FEAT**: update example with full studio button theme. + - **FEAT**: add theme control in example. + - **FEAT**: finalize material ready buttons. + - **FEAT**: implement information card (#126). + - **FEAT**: implement flat button. + - **FEAT**: add theme extension support in buttons + theme negociation. + - **FEAT**: add theme extension shortcut. + - **FEAT**: add card theme extension, fix bugs & update example (close #126). + - **FEAT**: add quote / skill / portfolio cards (#126). + - **FEAT**: make skillcard header icon customizable. + - **FEAT**: update example with drawer and custom launch parameters. + - **FEAT**: add multicolor support in linear gradient helper. + - **FEAT**: implement file selection button with invalid cubit and dotted package. + - **FEAT**: implement simple icon button and use dimension style. + - **FEAT**: add symbol button + enhance bloc control over state. + - **FEAT**: implement top nav bar. + - **FEAT**: use MultiColor in button style. + - **FEAT**: implement flat/outlined button. + - **FEAT**: move style implementation from component to ui_kit with theme resolver. + - **FEAT**: allow to cascade styles in ThemeHelper. + - **DOCS**: add some documentation + readme. + - **DOCS**: add theme negociation explaination. + - **BREAKING** **REFACTOR**: remove bloc export in buttons to be state management solution agnostic (closes #147). + ## 1.0.0 - Initial version. diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index fe539089..23202ff7 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -30,7 +30,7 @@ dev_dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 # The following section is specific to Flutter. flutter: diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index 68082704..fd87b3d1 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_ui_kit description: UIKit and Design System used in Wyatt Studio. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_kit -version: 1.0.0 +version: 2.0.0 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -20,20 +20,20 @@ dependencies: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ name: wyatt_bloc_helper - version: 2.0.0 + version: 2.0.1 wyatt_component_copy_with_extension: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.1 + version: ^0.1.0 dev_dependencies: build_runner: ^2.3.3 flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 wyatt_component_copy_with_gen: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 diff --git a/packages/wyatt_ui_layout/CHANGELOG.md b/packages/wyatt_ui_layout/CHANGELOG.md index 7ad72ac3..550f96c6 100644 --- a/packages/wyatt_ui_layout/CHANGELOG.md +++ b/packages/wyatt_ui_layout/CHANGELOG.md @@ -1,3 +1,26 @@ +## 0.0.2 + + - **REFACTOR**: update exemple (close #116). + - **REFACTOR**: migrate layouts using copywith component method (#116). + - **REFACTOR**: update example (#92). + - **REFACTOR**: update package using nullable component data (#92). + - **REFACTOR**: update example with components updates (close #90). + - **REFACTOR**: update appbar component (close #78). + - **REFACTOR**: update field name. + - **FIX**: remove wyatt arch ios example. + - **FIX**: change example to be compatible with new AppTopBar and TextWrapper. + - **FIX**: fix textwrapper. + - **FIX**: fix emample after splititng packages. + - **FIX**: remove unecessary dependencies. + - **FEAT**: add grid content implementations. + - **FEAT**: update layouts to allow more control on components. + - **FEAT**: make field nullable & add new app bar fields (#97). + - **FEAT**: add frame layout (close #67). + - **FEAT**: add new package for app compenant and start implementing layouts. + - **DOCS**: add some documentation + readme. + - **DOCS**: add doc. + - **DOCS**: update models. + # 0.0.1 - TODO: Describe initial release. diff --git a/packages/wyatt_ui_layout/example/pubspec.yaml b/packages/wyatt_ui_layout/example/pubspec.yaml index 5f054e02..02f37072 100644 --- a/packages/wyatt_ui_layout/example/pubspec.yaml +++ b/packages/wyatt_ui_layout/example/pubspec.yaml @@ -57,7 +57,7 @@ dev_dependencies: wyatt_analysis: git: url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 + ref: wyatt_analysis-v2.4.2 path: packages/wyatt_analysis # For information on the generic Dart part of this file, see the diff --git a/packages/wyatt_ui_layout/pubspec.yaml b/packages/wyatt_ui_layout/pubspec.yaml index aaaf1130..34741566 100644 --- a/packages/wyatt_ui_layout/pubspec.yaml +++ b/packages/wyatt_ui_layout/pubspec.yaml @@ -1,7 +1,7 @@ name: wyatt_ui_layout description: Main layouts to help you build your application views. repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_layout -version: 0.0.1 +version: 0.0.2 publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub @@ -14,11 +14,11 @@ dependencies: wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.1 + version: ^0.1.0 dev_dependencies: flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^2.4.1 + version: ^2.4.2 -- 2.47.2 From e9b6671500aa743ac187276a01be9171d5704cb2 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 00:28:55 +0200 Subject: [PATCH 276/320] build(ui_kit): change version constraint --- .pubignore | 3 +++ packages/wyatt_ui_kit/pubspec.yaml | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.pubignore b/.pubignore index 43c82d3c..00b31ebe 100644 --- a/.pubignore +++ b/.pubignore @@ -3,3 +3,6 @@ new_version.sh .vscode/ example/ models/ +build/ +*.iml + diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml index fd87b3d1..e60fb4c9 100644 --- a/packages/wyatt_ui_kit/pubspec.yaml +++ b/packages/wyatt_ui_kit/pubspec.yaml @@ -19,8 +19,7 @@ dependencies: wyatt_bloc_helper: hosted: url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - name: wyatt_bloc_helper - version: 2.0.1 + version: ^2.0.1 wyatt_component_copy_with_extension: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.0.0 -- 2.47.2 From 458ad767860e4136d9b6a1969f48535af77b165a Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 10:03:57 +0200 Subject: [PATCH 277/320] style: remove ignored files --- .../example/.firebaserc | 5 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../example/android/app/google-services.json | 91 ------------------- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- packages/wyatt_ui_kit/example/.firebaserc | 5 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 -- 15 files changed, 197 deletions(-) delete mode 100644 packages/wyatt_authentication_bloc/example/.firebaserc delete mode 100644 packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_authentication_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_bloc_helper/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_bloc_helper/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_crud_bloc/example/android/app/google-services.json delete mode 100644 packages/wyatt_crud_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_crud_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_form_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_form_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_notification_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_notification_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_ui_kit/example/.firebaserc delete mode 100644 packages/wyatt_ui_layout/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 packages/wyatt_ui_layout/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/packages/wyatt_authentication_bloc/example/.firebaserc b/packages/wyatt_authentication_bloc/example/.firebaserc deleted file mode 100644 index 54e8fe84..00000000 --- a/packages/wyatt_authentication_bloc/example/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "tchat-beta" - } -} diff --git a/packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_authentication_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_authentication_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_authentication_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_authentication_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_bloc_helper/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_bloc_helper/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_bloc_helper/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_bloc_helper/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_bloc_helper/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_bloc_helper/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_crud_bloc/example/android/app/google-services.json b/packages/wyatt_crud_bloc/example/android/app/google-services.json deleted file mode 100644 index 448a816f..00000000 --- a/packages/wyatt_crud_bloc/example/android/app/google-services.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "project_info": { - "project_number": "136771801992", - "firebase_url": "https://tchat-beta.firebaseio.com", - "project_id": "tchat-beta", - "storage_bucket": "tchat-beta.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:136771801992:android:4ff419f07afdad6097203d", - "android_client_info": { - "package_name": "com.example.authentication_bloc_example" - } - }, - "oauth_client": [ - { - "client_id": "136771801992-nps7ic22shstvgdv0c2ojvbkj3dkntum.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.example.authentication_bloc_example", - "certificate_hash": "5d8790309e13b68c35e5d4d8437c35c6d15e6131" - } - }, - { - "client_id": "136771801992-ncuib3rbu7p4ro4eo5su4vaudn2u4qrv.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyAYS14uXupkS158Q5QAFP1864UrUN_yDSk" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "136771801992-ncuib3rbu7p4ro4eo5su4vaudn2u4qrv.apps.googleusercontent.com", - "client_type": 3 - }, - { - "client_id": "136771801992-e585bm1n9b3lv89t4phrl9u0glsg52ua.apps.googleusercontent.com", - "client_type": 2, - "ios_info": { - "bundle_id": "com.example.example" - } - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:136771801992:android:8482c9b90bc29de697203d", - "android_client_info": { - "package_name": "com.example.crud_bloc_example" - } - }, - "oauth_client": [ - { - "client_id": "136771801992-ncuib3rbu7p4ro4eo5su4vaudn2u4qrv.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyAYS14uXupkS158Q5QAFP1864UrUN_yDSk" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "136771801992-ncuib3rbu7p4ro4eo5su4vaudn2u4qrv.apps.googleusercontent.com", - "client_type": 3 - }, - { - "client_id": "136771801992-e585bm1n9b3lv89t4phrl9u0glsg52ua.apps.googleusercontent.com", - "client_type": 2, - "ios_info": { - "bundle_id": "com.example.example" - } - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/packages/wyatt_crud_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_crud_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_crud_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_crud_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_crud_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_crud_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_form_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_form_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_form_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_form_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_form_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_form_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_notification_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_notification_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_notification_bloc/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_notification_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_notification_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_notification_bloc/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_ui_kit/example/.firebaserc b/packages/wyatt_ui_kit/example/.firebaserc deleted file mode 100644 index c5fa1ddd..00000000 --- a/packages/wyatt_ui_kit/example/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "studio-landpage" - } -} diff --git a/packages/wyatt_ui_layout/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_ui_layout/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_ui_layout/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/packages/wyatt_ui_layout/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/wyatt_ui_layout/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/packages/wyatt_ui_layout/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - -- 2.47.2 From 6725960c44b1936e6585aecc563a2def39749f9d Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 10:04:23 +0200 Subject: [PATCH 278/320] build: update pubignore --- .pubignore | 582 ++++++++++++++++++ packages/wyatt_notification_bloc/pubspec.yaml | 6 +- 2 files changed, 586 insertions(+), 2 deletions(-) diff --git a/.pubignore b/.pubignore index 00b31ebe..d6a35232 100644 --- a/.pubignore +++ b/.pubignore @@ -1,3 +1,585 @@ + +### Android ### +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof + +### Android Patch ### +gen-external-apklibs + +# Replacement of .externalNativeBuild directories introduced +# with Android Studio 3.5. + +### Dart ### +# See https://www.dartlang.org/guides/libraries/private-files + +# Files and directories created by pub +.dart_tool/ +.packages +# If you're building an application, you may want to check-in your pubspec.lock +pubspec.lock + +# dotenv environment variables file +.env* + +# Avoid committing generated Javascript files: +*.dart.js +*.info.json # Produced by the --dump-info flag. +*.js # When generated by dart2js. Don't specify *.js if your +# project includes source files written in JavaScript. +*.js_ +*.js.deps +*.js.map + +.flutter-plugins +.flutter-plugins-dependencies + +### Dart Patch ### +# dotenv environment variables file +.env + +### fastlane ### +# fastlane - A streamlined workflow tool for Cocoa deployment +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +# fastlane specific +**/fastlane/report.xml + +# deliver temporary files +**/fastlane/Preview.html + +# snapshot generated screenshots +**/fastlane/screenshots + +# scan temporary files +**/fastlane/test_output + +# Fastlane.swift runner binary +**/fastlane/FastlaneRunner + +### Firebase ### +.idea +**/node_modules/* +**/.firebaserc + +### Firebase Patch ### +.runtimeconfig.json +.firebase/ + +### Flutter ### +# Flutter/Dart/Pub related +**/doc/api/ +.fvm/flutter_sdk +.pub-cache/ +.pub/ +coverage/ +lib/generated_plugin_registrant.dart +# For library packages, don't commit the pubspec.lock file. +# Regenerating the pubspec.lock file lets you test your package against the latest compatible versions of its dependencies. +# See https://dart.dev/guides/libraries/private-files#pubspeclock +#pubspec.lock + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/key.properties +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/.last_build_id +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Flutter.podspec +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/flutter_assets/ +**/ios/Flutter/flutter_export_environment.sh +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages + +### Java ### +# Compiled class file +*.class + +# Log file + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### JetBrains+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### JetBrains+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +!.idea/codeStyles +!.idea/runConfigurations + +### Kotlin ### +# Compiled class file + +# Log file + +# BlueJ files + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Objective-C ### +# Xcode +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +### Objective-C Patch ### + +### Swift ### +# Xcode +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Xcode ### + +## Xcode 8 and earlier + +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcodeproj/project.xcworkspace/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno +**/xcshareddata/WorkspaceSettings.xcsettings + +### AndroidStudio ### +# Covers files to be ignored for android development using Android Studio. + +# Built application files +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files + +# Generated files +bin/ +gen/ + +# Gradle files +.gradle + +# Signing files +.signing/ + +# Local configuration file (sdk path, etc) + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files + +# Android Studio +/*/build/ +/*/local.properties +/*/out +/*/*/build +/*/*/production +.navigation/ +*.ipr +*~ +*.swp + +# Keystore files + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Android Patch + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# NDK +obj/ + +# IntelliJ IDEA +/out/ + +# User-specific configurations +.idea/caches/ +.idea/libraries/ +.idea/shelf/ +.idea/workspace.xml +.idea/tasks.xml +.idea/.name +.idea/compiler.xml +.idea/copyright/profiles_settings.xml +.idea/encodings.xml +.idea/misc.xml +.idea/modules.xml +.idea/scopes/scope_settings.xml +.idea/dictionaries +.idea/vcs.xml +.idea/jsLibraryMappings.xml +.idea/datasources.xml +.idea/dataSources.ids +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml +.idea/assetWizardSettings.xml +.idea/gradle.xml +.idea/jarRepositories.xml +.idea/navEditor.xml + +# Legacy Eclipse project files +.classpath +.project +.cproject +.settings/ + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml) + +## Plugin-specific files: + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Mongo Explorer plugin +.idea/mongoSettings.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) + +### AndroidStudio Patch ### + +!/gradle/wrapper/gradle-wrapper.jar + +# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,android,androidstudio,dart,fastlane,firebase,flutter,java,jetbrains+all,kotlin,objective-c,swift,xcode + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + +.idea/ +*.iml +google-services.json +pubspec_overrides.yaml + +# Mason +.mason/ + new_version.sh .latest_version .vscode/ diff --git a/packages/wyatt_notification_bloc/pubspec.yaml b/packages/wyatt_notification_bloc/pubspec.yaml index d16f5b80..3649f298 100644 --- a/packages/wyatt_notification_bloc/pubspec.yaml +++ b/packages/wyatt_notification_bloc/pubspec.yaml @@ -1,10 +1,12 @@ name: wyatt_notification_bloc description: A starting point for Dart libraries or applications. +repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_notification_bloc version: 1.0.0 -# homepage: https://www.example.com + +publish_to: none environment: - sdk: '>=2.18.2 <3.0.0' + sdk: ">=2.18.2 <3.0.0" # dependencies: # path: ^1.8.0 -- 2.47.2 From 72173cdf18c33731a3c36f44e1f9b43fe2fa0535 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 10:16:00 +0200 Subject: [PATCH 279/320] ci: update melos tasks + upgrade melos 3 --- .drone.yml | 10 +++++----- pubspec.yaml | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 pubspec.yaml diff --git a/.drone.yml b/.drone.yml index 1a12f265..44b1cd6b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -24,14 +24,14 @@ steps: commands: - melos run quality-check - melos run publish:validate - - name: publish - image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0-1 - commands: - - melos run publish:validate + # - name: publish + # image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0-1 + # commands: + # - melos run publish:validate + # trigger: branch: - master event: - - push - pull_request diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 00000000..a3991548 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,7 @@ +name: wyatt_packages_workspace + +environment: + sdk: '>=2.18.0 <3.0.0' + +dev_dependencies: + melos: ^3.0.1 -- 2.47.2 From 9c9d6783c346cad7b32dd5730df4876a96738351 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 11:09:04 +0200 Subject: [PATCH 280/320] ci: use latest flutter-melos container --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 44b1cd6b..357e21e5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -20,7 +20,7 @@ name: default steps: - name: quality-check - image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:2.9.0-1 + image: git.wyatt-studio.fr/wyatt-foss/flutter-melos:latest commands: - melos run quality-check - melos run publish:validate -- 2.47.2 From 90339d15a32fa1be77a1897c3c4aaf858743acd1 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 12:13:37 +0200 Subject: [PATCH 281/320] ci: fix latest melos config --- melos.yaml | 92 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 34 deletions(-) diff --git a/melos.yaml b/melos.yaml index 2af93a3d..037c8490 100644 --- a/melos.yaml +++ b/melos.yaml @@ -1,65 +1,86 @@ name: Wyatt-Packages #repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages Gitea not yet supported +sdkPath: auto + packages: - packages/** +ide: + intellij: + enabled: false + command: - bootstrap: - usePubspecOverrides: true - version: updateGitTagRefs: true linkToCommits: false # Gitea not yet supported workspaceChangelog: true + includeCommitId: true branch: master + message: | + chore(release): publish packages 🎉 + + {new_package_versions} + + clean: + hooks: + post: melos exec --flutter --concurrency=3 -- "flutter clean" scripts: + analyze: + run: | + melos exec --flutter --concurrency=1 -- flutter analyze --fatal-infos + description: Run `flutter analyze` for all flutter packages. + + fix:apply: + run: melos exec --concurrency=1 -- dart fix . --apply + description: Run and apply `dart fix` for all packages. + + fix:check: + run: melos exec --concurrency=1 -- dart fix . --set-exit-if-changed + description: Run `dart fix` checks for all packages. + + format: + run: melos exec --concurrency=1 -- dart format . + description: Run `dart format` for all packages. + lint:all: run: melos run analyze && melos run format description: Run all static analysis checks. - analyze: - run: | - melos exec -c 1 -- flutter analyze --fatal-infos - description: Run `flutter analyze` for all packages. - - fix: - run: melos exec dart fix . --apply - description: Run `dart fix` for all packages. - - format: - run: melos exec dart format . - description: Run `dart format` for all packages. - - format-check: - run: melos exec dart fix . --set-exit-if-changed - description: Run `dart fix` checks for all packages. - clean:deep: run: git clean -x -d -f -q description: Clean things very deeply with `git clean`. test:selective_unit_test: - run: melos exec -- flutter test --no-pub --coverage + run: melos exec --concurrency=1 -- flutter test --no-pub --coverage description: Run Flutter tests for a specific package in this project. - select-package: - dir-exists: + packageFilters: + dirExists: - test ignore: - - '*example*' + - "*example*" test:all: run: melos run test:selective_unit_test --no-select 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: + run: | + melos exec --concurrency=1 -- sh "\$MELOS_ROOT_PATH/combine_coverage.sh" && \ + genhtml coverage/lcov.info -o coverage/html + description: | + Generate coverage report for all packages. + Requires `lcov` and `genhtml`. - gen-class-models: - run: melos exec -- dart pub global run dcdg -o models/class-models.puml - select-package: + gen:class_models: + run: melos exec --concurrency=1 -- dart pub global run dcdg -o models/class-models.puml + description: | + Generate class models for all packages. + Requires `dcdg`. (https://pub.dev/packages/dcdg) + packageFilters: ignore: - - '*example*' + - "*example*" quality-check: run: | @@ -70,13 +91,16 @@ scripts: publish:validate: run: melos publish --diff="origin/$DRONE_COMMIT_BRANCH...HEAD" --yes + description: | + Validate that all packages are ready to be published. + Requires DRONE_COMMIT_BRANCH to be set. + Note: This will not actually publish anything. publish:validate-local: run: melos publish --yes - + description: | + Validate that all packages are ready to be published. + Note: This will not actually publish anything. + # publish: # run: melos publish --diff="origin/$DRONE_COMMIT_BRANCH...HEAD" --no-dry-run --yes - - # Additional cleanup lifecycle script, executed when `melos clean` is run. - postclean: > - melos exec -c 6 -- "flutter clean" -- 2.47.2 From 5bf9f01be097d7e222f929162d5c833b059d40d6 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 13:55:17 +0200 Subject: [PATCH 282/320] build: remove any pub git dependencies --- README.md | 15 +------ .../wyatt_architecture/example/pubspec.yaml | 39 ++++++++----------- .../wyatt_bloc_layout/example/pubspec.yaml | 33 ++++++---------- .../example/pubspec.yaml | 10 ++--- .../wyatt_type_utils/example/pubspec.yaml | 9 +---- .../wyatt_ui_components/example/pubspec.yaml | 24 +++++------- packages/wyatt_ui_kit/example/pubspec.yaml | 12 +++--- packages/wyatt_ui_layout/example/pubspec.yaml | 32 +++++++-------- 8 files changed, 63 insertions(+), 111 deletions(-) diff --git a/README.md b/README.md index debda7d1..a12acec8 100644 --- a/README.md +++ b/README.md @@ -270,25 +270,14 @@ or You can add any package of the `packages/` sub directory in your project. -```yaml -dependencies: - wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.1 - path: packages/wyatt_analysis -``` - -or the hosted version : - ```yaml dependencies: wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: 2.4.1 + version: ^2.4.1 ``` -Here you can change `package name` and `package version` . +> You can also use the `git` protocol. But it's not recommended since it's not handle version constraints. --- diff --git a/packages/wyatt_architecture/example/pubspec.yaml b/packages/wyatt_architecture/example/pubspec.yaml index 6bdb8d97..f550111d 100644 --- a/packages/wyatt_architecture/example/pubspec.yaml +++ b/packages/wyatt_architecture/example/pubspec.yaml @@ -27,48 +27,41 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - flutter: - sdk: flutter + flutter: { sdk: flutter } - flutter_bloc: ^8.1.1 wyatt_architecture: path: "../" - wyatt_type_utils: - hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^0.0.5 - - wyatt_http_client: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_http_client-v2.0.0 - path: packages/wyatt_http_client + flutter_bloc: ^8.1.1 get_it: ^7.2.0 hive: ^2.2.3 hive_flutter: ^1.1.0 - - wyatt_bloc_helper: - hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ - version: ^2.0.1 equatable: ^2.0.5 stream_transform: ^2.1.0 bloc_concurrency: ^0.2.0 freezed_annotation: ^2.2.0 json_annotation: ^4.7.0 + wyatt_bloc_helper: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + version: ^2.0.1 + wyatt_http_client: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + version: ^2.0.0 + wyatt_type_utils: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^0.0.5 + dev_dependencies: build_runner: ^2.3.2 - flutter_test: - sdk: flutter - + flutter_test: { sdk: flutter } freezed: ^2.2.1 hive_generator: ^2.0.0 json_serializable: ^6.5.4 + wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.2 - path: packages/wyatt_analysis + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ + version: ^2.4.2 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml index 241b3f1f..1709f123 100644 --- a/packages/wyatt_bloc_layout/example/pubspec.yaml +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -27,50 +27,39 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - flutter: - sdk: flutter - - flutter_bloc: ^8.1.2 + flutter: { sdk: flutter } wyatt_bloc_layout: path: "../" + flutter_bloc: ^8.1.2 + wyatt_bloc_helper: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.0.1 - wyatt_ui_layout: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^0.0.2 - wyatt_crud_bloc: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^0.1.1 - wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^0.1.0 - wyatt_component_copy_with_extension: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_extension + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 dev_dependencies: - flutter_test: - sdk: flutter - + flutter_test: { sdk: flutter } build_runner: ^2.3.3 - wyatt_component_copy_with_gen: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_gen + wyatt_component_copy_with_gen: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.2 - path: packages/wyatt_analysis + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.2 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml index ead8d7d2..71fd328e 100644 --- a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml @@ -8,21 +8,21 @@ environment: sdk: ">=2.19.0 <3.0.0" dependencies: - flutter: - sdk: flutter + flutter: { sdk: flutter } wyatt_component_copy_with_extension: path: "../../wyatt_component_copy_with_extension" wyatt_ui_components: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_ui_components + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 dev_dependencies: build_runner: ^2.3.3 + wyatt_component_copy_with_gen: path: "../" + wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.2 diff --git a/packages/wyatt_type_utils/example/pubspec.yaml b/packages/wyatt_type_utils/example/pubspec.yaml index 89bbd10e..5b5ab179 100644 --- a/packages/wyatt_type_utils/example/pubspec.yaml +++ b/packages/wyatt_type_utils/example/pubspec.yaml @@ -34,10 +34,5 @@ dependencies: dev_dependencies: wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.2 - path: packages/wyatt_analysis -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.2 diff --git a/packages/wyatt_ui_components/example/pubspec.yaml b/packages/wyatt_ui_components/example/pubspec.yaml index ee67d07f..cc736ef5 100644 --- a/packages/wyatt_ui_components/example/pubspec.yaml +++ b/packages/wyatt_ui_components/example/pubspec.yaml @@ -27,32 +27,26 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - flutter: - sdk: flutter + flutter: { sdk: flutter } wyatt_ui_components: path: "../" wyatt_component_copy_with_extension: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_extension + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.0.0 dev_dependencies: - flutter_test: - sdk: flutter - + flutter_test: { sdk: flutter } build_runner: ^2.3.3 + wyatt_component_copy_with_gen: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_component_copy_with_gen + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.0.0 wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.2 - path: packages/wyatt_analysis + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.2 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index 23202ff7..9916e77c 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -10,20 +10,18 @@ environment: dependencies: flutter: { sdk: flutter } + wyatt_ui_kit: + path: "../" + flutter_bloc: ^8.1.2 flutter_localizations: { sdk: flutter } - gap: ^2.0.1 google_fonts: ^4.0.3 adaptive_theme: ^3.2.0 - wyatt_ui_kit: - path: "../" - wyatt_ui_components: - git: - url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git - path: packages/wyatt_ui_components + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 dev_dependencies: flutter_test: { sdk: flutter } diff --git a/packages/wyatt_ui_layout/example/pubspec.yaml b/packages/wyatt_ui_layout/example/pubspec.yaml index 02f37072..7de95412 100644 --- a/packages/wyatt_ui_layout/example/pubspec.yaml +++ b/packages/wyatt_ui_layout/example/pubspec.yaml @@ -27,38 +27,32 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - flutter: - sdk: flutter + flutter: { sdk: flutter } wyatt_ui_layout: path: "../" - wyatt_ui_components: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_ui_components - - wyatt_component_copy_with_extension: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_component_copy_with_extension go_router: ^5.0.1 + wyatt_ui_components: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 + wyatt_component_copy_with_extension: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 + dev_dependencies: flutter_test: sdk: flutter build_runner: ^2.3.3 - wyatt_component_copy_with_gen: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - path: packages/wyatt_component_copy_with_gen + wyatt_component_copy_with_gen: + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^1.0.0 wyatt_analysis: - git: - url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages - ref: wyatt_analysis-v2.4.2 - path: packages/wyatt_analysis + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.4.2 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec -- 2.47.2 From 0ca4c41a27443f776d3c115c344f3b9a5ff94ab1 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Fri, 14 Apr 2023 14:33:06 +0200 Subject: [PATCH 283/320] build: fix and pin correct versions --- packages/wyatt_bloc_layout/example/pubspec.yaml | 4 ++-- packages/wyatt_component_copy_with_gen/example/pubspec.yaml | 5 +++-- packages/wyatt_ui_kit/example/pubspec.yaml | 2 +- packages/wyatt_ui_layout/example/pubspec.yaml | 6 +++--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml index 1709f123..ce4209bd 100644 --- a/packages/wyatt_bloc_layout/example/pubspec.yaml +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -48,7 +48,7 @@ dependencies: version: ^0.1.0 wyatt_component_copy_with_extension: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 dev_dependencies: flutter_test: { sdk: flutter } @@ -56,7 +56,7 @@ dev_dependencies: wyatt_component_copy_with_gen: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.2 diff --git a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml index 71fd328e..37caaa8f 100644 --- a/packages/wyatt_component_copy_with_gen/example/pubspec.yaml +++ b/packages/wyatt_component_copy_with_gen/example/pubspec.yaml @@ -11,11 +11,12 @@ dependencies: flutter: { sdk: flutter } wyatt_component_copy_with_extension: - path: "../../wyatt_component_copy_with_extension" + hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub + version: ^2.0.0 wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^0.1.0 dev_dependencies: build_runner: ^2.3.3 diff --git a/packages/wyatt_ui_kit/example/pubspec.yaml b/packages/wyatt_ui_kit/example/pubspec.yaml index 9916e77c..30cfec77 100644 --- a/packages/wyatt_ui_kit/example/pubspec.yaml +++ b/packages/wyatt_ui_kit/example/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^0.1.0 dev_dependencies: flutter_test: { sdk: flutter } diff --git a/packages/wyatt_ui_layout/example/pubspec.yaml b/packages/wyatt_ui_layout/example/pubspec.yaml index 7de95412..ee1fc6a5 100644 --- a/packages/wyatt_ui_layout/example/pubspec.yaml +++ b/packages/wyatt_ui_layout/example/pubspec.yaml @@ -36,10 +36,10 @@ dependencies: wyatt_ui_components: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^0.1.0 wyatt_component_copy_with_extension: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 dev_dependencies: flutter_test: @@ -49,7 +49,7 @@ dev_dependencies: wyatt_component_copy_with_gen: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub - version: ^1.0.0 + version: ^2.0.0 wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.2 -- 2.47.2 From 2baaf5c0bbbbf6098949595fdc24bd004ba036ca Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 18 Apr 2023 09:33:00 +0200 Subject: [PATCH 284/320] feat(ui_kit): add more control over flat button prefix/suffix color --- .../flat_button/flat_button_screen.dart | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index cffc95da..da65300f 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -169,7 +169,11 @@ class FlatButtonScreen extends CubitScreen { mainAxisSize: mainAxisSize ?? MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - if (style.foregroundColors?.color != null && + if (prefix != null && + (prefix is Icon?) && + ((prefix as Icon?)?.color != null)) ...[ + prefix! + ] else if (style.foregroundColors?.color != null && prefix != null) ...[ ColorFiltered( colorFilter: ColorFilter.mode( @@ -208,7 +212,21 @@ class FlatButtonScreen extends CubitScreen { ) ], Gap(style.padding?.vertical ?? 10), - if (style.foregroundColors?.color != null && + if (suffix != null && + (suffix is Icon?) && + ((suffix as Icon?)?.color != null)) ...[ + suffix! + ] else if (style.foregroundColors?.colors != null && + style.foregroundColors!.colors.isNotEmpty && + suffix != null) ...[ + ColorFiltered( + colorFilter: ColorFilter.mode( + style.foregroundColors!.colors.last, + BlendMode.srcIn, + ), + child: suffix, + ) + ] else if (style.foregroundColors?.color != null && suffix != null) ...[ ColorFiltered( colorFilter: ColorFilter.mode( -- 2.47.2 From 32cc6e8288ae08915f52b362bf50d7a260923790 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 18 Apr 2023 11:47:56 +0200 Subject: [PATCH 285/320] feat(ui_kit): make flat button fade on transition --- .../flat_button/flat_button_screen.dart | 205 +++++++++--------- 1 file changed, 108 insertions(+), 97 deletions(-) diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart index da65300f..bd5648e1 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart @@ -130,115 +130,126 @@ class FlatButtonScreen extends CubitScreen { onPressed?.call(state.state); bloc(context).onClickUpOut(); }, - child: DecoratedBox( + child: AnimatedContainer( + // TODO(wyatt): make it configurable, and generalize it + duration: const Duration(milliseconds: 150), + curve: Curves.easeOut, decoration: BoxDecoration( color: style.backgroundColors?.color, - // If no border color => no default value - border: (style.borderColors != null && style.stroke != null) - ? (style.borderColors?.isGradient ?? false) - ? GradientBoxBorder( - gradient: LinearGradient( - colors: style.borderColors!.colors, - ), - width: style.stroke!, - ) - : Border.all( - color: style.borderColors!.color, - width: style.stroke!, - ) - : null, + // if no gradient colors => no default value gradient: (style.backgroundColors?.isGradient ?? false) ? LinearGradient( colors: style.backgroundColors!.colors, ) : null, - boxShadow: [ - if (style.shadow != null) ...[style.shadow!] - ], + borderRadius: style.radius, ), - child: ConstrainedBox( - constraints: const BoxConstraints( - minWidth: 88, - minHeight: 36, - ), // min sizes for Material buttons - child: Padding( - padding: style.padding ?? EdgeInsets.zero, - child: Row( - mainAxisSize: mainAxisSize ?? MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - if (prefix != null && - (prefix is Icon?) && - ((prefix as Icon?)?.color != null)) ...[ - prefix! - ] else if (style.foregroundColors?.color != null && - prefix != null) ...[ - ColorFiltered( - colorFilter: ColorFilter.mode( - style.foregroundColors!.color, - BlendMode.srcIn, - ), - child: prefix, - ) - ] else ...[ - prefix ?? const SizedBox.shrink() - ], - Gap(style.padding?.vertical ?? 10), + child: DecoratedBox( + decoration: BoxDecoration( + // If no border color => no default value + border: (style.borderColors != null && style.stroke != null) + ? (style.borderColors?.isGradient ?? false) + ? GradientBoxBorder( + gradient: LinearGradient( + colors: style.borderColors!.colors, + ), + width: style.stroke!, + ) + : Border.all( + color: style.borderColors!.color, + width: style.stroke!, + ) + : null, - /// Choose color - /// buttonStyle.label.style.color ?? - /// context.textTheme.labelLarge.color - /// - /// Choose gradient - /// label.gradient ?? - /// buttonStyle.foregroundColor.colors ?? - /// null - /// - /// More infos in ThemeResolver class - if (label != null) ...[ - Text( - label!.data, - style: label!.style ?? style.label, - textAlign: label!.textAlign, - textDirection: label!.textDirection, - softWrap: label!.softWrap, - overflow: label!.overflow, - maxLines: label!.maxLines, - selectionColor: label!.selectionColor, - ).toGradient( - gradientColors: style.foregroundColors, - ) + boxShadow: [ + if (style.shadow != null) ...[style.shadow!] + ], + borderRadius: style.radius, + ), + child: ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 88, + minHeight: 36, + ), // min sizes for Material buttons + child: Padding( + padding: style.padding ?? EdgeInsets.zero, + child: Row( + mainAxisSize: mainAxisSize ?? MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + if (prefix != null && + (prefix is Icon?) && + ((prefix as Icon?)?.color != null)) ...[ + prefix! + ] else if (style.foregroundColors?.color != null && + prefix != null) ...[ + ColorFiltered( + colorFilter: ColorFilter.mode( + style.foregroundColors!.color, + BlendMode.srcIn, + ), + child: prefix, + ) + ] else ...[ + prefix ?? const SizedBox.shrink() + ], + Gap(style.padding?.vertical ?? 10), + + /// Choose color + /// buttonStyle.label.style.color ?? + /// context.textTheme.labelLarge.color + /// + /// Choose gradient + /// label.gradient ?? + /// buttonStyle.foregroundColor.colors ?? + /// null + /// + /// More infos in ThemeResolver class + if (label != null) ...[ + Text( + label!.data, + style: label!.style ?? style.label, + textAlign: label!.textAlign, + textDirection: label!.textDirection, + softWrap: label!.softWrap, + overflow: label!.overflow, + maxLines: label!.maxLines, + selectionColor: label!.selectionColor, + ).toGradient( + gradientColors: style.foregroundColors, + ) + ], + Gap(style.padding?.vertical ?? 10), + if (suffix != null && + (suffix is Icon?) && + ((suffix as Icon?)?.color != null)) ...[ + suffix! + ] else if (style.foregroundColors?.colors != null && + style.foregroundColors!.colors.isNotEmpty && + suffix != null) ...[ + ColorFiltered( + colorFilter: ColorFilter.mode( + style.foregroundColors!.colors.last, + BlendMode.srcIn, + ), + child: suffix, + ) + ] else if (style.foregroundColors?.color != null && + suffix != null) ...[ + ColorFiltered( + colorFilter: ColorFilter.mode( + style.foregroundColors!.color, + BlendMode.srcIn, + ), + child: suffix, + ) + ] else ...[ + suffix ?? const SizedBox.shrink() + ], ], - Gap(style.padding?.vertical ?? 10), - if (suffix != null && - (suffix is Icon?) && - ((suffix as Icon?)?.color != null)) ...[ - suffix! - ] else if (style.foregroundColors?.colors != null && - style.foregroundColors!.colors.isNotEmpty && - suffix != null) ...[ - ColorFiltered( - colorFilter: ColorFilter.mode( - style.foregroundColors!.colors.last, - BlendMode.srcIn, - ), - child: suffix, - ) - ] else if (style.foregroundColors?.color != null && - suffix != null) ...[ - ColorFiltered( - colorFilter: ColorFilter.mode( - style.foregroundColors!.color, - BlendMode.srcIn, - ), - child: suffix, - ) - ] else ...[ - suffix ?? const SizedBox.shrink() - ], - ], + ), ), ), ), -- 2.47.2 From cef73aa62de6d693e74255620a1bd815f88fdefc Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 26 Apr 2023 18:12:10 +0200 Subject: [PATCH 286/320] fix(gen): rename builder correctly --- .../lib/wyatt_component_copy_with_extension.dart | 2 +- packages/wyatt_component_copy_with_gen/build.yaml | 8 ++++---- .../lib/wyatt_component_copy_with_gen.dart | 2 +- packages/wyatt_ui_components/build.yaml | 4 ++-- packages/wyatt_ui_kit/build.yaml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart b/packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart index 9ba9c518..ba920e68 100644 --- a/packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart +++ b/packages/wyatt_component_copy_with_extension/lib/wyatt_component_copy_with_extension.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . /// Extension for component copy with feature -library component_copy_with_extension; +library wyatt_component_copy_with_extension; export './src/domain/domain.dart'; export 'src/component_copy_with_extension.dart'; diff --git a/packages/wyatt_component_copy_with_gen/build.yaml b/packages/wyatt_component_copy_with_gen/build.yaml index 5d11aeaf..ec4b846d 100644 --- a/packages/wyatt_component_copy_with_gen/build.yaml +++ b/packages/wyatt_component_copy_with_gen/build.yaml @@ -1,7 +1,7 @@ targets: $default: builders: - component_copy_with_gen: + wyatt_component_copy_with_gen: enabled: true generate_for: exclude: @@ -11,9 +11,9 @@ targets: - test/gen_* builders: - component_copy_with_gen: - target: ":component_copy_with_gen" - import: "package:wyatt_component_copy_with_gen/component_copy_with_gen.dart" + wyatt_component_copy_with_gen: + target: ":wyatt_component_copy_with_gen" + import: "package:wyatt_component_copy_with_gen/wyatt_component_copy_with_gen.dart" builder_factories: ["componentCopyWithReporter"] build_extensions: { ".dart": ["copy_with_extension_gen.g.part"] } auto_apply: dependents diff --git a/packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart b/packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart index 6e51cdd6..3ae2761e 100644 --- a/packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart +++ b/packages/wyatt_component_copy_with_gen/lib/wyatt_component_copy_with_gen.dart @@ -15,7 +15,7 @@ // along with this program. If not, see . /// Generator for copywith method for components -library component_copy_with_gen; +library wyatt_component_copy_with_gen; export 'src/builder.dart'; export 'src/generators/component_copy_with_generator.dart'; diff --git a/packages/wyatt_ui_components/build.yaml b/packages/wyatt_ui_components/build.yaml index 2c112259..5b42632a 100644 --- a/packages/wyatt_ui_components/build.yaml +++ b/packages/wyatt_ui_components/build.yaml @@ -2,8 +2,8 @@ targets: $default: builders: # Typically the builder key is just the package name, run `pub run build_runner doctor` to check your config. - wyatt_component_copy_with_gen:component_copy_with_gen: + wyatt_component_copy_with_gen:wyatt_component_copy_with_gen: generate_for: # Example glob for only the Dart files under `lib/models` - lib/**/*.dart - - example/lib/**/*.dart \ No newline at end of file + - example/lib/**/*.dart diff --git a/packages/wyatt_ui_kit/build.yaml b/packages/wyatt_ui_kit/build.yaml index 70c89a03..663add87 100644 --- a/packages/wyatt_ui_kit/build.yaml +++ b/packages/wyatt_ui_kit/build.yaml @@ -2,7 +2,7 @@ targets: $default: builders: # Typically the builder key is just the package name, run `pub run build_runner doctor` to check your config. - wyatt_component_copy_with_gen:component_copy_with_gen: + wyatt_component_copy_with_gen:wyatt_component_copy_with_gen: generate_for: # Example glob for only the Dart files under `lib/models` - - lib/**/*.dart \ No newline at end of file + - lib/**/*.dart -- 2.47.2 From 3fb40205945679a3bc4156dae6397b5398f3b959 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 26 Apr 2023 18:14:00 +0200 Subject: [PATCH 287/320] feat(ui): fix, rename, rewrite some helpers --- .../lib/src/core/core.dart | 1 - .../src/core/extensions/string_extension.dart | 25 ------- .../lib/src/core/utils/gradient_helper.dart | 38 +++++++++++ .../lib/src/core/utils/text_wrapper.dart | 29 ++++++--- .../lib/src/core/utils/theme_helper.dart | 65 +++++++++++++++---- .../lib/src/core/utils/theme_importer.dart} | 25 +++++-- .../lib/src/core/utils/theme_resolver.dart | 59 +++++++++-------- .../lib/src/core/utils/utils.dart | 1 + packages/wyatt_ui_kit/lib/src/core/core.dart | 1 - .../lib/src/core/helpers/helpers.dart | 17 ----- .../features/wyatt_component_theme_data.dart | 4 ++ 11 files changed, 169 insertions(+), 96 deletions(-) delete mode 100644 packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart create mode 100644 packages/wyatt_ui_components/lib/src/core/utils/gradient_helper.dart rename packages/{wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart => wyatt_ui_components/lib/src/core/utils/theme_importer.dart} (58%) delete mode 100644 packages/wyatt_ui_kit/lib/src/core/helpers/helpers.dart diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index 50874264..e4df47c7 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -16,6 +16,5 @@ export 'enums/enums.dart'; export 'extensions/build_context_extensions.dart'; -export 'extensions/string_extension.dart'; export 'mixins/copy_with_mixin.dart'; export 'utils/utils.dart'; diff --git a/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart b/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart deleted file mode 100644 index d0eb575b..00000000 --- a/packages/wyatt_ui_components/lib/src/core/extensions/string_extension.dart +++ /dev/null @@ -1,25 +0,0 @@ -// 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 . - -import 'package:flutter/widgets.dart'; -import 'package:wyatt_ui_components/wyatt_ui_components.dart'; - -extension StringExtension on String? { - TextWrapper? wrap({TextStyle? style, MultiColor? gradientColors}) => - this != null - ? TextWrapper(this!, style: style, gradientColors: gradientColors) - : null; -} diff --git a/packages/wyatt_ui_components/lib/src/core/utils/gradient_helper.dart b/packages/wyatt_ui_components/lib/src/core/utils/gradient_helper.dart new file mode 100644 index 00000000..740d9281 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/utils/gradient_helper.dart @@ -0,0 +1,38 @@ +// 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 . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_ui_components.dart'; + +abstract class GradientHelper { + static LinearGradient? linearFromNullableColors(List? colors) => + colors != null ? LinearGradient(colors: colors) : null; + + static LinearGradient? linearFromMultiColor(MultiColor multiColor) => + multiColor.isGradient ? LinearGradient(colors: multiColor.colors) : null; + + static RadialGradient? radialFromNullableColors(List? colors) => + colors != null ? RadialGradient(colors: colors) : null; + + static RadialGradient? radialFromMultiColor(MultiColor multiColor) => + multiColor.isGradient ? RadialGradient(colors: multiColor.colors) : null; + + static SweepGradient? sweepFromNullableColors(List? colors) => + colors != null ? SweepGradient(colors: colors) : null; + + static SweepGradient? sweepFromMultiColor(MultiColor multiColor) => + multiColor.isGradient ? SweepGradient(colors: multiColor.colors) : null; +} diff --git a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart index 2c6e248e..bed9dd99 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/text_wrapper.dart @@ -36,15 +36,28 @@ class TextWrapper { }); /// Creates a [TextWrapper] from a [Text] widget. - const TextWrapper.text(this.data) - : style = null, + TextWrapper.text(Text text) + : data = text.data!, + style = text.style, gradientColors = null, - textAlign = null, - textDirection = null, - softWrap = null, - overflow = null, - maxLines = null, - selectionColor = null; + textAlign = text.textAlign, + textDirection = text.textDirection, + softWrap = text.softWrap, + overflow = text.overflow, + maxLines = text.maxLines, + selectionColor = text.selectionColor; + + /// Creates a [TextWrapper] from a [RichText] widget. + TextWrapper.rich(RichText richText) + : data = richText.text.toPlainText(), + style = richText.text.style, + gradientColors = null, + textAlign = richText.textAlign, + textDirection = richText.textDirection, + softWrap = richText.softWrap, + overflow = richText.overflow, + maxLines = richText.maxLines, + selectionColor = richText.selectionColor; /// Text to be displayed final String data; diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart index 97fe94a0..f376b5c9 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart @@ -16,33 +16,76 @@ /// A helper class for getting theme elements. abstract class ThemeHelper { - /// Gets a theme element from a list of styles. + /// Gets a nullable theme element from a list of styles. + /// {@template getElement} /// Styles are checked in order, and the first one that passes the /// [valueValidator] is returned. /// Style elements are transformed using the [transform] function. /// - /// [styles]: A list of styles that need to be checked. - /// [transform]: A function that transforms each style element - /// to a [T] type. - /// [valueValidator]: An optional validation function that - /// determines if a style element is valid. - /// [combine]: A function that combines two [P] type objects to create - /// a new object. - static T? getThemeElement( + /// - [styles] : A list of styles that need to be checked. + /// + /// - [transform] : An optional function that transforms each style element + /// to a [T] type after it passes the [valueValidator]. *(default: returns + /// element as is)* + /// + /// - [valueValidator] : An optional validation function that + /// determines if a style element is valid. *(default: checks if element + /// is not null)* + /// + /// - [combine] : A function that combines two [P] type objects to create + /// a new object. *(default: returns the first element)* + /// + /// So, if you only pass a [styles] list, the first valid style element + /// will be returned as is. + /// If you pass a [transform] function, the first valid style element + /// will be transformed to a [T] type. + /// {@endtemplate} + static T? maybeGetElement( List? styles, { - required T? Function(P?)? transform, + T? Function(P?)? transform, bool? Function(P?)? valueValidator, P? Function(P?, P?)? combine, }) { + // List of valid styles final Iterable? validStyles = styles?.where( (element) => valueValidator?.call(element) ?? (element != null), ); + + // tranformation function + final transformation = transform ?? (element) => element as T?; + return (validStyles?.isNotEmpty ?? false) - ? transform?.call( + ? transformation.call( validStyles?.reduce( (value, element) => combine?.call(value, element) ?? value, ), ) : null; } + + /// Gets a theme element from a list of styles. Throws an exception if no + /// valid style is found. + /// + /// See [maybeGetElement] for more details. + /// + /// {@macro getElement} + static T getElement( + List? styles, { + T? Function(P?)? transform, + bool? Function(P?)? valueValidator, + P? Function(P?, P?)? combine, + }) { + final result = maybeGetElement( + styles, + transform: transform, + valueValidator: valueValidator, + combine: combine, + ); + + if (result == null) { + throw Exception('No valid style found'); + } + + return result; + } } diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_importer.dart similarity index 58% rename from packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart rename to packages/wyatt_ui_components/lib/src/core/utils/theme_importer.dart index 49eb9c80..a5c5eae0 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/linear_gradient_helper.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_importer.dart @@ -15,12 +15,25 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_ui_components/wyatt_ui_components.dart'; -class LinearGradientHelper { - static LinearGradient? fromNullableColors(List? colors) => - colors != null ? LinearGradient(colors: colors) : null; +abstract class ThemeImporter { + /// Imports a [ThemeData] from either a [BuildContext] or a [ThemeData]. + /// + /// Throws an [ArgumentError] if the type of [from] is not a [BuildContext] + /// or a [ThemeData]. + static ThemeData importFrom(T from) { + ThemeData theme; - static LinearGradient? fromMultiColor(MultiColor multiColor) => - multiColor.isGradient ? LinearGradient(colors: multiColor.colors) : null; + if (from is BuildContext) { + theme = Theme.of(from); + } else if (from is ThemeData) { + theme = from; + } else { + throw ArgumentError( + 'from must be either a BuildContext or a ThemeData', + ); + } + + return theme; + } } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index a8cb2d1e..72a9d231 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -26,47 +26,52 @@ import 'package:wyatt_ui_components/src/domain/entities/theme_style.dart'; /// 1) Pass the "radius" into the constructor, `Component(radius: 12)`. /// 2) Set up a theme extension `ComponentThemeExtension(radius: 15)`. /// 3) Let `wyatt_ui_kit` "negotiate" and try to find a suitable style in the -/// flutter theme. +/// flutter theme, or use a hardcoded value. /// -/// If this negotiation phase fails, then: -/// - If the value is mandatory: a hardcoded value in "wyatt_ui_kit" is chosen. -/// - If not, the style is simply not applied. +/// If a negotiation phase fails, it will fallback to the next one. +/// +/// This resolver uses [ThemeHelper] to negotiate and merge styles. /// {@endtemplate} -abstract class ThemeResolver, T, E> { +abstract class ThemeResolver

    + Style: Wyatt Analysis + SDK: Flutter +

  • OX7>=f;$!ChbQ0>4?b$`+U*hGDl?x*F_n+ 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 mBda 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 diff --git a/packages/wyatt_ui_kit/example/assets/mockup_2.png b/packages/wyatt_ui_kit/example/assets/mockup_2.png deleted file mode 100644 index d78e5a88cff804d642826d1f8b2b9c2a9e3608b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774560 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 z 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⏥Fx@RzdYPc{ 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

  • OX7>=f;$!ChbQ0>4?b$`+U*hGDl?x*F_n+ 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 mBda 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 literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/assets/mockup_2.png b/packages/wyatt_ui_kit/example/assets/mockup_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d78e5a88cff804d642826d1f8b2b9c2a9e3608b9 GIT binary patch literal 774560 zcmeFZc{tST|35B{6i0M~B1DU73Wa1HB3elcvW-Hv7&{YYQb(3zQc1FmlBh8Dv2T^J zk0l0!!C-7-8)l3#GvAl$ocHIPkMsUrzwdSZuIu;5={9+pdCmR0@8|to9?#{zBd-`6 z3Gz$ub8&GAo>WaNo5z3MJ8jx>OXSe*s4J$SzwnMA*1KZBF~_~l?XD;wxsNp& zoZl&u|ApHA=GJc~y|(F1KP~Z@feU3b8{OUKMPIplwkh`apW!*3{N{N#p+E4K-4a|L z)0b4Q8%@8VO?cNZw=2Ekel&l$;MPQ)Y(Nm=*U6xfb^Bizq`3X#sObG|6p1iYD2T-; ze#Eun+E%@0U>zPfTAaUg`7+m0;CdSu_m6 zxPjlhfS2{NN5E2Yas39oJX5*5|=g$M5U9J^;IcHyAPYp%IfPesn0A&TJx0B)tb#-+`rIU&$PaX&EIPL@U z@Vymy+{0)8k52yR$H39Y-rL2~*9GdaZ=>H^x1oN%+H!Im5Bl@pk8wH%y8P!!9zH*( z1x!$J;}gXb3QCHbea#b~3KSrX=bxke%Xk0$_(uodXZYj6S{vPJ-0*Sq)`z;gJ9_x) z{D;h1-=F!H5C1b_tv~zJFu3LGsPF9v{O_Q%v4F>wP99fMzy8MpYAJ4h>(9Ql6gNon zKS=b0{@>pP7C?tzOYzUe)Zzc=ah%S@rOS2RK<|3smf6AWNs@ky)kVs!o2j~4`vjyT z`5R<+>w0)`bH5DIi@lh1R!?`w#Si=sTDaeicZ#Zil)EVuLzIc-)#8`Cxn<{-H%Gbo zU)>9pYac&ccqNccbjlYB{oN~{&^YHnU4&JxpHx3YWVF#?hys|#c_X7$@J>sqE%l+W z8m)aoo?LwY<;U{t7JkWHC1>)i9P2tw#4I-2-kL4{_~W@>SMKSy1KhCtJg5KbPxd$$ zuXN7vcBf;J1k1=~#%S==HYK4~d@Vdn|1h9_{1%;k?`lN&8_v`Kt-VTM3&Vu{oHGXA zG0e5ePhkqruE4_!zk6>1MiMx)#dzo$X6!iZ@#X`g%mCxz*LrjR*e@H6QZD=y=oxqb zX|ukEb!XIdL&LdE4vTNh5+gkf^n4L`z~+-~ui9~C_|3mV|6d&OFV+8Ln199eUk&sB ziE?~e!83D5#h|#=C1N%aFRXqPE!%0;p6N0F9G|H(ltP?lsHa`icVNN=V-r{sa)U6z zSQej(!Ft7`h7leKIaHI|rGcK9t{6gnZT;8!DIRsf*gZa~&rliJI@Qmn5PUp|ExN`@ zUIXeGvfeovro_T7xdoYObb;0RN6K?P?1Mb~Z^I8j^X)O4pXBPv67NfV+!Mhtz_ z-~+t0s~(-}=n_u2(JtJVbukTwU75jcHGT=X za~-EzgTB-KCC1b3=ZFjptljcBPan;E!PmGu6aJLrohmD* zx7&}B7FypRvXHzddXi;WIphq*JkYoNZD|3Zus~@2Bz7cSH_h_OdHydvR0%oUFA{0< zsANUZwrp)1`!VXlV0TOcNmhozftS>0^F^J^AI;Z z(ddp`%p<$}yYF^OE^Q z)j9zQ7fS7aU!x3r_NXE0!J~#wUHdVaS!8idfsyh4wG|J#ssVh;?HD5HoUQ#B^j$H| zC1NiiDQ06v{538qhRcin)z+&q8K$fYDnTrh2~`6Hy6RiHy})=viXjOb=nFPtN*dEN3N^T+ zQR4NF7jIWRRs1_l0CbxdZ*o7AsA;mF0q<2Sw4QK_u(JTAr5YN=vi zb^QopRiZlUX4R)Q!kn%_cq|5z9A$%$yc~klksdvMY`?)U{ z6yrdsq#%0B82Mr+=~O4HucTj8>(t!-K_Mi5XD(y03DGN9DB}0v8@CHVh$$gQ7*nwh zJDn!$S6yk3lyMIw`|w7uu`J)*s;D1?e`^(!)@zT${;D~v8bIq3@FagvZSk@0$!7l^ZyzX!rq0q9QmRX&wQC7 zn{Q>T@9_15Lr14K!$agk%seI(Tt*Or_c3+NqnV=p$jqK?|e!W@l7+*h$r0;;F!S_-iX1&}J zsxh>|mql170)nP$NUR?8kyv3Bu&xbvC@ZfmMr)u4+DcBM8$f>-p9udNeoe2i-Q|df zFo_Ok0amsDkj-!&^idwpYSfZxn2^CO7^}ET#Xuv&)j-CnGpBc^Z-$^YY{40g`8Ye$Rw>n>d-n260U2HZUDPyQNH(3c(kDY~G@Kd1nLxIKpw zk|4aVv4@PTj8qt^2m^EOjRS4XD>?|-Uk0|13oOp<6+PBdosX8iZC>@{2ErABFA( z<*E1nB0^PO11B+v)K-|{Mz$iD(Gul#Uv&_9JvlEJ0N~hXwWGte>kVLX0xd}MB2gL!#q z?SLHInw8lm^9=7i0A^a}$^)ie1fuV73s_fku0AM?P|V_S398WMWbcWthY;7?SU*)k z7KP$zdVHZ*^k5MaTB!8=8|l!!P;7l4zt%mmWv$*4zK0TW;lDaZJfTA|R@I$-{@3{w zlBM1u>_cp4FU0i=O}YmaR@YJ`A^Ow&yFvg1YpgD~6ZA{(jB3B_tV@K2oN`}SO~D?g6rAo!?8k{PFQeXO?5yMv0o9TrreZ*A08G(qyl|cu zCJevkNO`NPKlV^PI+pJ9j?_f*`(?M&|F)e#h$7TnQ`o%yLnU}FDzP7nb;nW^KQPK} z#6M~%R*zoAHTE<+U+3r*iC!Ot^YrV`BV9Mt0F#eEyJw1ZL(SaePy*jdqrOqhoO6r) zt8wx3pm~kM&#nVX1uRloV^6y4P6@OM#ac24N@!kp!}r%bz!|jf%xrsjM>H_26C%J7 zta=nt3kl+!!zeDPe8fKQp=y?=%KGu5OGrhagdHtz2Lh64iU;NZ86Q%dp;JR2MTo}C zVz+nQlb(!^(eJ4 zsezWwcQV%h0x$mxF92vli@W2ZjoyEJVPM`ZA~*+tm1pA(mtlLSyr4blvfdv6_V255^xxt*g)ez%LWU%MdH-tBdvDtcv~xO6 zhf7XNKA#useXn^#O@oEP^T zr5S~ii+EG6ZB@0vx{@6o6NT77U`YAR>wV|N1I<$2@3c9b3(_g0N_4|3*uQ5FL3vS` zVdLWfn*q>unmS6;G@}!c!>s*)X!*Z`n9>oz%Ch{gq_O6cKFZ$aEz0!DsvN9(i)*u@ zu!;!9b}}#U=ZG+8--^Jbe?sZ?^`V!^fJlTM$SDE=vojf>y3Hd&4c~NhJTyHJrYz%W znva&?P9`O(9|wI~4B4jg5iqZi(mTvNcjj^Fpx|$8S13ZRU09vawHpk{%C&c=lwd_2 zo>g(c>E%tD;`LB1S0s4KUDCEvO!1wx!Hgn-PwrsA zUzkPVg>M4-+fQp&EqGS#;RIlMSOvUneZaoKEysh~O{BK8Np7~jPoe>|7YR!0Wzo9b zP03hkytAbFQx{(_t)zr?c1808!5kp(k`F}xz;vSjtju&j`HT|`U}me+Hh>~MWYQ^| z=Uz^fhTINO>oq)hdk=BCEa?5bzJXSitOpO&^cZO8Z zL_JJd3}4&*Ym5!Z)AyvlfyyeWFkEJ%b^vbK<&ND9c3RA10-%meHd9BtW%y`P?VgY= zWaDmK8+=V-te~V{MoKTKObuDB(`xKO8-Wl~(IvN`8WsZ@3H);8`@m<7S?D zIKNT$7B6eWPp~qC4i?-wV=};g?T>(l3+x1`0Cw9HtVrTNd7j8|o{CvA&VgLkob$wz zFbGK}$pCGEd(yLk*|{Vk=LPk*(akd$sqWAq7M~}gJo@4%(ZE>+b(EaP zx`=EBh87gEvG(uM_j!5R>dT=m$~pip7?NQ~bl||HsXJNgCBeCf+FQ_JS6sL|6xFqx zHS=ZVArl}1WK$wY^5rPH86bx2P<$3{VJVqZ`>>aWggk`?m43w_YirKi`ZqT*1hN{f z+c_-BkXn%ojmQ&PrmQ6T1xL>XEV)Q@bK`EoqSw66mE9M?R2!{B;{9Dm8P2}JuUAe> zlFcVRFTir~g!d5rFIABZ9sqvGOh);sebc#5@lQMrNPEw#9NB!mc*BtLinukppNm0t zXh|DB0)-7=0*Fa{A9`msD%l61`3;AjLq%8mC3%AMuM^nH?GbZM1JL!m&$}Yv@HB>J z9D1jAO2#ggmmEI{iV(7Er(H$DCc*1e^&Q8ytGosCWwO@mawa1+WM~YdG=951XJRQHG9MrN5*8HONi0pTeGEx)2k&t<0CO@c z>L-~_Xlg2YCre{jpzphvh$Qz4mpvvEB8=bv8cSD7*6t77g*m4Bmg$1M{Aqv9=@USz zVr~fh@ZZ%!f9knZZ66TJQSM9GCy|RHzJ+kQW#SC|1ggwC1xKFH}7;UgSRvST^zZnP`1<4ElZi*k8cl$PvUAso` z08H=_V6_@}fR{MGL^S6W-q1!uPLWsQDqe90+6V+h@-OPY^Z97FqLrm}S^rD3OT;=L z>_aGu+8n4y=NUeNh!lO6zbD$Y+7;VcrQCgVj%E+*LG|~vB_`wgS$Wy}g|&yC2$4Ro z?*soWqtrR6+iAXV_mqkL7k&k=Y*w-Nb@;mwz{W|V3HVkZ zu#M&1t6m9^&MKw_GLN1rzm4VBOt@%P>DvkUga&t#&d-pjRF#kB7y3#vimJ0a6m`x4 zIiE_XsdpyYTn?U-x)U;)N3sEo-nw?X z^E!;S4od;(WhjLaZG(@wopadIM03lwIpP<+;qP#3OK!*&`zuxfz?*Qx71V}t0B@!j z&&Bf~qYT%{JT&#s2p)iaDjKz-$N05eh!9J10qcEnh_MqHU0lSZEV^i?WWxKvp2gg_ zjaXq(hMNJdE0g6_9;53waCfh}wR@8Lz#cR{2H#Lmy1}EJFK=cdjI&A+d0ORl*DMq} z(Flaic9z$@_t)D^DL#H+5Ei}sWX1ysZk`P_Btd;8r1(Iyy>Tk1+Pt!D^sX(dJe!YS zAr9rXwz#|_SA2;UqR(vetlG>cOFh8{1dvqNj5=+{=t)MAEy|F@n<6;jQaH!%)WOY0 zy>#M^o`w~>mxC$Toqg3qJH+L};L+2fhfsTg80g1~pGAY)x`l6s0CA9`T`IOKt>Dkh z$l&CKm`PawNt~oko69wokASaqn^f2hAR|d5(CqBfE>BXs!bVK4jW5u;_L_3-Yn$N{ znX_sEIl%ha{;KkB1ax6G>ZuG611NoBcrP^A+)#fETV=R{oy-#c4PPbf95FBq0M>mO zu>*@9iCw~_Lx86-e<^y#oWi0dUVzY449sS}oy$R;LO28KXTItBh4b(M5wWaxd-LU9 zbIkGWDg)#lj)Jiz#GzLmA7pQbNtbhDt6bf?HqeVuq%shmpvqF1ZgH@?C>cRsKno5Y zWg%zC@48eB?xskc0%Dk}7NHN!0LRZO&#Ms70Wq2~1L*z26idh8+cLr!o;jztswX=} z$&oh#DT1LPU;C_0^v8Y&!g@wPC>03WMi8NvIOL7hfF_rS;A4Pkv9{G8dkO?z+tj1; z6klWkQR+2GUA{3@gP2ygi0=VW5D*oC#~aS1APd_>*5aNhKG{#&&3Uw~x=cdgpL zCVd05d6XwyuXEn4w7>z7y7kRQ=zJFQK}e?ExniN?W0;(#v8IP4pQN~?Jdo5J?tADkIgI*te~p&iCc&dWdkD4UTiwvChwUj}>=Jn& z0*&XdUiM!z(w#q3#aDC%zv(91W;U8EJzqZn_WJ8xf2u%Nsni<%Q27^m{~uUXM4zx&)myeU@>r*3skHCFsKCeJtze}?*d0Pv4575&I8H(6+&=)F^G2ekjt z;?EiWc@et&gF1(IUExu^k|FN;edLWMe-9-6>;s_8;e{*1+a0r#ci%0r%LUrsT(rOZ zseA9oRCn=bhDv0138;P_`I!7aEU#|%j|Bb69^+q&Zz@>;?N6d@abHPEAQ|>ruyc-L}sW)<(20fBR>xx{hxyLKd!(10`NS;3yU-SMIeEU%H&Brh>Apl@ z{cq9}lGJEMz09^vpGz69xxko0RxWbKQp)Mm+OAg|{72SD-5q1AIt9nm?R)!YEWufj z7OYtk@_U6~Lh}QDyX8E^~jyGCeiShb~ z{N<2y4%igdJtunk1LG;nn=k4f7~idRDk1vs^|x+$SU*wQ8zUlPcNM6a+$+%Cdq|qp z8aVUcY9=iQLsd2KRRPHr4M}eV#@nv0<+MkFCcg|qv5wfjX|mhx6_n8KBS0AVb(q8L zgQv*PsUQ9uR(5{LBS|i{L7=5$3!->xMUDri8(ZJXpuqv8KX)e@#FUC81aqAWm2cUd z$`=z`QyYA%N(r*cvt=`cmZ~k)dxz~&iLyStq&n|3PHqyJk4o;ZGo}no!)R<-9eKcb~gGkn2l@ z{m_Z|Rh}K2jbq>7j$ZR;eQ_X)ZTkmp_=dYOLA7Xe+Q5!=PwZuRQ}TWfXVeGVS1t1G z-Aps;mPuKp`A~xJjTjts_M4c8VVQe%hdrr&UHUQO@dst`K7y`DQG=ji`fxVj5ftRW2j_*oatg6loF?b_lF&;X>BTchS3kAWk%nUVLB8xt?t zYK-rUy+PDT%W#WnIK(2@^ikGezU-_~!5kuxwdp01f3-Or@NyKX{1Gycv%fv_xga>V zLu%>tq2Y6f_EEzab-^xs?=FP}%R(B&HxUu%VjfM}EMBu5vCJD|Q!cbeqe#A#`mOu< zpuN8NWFGg0>uzDm@9LfKZ;(Q~bEn_hD$e;!V&AQOhWq~FO1?2DSR`bZ7)iY+5)P}a zu(SR4@Ph4A@iAW5X5Lcv^nIH~Z+}2aRH8r@vrX~ukcj@#HhJ@^BUSB7kG_JASx(iD zkx@30yEZa_#QKhU)hVxAh>>jv5OsSjfa2%4O)IDVbm3BO?48^Y^CZ(<{#m(si^Kk< zm4l*+=Vj0#UlS{huWJsWWx5q5@$axAmp=NI9;3ut9B<|RP zW<0Ncv+1zQ@&!>Kn*(aNtI?c@f#`kdZ(Z|mm_>>ARid3HeQ_(FYC%zLv>d?{UluWq z)PB>cgzP?qv7e|(BFtZrrJG{FZWN4vmW&sWKM}uC6Ini3@0Y&5j2)V+SD#xc0dmJ3 zUaqU5(Q{9+C$<=!+>)ROlp0+m**#Yr6JVUF`ilei!%5KX+;Nv!X+CfIa1jzJX5R3s zqH!$!nslTN*z9oLnM**%A*6cc^O~q?&QFegi3q-%lx7e0UKJ zUU(uv`hW7jcbo9t5pPo*GP7lK8xCj{gPdO5lTB<`Q}bSGYs8Kn{wY-!1KEh%BkcS9uUC3q5CDzqdR8KOI| zqXZS%(_mnqqGa+)esSM(`LXS=Gbx*psK!FwE-d;Tzql9ceT|Pk>_hq0rh09U3V_`E z+8*}ueWBcECOAi5QkmFJ{T=q3&`F@1r$BF;D3B*{Jj`XO(qZfKbNngi-HbIHJC!@g zP->NwGT+3rpvrgr*AiDKPy4_!gHX+!cec3tkgPW97q}F^*2z2*Pv6_#13>;%XtVs< z&w=Y|YIuIBQ!c;{~Wt{({G**;`p{ z`hrK&-GMY)B*AEOr;MkOvGt+ObBC^~Z~+0K-WaIxD|$=Ng!T;gCbM}*2)(xSbu>iJ zJM6K@J%xrLTd}+|I7u;du5-HN*;CR33YY+7L*GzQ?eo4dTg4CDxW05Z$JiNs5E+Uh zV5}T|Nb&i1pXAH2k8*N-f;srdm@?9Z>6N-Ouk1&lq18$uRP-l1A4eEy%@f^b#Oav z7xoBXlv(nlrOvHYO|AbI9Y914Z@te0az7*ol5xs`Sot5QECHdwM5nFH(-}LsbH#+`$ z?fBjK{^9d@bTl8PnKHQlr$#l5EqYmDKT)47C%+SaK${ItYSmpW0q!dzCj{TVqGE-=i7x>($xq&%e#|l^9h@V`jD)ppf_&lg~nT zeZ#fpig;QAm85~PNuJHZv44cGRMd07BhEM=l>WRY$+zj9(_3mVwPi;L-`IE2Qb?pz zUa7aQfR2LYZM3G+8#%@~M5aT`td5!_>z*lVn1-i56iV4IuOKq9a_HAcEMS=4O+{~` z#xfd$9c=3Uw9_g<#7f4>`0bBMDL54=0zCAVGvCl{(o z-+%VY;SEWkW{M8goHR+uXt~z&zly^$HI&Ld;fuvfOXBxNmt0A;6z?GVG0w~Zzk|^f zr{`=+&g@)HjL|o*UXl@^|FjWhBV93y`|O5w`C_trN?>6XzvDEiHgNL4VNM`!*Ew86 z8w^^JRxMc%i*LkVQg@lw?|@bI7eg&eXeZ>Hg78~S%803Z+}|AdK)wk8aZ|==*z?AV z8Cv=4tPl=Qkl)_YefNUj+M)=Yc#+`t7E!HRkDglSE>@@7!Ii+TWLyG2H)=UZpA@=@ z{Ck*iAB@keEGQ0p$9kAw5kTi}#t&C~5xsB>LGkh*e-d)`bTLUJmVLI(c?VW5{A|&ust`jHd{PHMcx&?}6U1z^$4`4_ zsG+kTUUv?1AFF)ANclv9T8rdFYlEIVv_W#|QN`b4<{NAo+M&@t7-WD`2W&rVex2gO zJhgDcX+H%e`d~C?V9z`rIgN^*IfqQd&TRWK?la3X>R-dURA_ie0x%?XT9JGSTCyfU zK>n9az-)cLzQ!zcCt{#CDg_^XjJusdg=J(8JWuA+0p2< z!@(N`+=m7gY2q=uOCm9$K&_qiW;yIXK@k_9WoxKZ5N#%TPzG`(^62txe@Fv>nj4ep zKNZ6wYihc2F7KAPH@bYL9UIOau-6p3C!jpq{!=oiXIe2V;tS|ww(6E=7XxFgfGS{z z{}PvXcH}z*Q67KyK`1h~cwVmblgb)5wu4a+rB(uh%&I|WFTDJLYGa+{4`r)Qy*Q7H z$O@^|bn+P0foi=WKbWPAufl)8;yJIMsz#b%a$Tq2s~@`9YhKY8cg~A9DUyGS`h@05I^IR%x?@tHdang;w z+fqEkUS~eoiXmRHo#wxI%J`H=iMp7_)r}nvcPyD(1eNT!{7Q|2)oYQ2xHc2^&>nv~ z(m?UdeE0qzj*+$O!w1IcsrKI!UtfY{nihaCV@Iwuueq@93>DQ?qf~j zh6{k3|84VV=QP*%NJW_O%rEJXW2qZ$)7Zz)H?Pe9*nRmc*Y>AeH-!$s^uGIkn-L#? zdb*ZB^Gq7qA}`>1_w#}FPsxrAIH+6sGttC#K$qJ=`zhd5ZuI|819JJ9eVHsYzOwd} zy9sDfo3Yg&DY%uNDLAgD!010>;9Rn>C(`f5*IkU(f(nc-%;&1 z%^w?0d33oC==SiO|7WLoV?IyKex|YhCH&us`Y+-C<#<3s{(q-xo@Qz={x}O@Bk}*Q z+WDKt{8!&^9t8bY-~Vf9e~QX?gmdU_Xa@C#3p8=*R;=I4tZt(Ef&9-8g0W938jO6x z>iPxF>U39|<21|9>cp#OLRn85T-a{}PHEH>)yi*GdkymLe1H_pLZmlj1kn>#a`a*! zp41c_DvoIgzemIu-9t45ZOvE9t|)5wI1h1Y{tz$7!<0$owM@+pe_63lu|Z&odlR2@ z1K00!0YFJ%a40$YlL>KAFd$-<$O#p}SLlvuj;j}(Qiy25rHI@m@vG38@$mt`zQ(U# z_4@Flt|`xnzc9;bFpdXjpLs8=Di9ga&W(SGm=DP!-^d=+Sw9^zv}Mo(?Cr+bUtrL* zq~F)AJwM?MS!B(vDAJ9maf&Qn$J^mXOUq~fhPP9L;db{3~YP4 zE&JKFF3fC;2|K5Osd>sezdv10JU(WoPigevatB6~k z4o2f%;Z8?!Ge=5_gCUGz-Z_7c?RGkuU*GaDzkm@e)~OQWK$qUdNVJ}s{|55T4sbPs zpL4*qyd3;geZ!%(^iylfy<^mz8xvBjZ#(U(PHs|{{AX}fw}0>O!{%?cwFPyJ&_IF% zUDOR_olCXDpO6F7aYvzZISnu~k0l+IVg93EHKT&c>Y{96U6nPW)?=YdMuo@0*55$B zwklJ zA0c@hF;7t=`ef4!t>=p4876nCC(Lb~{Lw*!o%&z(t*dR194-YRbf(u9ljxs1b#l7l zZd;}UyhE#7wPJ_rwrH1DoWl>aWPN~Kwz}OeBX)PA{d8D&yYZcx{l1OtGwb0YpbF9r z*mt%CD2>Hj!Vj-MSz(NMep z`4u1*ll)5KdTyxX#$v?mh(phIzxmftB?+Wu*IrbG{KVjif`TZDsEuh0Q9(u$W-JeYl* z(d)O_VY^39hI=qb7WhnML?%lOLJk%#kJTwHH{(@^3>;G6+q}L386RM z1ErsYE>GxzLFRSwJPNSCtYH?Y5FI-&F~-Aa?`PC7F5(%VGbWOd2wsWBHnlS8irvn` zV7Q7?)ybSEAOv*O&Fyr1ZKTA!$VyN0otES^nb^{=$dzjQm&}hv!$z~nuLXIGF_OHLpU67eK<&1^J zk$Q;Wm4p5VHSiMDI}TCGyV zJL9~}@rt4cM8JD@VYXdkb4g&p_lq^XE9))@MGPE)#I}l0Lh2s=7?gA5SoOINns-W_&TVaf;>56v4vPx=7$Saj3AHZI zX+-RO<-Ef}@6bm(<$eOP*{zTr46_1?qBo9Zh}Ra3eVZ|ovkaUDAO;*k!P%~2z?K5) z-RtqfrNE2v2-wEQ0GLP*5U}Vn6-z|LAxpTY7O8xWbj=5g;x_TYii3AU*dD_nf;$S+ zc%&|^pGaIq%v$8xe{6V@K*89CylL29i-{r#n(=Fvmr_%CW3dS2Xj4H4J9) zri63MXHsNzj0ssm!=Gq$-79@n=<6<=>p6uzNbqW$`wXRy+7Twjv5M6q{MhFHi?RblK#g z|2vZB8NIX+GVT>jyh@nV0u*7q3y_|D1#H4IqT}4&1q8pUo=U0Cz6S?3O+4*I+erc& z;!Ab)9a^U(rdk!tJ10YcjTad}B{+RmqE!-=>BV{o)Mww;`&>DQbAA`FZt2JFn)fY_ zGO_o8A6|IUdYU9iN}8zt{0h}#GU3!YUvO=`w%OqP>IZY~lixRy)*J|d0IrBvHPF5wrX++EN!G3TYh;Ah6xe12&_L;i~Fa86s+IMLyuP6rj2vIIkt*QgT*omDkr; zn)kb#lW_nHs}wvKsp(6Z|y2=Ch>AP-+n}-n1=86*$!7 zW~yu&?Z6yQr{O$NBcm1;sR0?#$s3UV1iD@|>hc6(8?p~Lx+WZbf<2@%ef1k@7Bq5d zzH>Kc@oRYG_~$?r&Y$X1QJ=^y1ZyVRXQ4>rLg>d}5xk7Kh1~;r&02YuS7($IbZ0`P zXMC-y;!apa@Oc7JIqf4kb_p^iJ)#=$ zQ8w4N2Ms1}{fxdQirR~_g?2vIuDBpZ%=@nvce3-ZyFdkxQqcKvX6U32@=e)#em%2P zV2`#JtpX1kt|(jZEii{k&ERp5yWulltvIt{#6;!vX#jSh$_Pa@)ULN~k8v-dhs)6( z0&KJO*X1^7-+nY+G_VODcc*MIxW8KNa0z9eY4mGWK~0Dsq0q(3Z{2Pb2UPxy80|=7 z>%QbR$sfvtE2U(wZguh3(>J7?`^JY#t7M%qu^&Z40z<{8zXDuKrOtDk*w0d3Hx8n> zkM39}?akI~W@>?+qDU?gz&;E6S*)bF=fOt0tjJ(S;g|rg^wO!uip$Lv?`2xtCRFEn zu=p+X@SatFyU|K^DC0Q)9y(u}{a08YWkB>0&H>#vH^DEA`vojOqxgp<58JA%&$GvK zISw>edH~9{)aUZ>2Kws0X};hYmLel&GsCZK9)Fbgsf-|oN6(R2b~nAU%Gw11FsYgF zYsEN<!aLzouGHT=5Gj4;$)q-4oGASw*0*3!jk%mHQbM&mY<_*Ch>xGXDUt$ z-w=LMPCuQUd*43=!^y&+6;6&vH7aWqzYe4}Exq{3v9C5bR&glsvb9WWV~KwjJIo_Z zCRIn;IiliL)K;?m+`3nFjP6X^^X3r2Ju4bR&bAC#be?2JfRjpn&i(Gm(@(ld(!ees z;Do0qgC!(Ax1guRR5jC(3xw0xhGn5vjF3zHOOfoSzz+I(P0)_Q1(^t!hj+UePz0{f z>MUC`5#}lPVvh=2C{ua$YE9APG`L_cPYB^4r3+Tz<;DD zY#*qi1y?5T0698zg;19GnUI}bil_oumw-cFjHAp9kXBYGfMV@YoXJ?x)QahR{1ucx z2b(*ss94@3MR!b}KK(ms^hW)8@HUGH?bymD_Zjp4l z9M+d%CNjyZ_RD3@4IUOvW7|b=3qkJ(@~C))JPCp|T`L)+ZIsKXp-`K=T z^@ox>BDKbI4)=9L&vXrS_i2ljpv9;jASu`p`8v&pvGt*q3H;{$V)4slkNy%cwGC`&4h zgUHMlw?~&FZhG-ySXUTHv&;cLIYupJoaj0Ah57j*H}V&S1M3{q!d-zD+h)Y;BFSGY z&=0eh?)hj(cQ8*_21tYq-Kg41&ATyit$^uL?bSKC?y~F!UQ(@xru3P^w1?deppZnG z%4;WjSC^OSXN7&V*@*W_MR!s5)mP4V^d+H2uwm~>n4?E6{ zK50yR+EijQ37m)^y`tz(=^Q0Kgyn?1_YGQX7;1{s(xjIxDvCKW^$oq<3@;U9Q9&oMjov9DET?uTj$7&1@=~;P(qha#H&!m z>+#S)i%Ukt`n9&>?j!sfmKMDotcyAU<1w?9?I8yfIhvfu9zh?>cPO-#)fq5QwG2mk zcos9N7%gTqQfJfXphi>!VBJpu{jvA~ieelJ6f#(J?;uW13tx67 zQtbCa&$qln$G=%0h@(7y97ln!0k3IFe%5OC2#t{5K=41s%L(LluNodemWdUsMkXesN*YhV!G5l5E>q3*cellI0W4fkU*OP?y>snk~A(kUm)`lTah0r1iZs zFzn2U`3B8_gx(#wxeez`7RG|)(Y<*I4US(w^UuE~=j@GzGUn&K-92wE>U(IRT8G9$ z@(CefuLdA&*GAEOO+w;DN^c+?{$_omhbxR&isfL>We~P%ww(JB$RX)S+!O3~+Pnd#T0TnXo_q;~^HQdzP1=)JaDKi|#HkbudpzcgkvYDelmS?h zl=;#gQQIohkA>pD#1U5bWh*&nsyl7R1Tj}#6cs9qL&o7j1Dfod-8*R8jNw$J?c>dIz-TAk5PSpb|xMK z9DH#KMG5Yj-lhT_I$6~i1GNls?WW$%F)BULNr3#S(vV@6EVQh76TRD{{yANoQYO7n z@BM{0rBZxC(+q}eAU^P6(QT&qHNRd=Z%6aS%iN(`rdF3yB{^ef(rc)qMA5(tLZU_O zi)R+-qb`o-nV#mU%Vo@>cIsE@fOM0*S=2CF_qaIph}38b=kai2e%F~;P(@e1)vr<3 zhq0okyfLWfEC>3%IWH$iA&RY%FTe8Ca?m;h51;jxI-6Tdy!fhNPIll`G{~Sq|Le^VIiao80%j@JM$YHnDX*}%B%ku- zfR%_~In38~SEv}nLKf9AFFZfhd#t+2XO7k)mi&ob)W25RT4q*iGFDR;RBX#ops%K^ zKf9r`?<6MBVs3C|MilJGxD=3Xmu9}zCDaJLtCI$r6Kwxv#p-YwOwkPHfG7*VNrXc5 z{moGjg_+aq7bkp69$aITyony1k?yRVYCkF-xwoB~vSMD<$r5NDfmd~M-W>P-R5cp| z!oct!6R#tw?d!~!S@#MWvSO0A_5`0Bd%NT{D9N%KgLANbAp#mXLSjgtY_TRCHH*@d z(>@-1;{y>2A@G;w)yqcejYTH$@Eckh^Hp!NgTtzQFrbAJRR3Tb#YvCxE#H5Tzz|iU6>4(axg>Ju@3DbQqHY=kdyC`<>HZ?QYbbSL>%snn$Y(My z>8(qj`k313sV5e3T?Prz^D=zADT_84voha~?NE75*E!s@lUcJQXQJ=$SRuLtlILKq z(Z@^$g#dQ*{R0R1MQ6Zi1!5ug%dATp$X?>=#7+`!wR(u@&ac(-7@sH}xUn~2AwXuw zF(eRMN;Q;k57OvqyTp3VjJ=~?zN|y%dnvY~I6x*>@hD_!zCQ!f>VJ`8p_XDftnT#& zwD4jcglHSA{)Wg^keZ_WG129N)eRtNVqW8K0gjgzOJbtQku$A3 z69hHS8cPf)a@s@&p=}QSxC+)qIYh&d9Q%xUNvz{nTYB*E;pK@(ge5mZS5zFOtMY;y zp;8qofEg6ktdyGby4pAY@N0QvI*GzKx@8qp`mn3v>h!y3uoX=E5rKl+9O$s^ZJj@m)%3-OT z*+PY!$@wtkEJhA<+%ODto{eobzt{Wo{r;}&`-i=%8#};vUaLrP38o|d-rMZB~R6>zON7kt!}+3yK()Yto7wQzDr5F zbS&2efn9hZppBKAnEn=2qh9c85>_#6TKP|U4&L^}PhiiYpA6&)HC6SyM&D2Urs&gI zFc{oT@&~R8wA7tHSzQc_AZW50cqJBkL6W$mGL;zjo69aencjj4D;-}U?VCdl&VcWy zhsGRk~Is z(vpdbcRaO;z-Y}8@LX2?5fVd50Xxb zIxy$OFuvct1_#oKTL}qi%AF-V6;v^d2lOS6iSH6h!Jmv8fI!h-A40c&|8H0m&XM!q z?W8TrLf7^Sk%Lzktc^eGZ6<7Z_ctr>65%DXBFBWkRQZsq^7cfx-r30>{mxgfu7(rx z2KTSvW$&)jodfERm@S+6P8|tCGS;`Bt#ce1RNZuEL;6OTne#%eq_Mv@a$&`9>f(<% zVeTq_R{eB+KkHRVeR=MF`fApCFe(_CU{+7oH4ib2-|(|6hQ%228ufm_eKG5)DUp+{ z9o5~aof80LXMEV-0~ZDi&*=mwJJ+%s9){Gx=Z+*K_uvvuR|C0H0sjU-BWhMQe`VkQ zV&5WE7CTTQ(f2}q7XiQR;HMfKUH#2JJ5+SKg!8UHX2Hcox|Tgg(VIQUfj3MN{Wzor z9KDVeQ!LI~z&?fg?Wu1YVi7Oy-?^-R)i|i8#JQKFz&a7c5+$G-Q9Cg^$^BQo%uh4? zH{u(;5qIWu8ZQPEtwK7BSA*>kw(HCJXJPUEwRkG$qwa(*Cv`>vI+-;?9)IJqoOqwO z8+2~?$mH#I&&BuqzhHI;_2RF*Z$u$Y@<$eDt#*M;5D#k*ria%FdaV}BtU_l-5wDde z)&PLc&q}Tas8n>J(gRQvrY}ujSxeP0u;2AEeuCSqZ)KOR3CyK)?<5v-M%RNP^8sN| z_N4`~!0{Kg7wrP&cc$)j0Ydr8(0>eVL<~7h2ZlOMF$I7rHa=ITZJxDs$S$)dIjhih zW6=%RbQ3U9W1I1Lc{mT_A`VR2*eBqvI8?2(FQef&{AtC`bXD|4e_&QH1k>*>ci=Oj zQ%+Zd=4>HS+#jvIYgsi`(^(k?%-R+Is1~9Vr`KP6`XDKnUw;D_ zx)S}3Eq=@jVm7?%QV`&FIT=?O>_u_Sp}q_jub#7rTNK4jDqWyaOgyneE9Rd1#&wN8 zz!=2yfKi5l$L+yU)ZX=K%K)7PyK6~OVMq(-xEI1(|w*3KB@yjgFyf$w;^s% zUTnI)0F0LX@NbWcu$RU+uJo9g$y0TsEXdZI3Ok7w_F|0C8T7Sjh>ldQ<){6A)~`v( z98uP|b`8s_PCB(7K#a?ztalL>d9?o8PPv8c+K+t?E!X9>leo&t3$jBA-4Jp@1>tOy z!lqdFF)W9B9ExbNkLR-D#@H<S)>b@#4S!y?GKYH41Vv{kFHmDV#~#ML!_4w zQU5_iwm?e|nd!*R9uMAVIFU<)Z=g}#_zHU&?dBk?u{C)#etN(G8@4L|? zFf4c_Xk${m%ZIF<&syt28L=jpND4Hdxa9(b^^>-@8sDc2_&oL)_cW5G`iX*^3Jz8r z$m3KQ40CS*BbEv#^*`f3{tyi0h`qGHMs(>d#a_e?61)!_0}DG!2JvOYy>n|mw{^Yi z0cusRd;#!+Rnvm>ip15h;2mJ5%h3&^PSCoKa3~-Iozg~^xfxS#RFKW47}0geLfp_Y z+K4(@n@5VRXCG7qNjW^Wz>A3|UAmCHrg!g`R>xH-o<6<85gC~a$v!c8&6zLl=91p0 zMf>FYa0&L+s&EQya7%$q{EcPV%9^>J1v$atBi7Aj&cx-#}EK3`H|^NvZP*zOy~ z8>NX8!5j`}u|aZ)OLX0cG)?Ieho+x!~C=NB($!6WNhF^rRO-Yhl|gQZpX)cB*15^~gIt zi@2DgC#b~`S6%#Yddb0M4$FH9L^j;&!{_1~rB3zv3~IPeJq_k96sYAu|8lSUI4M0| z^8B=ibZT@xU)(9&FWX_EenLlJyyPo)P8 zDgrO?q_*O?4s-5Nt<=8 z^k2_Cs)0Da>zekkw>5&5t)0+#pI=R)KjLU(cfryo_$SOWWec8he_So=6W56YdnCLu zb}E>dOnN#g4imUIUN0W+;fR1-bOTNG)pri9(zztwPXkpl9A%k%2U zeaZOffCIq|H$U=Um;Ny}DO>n?Wvrsv*H<-EY?6?c8FT2S%Qd1c=_pmgGj#$GaS>*`uUvz9XexdG+$U-yhs_QK-T*FPKskE z{?MeHZRWoDu%sKwC^J91#-Jsu;*!`YO{s35UFUIQ>K1fNIqr*c6Gc0VlnDd zKVGb@)qf;2=(FwM9hJV!fpgvtuN%#)e9oJ34U}p7`qPL5TxddLTQo$~(Xbtna4nHU z6RwWzkF)nczHa{PxeR=~7V@6IPucN128k?hA0?hO(3cmE(KFS;H_!z#>r5fw{mHB@ z4Ic+PIV}Q(c6KEvqx+zS}T9HCG~FZKNenR zCy1}6s;S&K7h-%=ab|X~P?fl-u=_Ih899fi9jfg(yK9j7sc;}9`2uEp#FopAEnzdZ z23;W!kxSq{t%&zG{MqNWZo?CxOVF8S=KP^U7*;!i8gr1|c!IX2CBy?enf&3r+}VLO z!pr!{dl=()rC%={!PUr|*W8W>RbhdPQu{Rs;E3OkwxqJi!f_97wLMaO01E9GDGwrK z`Rwl=>^Ofue&%4CNJY((3^&i?I^Pc{hI8@o>q(8Oo{*I4BiPSdw5J^tur45949(Y! z@0I)}BJQ$*aEvDdzpoiy9W&sU4GT&PaJ&*K1ULQUJ5X`R|I9{m{)j23m>tr9HpWfv zYcgxyS6Yq?`@r@1zadgR&gA{9k!wwitr?`)tl@&3zQrBavYsu_JSDjl?NA|Qsw3%U zXKf;KdyK(#FrCby&=cZTt*x{_;aHlD^CGEpfn{hKDleH|2Q?n`ilKaB!OLMB7(F;vb9p|=e7MvX!SjJZVNdi`WbfO`K zx#7Q7G1?(;1Z7zK{lG9$zeo_KP~M(R!KPupYhAH*r`9zdoC218-S`4hwEHZ*>v*5- zLNWp}#z{U=w#0;%xoag|!1%V?;&0SijP1A6fifVPeY!B5z1G;Osz15{Io}+S`@Wo-xoZPZz1HNGHcI!LW&8(xOo#wmz z2>gkw!9S~hYZgoHh;*=S!!+bNZlQwvL^{aUq+prq-xsY*H;KPcr_HWW?r`dn;~Q3z z$Gh(c@<#wG`VJ?1tE;TR{@ACjRH>G>%VWSn{c%}9;`@hQqK0_-Pc8bo617)`zLOs& z63P#cH;Fm)>#vp`O_X4J7yENzZN*R27&G44%}B@9FZ%8HS-<)@hZ_p%?#l7dttAN5 zpe0vhOI*+R$Is%1C|~kN5iR5qjhA*WdbHmUS+2{mHmywdoBW{_d=Gr!YnFeq_Jg5& zV9hA0w6|3TjQxUrm;D|$FZBcO#Y=R|pe`K^=a@~U7x5_IXj18i6Aj|PJ4gl@{c<%co1%3I=9X3)(~cAt!GR5cx*IJhjtskb zA%H!>+GqB%9I3KD_g&?Kve6Td@OQ?ubFH=*<{ohE$t{@PXQ4ifI`e2uspe)XNNCz3 z%j`ng<_5<5V%feAFFpA&$-ER{Gn#PsS#^-Hwm48vqUWe~)Z=1X2Ar=4ua9PiAFbhs zS2t5nJR**0x2X}{=Q{g>uTJLNgX|GrJbBfi=eKb^$6RjHim#UC@Z6gfKmP3O2da7-1()f*|B24ypLc#|6vB?K7RjB#f{(YwEJgqpqKaW(<_om z(@q^KDtZ46Ji*T#ZZ69DCR4?lIHoc&dhb!U5qt72SrcoG`>cm9;d%mJ18QWr$ zW0}9*t;c2s1x^(~WdUGdEsZ#XgZb@`^$x=%XI_x{kOz??OX6P=^2g9pnqHB+d7776 z)|}TX=!I8o?x`~b8>ZDQHIAA}Y3V3_L)fA}M^9Ynah-7?uZrfJTao?2(4WDd3m{r}R+CRz75T|WPU0Shh z3O`a1l`=(a%Pzoeo%nwiU(OPd*h3#TDujiL96`NsFd-Nv>bLXgTnrKhG4+k*>JTh- z(5Nr_*=}cl2mlGf>WTC2WH!lhaA6DKQ?|Jcqd*+@b^r3`4CHF)g0DS=hnYm0)lP(3 z*u^57m!l)as~^`Ag>3lxFm_w5f$wi@u@CteOnp>eQlGhDJa^~@HokeN(i>kAI`zQ+ z@qXS8;e56==Qae1$f_8t@4xT|6r@Mn_~mpA$3wXpL^L|zO|6l?g(EMzQVuB~*V&n; z@|-sG47Oi4c4*_Qp1WJUF2z)JJS|tZTO>8T;&`oL95zBZha1?kEUt|kdZx!PZ-Ni> z`zSxkO?$k@qRMf5B@;od(u()ltv%5Reiv<0CC!ee>idZ{zO>HV720HA>nf-uBc zff#hX%jGtkV*N49Lrx&#rB3!@X#V#1N}xGVq&kR5;AR}Pu0J|5xl>xYt+gb#iqfxG zHb=3Qf&WE(g>d11frRX*R1l)=6u+X56A;OVa019H`r`IK?0-a-xala>n_V-RUhd!2+n-sT-q=WdCeflZ*9A^g<_I`L62GCII#<4zMuOCp=wu!F5e}sHBnt;yOFyh z_7C1XHmqj3d<(RH;QwAzsge|K=;G8dnrtSm1!@XntGW1Ts#O*5KhC~JXiF2{3PyjU z6iK)WeX|pS&&f?~T6ihlPTMS+NvNTm%{EHA_hxU8(H~Z2-?>$WDW^ZjG_L!bh^Q!FY*96# z`06&<=VAdJ!-ayD8z(Bv=^@~b(r5TWHa)y4Jfz1 z!)sUN5K7C*m>-~L}| z`3)2gnq}Y6%>_q!JoF{OBd>FoA(yT>JVCCo^#rz$7AczFbJ)IcjZvs?HGnvigs-Wr zI{3naiJqB%e7fejfog#pocFm6$%2L-6@3r%l|s;F7s(B^X8p0$ ztHOJhdkhadnNkhUCbNwTmxXwB*H8AN_a!Ny$;x-s=#PRNXk+6iIXNr7`sc9F4(FSa zpj!rw)s|_EtgqN)4|P7P?V$4%gtm2O>uL75>Aln%JMb;;jgn^)tpTntjt&wF?*`Oc zo*wxkDzY*Cc`3QOWqAx4jY!N(sbKhKn=9ued$vQ*;_hsu64G$g^kK+yQ83HZHFW%G zE`R2^i%A4Wox!&&hyBzpKJdrXj@{cN7cUZ7BAISBAoAF2aiU#+2t=DaHc=VxCsfzj z_MYSR!|Lc?LxF;S`p08;F(1z*O-PP!*V^zEC6Ah;SWXKcQ`4oR`%wovP1A1KQANZN zwu-^8f%<9j7N@x1gLI{{>rfR~0%M@hGRKzKl{UzCkHhQw_p_kiQW0E155KkOHa(GZVO?x&A(YG!21s5kSbdGYuEWphw zoZ1GCFXJX?v=wI@cTOKuDWD%PZ6S<~RqDAq6 z>GeAIr;(c-F}Umyg&}zH{piXavLp3XJ;ZU4-Mq5;&5A;?1jc=Aq3J(B=|& z%;`gw;x)+U-(h{h}>h_m{0&*7IgQuSFNQmMJ%R$Zt?NFM555uTFO2&)BDEsnK(; z8Fsq7`_j3WY)gK+EJ2<5*y??MfD{o0(dUE%#u#8Y1&J!6DjW&-`t4#%lyI z#wAo4zZbN4LAfps_1fQOlqAUtK^8wWO&h`^&=j_)tV2GAHUDrRr&o|fe_gm6mXV_SbI7A06YFVCl`qt{jnPydhV}F-E&Pf&KaAjX3ac zlB@T1Oc9sx6Z<3AcoV75g4q%yrxeRZ@g){}-?nrmfl8?T4~YZFMgFFb3-=Oi764TM zk$jf4L5;WCp}lLSdd9mEnn4QgL}&tE7x%mY1;eXlbYM*huX}D$!@lss4n9*OZn146 zzbJ%z0h^Df{bXg|R_SC8&>5NwVJ`8EX6M(`IR}Q3b*Z-mhOLce45~ z*Nw2l;6VxpgStf?)iQ`jWWvU(IbKQ9cyv)yYxI|q*(eLxzCCH9qndR-MQeSXVGm5o zBL-qP2G07LB|#zMUPF6+8N@3uzCEJ*;eSTCKe*RJCaz{as+1L1AGz-lo0}GykA~YP za=TQKYcif-%|dKBQzul9x_EU&jQI7pL$ZyGw)eX)loehvb)Op*F^;3$W1R}REMEO* zDoOC&qE&I2gFLU+D0Syhb*~+=DYGhC@0ZY6O!Q=L>as57UOmLS_pH`uC6i~$8|D)cNQ_Xf-Jaco|wWf={3S5)&Gbm{j8^GzLTsWuyAV_nsg z&4y>mc>IL%qsBu+dkxNjw9`u8d26-DzDEi6zg0*J&K5Zt;%UjwC~b&`^B^Fh$vHh3 zM=o>)@W&UT6e5cCFS&1M1pUJOrdn6!lHsSW(iy8-wsQOX9C719n*JWFJ312B?sxx= zHh=~7mIIdVq?WE9ZK3{Ab~HTN)81N-S+*!=zDb=Szk4!Dz8NRnV0ft^&`^gTh?6n} zfO@HMXp_9ZFsPVlAfS{ucG3Ul!n$%aWUDxkJ_~;B%>pw}TSwQT2=Gt|{p9{#c&H+) zHn1lY(y;qF^l_T;yp=jrkfsxv9#D}#vwbhk`Q7e|mQE7C%x9~bSKiz2M#^`+ect&6 zHzAXie||9jGA#0__IJO|+>gbXFUPfmY{*xT9W+=={Trjrt&KqvN6!x8h+R6!=q<16 z&!RO1p6v5MdCXUOOa(jJ#d4i-#LO!3UNo*aNKRLioPsaod{8sYLelcl-7XtKvEHjG zVGe7Zzu^E=>>Xb$#q8N$d%g#E*UM%2Rf@@Gs5crgG>XWqowr!CcTul~ra6FA5$Yi= z;eONZqgG+@u17Y}QvC6F=w)7)AN>~|fqhaJ|23;>yG#1vW9K!!WU)yEtEj_%cWx7{ zQC4I;e_sW`kN7M2g`m8eiM&E6?`otSqBD%ZtoRKo`7?s};x3Y_@~F&b|un~Nf(+ipWdJxPgM5gzWzx3Mjx(f$aM;gbMcs2T=}VO6r#WQmEf z=^s_cvs$~V;?(wnG4^R#TFuX3NFMm<%z4adUVU%`%~RIwLmwtSL5_z-k@PbnIyuIIfntm$R5x*1NT`B5QvPB>M5j%0q ztOkEx=yV3dSxo=c_o8;^RI^{r(fnaEI;81lCnC1HYeE}SV>#pyzboS>`u=)?BHq0H zU%Fay!FXr@r)xwm`r#YxcfGs~E=x1V%&ZsnpU1qa7!K(<-^l@CTXfTK6(reEj zZ!=Ez530hO7DJHt&9sfTh+*?O&rcQ1VRNyQtP%dORULOaiPTiOPB$`he{ZG+*$*yQ zbuY?t@pStv~Rqmgy9mcYfZq0 z64CeHALDiEKZ`uXQXXQdCHaMRfn|HExL&_GG|G)&&z-G;E=5;DrvgsxmzEgda-nt+ zKL6Gig7pHveMBIvI2!=!3k+}m90yP5Lgzu-j!{YG#<9jPCL9g5R87Yi7w8QClV4|O zZ=Z~^_VQ0CLa4=Yz=g&Yo9k=3tujE<6*%Jmj%k_MX0b_Wn4K){7o7qfF$F3Fqm{3jbG| z7y&PD6|$Kw?o_WZwkR6M(;F0~ceN_BxV*g;M=cRm%(gNs+h^$Z0-X=#7+C_}l1*ey z)&N~~>#^S28G&A+7h~?pDhCC~AjP~#P`_@ls-Ksw#ghh2yUcgYUtPL)YR2fJ`ONa< znD*dvck34+k24FeP_v$eM{z~n*13{$T*YMdVxz>#hH32I70j$^NJBxlY1ylpkVORq z5F;r6;C8Ki)#gqDl@!{o*5#`RN3*x}mN3l}^PUyZ!S&}f4`C5Djs^O?}MrsD@-v;BU+Sr6{G4KR2IWn`pvYJ~T zYy~kltIkK9Xa3#qovZX))!g~iyHzd~dQ?E}y0v-V*AV`?;!WBg!QmBWJW{gN`_S%U98x+YK`rK$UScqAfbX>D{)wc12klFqQtb%BAWmKfQxgVELofN)A^7+BTi+JnXJKA7hZefyDzAsUFw> z*Voh;`(rg$dkqaELcIFxfaIZDyu`8vm|~JHu(&aoz+P3r&(H8+;v+hVQCI^9?=bF9 z>dT;CqQ#R>_hu5cJKM4;E;2I|TGdE$5BouG#*jwT0@fEmW9el@J|oyDfPZ#PLsd*S zqk;Ky>|-K_xOvEjyyP?iOD>SOGg_>En%%B>rK$IebGUS0Yj`c;V#c%C*Irw)Kep~% zJP<;j!(O*qVh@U`%P#3{bkN8J)+B~zqi#m6Df{ebIf1RHTv6?hl;IhiXS9sgW!6CP1 z5`?;tnB!IE`SYml1p#9Kp*{pk0IEgfs~rEOR;sm{IS&FYyTg!6fr+@CX#d@H!_snYP{ zuERMS+>uDXvdNM%*FLoFklg&h(7JzAF52%y?>ifGLtMx=!*#S& zCO$o=UOzjYw8-ujM>`&l_oB%v$>ojX8A?|OcC34!^66r)Oz*C?Mm*eDNY^E-@gLF@ z{-~Ya?3W{N#DxqW6;@{KvjK~ddIx%c8N9VUQZdFB^!dLFIzDhrYz@VX0iLAmI-Abd zLVEHr+O6+w-0wW#7_!x1x|!eY5>NLMy;YlvXy3Pw6b>+f((bIG`?4(?hk~y?c4Lqx z90&atzt)T~QOG8`>joR9=e~l8Bt-Fq>G4*Pu2fm=1sA)|cnq0%Oz)58LwOsUZlOY_ zqKjC;Efj?+I~jOgw-7J3(HZbfNKap80NwlBD0H9KQ(7b{@D@576Y)RMux$P;tcP%I zvZhe`QCyJ2lZ{NLZ+%Wrkz!jC?weg-+{6dtI1hz{l0vHouM3^Bu(DdXpUXcYC#Ruq zEl86*{(x@y`VK?*=@nRLPrjd-6Q;_Ur5q*%TN0?4noGFC(Fr}QkCos2>nx%FD!(*G z58st(H;F%fO{dIO!n{8Jka->-8e6%5%0y*4!5cS1HYWWvPboci;R@vsd^&apg)jO? zGNd=nS^SBt`=;Hz)QSdYbYy+T7b4I#<;aJ6e~2!9VX%wf$L5!t%G<2^lG}Q*N7~Ba zU{JhmZ6`b+@{0TReZTm={k#t^N#0HB-+DC<1u47=QVTa0{tVuUd7jm&3(!M-REWO- z=E|fEE75Py>Ax~kk$j3{{p7dZrM_X*WhHLGM~C%Q z&9)i0Ft~`|U&cVfAQ<6xtMCdo2SRdlyj8eBjlfS%_~uU$i!0k(y-SQ^t@eCmRS3YD zd<>k)$SQ$&18oVjL9>?d__qJfB(Ki+eW{58=j3-A(7QX?`qwJBu{F$QyJfz@8GZ?W z`IG4GTk+~~hF#XP)aZo!pPR3L+C_SKRU2(@$!6FV&6-ja!^Hmhrhh}O_ZUnC?q3N*2;w$<&kga*y~ALh3N_YjDQ?NqZmvA zb#YAGMzXDegxk?jSkEN5Rw|85w)GpS$B z<_th*7Um_g6gwPec?#R&BKbL%~SH_}R6~f%bXaP!*I?VoJ zfH3GU^iRLK<81XC2sDc$Xn-{*u~ya4g}X)3&?BNuE0H-gAk{a=NN_g$i?1zK%Dfg zG`DCCAN7t(N!h<%z8odaC%|q250pm%A+cC@KO@^Q6SW>-~)aWxT$4_9#@k%@3Ewfdq zvB4f!k2FUf(XMp<=3K~le(Sz=L&A9>$$dZD(5weTz^*c5DwzQ z-Y4csFb8xtrj|<|J}XgzZd0dR;;mxv{JM4ay(@1bP)Sc7b}zh%xL-_)n56A98b-b2 zb}iGMyyFt_M(5X0dc0J=|7X? z4uNG~hI6T963rYPDOKLZI`V-mT_d?V>H(lRLpWR{3mG_|4hh+d?8e627VdPgt1O(7 zRV(ooEs01(ivz9*XYE4`XuV5&NBfmSnD3z(oc!hs<%;ib;?Y|qCb}XTQiX)lD(>oh zzhLhut%0Dj^T)5XB{9|ie$*0j1~6r*k=UbKa+?<0F{%_V?_V&MSdjmR##(%3rz-0_ zJR>Yu`$IKuw>aoUQ3``#vgn230#&ra`*D644M#aUl>;Ta$jq-$P=>}fHh?Q@1|eT? zJ!fGwMAvM9!ib=;hoSwJW0yA@7Pi3+Q_KBhZpGE1QT(&A7jsACeR`5KA=cv0!CM)v z5vc*W+Mh_(8Jzi(8^1w8I$lx#^4{i*jNZ^AhK@Qt%}(OFOlkP3y9YB@{}mYX*>*zk z5Od?uipT%BsUZ-E`?4G3UkpA|Ta^n?N5EBxQNS6swMXwHf2v&>npkUBXsYuG0+yQb z9l*ArC#@?bkBZLkH1Nk1PuqsF(@;_pMmu~UAw;Nalj{K!qFy#fDtiJ}%%-Qw+@(xg zhgpD*-TMy;v$Jzf=+w8hwQl5=Tr8VoIc51M?9@EQVN!v}<{o)2maySJe?QB|gW{t_ z%Qa2-0lw!qqFiH-d|7^%uWXboh{lyC^s(%0R;kua`zcOs6JXpMAnwDEHIB_IVkChT zzPC!VZ$7rbu_idoqgiktR|>-Z^D-vh3KpC@<>t=b+&vRM>L;>gun){4*8e~0K1gY^ zvQCrjkA{e)Q)G1~P{^4^N3*TZ`|YfgNSU|`z3!CFGts|4%gMpiH3Uhp7pU59(Vj^s z!}o=Qpa|S?PAI>W(MV~Kvqp|}b63so`TC69GdZqCZ?l3qCW~UpFH_m6*6lc5rir{D z%wqEq@V;j!SJ*>`N3&Ow`NS{`q-BSB@4_7q*bD745K~7mNj}HQQc=0iZYs&;G?vI<4<(lF`@5~IGDYbyFYx~AAJ zZVINP(7a!esad3J3iZc&wC!<=P`W8;nnjKAaAZ)W{3uhWdjtX;dO1sW#H4mwbHxLo za%g@B-^sD5mpr#?w*c$`APh3wsSjMlVxKgM&GW9cg0U^3^YQOvwuak{3fJ)Y?sdOt zO>fB+9{!1D0I*)v0=lO+*mdqOP4Jht^t!Qo> z8jr%swi*JYBb}ngo_?I(x%sg7%}2e{Tv#Y%m!F`$c$< zkM&a6OyjI?1027KW9%jPamUTo$kClOSn3}(X_jdp=U_g=xI*E>tFAy))_i;%r#S@Y zXfvb2P#{nMBs=Qg5?8~6P4VjY&P-gbnJ?q~!8NiEYUvr7pL#r*8@FmX5)~==`up`# z|EJ-(TGxy;u{Ww|yk9tf*NuP%3* z8AHBhqq{_?R9m+DZYi|k7zycM7kdZEr~x$T<(Qe7t;i(4_c4*;!uAHa10hR3j}Ckh zSwN`(Ytj7h$$S(p_hQcX-B~aDHX9-`V(VI^utN)zt5@{F%<|v^xw?cj^>M)OG`LP+ z^oU+TqE#Jdsfw1!J|G$BihTAswktk{f0-H{KWs5;8Yz+KyB_iF+`*+D!}_P`Jkgz( z+dkmHIv6KqhfMNNl^$kc1@-j4oL2vQ4|&uJPfoPM3yjhqlZFDSto%i6)}r|{Q_u2l zFqXRBTJ`>sEb`oiBe}zkm9Q|vyAkLsu{Lo=6o>oN7huRC=<43>gGE}|b|3Tf^gQvU z*L5AGwscpl+twZaU3>T9P7o}EG3rR?&1k1fuL{?htSzhxr+zoucRT=5-?vA^F}keh zdMq4G?1+F08q>h{FRwwr+=lg;EV3y1B!QDqKg>v}2K%%b?wxkulG#~`xk#&Pv?@WC z=n;t&pPLwyneG5R%%Zk9OzvYUdAa22&==1NkKogGD}CxB;x;P^--HfRKnKsM=aZ9D zoSeT)gJ619?ci6*W0-ObNue~U6geF{nMOLJyV3X(`+|QYEq_r-a>D;!NoEN8#35mx znSPl~528uz9r7pKZhKY{i+o;DQdBVu`+~R0VYJ8EX zc85yB1O&*_^Lyd}Ld#tFqO8>k&*Xo8NW(hj4<)-bl3sEPHIzTH!|SoBMF0Ze`XAmG zT|~h#LlyN_d*;F`yfiqbgjLxXffo*B+_Np*({R=OO_#m`5NaHI&T-a0D8KPgFJ2)H z^^81JR0Yf`I0-Sfi233!V$uBY=F<&*t=o3D?P8Z+*PI*lKI3S(U2&c<8(Z8WR2bCc zYuqg^`aaJ*&vk01g1;+NKhrrzP;W#Ajcd{__6*bO#f#^l>ne-bxA7lNhV~HtS2a#v z6OQ3%-kiK^{5LKxhTn72L~b|Clxy+10ASJYhBW0h>WP!x%si5h&wJ^&ac|v3d`12* zAbKdQL{cgBP#T654v?TT-s7I z`O>#e?#QICH*ywcd|JxU;H5X6T)iO;qvm+IR1(}l?-%TzHYD9e5PHCaOk_l`eUaZ8 zx2gn6?zRD>&kR=Yy;!$#rgJ=fL7k}-@pF*LyMb&EYpYG|#f=B;sWu#BOqgGg{`Q_J zM-d<rGZg2g-V zM*y^k*t00|prlZrr5R%6lhJ%vm6FzNnN7h9W|S2;K?71L%s2;Q9E3b9bgY+HNR|w?sj|DFy!?@fw!?BY#q2dvKuqHXzL!i z5TB$k^SV;a^dghE{3Ru_I5Prh2OWjh?qx+d7sehe+Fk?+M#KIx$RrK5|qc)fDX!% z%O2nPaG;`J(l@K9QxRO>rDbwIra31fIz$jLOrd|Zym=+r^6-yJmLEHF)L_?Lb1AIe z^+VS9;)7kmCJxu)gHN^1WSh8t(fH%ed}F7Ovnfu*l~fsYNMHKOYA?sBF4kyt({VQ5 zTs4}+ZU`{_=?&_f&akFc@MP;Vxko&SpI?#`?GcZv)L&28TnY*dcj-kt8p`}Kq_yV^ z<5(^rA&7o(SM*?rK>vg`;aQ)3aYStVbyrG2-YXd5aqLp*+j9vDb8KnbSiGKJTdRA? zflnLHL3XxN;4`A+oc_VpDkAX-J@Pqpk1CcLgo3AQcCwSc}}s4I?_*~~}*U?Vsp z__0T@0Y6NoM4`IrOB$~3__d0K zUufVs)LLwKYb`it`Aj~H2NF`}?KGfo81YJTQTsO!4s&Y(FLi@}kf^yBB>-t@;Ge9U z#p#rjYjDHZ)^=J6`Tk+}Y(_&}UdcXiHmY00w9 z6>?z-y>uR0lcs?YW>Dn#w1au&`p&;4F~0 zikK%&>pPBFS4?Nx+4nAlPPf_ME@q~gA+shRG}MZpzxD9H z*SI~R5CUOmR6(HmO^12|>_wl<45~h{_&O9QCx``ZT4-^-9FFkF|K)8({yM5Sj~+y^iD}DZ?nn{%IMuc90oJ|pgbaOApx>* zYi#j>_%V%7+S(?GCag}6SIa&c;P-Mgyr{bI#z&#ppbF(LY)QWy?aRM? zuH%Ex@dwI`NnXe@Q+NjmCSv?_RV1xTwKlZGMg zm4-B~+yN>;F+m@g!U;5^SgoR0YI+i*A%vxv)~Glu^83%lBUx-23|{pDPaknqtlGBL ziZUrn4EPm*ZR$dW{4~nEh%KVYj|e-|78m63=!EFjjheYr^?za~0d?7v&%S;Y0vZk8 z6Mc$ax?>S%X{(FIU5*$eV()pjebp2HrHcH(W9Yo9?Bks| z_7kM0NF4*T1a5~>Dk^qX{nx1=D<`5)dRPnS(Ue~~$b|3;ye%MS(LgcX`iFk@CJAL7 z?vha3a`7?Fy(h(Wec)fSk;VJ8e@dGb)6u@(^WYCnjbn0D+hbzH=*llomQL{8Xdy+g zXd4!-_?}| zo-dD}6bQ_6ep1`&H&DojOquVM!M}pd6s?sD-a|95pqbf~l|Cmp)7>W&ZItl{<2duO z)^K`tX>K%c2iU1itDiknVkD=e}6zKuI2mz?vm(7u%)5F zz%3-eE4}%+kmRQW4JA(^0bIhccf(s5&F((cq~&XST?_5*#=oM>9N~ z<}EZP`6{{+W?k#t67(e?RG|cH^PA2LZlSKwD;vRhQf{AP%u?8f>Va!hd=R@}D!jmY zKvBKkfRbjk9$iY!@{5ypU;RV>0Xu5d#otn>PcFLOJzA3X@&odfTa-(56ZTst+P;|k zp(@|+?Tcy6IX>pk=B|N^L?KIq{Ms(k?GsqczY4$=id@jB4~g-UUl#6pzAyJyWAQ=` zct*QNcpD4|0*<*%_Yz@&&z~IEFuRdep_?`TAA4^Z73J6UkCRf;C0z<4sVH3nf{K8M z2uKQ2A|+ij43bKSh)5%dlypiCEg%d%Gy_BD&@sXP0{!0i{afpK?)U$-9`=iQF^jpb zv(L`Y-uoOrdcY;eRqbYE)dNjio&ej6k*Hw9{S)2mV4&rtrvh~k?X1x>%LruQtss_SxJR(^Chd|a&0?R!5XQ>w58 zH0n7;rRQ4mXnc2~f6>{{&Gw6+!*A)$!{J?4#Xibs)(XWpk-zuTJbdb~MLuwp>kM!h zUVF=j2B=xv?7C8gPh^bu`<}AtbZ4=bXJ2QZrY(zV!JPINOF|wt+VUe1l(gN*z|dr;5AunDpdh0`${f9 z(KlTiPODYfp4&>MP}`wBtXFDZzk337qzf;|T5<@aQM264EMdxlF$)Ah3N{V$&7t~Z zER4)TX|2GZc(E8Ky-*|QWI`|>dp;*Kc&yHtUL9$;jvO2?3tXjGDM7LvhBvD0JtTe+ zP|A4d!RV_w<^dvJ+UX;_d$6D+8}IB4wwJK94TN&XC-pLeW7E;9wf?-=yjXH5DG_ zYYc*n{|(IhNTIv$s_Zp|{AEe2@U%U!L6sbZZ1GR#@8~-;*;ASgIAM#IA(ugSJ0^P$ z5u0LT%xFgcDT*!1ty1B@`j=Z3pib)75~=8h9uuaZ->rR>8|HhQ64k!KfnNkR`+nv`V2kB+CXb$*P_L7@)$yr}@byJW!r^BH zevGsY8`G-GaMZBJlBApEH43vseH*35G$XU9S!Z$zqb9Gb$_ z4!q8m!)d3T+um{M($>%9c26GA@%he#-{emD5g!T9djJeWhP&%d=FZ2i*Ppl90%Oq+ z1+;Hme%jXlZW#qM#)UU}wq@3drgjS$_-h8#HC~CX1@DV63pH}cO;D5o0KXk>%>$Up z9XQA_@gaq1Jm&?Ut(uFf59?}NS|=TyJFl4*oQ#`s!fZnpUwqvxHPR_P5MWq2icwi- zJ9OpP#4*+5Ad8k5Y_dR#Xoz5rzDw(?ANgW*8KFJeI_(Np;=^8 zi>ab)2?zYA_cFmFO9{Ko^6QbmVbZu_U*?ymBjw8TJEZaU!r#IX652$c-eW-XT3Y@w zKqo***K|Txcmf4ook6+yysVZ=tU2-^wONJKbc26zBef@z^lEW!!sOe61x#EakDK=b zh1U0X41Rv^lp=}gcUs3`xAiczM&J;skFYH3aV1MSE?cd`Fo9%D3Hc0+PV-)5&zAL} z#mrg0TOP~UuNf1|Q+P=ZYqj|`_}h^D>67~B=7r$y#$R;!>yFD$n#?(L8kV#V(Zx+RY= z^@~-DqmaX+JA8-iCZ~*TTMIh#$!n7{o3?PeMN5uiFgp!1666dN)S_>!Oxe7rHM&_k z_#O#ES_*#vrs&c4YP3u9PKr)uCqM-bRE){X?VM-H!G^1qR$pD^#6_6`z%|`WLWy5K$in0Kwx!M+g7s=p$e7AR2&ZuYN3aZaQSOFYw9J z3#hKbww~5SdxCpBrcVj4am0?y@U3v&1TX;ra$5MR-JG*I^NjjjGOjiL+{OQYMsS;b z>B&P6B6Y?WUT6BHAoD@DB0}i5>mx~Ji%+$!nq-7myoL9NOHgwoZp{|TI2FR;UJ1BelkgQR8Cb*in_gG1a3Rer)9uVdLU*kQ2?i3?V5 z#@g(Rf#Mlxh~af{E%T=Xs4T*?Lh5MhVi!|&Wx!PZhxIp$RN%J-KZ24O_*gjrhmcp=-#AxQtf;Y)eMD2*Vp{2sb-(<^`ybGbL?Ohj_Ek;XeL(|@AQI? zVx^{^3OmS{AG)!g?A0fye!U~S0l@gGW8f9@^&xjF~aV`}7gU1;U^ zLag!(@hZrqco{ou`|{hMzL~Xe=Q!ql^O&R(hEr_5ym68weU?`F*{RQ9L&23;@>{2w zFJ1$HD6{p9gsA%d(3_i?B7W}*n*>`PikwNU@&Nrn1OURsHyA6@bU&PS6X5-tf#@im z7uM4F6`WB&!2L$WbPr&c;wq3UM zZS-$lo;w?-2!A?!`E(xO_f|*{c+!taNnBd5v*3SSZ!nb>0_^stg~e%{~oYb zN>U%bZ);d}_;`u-wm;dY6(HQv!X` z&KKa%1UkldRGhX89o`{js~x{A;>?;Tal7=h08?=O&mUeLY5|joaS~Up;dEP- zmG}ZfLtyF2uZlDjV&pT0rXZ!CeQk0+AdzM~IgRFg#d*jywspCP747Q$SGJ;DsVs)& z?ed_3Uk*$jGE8`cP;&e$yF@-g^38-|(s)#Xguu%FhYx6IH>8a6phfenRtmS|r&^n$ z>Tc)Qq!vjWXS}&n%H`&_dOslnyQhaeMSXI57A4dITOZAi{$Uzd#xF-W*5qhvuV#_x zsB`Dm8{ksxwI6uj_`pv|pPb>FI=p-*bx<1+RgJT|q~#zJlV+f#p>*U?JG=>7j;-{j z!<>j2GY@y&|Hf?hBwq}^Znk`!Z#s5%L*|F;x}e%5zpvJI2ilddC5lvvcc0J&4`|4P z;{Wd-dT)@ z4f$w*pEz zNGg54`ml2V=zaQ_bcKzO;ub0i7tw1Z&Z;+^Ge<&AqrV@aGx6=6UG-Siq5@9!8{d08 z)iR!Bv+9CJ06;0iv3NGX zvP3z=vy?I~DCob445yUszSi~yzvuF*j+1Ix-L zwAt7AL;r;z5dXhS@Ai)f!k#ZFh>iSzvR!}I^XDVG6`xcdXkSw!_=0Z}_|qL4i3`6V z(*MGb4>5n3{vc6Iw}k6_NiM4R|JBR@%gS*7yTAAGB!FclP<uSi z&Hq!Xf9$~jDb>FMoc~j*f9#_2|9Pr^?EL?Es(*rw|KEEmS$Pr=d@2ThIQco%+>^%{ zw&>73<_*p}F*yL5dj`EW*ZVx}TtwI|)iXo=@b^ig@x1Xk?-P9>`9-*Ze|lE~i3bfK z`6>KU?)iLXW6j)r=zBKNf5hb6vlvm`rVuj~U3;Tzke=(8iI!qh&>BY0MfFWCIIAgm z%`6P{dS0D4hM48NR*YXk3pm%h7o5=?)Jh)~IO_19HtQKj&N^`p*tAwZIz!#dG;Dun zUqC&uG&1=+!hpt6w_!7dYlPl$yukmk@8)6Nu8-2(cC2xBRdV(F){vrsYaDm> zI6BNrZ#!{IaF%kiRh(r?+;x>3am9Xj@>8patWTDB#K$8}XB!tka;VcePLwPjZ!VY2 zy1vifj6tlMu%h)(qz?%tO&bs1M5~^XG);V5pDu^<=Qw&&4ya?LPQ8j#BO0YjI}_Np z?+tHeZ=G$pUe<*-nl^2D^1G=MXT1(1^n!A@kifY9u|EJ7@Q@urVto6);2qKl!jo|S zwzmZT$!d-y!rma|>ag1MN#r#q2FqC`zK)h)azP_V5OIX#pxp1%)vK8^#+$dx&mQp# zl{&mJlo`;Ds*@TM{(|}T)x7l!!+?_l$u&@4=h?=>*MoRr_x-4t6*o0XUCX|eT341# z{JfXb#}6|hBYvY=2qcNk;X9qzS6QDn7^FTZOE2^K@$L-d0&8$6SR2=2p+{$bYS;AX z_%ea4k^cr$EJfA`0yiRfa)IOjRr;uEvQS8v`vF0Jw`Qow7c1_zgHi1T`sDut@ zi&wDPhzHTmHn8L1hncvCpG~GKHaDwcNZwfl*EV zn5^T7TjS+f{~1qYgye($Q}>>7qmtyBfrN&6troqb>SINomYFjI2!bZwV&*sn#cEmX zTm2y*y0D`FkT&J}8C6$lc1cd&Vw&HQ{(A@A-vGKIY092wr#-0lZA^qpM$PJ3RT z>?HKEXCH(H{jLE~`t2R2_p#qXX2>$(y-EuC5<0NsT5n2BKue_-uG@SsgppD4Mt(D;BuqA{`#01;)x>cQAwcOusIEp zPSF=#BluN3PAItAO?5W3VNh)+t?rseo1t|5T&ESu?XtlAd8+uj2$$g!E&UXwVuPbz zCP%$qzR%yC_E-5+s!dNljiwK(5z^8#T{3Bo77H@F>^{-kB7mm!v&cLSZBw`O>S$9p z<13DZd%F<+D`kL;x@H(RIhliFH11;%^SuS#K5J!MP6x2}eg7C}1cBVJ5i##NQCkzbzR z-;`?+YUgYG9+kwSg5E|CW1ep55*qEFQ zYhFP9l^QE|A_BFutBl|xgAGDHYJC6{#u(teR+y-|PMwEjUhLINEL5<()N(JlC4~G6 zYLoXvSNOLf3Hib63RQGnT)jD z`l+O!8jQLyv*eU2dk&q0D#wJqI{yeX<(5>gXZE|IOxUkR z#=5|~OK}oH^88OE4>^EAiUR6D(^$hytsLjr8Ia^a46;s&zra|1CGz8)XM;4J+^_GB zojSLCj(*8@%PM`sygdSRdod>}>s1o``*Zbg*vm%>Qwtbq{Xb^`9J$OIpB*XetNtMu z3suAgGse@X5cu9~1gH#hFFRfrLln#S(>loM!zD-9%=Ag996DD zi1{Pc{=kf#St81XPB1Jcwt)H_mcQNM>4;>ZZslsU@l!`I5rx7~EzbFftY&+@@jZGg z)O+^c4BvL_QOy~IaI@=AzN>Kl;0b#9Us4NfyOh-Re;vkvn{rO%JN?)3IG&iXRk-*K z5Ciy(g+;Dp$({4(TjrxPY`enz+v5uL<28D=FJtM%!(8rB+17<=qEcQbvqiQVv$L+| z?E#EO`uh@p*-07qhuacdcw^%Dfu0(5n*T%s_<$XAzeP3tY2*`7!7X)rQ7lot@?aP| zvBIK}V>FiNZc!-AKRXceetnJ**mk0? zVfy)CC(8i`ojfWq>gmDNT6N=4re@J`n+{xJ;Ns=EJsVi{XLIykqdqlGF3-HmtoLBp zcU#Zn>7%t`xCB4;{qvuq4ca?zrhTz~1{^GC1+HS(aiJjwt|+)!d>A~fx6^?ge%#&q z3O2vl)%{&sfIh6FZ=uX|oZ)OBulq|y=Smxo^+dPe0)}7h(4@v{u#KSokl8g*%NpfF=XS7b~;S(U8?B($k!TVN`K*cS-*Zkf6zVqfx^!>_FUI7+8o}T`*3p94Ew(Zdo zYmI-1U&5I%+M!+vxZDNp(f8JdKf!sQv(y~9D>8#TOy0;r>x^%gc=bxm_|-S{1&sR5 z^4AW%s!&2~dKtqe-4rtYelTxPkI!x@ZU_8AZ@)<^Uw*FU^@cv`;$UjPY|WYZ}M&f>N=RP7O!-n(l>X279;s zimK0m6QxF`Y}1gtjJWB>&czelWunWN`;?xu2(ZK9X~Qt2g5F~4zrT#za7n`v@LjYoZzkRNUEXoXj~@~48SXLH#N zXCOl)uGG97T5dY{5NIyEpGH!bHo2*a;;g5RJ+l5Kut2{{Hp_RBGayJa_%4X+|AnU9 z{i)pj^3Y0Btg01OmI({}vSwDc2QaIgXHrqQ$COQWPTR~=%`naHRPVd)CleM3jGBDm zPcj5Q(-NT|v3+W~G`m_xL)$dY#4~?m+id99VsgF4Cj6%`K?LcwBe`O4ih#_pDXGF3 z%7NBV<57Y6hU!8c$4rf>>S@@R(pn=Dv_y}MT8vw)KXaa`8zrB?eZdyhwOGO4^ga|- za%x>G&M{1vtci!X8cQhpv!GbUt5{I=So&Zb?VlyhH={4Q%abeHuSYuX;?*K+62} zO>%hVK`8#uPwyYqFkh$1u=puM`%v)LH4~BWmo>T9t23_a4@8g}GVt7ZIN~ADeedaL z)Vt@V(_LGq9!6?WTeV6@M|)`5CJB4nW)(+*hULBan6L+fFP9SCW|rlbC186gldt?A zrAP1}-K;A+mZM;)Xs?c=8qG%7>yx9FCcWLd;>SDNVX&~X8TsO~G=cPOFHD`-diye$ z(}|z?=l8`u^?h%BcMg)^;Kw*a`BpIV7Bg-pp(1XcC9mer>H4(@bd)(*7k&Ts>A(tX z2y^8zf*1!CHLNfN$dJ_yxUK5{}^**r%|co&>qxlo=taG zS(KK%Cg8zK2*g+~SDZLO<ahOjWIXJkh@c>ME27v0V!DEM{k?BDs$gt zbMpd5n91|`$*bFp5oHZRDw7emtmEbJm9i8nJYlvxllJ!}!9KHaIdHJJhQ-{S)uf7w zr9r~1zN`}#KPGCulQJ!M0y|y0#)voq!}Z@5aRIvqe=rw>V>qW ze{6KHyjJ_9rdc%PhS^x`pmz)-v#zg8nJqE+>=ByWpwZv6qx~(fnCti5L95+$c>{i7 z#C`B*!x~zh+_Tm~8NN1}SCNS~XzaKjn|@R_;N?z~$TAyzZ~Kbl!#i6~7Kw(-b1v2H zhG-S*I`_Sg-cwF)O&JXWyL6sOH<~&+DN^b`aaAvUbX%fxTO^azZ8GPrFiW58k?PPK z{-M)jA;)CdJd)I_KgBi0wa|oMxX2wULjb4z!7wz!)c7*fas=LcfGGZ5W@u**pX5Ah zA{+8v%{eSAlfy*k+74R4+(o%HOan#P3$OUieF00U{nYP5A}3$JC#I&IUL4~;sS(Fz zVCr#_%xw*)+u1rl?+~-Q*>n_K3-KbArg0H{0L}Zx@_a6Pf1zBW-P1wio7i}f5A2!< z^w7U)-`!g*E2JB{%PBQLWL@RZpnV%E)mJXM1QY92yKI`sWM4Tq^6o$!IPM-AmrMTDD~7u$}zmmRp$Z zgqpE8C;ub5&u;j}ha$S13qe(rv0@wy5xbQMKH6$sPmFHC>R;e5lYqDgsEAUMt|LtH zO_Tf>H)Eq8n!i%xoXBYsp%c-Q?1BCC`5yBoY#kpve}r4L?RvZv5?*xZen3e{Gjf*K zd=%vvo_tRFEK)C=OQgow=BcC~Gs^(wH3{#QG)lm{d(gU+IE>xdU?r2k*cy+|gql8i zImb-Ro>ZAdAs;>HC~nhI$U)|NS2>zr!(|igO3UtoLc^;ZNV1RanLW|MC}T;O%fu=z zqMO2Ko+gK6s2tg@QEzae+m42duVzO1Lj1pA`HTh4GF<{4Q>;rR$eV-`1>xL|khg?tu8#B1IL1H>n*6tG_hU zSKXJk>3#EPih7DVi^PJYgm4TW^QSsR;hJ&MHEM3?b4eNg36~dVSQ6oGUp21SeiHn! zLNh=UO&;e z!MdqYuL@AzXlnerQWl$EcztfbRZwe)J;Mgrv_u1(p_EBm zPqljQ)qVcjbk81E3i;L1u5MFZQu(S1eJS z8ur}Oi$W*~B*hO8uOJn#HJ~*>!uLXkIH1%}h~b~-vp(cF=`2lR0%MjtC0@9Mey!vLHRCa?Lvb@x< zyzWSqIjSKmU4&&}k70~P%EngnIumdIS+^ZkhWI6jz@yQ3lEVI61Wf1jZxH3FFv-WJ zs+ZMdblJX6hfyW>L{ZZ662X-w;WL7#*|4XiY&4RhT4Ty*@%!cxk55xh(~b>N?LPGi zUI)0)@FeVcS)rO`$DPh0!x~~Sq0b2`I{N~ql zupv4er*X!n04OjAlnQa)D1=9aVIp|~D*f)&#k;n;EO6Ek3qvGsx`ug{K=qV6vokJ1 za_WN=X2S3o;_<${0e7jz1^@g?>BL)S^}|-T#Q$vL+~WNVce<}r9#zSW;{gc!4D&Vs zs%XI#PXEV!K7M>Ik3`C3j|o0mzoi2lXdoD>^k-kRsoFMU%+o%o4)6TF1F{knC>Lj6 zy`0wGO!)?%IW0Zw=v&iW1kbtm$fR?*UWQAW`{kz4q5|XA_-<=YL;w@9&k7;N$Qa{9 zh>e8zuTFhJrJr(f&+r2D%(gxR+l;dShpQr#9TzV0?H4d&C|=0~srZ=429xJ|BKGr$ z2V#g&o*(>n(v_!X!00K+e&xYj4GONQR(M%~x8WB7475YN2B)(Dx)dTFl_)FSgX_3C zI=IJ&hhDF~;nTNki~2&~C>1s>drkS%rztz9a)ve!fDR19*Gt^SWH#7$sMvGwUlg?I z53dIjTjbp@fu>pLln7k?aj^w~gp8e#g((~J>Lme8vDT)U_#l(d+?X);Y?jX={2p&Q z>tmf&ptHh6O~53hiFdvDTDSVoK*lup7iA^9p7tW{+gz- zKTyL9&9K(a&{m`(Qt|&0fyZ^y7J~J^$4fsPtx1o_d8AzP1ulCq;cjXVS!N!g9vPzX zE>SZM){MS87V&88CVEx0Q?hHBpLHua|3{<>Vm0>mFXTRL<$Wi&vN*;avYkB7c7Z9e zDX~Z)s3Y(Oxge^HeiA_Qc=1@2FMTNB`t`>&fG(OEpdr%z-L5CY1@iRHgGvfp)Y6<6Xyp7+CiDaf=dy3q^fQa-sVpT@cB) zazsTve7BC)#1qWkR|Gtgy-Hkz!j$16PE#*KNK`0;lV<5&iH<6cYRVl*jltB%Q-bCr zO~N%@GhaBSN@@hk_*ewP z1UiqhN}C})InOyv--Xv2U-Eqk8dQ4nq7##1F!W95TBfRRENc+-Ez2VSe)@44VoSd{ zLJi!aAS-TaSg5g;(-71uFT<1>O`LZ)^Q`SoTjf|daMfiE>`G_g(Ye04{%JjV#1P16 zL2M{Q^#dhvOphVMUBpDn_ugcrZa+Nh_2jh@%waLXlMG3|KdCUNy9yIV)vw`9u;)ex zK!zPfPTu4tIf6lY&o)*68Pm2z(fJuP^8_CTcXF z3v^B`r@;qh9te3{V-Xv0e=R=8IsKDV&!2SSlb};3w3(ROcK0y`T`>gB|+i)|JAU+AB%3vCh2S2R*Nbn zZZ+1DG3MPu>_^q5Q2MJ6nfWP%Y63>F(T4^=7fuZ~N}Kj3u|B*OPGq0Vwf-*TV3yYyyVI==D*wYqY4atag!*GY-arH zf$V_dk>7*?jkow)AVR(2aS7&hP;wa31`=2Z#TE&l31fX{F_&LBeOOU2JB5 z_As^C>h~u!8+x*ERL+E2jSs~T{bZ>eIwW!%DjSbwx(I+6|J_ii){2jRiSTVihlPb$ z3G)~Q9pxX3d?5*}RBc@M4b7aH21bmkT6iG9&O!~}^Pqm0&20Mq)^b<&H^(MX^p(n% z6TqWbH1%&^8=*L_ z$h%Fld=UU#^d>%1A^Q9G9}F^L&vh<11IL;1)$;d?h)i>yT;@EFI)IxTix9p(%oOs9 zg4}8IEfO|m7W|s}zh6e^%lX~IJOvVp*B_l59q6kUMY0V~v1xg#!b1USuI5*Te@LZX z=aIlcj+bnSlOa2V#%&>#C#yd!C;sYCVC>dJDxr1I@SxJ01@ zg|fn+9LXdd?=LSgpZO#*06vN>1JoScc9G2o!FEilro+}OCdW&s%Fxj!mR?S^@Y2rt@cf|ML zOXQ|c!mHl9nesWR6|WxU4%H~+JAVAWhwfbH9lWe4I^DPmQg#as_Z+x|mX;g1?p(ZI zz?j*g7x!d+@3%6kLb!1}ZS@E0<{}G&E6f1AtUThT9Efb*L3rzLd!yuzIWSb9e`VXB zIw5UQ4|3v;fEck~!6R6V93mjzS2p&bLLQaTXl@PBz$#bBziHxNV6{r_O>Y|dxOgSw3eK0BMWxTULbrBW)m_c@ZrEhjDZgXrf&bl{ z3aAw)SG<&c$8YYY)4&yXVDyGHW6DlWP9j&HYA#?w=$FBV;=hpS@M|j4n!9(Chv-vHs`B=V3=6y zx#X>(6%|};S7@2MFO9tm87&JQ8!V2wtmX3Cwt3Nd)l6`*Tf)P8srRzxf`kVzW8m*Z zWusBt*L67k9p`v?@dz-hQ|s(s z&-IF$gq2fMaU@9ULDQBuEJ$}|g*eUcsXkcin(u?t`&jk2P`!~55XS5^`9ql&)2|vv z2$q#Az-cIvQ_dQ`?}*b97W~>+c+#3x3)_hwm=+m2$79*jV%9}usoKM>0iO}=NK39)had^tl60_gjiZ#g3$>K zV0T4Nj_4@lCm!rvuBKrJ*aQtIomS$ zUo4-;^>lLoY+pu|Ylf@SP_Z$#g#fl=)_8N~7ezZE0a7FsTCNLL2WwuHy`K6MW(Rmh z_os#Zv<29JFvrTGvRTS!{5QPHxISN7`2-617IK8p4L@{nm>S1;#fzY>j|!Sagdh*k zUd6-RiRV=v-&0GQFI4_=XcoD6@FObHC2&8%WnfO?U(m;eDm-?R{*W>tT^7i_ijGDHJyhn z{Ac5F#trEYn96H)S|3(Irz(Oka_wOV=Jo~jP#YwdhR z=VWltBrLVL&%!nwxYNzrC6Hdg{k65b@F}Awah(d{(!UD%_%4Vi()};B+-$p9;D(KG7oEFjz(iGDIBzDcL6=b1Q!qrCW zk|BGJ`4Je55#sX(=E~kBLcax)g%31;8~9UTkncOaZyhDVofv$XBlpzAQ1bZ=nZ!>s z4Zi6NZ{G$K-?>!LbmA5!hPGw}ic?6_=}$y9r{db(+0(7DDDBMUQ%(2nqJ!$<5|VzzhB~qCfF79v&e_pXGu=0EWD9nZ}=k6 zYkZCR(Y#e#+*r84Mc$$m=yjgAc%Acy%=C*3&>TSB4>#>U2O&|;$5Q9Xls46Ezp_Px z%@`UF+Ea#?yEWPSPhMMdBooBsW3|zSRuGM|r`WVfL$P|~DUXYO2-L&Y$o#>TbTZO>nPv{+_xbuKxqN_u22QCoq{Tb^0Tua3}(}RKkI!iF${2r_{4U zV@hgDD$*J13@}Q%=T8c$hIa*DJ#a_(${aO{&5`LUL{pr7dF5o!21Bh z9r~p5LIl*SB!&nU`#LSdMZjDGs-FX@cKlvBZ-Zi|gZDFpz_M0CzeWF4J2(}%9km@^ z6H=ou<4S>j2Wqdu^Ct%Ko&4oMyw0~ksE|LigYfzjD*Ti2U5_FB{CHh>ppPJ?DcvJT zH$#NIuqI`(nou>7Qx)N(F3XQi3`tepPrNdC9%4hFdW;0Hhw#=33SJ6%d?Ukl(3QMd zDz9BSN6bmiLi}jrl-U}cV^iEVy>mJJw2)lDTklIcZ(a<(k4XGIJ=7xmg7Vmy6TG9i zdwaniL3ELC0Cf%(M;YA|0VsJ1!9Q@zMKah%N0LHUK7@>Nfr*hYO)rXS&y$k& zTIKymd2nV|YS&`VHiapHDS=2mr~~lG@U%bKS{HsGK?a`PK3>Qy)EOa#VgtUzBe@Yr z7z%YGW`5O5K+XJ$FO^LEmrQe6Bt;K;%)1Rnfkacvk2l$D$VEEseSx5dw^EEBZo?W zg8()tTraWblKlZNHX`uo0-w?c63GQ~v{1!z|6?c@mEXrXHm)pOE6bkx=vyGPt5Pb6 zIvx)61+EdCN-t1i75R!s{guS?@i?eNeTwHCE|POHcve1pPY5MnBxdl2T^N;{+{U7v zX|-!(A6mFETCB(|`?IK2zt7{lgn+NHp6X^ITX@bnq5cl-K>!R*K&906YmN4lEs-RV z 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⏥Fx@RzdYPc{ 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

    + + Style: Wyatt Analysis + + SDK: Flutter +