Compare commits
	
		
			No commits in common. "25cf9518f9761d450245538dd7e2f5e539d8f1cb" and "d098d9a6bf518a5a23208f30914a9b2f5e42bba0" have entirely different histories.
		
	
	
		
			25cf9518f9
			...
			d098d9a6bf
		
	
		
							
								
								
									
										14
									
								
								melos.yaml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								melos.yaml
									
									
									
									
									
								
							@ -24,17 +24,13 @@ 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 dart format .
 | 
			
		||||
    description: Run `dart format` for all packages.
 | 
			
		||||
 | 
			
		||||
    run: melos exec flutter format . --fix
 | 
			
		||||
    description: Run `flutter format` for all packages.
 | 
			
		||||
  
 | 
			
		||||
  format-check:
 | 
			
		||||
    run: melos exec dart fix . --set-exit-if-changed
 | 
			
		||||
    description: Run `dart fix` checks for all packages.
 | 
			
		||||
    run: melos exec flutter format . --set-exit-if-changed
 | 
			
		||||
    description: Run `flutter format` checks for all packages.
 | 
			
		||||
 | 
			
		||||
  clean:deep:
 | 
			
		||||
    run: git clean -x -d -f -q
 | 
			
		||||
 | 
			
		||||
@ -15,6 +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/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import 'package:architecture_example/data/models/photo_model.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ 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,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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ 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,6 +19,7 @@ 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,6 +21,7 @@ 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,6 +22,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,7 @@
 | 
			
		||||
