import 'package:didvan/config/design_config.dart'; import 'package:didvan/pages/home/widgets/categories_gird.dart'; import 'package:didvan/pages/home/widgets/categories_list.dart'; import 'package:didvan/pages/home/widgets/search_field.dart'; import 'package:didvan/widgets/didvan/text.dart'; import 'package:didvan/widgets/logos/didvan_vertical_logo.dart'; import 'package:flutter/material.dart'; class Home extends StatefulWidget { const Home({Key? key}) : super(key: key); @override State createState() => _HomeState(); } class _HomeState extends State { final ScrollController _scrollController = ScrollController(); bool _isColapsed = false; bool _isAnimating = false; @override void initState() { _scrollController.addListener(() async { if (_isAnimating) return; final double position = _scrollController.position.pixels; if (position > 5 && !_isColapsed) { _isColapsed = true; setState(() {}); _isAnimating = true; await _scrollController.animateTo( 380, duration: DesignConfig.defaultAnimationDuration, curve: Curves.ease, ); _isAnimating = false; } else if (position < 380 && _isColapsed) { _isColapsed = false; setState(() {}); _isAnimating = true; await _scrollController.animateTo( 0, duration: DesignConfig.defaultAnimationDuration, curve: Curves.ease, ); _isAnimating = false; } }); super.initState(); } @override Widget build(BuildContext context) { final d = MediaQuery.of(context); return Scaffold( body: Stack( children: [ CustomScrollView( controller: _scrollController, physics: const BouncingScrollPhysics(), slivers: [ SliverPadding( padding: const EdgeInsets.all( 20, ).copyWith(top: d.padding.top + 20), sliver: SliverToBoxAdapter( child: Container( alignment: Alignment.centerRight, height: 76, child: const DidvanHorizontalLogo(), ), ), ), const SliverPadding( padding: EdgeInsets.symmetric(horizontal: 16), sliver: SliverToBoxAdapter( child: SearchField(), ), ), SliverPadding( padding: const EdgeInsets.only(top: 300, right: 16, bottom: 20), sliver: SliverToBoxAdapter( child: DidvanText( 'آخرین رصد', style: Theme.of(context).textTheme.subtitle1, color: DesignConfig.darkPrimaryColor2, ), ), ), ], ), CategoriesRow1(isColapsed: _isColapsed), CategoriesRow2(isColapsed: _isColapsed), CategoriesList(isColapsed: _isColapsed), ], ), ); } }