Skip to content
Snippets Groups Projects
skeleton_screen.dart 2.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • import 'package:flutter/material.dart';
    
    import 'package:flutter_bloc/flutter_bloc.dart';
    
    import '../../cubit/bottom_nav_cubit.dart';
    
    import '../widgets/app_bar.dart';
    
    import '../widgets/bottom_nav_bar.dart';
    
    import 'discoveries_screen.dart';
    import 'home_screen.dart';
    import 'statistics_screen.dart';
    
    class SkeletonScreen extends StatefulWidget {
    
      const SkeletonScreen({super.key});
    
    
      @override
      State<SkeletonScreen> createState() => _SkeletonScreenState();
    }
    
    class _SkeletonScreenState extends State<SkeletonScreen> {
    
      @override
      Widget build(BuildContext context) {
    
        const List<Widget> pageNavigation = <Widget>[
          const HomeScreen(),
          const DiscoveriesScreen(),
          const StatisticsScreen(),
        ];
    
        return BlocProvider<BottomNavCubit>(
          create: (BuildContext context) => BottomNavCubit(),
    
          child: BlocBuilder<BottomNavCubit, int>(
            builder: (BuildContext context, int state) {
              return GestureDetector(
                onHorizontalDragEnd: (dragDetail) {
                  if (dragDetail.velocity.pixelsPerSecond.dx < 1) {
                    context.read<BottomNavCubit>().moveNext();
                  } else {
                    context.read<BottomNavCubit>().movePrevious();
                  }
                },
                child: Scaffold(
                  appBar: StandardAppBar(notifyParent: refresh),
                  extendBodyBehindAppBar: false,
                  body: BlocBuilder<BottomNavCubit, int>(
                    builder: (BuildContext context, int state) {
                      return AnimatedSwitcher(
                        duration: const Duration(milliseconds: 300),
                        child: pageNavigation.elementAt(state),
                      );
                    },
                  ),
                  bottomNavigationBar: const BottomNavBar(),
                  backgroundColor: Theme.of(context).colorScheme.background,
                ),
              );
            },
    
    
      refresh() {
        void rebuild(Element el) {
          el.markNeedsBuild();
          el.visitChildren(rebuild);
        }
    
        (context as Element).visitChildren(rebuild);
      }