moved reload actions out of error context
This commit is contained in:
@ -2,6 +2,7 @@ import 'package:bloc/bloc.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../../../../widget/conditional_wrapper.dart';
|
||||
import '../../utilityWidgets/bloc_module.dart';
|
||||
import '../../utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
|
||||
import '../bloc/loadable_state_bloc.dart';
|
||||
@ -14,36 +15,42 @@ import 'loadable_state_primary_loading.dart';
|
||||
|
||||
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});
|
||||
final bool wrapWithScrollView;
|
||||
const LoadableStateConsumer({required this.child, this.wrapWithScrollView = false, super.key});
|
||||
|
||||
static Duration animationDuration = const Duration(milliseconds: 200);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var loadableState = context.watch<TController>().state;
|
||||
var childWidget = RefreshIndicator(
|
||||
onRefresh: () {
|
||||
loadableState.error != null && loadableState.error!.retry != null
|
||||
? loadableState.error!.retry!()
|
||||
: null;
|
||||
return Future.value();
|
||||
},
|
||||
var childWidget = ConditionalWrapper(
|
||||
condition: loadableState.reFetch != null,
|
||||
wrapper: (child) => RefreshIndicator(
|
||||
onRefresh: () {
|
||||
if(loadableState.reFetch != null) loadableState.reFetch!();
|
||||
return Future.value();
|
||||
},
|
||||
child: ConditionalWrapper(
|
||||
condition: wrapWithScrollView,
|
||||
wrapper: (child) => SingleChildScrollView(
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
child: child
|
||||
),
|
||||
child: child,
|
||||
)
|
||||
),
|
||||
child: SizedBox(
|
||||
height: MediaQuery.of(context).size.height,
|
||||
child: loadableState.showContent()
|
||||
? child(loadableState.data, loadableState.isLoading)
|
||||
: const SizedBox.shrink(),
|
||||
),
|
||||
// SingleChildScrollView( // TODO not all childs are reloadable
|
||||
// physics: const AlwaysScrollableScrollPhysics(),
|
||||
// child:
|
||||
// ),
|
||||
);
|
||||
|
||||
return BlocModule<LoadableStateBloc, LoadableStateState>(
|
||||
create: (context) => LoadableStateBloc(),
|
||||
child: (context, bloc, state) {
|
||||
bloc.loadingError = loadableState.error;
|
||||
bloc.reFetch = loadableState.reFetch;
|
||||
return Column(
|
||||
children: [
|
||||
LoadableStateErrorBar(visible: loadableState.showErrorBar()),
|
||||
|
@ -27,16 +27,16 @@ class LoadableStateErrorScreen extends StatelessWidget {
|
||||
|
||||
if(bloc.allowRetry()) ...[
|
||||
const SizedBox(height: 10),
|
||||
TextButton(onPressed: () => bloc.loadingError!.retry!(), child: const Text('Erneut versuschen')),
|
||||
TextButton(onPressed: () => bloc.reFetch!(), child: const Text('Erneut versuschen')),
|
||||
],
|
||||
|
||||
if(bloc.showErrorMessage()) ...[
|
||||
const SizedBox(height: 40),
|
||||
Text(bloc.loadingError!.message, style: TextStyle(color: Theme.of(context).hintColor, fontSize: 12))
|
||||
Text("bloc.loadingError!.message", style: TextStyle(color: Theme.of(context).hintColor, fontSize: 12))
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user