import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/pages/home/radar/widgets/categories_gird.dart'; import 'package:didvan/pages/home/radar/widgets/categories_list.dart'; import 'package:didvan/pages/home/radar/widgets/search_field.dart'; import 'package:didvan/pages/home/widgets/logo_app_bar.dart'; import 'package:didvan/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; class Radar extends StatefulWidget { const Radar({Key? key}) : super(key: key); @override State createState() => _RadarState(); } class _RadarState extends State { final ScrollController _scrollController = ScrollController(); bool _isColapsed = false; bool _isAnimating = false; @override void initState() { _scrollController.addListener(() async { _handleAnimations(); }); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ Theme( data: Theme.of(context).copyWith( colorScheme: Theme.of(context).colorScheme.copyWith( secondary: Colors.white, ), ), child: CustomScrollView( controller: _scrollController, slivers: [ const SliverToBoxAdapter(child: LogoAppBar()), 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: Theme.of(context).colorScheme.title, ), ), ), ], ), ), CategoriesRow1(isColapsed: _isColapsed), CategoriesRow2(isColapsed: _isColapsed), CategoriesList(isColapsed: _isColapsed), ], ), ); } void _handleAnimations() 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.mediumAnimationDuration, curve: Curves.ease, ); _isAnimating = false; } else if (position < 380 && _isColapsed) { _isColapsed = false; setState(() {}); _isAnimating = true; await _scrollController.animateTo( 0, duration: DesignConfig.mediumAnimationDuration, curve: Curves.ease, ); _isAnimating = false; } } }