didvan-app/lib/widgets/sliver_state_handler.dart

46 lines
1.4 KiB
Dart

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<T extends CoreProvier> 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,
),
);
}