Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1d66dc6e4
|
||
|
|
25cf9518f9
|
||
|
|
8d833d39d7
|
@@ -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
|
||||
|
||||
+8
-4
@@ -24,13 +24,17 @@ scripts:
|
||||
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 flutter format . --fix
|
||||
description: Run `flutter format` for all packages.
|
||||
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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
import 'package:architecture_example/data/models/photo_model.dart';
|
||||
|
||||
import 'package:freezed_annotation/freezed_annotation.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,
|
||||
|
||||
-1
@@ -21,7 +21,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
|
||||
class AddPhotoToFavorites extends AsyncUseCase<Photo, List<Photo>> {
|
||||
|
||||
AddPhotoToFavorites(this._photoRepository);
|
||||
final PhotoRepository _photoRepository;
|
||||
|
||||
|
||||
-1
@@ -20,7 +20,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
|
||||
class CheckIfPhotoIsInFavorites extends AsyncUseCase<int, bool> {
|
||||
|
||||
CheckIfPhotoIsInFavorites(this._photoRepository);
|
||||
final PhotoRepository _photoRepository;
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
|
||||
class DisplayFavorites extends AsyncUseCase<NoParam, List<Photo>> {
|
||||
|
||||
DisplayFavorites(this._photoRepository);
|
||||
final PhotoRepository _photoRepository;
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
|
||||
class DisplayPhoto extends AsyncUseCase<int, Photo> {
|
||||
|
||||
DisplayPhoto(this._photoRepository);
|
||||
final PhotoRepository _photoRepository;
|
||||
|
||||
|
||||
@@ -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<QueryParameters, List<Photo>> {
|
||||
|
||||
OpenAlbum(this._photoRepository);
|
||||
final PhotoRepository _photoRepository;
|
||||
|
||||
|
||||
-1
@@ -15,7 +15,6 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
class QueryParameters {
|
||||
|
||||
QueryParameters(this.start, this.limit, {this.albumId = -1});
|
||||
final int albumId;
|
||||
final int? start;
|
||||
|
||||
-1
@@ -21,7 +21,6 @@ import 'package:architecture_example/domain/repositories/photo_repository.dart';
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
|
||||
class RemovePhotoFromFavorites extends AsyncUseCase<int, List<Photo>> {
|
||||
|
||||
RemovePhotoFromFavorites(this._photoRepository);
|
||||
final PhotoRepository _photoRepository;
|
||||
|
||||
|
||||
-1
@@ -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<QueryParameters, List<Album>> {
|
||||
|
||||
RetrieveAllAlbums(this._photoRepository);
|
||||
final PhotoRepository _photoRepository;
|
||||
|
||||
|
||||
-1
@@ -33,7 +33,6 @@ EventTransformer<E> throttleDroppable<E>(Duration duration) =>
|
||||
(events, mapper) => droppable<E>().call(events.throttle(duration), mapper);
|
||||
|
||||
class AlbumBloc extends Bloc<AlbumEvent, AlbumState> {
|
||||
|
||||
AlbumBloc(this._retrieveAllAlbums) : super(const AlbumState()) {
|
||||
on<AlbumFetched>(
|
||||
_onAlbumFetched,
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ class AlbumsScreen extends BlocScreen<AlbumBloc, AlbumEvent, AlbumState> {
|
||||
bloc..add(AlbumFetched());
|
||||
|
||||
@override
|
||||
Widget onWrap(BuildContext context, Widget child) => AlbumsWrapperWidget(
|
||||
Widget parent(BuildContext context, Widget child) => AlbumsWrapperWidget(
|
||||
child: child,
|
||||
);
|
||||
|
||||
|
||||
+5
-2
@@ -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<Album> albums;
|
||||
final bool hasReachedMax;
|
||||
|
||||
-2
@@ -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;
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
-1
@@ -23,7 +23,6 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
part 'favorite_checker_state.dart';
|
||||
|
||||
class FavoriteCheckerCubit extends Cubit<FavoriteCheckerState> {
|
||||
|
||||
FavoriteCheckerCubit(this._checkIfPhotoIsInFavorites)
|
||||
: super(FavoriteCheckerInitial());
|
||||
final CheckIfPhotoIsInFavorites _checkIfPhotoIsInFavorites;
|
||||
|
||||
-2
@@ -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;
|
||||
|
||||
|
||||
-1
@@ -33,7 +33,6 @@ EventTransformer<E> throttleDroppable<E>(Duration duration) =>
|
||||
(events, mapper) => droppable<E>().call(events.throttle(duration), mapper);
|
||||
|
||||
class PhotoBloc extends Bloc<PhotoEvent, PhotoState> {
|
||||
|
||||
PhotoBloc(this._openAlbum) : super(const PhotoState()) {
|
||||
on<PhotoFetched>(
|
||||
_onPhotoFetched,
|
||||
|
||||
-1
@@ -24,7 +24,6 @@ abstract class PhotoEvent extends Equatable {
|
||||
}
|
||||
|
||||
class PhotoFetched extends PhotoEvent {
|
||||
|
||||
const PhotoFetched(this.albumId);
|
||||
final int albumId;
|
||||
}
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ class PhotosScreen extends BlocScreen<PhotoBloc, PhotoEvent, PhotoState> {
|
||||
bloc..add(PhotoFetched(albumId));
|
||||
|
||||
@override
|
||||
Widget onWrap(BuildContext context, Widget child) => PhotosWrapperWidget(
|
||||
Widget parent(BuildContext context, Widget child) => PhotosWrapperWidget(
|
||||
child: child,
|
||||
);
|
||||
|
||||
|
||||
+4
-1
@@ -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),
|
||||
)
|
||||
]
|
||||
],
|
||||
),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
|
||||
abstract class AppException implements Exception {
|
||||
|
||||
AppException([this.message]);
|
||||
final String? message;
|
||||
|
||||
|
||||
@@ -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
|
||||
+1
-1
@@ -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<String?>(AuthFormField.email);
|
||||
|
||||
@@ -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
|
||||
|
||||
+2
-2
@@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
class MockAuthenticationRepository extends Mock
|
||||
implements AuthenticationRepository<int> {}
|
||||
|
||||
class MockAuthenticationCubit extends Mock implements AuthenticationCubit<int> {
|
||||
}
|
||||
class MockAuthenticationCubit extends Mock
|
||||
implements AuthenticationCubit<int> {}
|
||||
|
||||
class MockAccount extends Mock implements Account {}
|
||||
|
||||
|
||||
+2
-2
@@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
class MockAuthenticationRepository extends Mock
|
||||
implements AuthenticationRepository<int> {}
|
||||
|
||||
class MockAuthenticationCubit extends Mock implements AuthenticationCubit<int> {
|
||||
}
|
||||
class MockAuthenticationCubit extends Mock
|
||||
implements AuthenticationCubit<int> {}
|
||||
|
||||
class MockAccount extends Mock implements Account {}
|
||||
|
||||
|
||||
@@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
class MockAuthenticationRepository extends Mock
|
||||
implements AuthenticationRepository<int> {}
|
||||
|
||||
class MockAuthenticationCubit extends Mock implements AuthenticationCubit<int> {
|
||||
}
|
||||
class MockAuthenticationCubit extends Mock
|
||||
implements AuthenticationCubit<int> {}
|
||||
|
||||
class MockAccount extends Mock implements Account {}
|
||||
|
||||
|
||||
@@ -25,8 +25,8 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
class MockAuthenticationRepository extends Mock
|
||||
implements AuthenticationRepository<int> {}
|
||||
|
||||
class MockAuthenticationCubit extends Mock implements AuthenticationCubit<int> {
|
||||
}
|
||||
class MockAuthenticationCubit extends Mock
|
||||
implements AuthenticationCubit<int> {}
|
||||
|
||||
class MockAccount extends Mock implements Account {}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ class CounterBloc extends Bloc<CounterEvent, CounterState> {
|
||||
final CounterRepository counterRepository;
|
||||
|
||||
CounterBloc(this.counterRepository) : super(const CounterInitial()) {
|
||||
|
||||
on<CounterIncrement>((event, emit) {
|
||||
emit(CounterModified(counterRepository.increment(state.count)));
|
||||
});
|
||||
|
||||
@@ -32,4 +32,3 @@ class CounterInitial extends CounterState {
|
||||
class CounterModified extends CounterState {
|
||||
const CounterModified(super.count);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,14 +24,16 @@ class CounterBlocPage
|
||||
const CounterBlocPage({super.key});
|
||||
|
||||
@override
|
||||
CounterBloc create(BuildContext context) => CounterBloc(repo<CounterRepository>(context));
|
||||
CounterBloc create(BuildContext context) =>
|
||||
CounterBloc(repo<CounterRepository>(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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<CounterCubit, CounterState> {
|
||||
class CounterCubitPage extends CubitScreen<CounterCubit, CounterState> {
|
||||
const CounterCubitPage({super.key});
|
||||
|
||||
@override
|
||||
CounterCubit create(BuildContext context) => CounterCubit(repo<CounterRepository>(context));
|
||||
CounterCubit create(BuildContext context) =>
|
||||
CounterCubit(repo<CounterRepository>(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,
|
||||
|
||||
@@ -35,7 +35,7 @@ class CounterProviderPage
|
||||
appBar: AppBar(title: const Text('Counter with Provider')),
|
||||
body: Center(child: BlocBuilder<CounterBloc, CounterState>(
|
||||
builder: (context, state) {
|
||||
return Text('${state.count}', style: textTheme.headline2);
|
||||
return Text('${state.count}', style: textTheme.displayMedium);
|
||||
},
|
||||
)),
|
||||
floatingActionButton: Column(
|
||||
|
||||
@@ -32,4 +32,3 @@ class CounterInitial extends CounterState {
|
||||
class CounterModified extends CounterState {
|
||||
const CounterModified(super.count);
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -56,7 +56,8 @@ class MainPage extends StatelessWidget {
|
||||
onPressed: () => Navigator.of(context)
|
||||
.push(MaterialPageRoute(builder: (context) {
|
||||
return BlocProvider<CounterCubit>(
|
||||
create: (context) => CounterCubit(context.read<CounterRepository>()),
|
||||
create: (context) =>
|
||||
CounterCubit(context.read<CounterRepository>()),
|
||||
child: const CounterConsumerPage(),
|
||||
);
|
||||
})),
|
||||
|
||||
@@ -22,4 +22,4 @@ dev_dependencies:
|
||||
|
||||
wyatt_analysis:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^2.4.0
|
||||
version: ^2.4.1
|
||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
include: package:wyatt_analysis/analysis_options.flutter.experimental.yaml
|
||||
|
||||
include: package:wyatt_analysis/analysis_options.flutter.yaml
|
||||
|
||||
@@ -7,31 +7,33 @@ class ExampleCubit extends Cubit<CrudState> {
|
||||
|
||||
FutureOr<void> run() async {
|
||||
while (true) {
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
await Future<void>.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<String>('DATA LOADED'));
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
await Future<void>.delayed(const Duration(seconds: 1));
|
||||
emit(const CrudError('Cubit Error'));
|
||||
await Future<void>.delayed(const Duration(seconds: 1));
|
||||
emit(const CrudLoaded<String>('DATA LOADED'));
|
||||
await Future<void>.delayed(const Duration(seconds: 1));
|
||||
emit(CrudInitial());
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> runList() async {
|
||||
while (true) {
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
await Future<void>.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<String>([
|
||||
await Future<void>.delayed(const Duration(seconds: 1));
|
||||
emit(const CrudError('Cubit Error'));
|
||||
await Future<void>.delayed(const Duration(seconds: 1));
|
||||
emit(
|
||||
const CrudListLoaded<String>([
|
||||
'DATA LOADED 1',
|
||||
'DATA LOADED 2',
|
||||
'DATA LOADED 3',
|
||||
'DATA LOADED 4'
|
||||
]));
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
]),
|
||||
);
|
||||
await Future<void>.delayed(const Duration(seconds: 1));
|
||||
emit(CrudInitial());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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'),
|
||||
label: 'Icon 1',
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(
|
||||
Icons.do_not_disturb_off,
|
||||
),
|
||||
label: 'Icon 2'),
|
||||
label: 'Icon 2',
|
||||
),
|
||||
],
|
||||
backgroundColor: Colors.blue,
|
||||
);
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
@@ -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(),
|
||||
);
|
||||
|
||||
@@ -28,8 +28,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: 'Bloc Layout Example',
|
||||
@@ -45,13 +44,13 @@ class MyApp extends StatelessWidget {
|
||||
Expanded(
|
||||
child: BlocProvider(
|
||||
create: (_) => ExampleCubit()..run(),
|
||||
child: ExampleCrudStateManagement(),
|
||||
child: const ExampleCrudStateManagement(),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: BlocProvider(
|
||||
create: (_) => ExampleCubit()..runList(),
|
||||
child: ExampleListCrudStateManagement(),
|
||||
child: const ExampleListCrudStateManagement(),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -63,12 +62,14 @@ class MyApp extends StatelessWidget {
|
||||
Expanded(
|
||||
child: BlocProvider(
|
||||
create: (_) => ExampleCubit()..run(),
|
||||
child: ExampleFrameLayoutCrudConsumer()),
|
||||
child: const ExampleFrameLayoutCrudConsumer(),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: BlocProvider(
|
||||
create: (_) => ExampleCubit()..runList(),
|
||||
child: ExampleFrameLayoutCrudListConsumer()),
|
||||
child: const ExampleFrameLayoutCrudListConsumer(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -78,11 +79,12 @@ class MyApp extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ExampleCrudStateManagement
|
||||
extends CrudCubitConsumerScreen<ExampleCubit, String> {
|
||||
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<ExampleCubit, String> {
|
||||
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<ExampleCubit, String> {
|
||||
const ExampleFrameLayoutCrudConsumer()
|
||||
const ExampleFrameLayoutCrudConsumer({super.key})
|
||||
: super(
|
||||
title: 'Example Title',
|
||||
currentIndex: 0,
|
||||
@@ -119,7 +123,7 @@ class ExampleFrameLayoutCrudConsumer
|
||||
|
||||
class ExampleFrameLayoutCrudListConsumer
|
||||
extends FrameLayoutCrudListCubitConsumerScreen<ExampleCubit, String> {
|
||||
const ExampleFrameLayoutCrudListConsumer()
|
||||
const ExampleFrameLayoutCrudListConsumer({super.key})
|
||||
: super(
|
||||
title: 'Example Title',
|
||||
currentIndex: 0,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<Cubit extends bloc_base.Cubit,
|
||||
mixin CrudMixin<Cubit extends bloc_base.Cubit<dynamic>,
|
||||
SuccessState extends CrudSuccess> {
|
||||
Widget errorBuilder(BuildContext context, CrudError state) =>
|
||||
context.components.errorWidget?.copyWith(error: state.message.wrap()) ??
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
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';
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
+1
-1
@@ -15,8 +15,8 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
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<Cubit extends bloc_base.Cubit<CrudState>,
|
||||
T extends Object?> extends CubitConsumerScreen<Cubit, CrudState>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
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';
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
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<Cubit extends bloc_base.Cubit<CrudState>,
|
||||
T extends Object?> extends CubitScreen<Cubit, CrudState>
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
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';
|
||||
|
||||
@@ -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
|
||||
ref: wyatt_analysis-v2.4.1
|
||||
path: packages/wyatt_analysis
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -1,7 +1 @@
|
||||
|
||||
|
||||
|
||||
include: package:wyatt_analysis/analysis_options.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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -22,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
|
||||
|
||||
@@ -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<UserCubit>()
|
||||
.query([LimitQuery(2)]);
|
||||
context.read<UserCubit>().query([LimitQuery(2)]);
|
||||
},
|
||||
child: const Text("Query"),
|
||||
),
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
|
||||
-1
@@ -24,7 +24,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart';
|
||||
|
||||
class CrudInMemoryDataSourceImpl<Model extends ObjectModel>
|
||||
extends CrudDataSource<Model> {
|
||||
|
||||
CrudInMemoryDataSourceImpl({required this.toMap, Map<String, Model>? data})
|
||||
: _data = data ?? {};
|
||||
final Map<String, Model> _data;
|
||||
|
||||
-1
@@ -22,7 +22,6 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart';
|
||||
|
||||
class CrudFirestoreDataSourceImpl<Model extends ObjectModel, Entity>
|
||||
extends CrudDataSource<Model> {
|
||||
|
||||
CrudFirestoreDataSourceImpl(
|
||||
String collection, {
|
||||
required Model Function(
|
||||
|
||||
@@ -23,7 +23,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
|
||||
class CrudRepositoryImpl<Model extends ObjectModel>
|
||||
extends CrudRepository<Model> {
|
||||
|
||||
CrudRepositoryImpl({
|
||||
required CrudDataSource<Model> crudDataSource,
|
||||
}) : _crudDataSource = crudDataSource;
|
||||
|
||||
@@ -25,7 +25,6 @@ abstract class QueryParser<Q> {
|
||||
abstract class QueryInterface extends Entity {}
|
||||
|
||||
class WhereQuery<Value> extends QueryInterface {
|
||||
|
||||
WhereQuery(this.type, this.field, this.value);
|
||||
final WhereQueryType type;
|
||||
final String field;
|
||||
@@ -33,13 +32,11 @@ class WhereQuery<Value> 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;
|
||||
|
||||
@@ -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<Model extends ObjectModel> extends AsyncUseCase<String, void> {
|
||||
|
||||
Delete(this._crudRepository);
|
||||
final CrudRepository<Model> _crudRepository;
|
||||
|
||||
|
||||
@@ -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<Model extends ObjectModel> extends AsyncUseCase<void, void> {
|
||||
|
||||
DeleteAll(this._crudRepository);
|
||||
final CrudRepository<Model> _crudRepository;
|
||||
|
||||
|
||||
@@ -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<Model extends ObjectModel> extends AsyncUseCase<String, Model?> {
|
||||
|
||||
Get(this._crudRepository);
|
||||
final CrudRepository<Model> _crudRepository;
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
|
||||
|
||||
class GetAll<Model extends ObjectModel>
|
||||
extends AsyncUseCase<void, List<Model?>> {
|
||||
|
||||
GetAll(this._crudRepository);
|
||||
final CrudRepository<Model> _crudRepository;
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
|
||||
|
||||
class Query<Model extends ObjectModel>
|
||||
extends AsyncUseCase<List<QueryInterface>, List<Model?>> {
|
||||
|
||||
Query(this._crudRepository);
|
||||
final CrudRepository<Model> _crudRepository;
|
||||
|
||||
|
||||
@@ -14,9 +14,8 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
|
||||
// class Stream<Model extends ObjectModel> extends UseCase<StreamParameters, List<Model?>> {
|
||||
// class Stream<Model extends ObjectModel> extends UseCase<StreamParameters,
|
||||
//List<Model?>> {
|
||||
// final CrudRepository<Model> _crudRepository;
|
||||
|
||||
// Stream(this._crudRepository);
|
||||
@@ -40,5 +39,6 @@
|
||||
// }
|
||||
|
||||
// @override
|
||||
// FutureOrResult<Stream<List<Model?>>> call(StreamParameters? params) => _crudRepository.stream();
|
||||
// FutureOrResult<Stream<List<Model?>>> call(StreamParameters? params) =>
|
||||
// _crudRepository.stream();
|
||||
// }
|
||||
|
||||
@@ -23,7 +23,6 @@ import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dar
|
||||
|
||||
class Update<Model extends ObjectModel>
|
||||
extends AsyncUseCase<UpdateParameters<Model>, void> {
|
||||
|
||||
Update(this._crudRepository);
|
||||
final CrudRepository<Model> _crudRepository;
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
|
||||
|
||||
class UpdateAll<Model extends ObjectModel>
|
||||
extends AsyncUseCase<Map<String, Object?>, void> {
|
||||
|
||||
UpdateAll(this._crudRepository);
|
||||
final CrudRepository<Model> _crudRepository;
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ import 'package:wyatt_crud_bloc/src/domain/usecases/update_all.dart';
|
||||
part 'crud_state.dart';
|
||||
|
||||
abstract class CrudCubit<Model extends ObjectModel> extends Cubit<CrudState> {
|
||||
|
||||
CrudCubit() : super(CrudInitial());
|
||||
Create<Model>? get crudCreate;
|
||||
DeleteAll<Model>? get crudDeleteAll;
|
||||
|
||||
@@ -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<T> extends CrudSuccess {
|
||||
|
||||
const CrudLoaded(this.data);
|
||||
final T? data;
|
||||
|
||||
@@ -54,7 +52,6 @@ class CrudLoaded<T> extends CrudSuccess {
|
||||
}
|
||||
|
||||
class CrudListLoaded<T> extends CrudSuccess {
|
||||
|
||||
const CrudListLoaded(this.data);
|
||||
final List<T?> data;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -35,7 +35,9 @@ class App extends StatelessWidget {
|
||||
FormInput(formFieldEmail, const Email.pure(),
|
||||
metadata: const FormInputMetadata<Metadata>(extra: blue)),
|
||||
FormInput(
|
||||
formFieldList, const ListOption<String>.pure(choices: ['c1', 'c2', 'c3'],defaultValue: 'c3')),
|
||||
formFieldList,
|
||||
const ListOption<String>.pure(
|
||||
choices: ['c1', 'c2', 'c3'], defaultValue: 'c3')),
|
||||
FormInput(formFieldRadio, const TextString.pure()),
|
||||
FormInput(formFieldPro, const Boolean.pure(),
|
||||
metadata: const FormInputMetadata<Metadata>(name: 'business')),
|
||||
|
||||
@@ -15,10 +15,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
enum Category {
|
||||
perso,
|
||||
business
|
||||
}
|
||||
enum Category { perso, business }
|
||||
|
||||
class Metadata {
|
||||
final Category category;
|
||||
|
||||
@@ -21,10 +21,6 @@ import 'package:form_bloc_example/app/bloc_observer.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
BlocOverrides.runZoned(
|
||||
() => runApp(
|
||||
const App(),
|
||||
),
|
||||
blocObserver: AppBlocObserver(),
|
||||
);
|
||||
Bloc.observer = AppBlocObserver();
|
||||
runApp(const App());
|
||||
}
|
||||
|
||||
@@ -38,8 +38,7 @@ class _NameInput extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
|
||||
field: formFieldName,
|
||||
builder:
|
||||
(context, cubit, state, field, input, controller, metadata) {
|
||||
builder: (context, cubit, state, field, input, controller, metadata) {
|
||||
final meta = state.form.metadataOf<Metadata>(field).extra;
|
||||
final color = computeColor(meta);
|
||||
return Row(
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ enum SetOperation {
|
||||
/// Add new elements to set.
|
||||
union(FormUnion());
|
||||
|
||||
final FormOperation operation;
|
||||
|
||||
const SetOperation(this.operation);
|
||||
|
||||
final FormOperation operation;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -22,8 +22,7 @@ import 'package:wyatt_form_bloc/src/domain/input_validators/form_input_validator
|
||||
/// {@endtemplate}
|
||||
class Boolean extends NullableValidator<bool, ValidationStandardError> {
|
||||
/// {@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);
|
||||
@@ -34,5 +33,4 @@ class Boolean extends NullableValidator<bool, ValidationStandardError> {
|
||||
@override
|
||||
ValidationStandardError? validator(bool? value) =>
|
||||
value != null ? null : onNull;
|
||||
|
||||
}
|
||||
|
||||
@@ -21,8 +21,7 @@ class EnumOption<T> extends AnyValidator<T, List<T>, 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<T> enums;
|
||||
|
||||
|
||||
@@ -61,6 +61,5 @@ class FormInput<
|
||||
List<Object?> get props => [key, validator, metadata];
|
||||
|
||||
@override
|
||||
String toString() =>
|
||||
'FormInput(name: $name, $validator)';
|
||||
String toString() => 'FormInput(name: $name, $validator)';
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
|
||||
-1
@@ -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<FormDataStateImpl> {
|
||||
|
||||
FormDataCubitImpl(this._formRepository, this._formName)
|
||||
: super(FormDataStateImpl(form: _formRepository.accessForm(_formName)));
|
||||
final FormRepository _formRepository;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -66,7 +66,7 @@ Future<void> handleDigest(HttpRequest req) async {
|
||||
Future<void> handleUnsafe(HttpRequest req) async {
|
||||
print(
|
||||
'Query parameters => '
|
||||
'${req.uri.queryParameters.toString()}',
|
||||
'${req.uri.queryParameters}',
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,8 @@ enum EmailVerificationAction {
|
||||
onNonMatch: (n) => n,
|
||||
);
|
||||
|
||||
factory EmailVerificationAction.fromString(String str) => EmailVerificationAction.values.firstWhere(
|
||||
factory EmailVerificationAction.fromString(String str) =>
|
||||
EmailVerificationAction.values.firstWhere(
|
||||
(element) => element.toSnakeCase() == str,
|
||||
);
|
||||
}
|
||||
@@ -56,7 +57,8 @@ class VerifyCode {
|
||||
String? email,
|
||||
String? verificationCode,
|
||||
EmailVerificationAction? action,
|
||||
}) => VerifyCode(
|
||||
}) =>
|
||||
VerifyCode(
|
||||
email: email ?? this.email,
|
||||
verificationCode: verificationCode ?? this.verificationCode,
|
||||
action: action ?? this.action,
|
||||
@@ -80,8 +82,8 @@ class VerifyCode {
|
||||
VerifyCode.fromMap(json.decode(source) as Map<String, dynamic>);
|
||||
|
||||
@override
|
||||
String toString() =>
|
||||
'VerifyCode(email: $email, verificationCode: $verificationCode, action: $action)';
|
||||
String toString() => 'VerifyCode(email: $email, verificationCode: '
|
||||
'$verificationCode, action: $action)';
|
||||
}
|
||||
|
||||
class Account {
|
||||
@@ -95,7 +97,8 @@ class Account {
|
||||
Account copyWith({
|
||||
String? email,
|
||||
String? sessionId,
|
||||
}) => Account(
|
||||
}) =>
|
||||
Account(
|
||||
email: email ?? this.email,
|
||||
sessionId: sessionId ?? this.sessionId,
|
||||
);
|
||||
@@ -107,7 +110,8 @@ class Account {
|
||||
|
||||
factory Account.fromMap(Map<String, dynamic> map) => Account(
|
||||
email: map['email'] as String,
|
||||
sessionId: map['session_id'] != null ? map['session_id'] as String : null,
|
||||
sessionId:
|
||||
map['session_id'] != null ? map['session_id'] as String : null,
|
||||
);
|
||||
|
||||
String toJson() => json.encode(toMap());
|
||||
@@ -130,7 +134,8 @@ class SignUp {
|
||||
SignUp copyWith({
|
||||
String? sessionId,
|
||||
String? password,
|
||||
}) => SignUp(
|
||||
}) =>
|
||||
SignUp(
|
||||
sessionId: sessionId ?? this.sessionId,
|
||||
password: password ?? this.password,
|
||||
);
|
||||
@@ -168,7 +173,8 @@ class TokenSuccess {
|
||||
String? accessToken,
|
||||
String? refreshToken,
|
||||
Account? account,
|
||||
}) => TokenSuccess(
|
||||
}) =>
|
||||
TokenSuccess(
|
||||
accessToken: accessToken ?? this.accessToken,
|
||||
refreshToken: refreshToken ?? this.refreshToken,
|
||||
account: account ?? this.account,
|
||||
@@ -192,8 +198,8 @@ class TokenSuccess {
|
||||
TokenSuccess.fromMap(json.decode(source) as Map<String, dynamic>);
|
||||
|
||||
@override
|
||||
String toString() =>
|
||||
'TokenSuccess(accessToken: $accessToken, refreshToken: $refreshToken, account: $account)';
|
||||
String toString() => 'TokenSuccess(accessToken: $accessToken, refreshToken: '
|
||||
'$refreshToken, account: $account)';
|
||||
}
|
||||
|
||||
class Login {
|
||||
@@ -207,7 +213,8 @@ class Login {
|
||||
Login copyWith({
|
||||
String? email,
|
||||
String? password,
|
||||
}) => Login(
|
||||
}) =>
|
||||
Login(
|
||||
email: email ?? this.email,
|
||||
password: password ?? this.password,
|
||||
);
|
||||
@@ -346,19 +353,19 @@ void main(List<String> 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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
// });
|
||||
// };
|
||||
// };
|
||||
|
||||
@@ -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,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user