import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; // TODO: improve class SliverBodyPlaceholder extends HookConsumerWidget { const SliverBodyPlaceholder(this.children, {super.key}); final List children; @override Widget build(BuildContext context, WidgetRef ref) { return SliverFillRemaining( hasScrollBody: false, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: children, ), ); } } class SliverLoadingBodyPlaceholder extends HookConsumerWidget { const SliverLoadingBodyPlaceholder({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { return const SliverFillRemaining( hasScrollBody: false, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [CircularProgressIndicator()], ), ); } } class SliverErrorBodyPlaceholder extends HookConsumerWidget { const SliverErrorBodyPlaceholder(this.msg, {super.key, this.icon}); final String msg; final IconData? icon; @override Widget build(BuildContext context, WidgetRef ref) { return SliverFillRemaining( hasScrollBody: false, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(icon ?? Icons.error), const Gap(16), Text(msg), ], ), ); } }