repository and data provider concept

This commit is contained in:
2024-05-07 22:15:56 +02:00
parent 6ad8203b6a
commit b171fef348
14 changed files with 129 additions and 104 deletions

View File

@@ -2,36 +2,36 @@ import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../loadable_state.dart';
import 'loadable_state_background_loading.dart';
import 'loadable_state_error_bar.dart';
import 'loadable_state_primary_loading.dart';
// TODO might be a simpler way
class LoadableStateConsumer<TController extends Bloc<dynamic, TWrappedState>, TWrappedState extends LoadableState<TState>, TState> extends StatelessWidget {
final Widget Function(TState state) child;
class LoadableStateConsumer<TController extends Bloc<LoadableHydratedBlocEvent<TState>, LoadableState<TState>>, TState> extends StatelessWidget {
final Widget Function(TState state, bool loading) child;
const LoadableStateConsumer({required this.child, super.key});
static Duration animationDuration = const Duration(milliseconds: 200);
@override
Widget build(BuildContext context) {
var state = context.read<TController>().state as LoadableState<TState>;
var loadableState = context.watch<TController>().state;
return Column(
children: [
LoadableStateErrorBar(visible: state.showError()),
LoadableStateErrorBar(visible: loadableState.showError()),
Expanded(
child: Stack(
children: [
LoadableStatePrimaryLoading(visible: state.showPrimaryLoading()),
LoadableStateBackgroundLoading(visible: state.showBackgroundLoading()),
LoadableStatePrimaryLoading(visible: loadableState.showPrimaryLoading()),
LoadableStateBackgroundLoading(visible: loadableState.showBackgroundLoading()),
AnimatedOpacity(
opacity: state.showContent() ? 1.0 : 0.0,
opacity: loadableState.showContent() ? 1.0 : 0.0,
duration: animationDuration,
curve: Curves.easeInOut,
child: state.showContent() ? child(state.data) : const SizedBox.shrink()
child: loadableState.showContent() ? child(loadableState.data, loadableState.isLoading) : const SizedBox.shrink()
),
],
),