diff --git a/lib/widgets/sliver_state_handler.dart b/lib/widgets/sliver_state_handler.dart new file mode 100644 index 0000000..2c2f4e1 --- /dev/null +++ b/lib/widgets/sliver_state_handler.dart @@ -0,0 +1,45 @@ +import 'package:didvan/models/enums.dart'; +import 'package:didvan/providers/core_provider.dart'; +import 'package:didvan/widgets/didvan/text.dart'; +import 'package:flutter/material.dart'; + +class SliverStateHandler extends SliverList { + final T state; + final Widget Function(BuildContext context, T state, int index) builder; + final int childCount; + final VoidCallback? onRefresh; + final bool enableEmptyState; + final Widget? emptyState; + final Widget? placeholder; + SliverStateHandler({ + Key? key, + required this.builder, + required this.childCount, + this.placeholder, + this.emptyState, + this.enableEmptyState = false, + this.onRefresh, + required this.state, + }) : super( + key: key, + delegate: SliverChildBuilderDelegate( + (context, index) { + if (state.appState == AppState.failed) { + return const DidvanText('مشکل اتصال'); + } + if (enableEmptyState) { + return emptyState; + } + if (state.appState == AppState.busy) { + return placeholder; + } + return builder(context, state, index); + }, + childCount: state.appState == AppState.idle + ? childCount + : state.appState == AppState.busy + ? 3 + : 1, + ), + ); +}