// 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;
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,7 @@ 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,
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@ class AlbumsScreen extends BlocScreen<AlbumBloc, AlbumEvent, AlbumState> {
 | 
			
		||||
      bloc..add(AlbumFetched());
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget parent(BuildContext context, Widget child) => AlbumsWrapperWidget(
 | 
			
		||||
  Widget onWrap(BuildContext context, Widget child) => AlbumsWrapperWidget(
 | 
			
		||||
        child: child,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,11 +22,8 @@ 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;
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,7 @@ 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;
 | 
			
		||||
@ -35,6 +36,7 @@ class PhotoDetailsSuccess extends PhotoDetailsState {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class PhotoDetailsFailure extends PhotoDetailsState {
 | 
			
		||||
 | 
			
		||||
  const PhotoDetailsFailure(this.error);
 | 
			
		||||
  final String error;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ class PhotoDetailsScreen
 | 
			
		||||
      bloc..load(photoId);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget parent(BuildContext context, Widget child) =>
 | 
			
		||||
  Widget onWrap(BuildContext context, Widget child) =>
 | 
			
		||||
      PhotoDetailsWrapperWidget(child: child);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ 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;
 | 
			
		||||
@ -19,6 +20,7 @@ class FavoriteCheckerSuccess extends FavoriteCheckerState {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class FavoriteCheckerFailure extends FavoriteCheckerState {
 | 
			
		||||
 | 
			
		||||
  const FavoriteCheckerFailure(this.error);
 | 
			
		||||
  final String error;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,7 @@ 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,
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ abstract class PhotoEvent extends Equatable {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class PhotoFetched extends PhotoEvent {
 | 
			
		||||
 | 
			
		||||
  const PhotoFetched(this.albumId);
 | 
			
		||||
  final int albumId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@ class PhotosScreen extends BlocScreen<PhotoBloc, PhotoEvent, PhotoState> {
 | 
			
		||||
      bloc..add(PhotoFetched(albumId));
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget parent(BuildContext context, Widget child) => PhotosWrapperWidget(
 | 
			
		||||
  Widget onWrap(BuildContext context, Widget child) => PhotosWrapperWidget(
 | 
			
		||||
        child: child,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -71,17 +71,17 @@ class _PhotosGridState extends State<PhotosGrid> {
 | 
			
		||||
 | 
			
		||||
  @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]),
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -55,10 +55,7 @@ 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),)
 | 
			
		||||
            ]
 | 
			
		||||
          ],
 | 
			
		||||
        ),
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@
 | 
			
		||||
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
 | 
			
		||||
 | 
			
		||||
abstract class AppException implements Exception {
 | 
			
		||||
 | 
			
		||||
  AppException([this.message]);
 | 
			
		||||
  final String? message;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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,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 {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,7 @@ 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)));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
@ -32,3 +32,4 @@ class CounterInitial extends CounterState {
 | 
			
		||||
class CounterModified extends CounterState {
 | 
			
		||||
  const CounterModified(super.count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,16 +24,14 @@ 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.displayMedium)),
 | 
			
		||||
      body: Center(child: Text('${state.count}', style: textTheme.headline2)),
 | 
			
		||||
      floatingActionButton: Column(
 | 
			
		||||
        mainAxisAlignment: MainAxisAlignment.end,
 | 
			
		||||
        crossAxisAlignment: CrossAxisAlignment.end,
 | 
			
		||||
 | 
			
		||||
@ -28,8 +28,7 @@ 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.displayMedium)),
 | 
			
		||||
      body: Center(child: Text('${state.count}', style: textTheme.headline2)),
 | 
			
		||||
      floatingActionButton: Column(
 | 
			
		||||
        mainAxisAlignment: MainAxisAlignment.end,
 | 
			
		||||
        crossAxisAlignment: CrossAxisAlignment.end,
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
@ -19,20 +19,19 @@ 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.displayMedium)),
 | 
			
		||||
      body: Center(child: Text('${state.count}', style: textTheme.headline2)),
 | 
			
		||||
      floatingActionButton: Column(
 | 
			
		||||
        mainAxisAlignment: MainAxisAlignment.end,
 | 
			
		||||
        crossAxisAlignment: CrossAxisAlignment.end,
 | 
			
		||||
@ -54,4 +53,4 @@ class CounterCubitPage extends CubitScreen<CounterCubit, CounterState> {
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@ -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.displayMedium);
 | 
			
		||||
          return Text('${state.count}', style: textTheme.headline2);
 | 
			
		||||
        },
 | 
			
		||||
      )),
 | 
			
		||||
      floatingActionButton: Column(
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
@ -32,3 +32,4 @@ class CounterInitial extends CounterState {
 | 
			
		||||
class CounterModified extends CounterState {
 | 
			
		||||
  const CounterModified(super.count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
@ -23,4 +23,4 @@ class CounterObserver extends BlocObserver {
 | 
			
		||||
    super.onChange(bloc, change);
 | 
			
		||||
    debugPrint('${bloc.runtimeType} $change');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@ -20,6 +20,6 @@ import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_bloc/flutter_bloc.dart';
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
  Bloc.observer = CounterObserver();
 | 
			
		||||
  runApp(const CounterRepositoryProviderPage());
 | 
			
		||||
  BlocOverrides.runZoned(() => runApp(const CounterRepositoryProviderPage()),
 | 
			
		||||
      blocObserver: CounterObserver());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -56,8 +56,7 @@ 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(),
 | 
			
		||||
                );
 | 
			
		||||
              })),
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,7 @@ mixin BlocBaseProviderMixin<Bloc extends BlocBase<Object>> {
 | 
			
		||||
 | 
			
		||||
  /// Returns another [BlocBase] **not** used by this [BlocBaseProviderMixin].
 | 
			
		||||
  /// Short hand for `context.read<AnotherBloc>();`
 | 
			
		||||
  ///
 | 
			
		||||
  /// 
 | 
			
		||||
  /// To get [BlocBase] used by by this [BlocBaseProviderMixin] see `bloc()`
 | 
			
		||||
  AnotherBloc anotherBloc<AnotherBloc>(BuildContext context) =>
 | 
			
		||||
      context.read<AnotherBloc>();
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ import 'package:flutter_bloc/flutter_bloc.dart' as blocbase;
 | 
			
		||||
/// of helper methods for events.
 | 
			
		||||
mixin BlocProviderMixin<Bloc extends blocbase.Bloc<Event, Object>, Event> {
 | 
			
		||||
  /// Add an event to the [Bloc].
 | 
			
		||||
  ///
 | 
			
		||||
  /// 
 | 
			
		||||
  /// Short hand for `context.read<Bloc>().add(event)`.
 | 
			
		||||
  void add(BuildContext context, Event event) =>
 | 
			
		||||
      context.read<Bloc>().add(event);
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
# Copyright (C) 2023 WYATT GROUP
 | 
			
		||||
# Copyright (C) 2022 WYATT GROUP
 | 
			
		||||
# Please see the AUTHORS file for details.
 | 
			
		||||
#
 | 
			
		||||
# This program is free software: you can redistribute it and/or modify
 | 
			
		||||
@ -14,4 +14,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/>.
 | 
			
		||||
 | 
			
		||||
include: package:wyatt_analysis/analysis_options.flutter.yaml
 | 
			
		||||
 | 
			
		||||
include: package:wyatt_analysis/analysis_options.flutter.experimental.yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,33 +7,31 @@ class ExampleCubit extends Cubit<CrudState> {
 | 
			
		||||
 | 
			
		||||
  FutureOr<void> run() async {
 | 
			
		||||
    while (true) {
 | 
			
		||||
      await Future<void>.delayed(const Duration(seconds: 1));
 | 
			
		||||
      await Future.delayed(const Duration(seconds: 1));
 | 
			
		||||
      emit(CrudLoading());
 | 
			
		||||
      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));
 | 
			
		||||
      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));
 | 
			
		||||
      emit(CrudInitial());
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  FutureOr<void> runList() async {
 | 
			
		||||
    while (true) {
 | 
			
		||||
      await Future<void>.delayed(const Duration(seconds: 1));
 | 
			
		||||
      await Future.delayed(const Duration(seconds: 1));
 | 
			
		||||
      emit(CrudLoading());
 | 
			
		||||
      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<void>.delayed(const Duration(seconds: 1));
 | 
			
		||||
      await Future.delayed(const Duration(seconds: 1));
 | 
			
		||||
      emit(CrudError('Cubit Error'));
 | 
			
		||||
      await Future.delayed(const Duration(seconds: 1));
 | 
			
		||||
      emit(CrudListLoaded<String>([
 | 
			
		||||
        'DATA LOADED 1',
 | 
			
		||||
        'DATA LOADED 2',
 | 
			
		||||
        'DATA LOADED 3',
 | 
			
		||||
        'DATA LOADED 4'
 | 
			
		||||
      ]));
 | 
			
		||||
      await Future.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.key, super.title});
 | 
			
		||||
  const CustomAppBar({super.title});
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) => AppBar(
 | 
			
		||||
        title: Text(title?.data ?? 'Title'),
 | 
			
		||||
 | 
			
		||||
@ -7,23 +7,19 @@ part 'custom_bottom_bar.g.dart';
 | 
			
		||||
@ComponentCopyWithExtension()
 | 
			
		||||
class CustomBottomBar extends BottomNavigationBarComponent
 | 
			
		||||
    with $CustomBottomBarCWMixin {
 | 
			
		||||
  const CustomBottomBar({super.key});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) => BottomNavigationBar(
 | 
			
		||||
        items: const [
 | 
			
		||||
        items: [
 | 
			
		||||
          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,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ part 'custom_error_widget.g.dart';
 | 
			
		||||
@ComponentCopyWithExtension()
 | 
			
		||||
class CustomErrorWidget extends ErrorWidgetComponent
 | 
			
		||||
    with $CustomErrorWidgetCWMixin {
 | 
			
		||||
  CustomErrorWidget({super.key, super.error});
 | 
			
		||||
  CustomErrorWidget({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.key, super.color});
 | 
			
		||||
  CustomLoadingWidget({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: const CustomAppBar(),
 | 
			
		||||
        bottomNavigationBar: const CustomBottomBar(),
 | 
			
		||||
        appBar: CustomAppBar(),
 | 
			
		||||
        bottomNavigationBar: CustomBottomBar(),
 | 
			
		||||
        loadingWidget: CustomLoadingWidget(),
 | 
			
		||||
        errorWidget: CustomErrorWidget(),
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
@ -28,63 +28,61 @@ class MyApp extends StatelessWidget {
 | 
			
		||||
 | 
			
		||||
  // This widget is the root of your application.
 | 
			
		||||
  @override
 | 
			
		||||
  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: const ExampleCrudStateManagement(),
 | 
			
		||||
                        ),
 | 
			
		||||
  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: const ExampleListCrudStateManagement(),
 | 
			
		||||
                        ),
 | 
			
		||||
                    ),
 | 
			
		||||
                    Expanded(
 | 
			
		||||
                      child: BlocProvider(
 | 
			
		||||
                        create: (_) => ExampleCubit()..runList(),
 | 
			
		||||
                        child: ExampleListCrudStateManagement(),
 | 
			
		||||
                      ),
 | 
			
		||||
                    ],
 | 
			
		||||
                  ),
 | 
			
		||||
                    ),
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
                Expanded(
 | 
			
		||||
                  child: Row(
 | 
			
		||||
                    children: [
 | 
			
		||||
                      Expanded(
 | 
			
		||||
                        child: BlocProvider(
 | 
			
		||||
              ),
 | 
			
		||||
              Expanded(
 | 
			
		||||
                child: Row(
 | 
			
		||||
                  children: [
 | 
			
		||||
                    Expanded(
 | 
			
		||||
                      child: BlocProvider(
 | 
			
		||||
                          create: (_) => ExampleCubit()..run(),
 | 
			
		||||
                          child: const ExampleFrameLayoutCrudConsumer(),
 | 
			
		||||
                        ),
 | 
			
		||||
                      ),
 | 
			
		||||
                      Expanded(
 | 
			
		||||
                        child: BlocProvider(
 | 
			
		||||
                          child: ExampleFrameLayoutCrudConsumer()),
 | 
			
		||||
                    ),
 | 
			
		||||
                    Expanded(
 | 
			
		||||
                      child: BlocProvider(
 | 
			
		||||
                          create: (_) => ExampleCubit()..runList(),
 | 
			
		||||
                          child: const ExampleFrameLayoutCrudListConsumer(),
 | 
			
		||||
                        ),
 | 
			
		||||
                      ),
 | 
			
		||||
                    ],
 | 
			
		||||
                  ),
 | 
			
		||||
                          child: ExampleFrameLayoutCrudListConsumer()),
 | 
			
		||||
                    ),
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
              ],
 | 
			
		||||
            ),
 | 
			
		||||
              ),
 | 
			
		||||
            ],
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ExampleCrudStateManagement
 | 
			
		||||
    extends CrudCubitConsumerScreen<ExampleCubit, String> {
 | 
			
		||||
  const ExampleCrudStateManagement({super.key});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget initialBuilder(BuildContext context, CrudInitial state) =>
 | 
			
		||||
      Container(color: Colors.yellow);
 | 
			
		||||
@ -95,8 +93,6 @@ class ExampleCrudStateManagement
 | 
			
		||||
 | 
			
		||||
class ExampleListCrudStateManagement
 | 
			
		||||
    extends CrudListCubitConsumerScreen<ExampleCubit, String> {
 | 
			
		||||
  const ExampleListCrudStateManagement({super.key});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget initialBuilder(BuildContext context, CrudInitial state) =>
 | 
			
		||||
      Container(color: Colors.green);
 | 
			
		||||
@ -110,7 +106,7 @@ class ExampleListCrudStateManagement
 | 
			
		||||
 | 
			
		||||
class ExampleFrameLayoutCrudConsumer
 | 
			
		||||
    extends FrameLayoutCrudCubitConsumerScreen<ExampleCubit, String> {
 | 
			
		||||
  const ExampleFrameLayoutCrudConsumer({super.key})
 | 
			
		||||
  const ExampleFrameLayoutCrudConsumer()
 | 
			
		||||
      : super(
 | 
			
		||||
          title: 'Example Title',
 | 
			
		||||
          currentIndex: 0,
 | 
			
		||||
@ -123,7 +119,7 @@ class ExampleFrameLayoutCrudConsumer
 | 
			
		||||
 | 
			
		||||
class ExampleFrameLayoutCrudListConsumer
 | 
			
		||||
    extends FrameLayoutCrudListCubitConsumerScreen<ExampleCubit, String> {
 | 
			
		||||
  const ExampleFrameLayoutCrudListConsumer({super.key})
 | 
			
		||||
  const ExampleFrameLayoutCrudListConsumer()
 | 
			
		||||
      : super(
 | 
			
		||||
          title: 'Example Title',
 | 
			
		||||
          currentIndex: 0,
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
@ -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<dynamic>,
 | 
			
		||||
mixin CrudMixin<Cubit extends bloc_base.Cubit,
 | 
			
		||||
    SuccessState extends CrudSuccess> {
 | 
			
		||||
  Widget errorBuilder(BuildContext context, CrudError state) =>
 | 
			
		||||
      context.components.errorWidget?.copyWith(error: state.message.wrap()) ??
 | 
			
		||||
 | 
			
		||||
@ -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/widgets.dart';
 | 
			
		||||
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';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -16,5 +16,5 @@
 | 
			
		||||
 | 
			
		||||
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 './crud_cubit_consumer_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:flutter_bloc/flutter_bloc.dart' as bloc_base;
 | 
			
		||||
import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart';
 | 
			
		||||
import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base;
 | 
			
		||||
 | 
			
		||||
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:flutter_bloc/flutter_bloc.dart' as bloc_base;
 | 
			
		||||
import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart';
 | 
			
		||||
import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base;
 | 
			
		||||
 | 
			
		||||
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 '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_wyatt_ui_components.dart';
 | 
			
		||||
export 'package:wyatt_ui_layout/wyatt_wyatt_ui_layout.dart';
 | 
			
		||||
 | 
			
		||||
export 'core/core.dart';
 | 
			
		||||
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';
 | 
			
		||||
 | 
			
		||||
@ -3,17 +3,14 @@ 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
 | 
			
		||||
@ -35,11 +32,13 @@ 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
 | 
			
		||||
      path: packages/wyatt_analysis
 | 
			
		||||
@ -1 +1,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
include: package:wyatt_analysis/analysis_options.yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,8 +3,6 @@ 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"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -92,6 +92,7 @@ class MyHomePage extends StatelessWidget {
 | 
			
		||||
                );
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
 | 
			
		||||
            const SizedBox(height: 20),
 | 
			
		||||
            ElevatedButton(
 | 
			
		||||
              onPressed: () {
 | 
			
		||||
@ -120,7 +121,9 @@ class MyHomePage extends StatelessWidget {
 | 
			
		||||
            ),
 | 
			
		||||
            ElevatedButton(
 | 
			
		||||
              onPressed: () {
 | 
			
		||||
                context.read<UserCubit>().query([LimitQuery(2)]);
 | 
			
		||||
                context
 | 
			
		||||
                    .read<UserCubit>()
 | 
			
		||||
                    .query([LimitQuery(2)]);
 | 
			
		||||
              },
 | 
			
		||||
              child: const Text("Query"),
 | 
			
		||||
            ),
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ 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,6 +23,7 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
 | 
			
		||||
 | 
			
		||||
class CrudRepositoryImpl<Model extends ObjectModel>
 | 
			
		||||
    extends CrudRepository<Model> {
 | 
			
		||||
 | 
			
		||||
  CrudRepositoryImpl({
 | 
			
		||||
    required CrudDataSource<Model> crudDataSource,
 | 
			
		||||
  }) : _crudDataSource = crudDataSource;
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,7 @@ 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;
 | 
			
		||||
@ -32,11 +33,13 @@ 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;
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ 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,6 +19,7 @@ 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,6 +21,7 @@ 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,6 +20,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart';
 | 
			
		||||
class StreamParameters {
 | 
			
		||||
  final String? id;
 | 
			
		||||
  final List<QueryInterface>? conditions;
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  StreamParameters({
 | 
			
		||||
    this.id,
 | 
			
		||||
    this.conditions,
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ class UpdateParameters<Model> {
 | 
			
		||||
  final String id;
 | 
			
		||||
  final Model? object;
 | 
			
		||||
  final Map<String, dynamic>? raw;
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  UpdateParameters({
 | 
			
		||||
    required this.id,
 | 
			
		||||
    this.object,
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ 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,8 +14,9 @@
 | 
			
		||||
// 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);
 | 
			
		||||
@ -37,8 +38,7 @@
 | 
			
		||||
//       throw ClientException('Stream parameters cannot be null.');
 | 
			
		||||
//     }
 | 
			
		||||
//   }
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
//   @override
 | 
			
		||||
//   FutureOrResult<Stream<List<Model?>>> call(StreamParameters? params) =>
 | 
			
		||||
// _crudRepository.stream();
 | 
			
		||||
//   FutureOrResult<Stream<List<Model?>>> call(StreamParameters? params) => _crudRepository.stream();
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ 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,6 +22,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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 <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user