From f906c1cfa2709e8429876a3cc4c24d0fcb9f8cb4 Mon Sep 17 00:00:00 2001 From: MohammadTaha Basiri Date: Wed, 5 Jan 2022 17:08:40 +0330 Subject: [PATCH] sliver state handler component (beta) --- lib/widgets/sliver_state_handler.dart | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lib/widgets/sliver_state_handler.dart 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, + ), + ); +}