D1APP-26 home (static)

This commit is contained in:
MohammadTaha Basiri 2021-12-12 16:11:48 +03:30
parent 5925e71beb
commit 0276f996cc
12 changed files with 176 additions and 89 deletions

View File

@ -1,10 +1,11 @@
import 'package:didvan/config/design_config.dart'; import 'package:didvan/pages/home/news/news.dart';
import 'package:didvan/pages/home/widgets/categories_gird.dart'; import 'package:didvan/pages/home/profile/profile.dart';
import 'package:didvan/pages/home/widgets/categories_list.dart'; import 'package:didvan/pages/home/radar/radar.dart';
import 'package:didvan/pages/home/widgets/search_field.dart'; import 'package:didvan/pages/home/radar/radar_state.dart';
import 'package:didvan/widgets/didvan/text.dart'; import 'package:didvan/pages/home/statistics/statistics.dart';
import 'package:didvan/widgets/logos/didvan_vertical_logo.dart'; import 'package:didvan/pages/home/studio/studio..dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class Home extends StatefulWidget { class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key); const Home({Key? key}) : super(key: key);
@ -13,86 +14,35 @@ class Home extends StatefulWidget {
State<Home> createState() => _HomeState(); State<Home> createState() => _HomeState();
} }
class _HomeState extends State<Home> { class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
final ScrollController _scrollController = ScrollController(); late final TabController _tabController;
bool _isColapsed = false;
bool _isAnimating = false;
@override @override
void initState() { void initState() {
_scrollController.addListener(() async { _tabController = TabController(length: 5, vsync: this);
if (_isAnimating) return; _tabController.addListener(() {});
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(); super.initState();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final d = MediaQuery.of(context);
return Scaffold( return Scaffold(
body: Stack( body: DefaultTabController(
children: [ length: 5,
CustomScrollView( child: TabBarView(
controller: _scrollController, physics: const BouncingScrollPhysics(),
physics: const BouncingScrollPhysics(), controller: _tabController,
slivers: [ children: [
SliverPadding( const News(),
padding: const EdgeInsets.all( const Statictics(),
20, ChangeNotifierProvider<RadarState>(
).copyWith(top: d.padding.top + 20), create: (context) => RadarState(),
sliver: SliverToBoxAdapter( child: const Radar(),
child: Container( ),
alignment: Alignment.centerRight, const Studio(),
height: 76, const Profile(),
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),
],
), ),
); );
} }

View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class News extends StatelessWidget {
const News({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class Profile extends StatelessWidget {
const Profile({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

@ -0,0 +1,99 @@
import 'package:didvan/config/design_config.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/widgets/didvan/text.dart';
import 'package:didvan/widgets/logos/didvan_vertical_logo.dart';
import 'package:flutter/material.dart';
class Radar extends StatefulWidget {
const Radar({Key? key}) : super(key: key);
@override
State<Radar> createState() => _RadarState();
}
class _RadarState extends State<Radar> {
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),
],
),
);
}
}

View File

@ -2,7 +2,7 @@ import 'package:didvan/constants/assets.dart';
import 'package:didvan/models/radar_category.dart'; import 'package:didvan/models/radar_category.dart';
import 'package:didvan/providers/core_provider.dart'; import 'package:didvan/providers/core_provider.dart';
class HomeState extends CoreProvier { class RadarState extends CoreProvier {
final List<RadarCategory> categories = [ final List<RadarCategory> categories = [
RadarCategory( RadarCategory(
id: 1, id: 1,

View File

@ -1,6 +1,6 @@
import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/design_config.dart';
import 'package:didvan/pages/home/home_state.dart'; import 'package:didvan/pages/home/radar/radar_state.dart';
import 'package:didvan/pages/home/widgets/category_item.dart'; import 'package:didvan/pages/home/radar/widgets/category_item.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -18,7 +18,7 @@ class CategoriesRow1 extends StatelessWidget {
right: isColapsed ? d.size.width : 0, right: isColapsed ? d.size.width : 0,
child: Row( child: Row(
children: context children: context
.read<HomeState>() .read<RadarState>()
.categories .categories
.sublist(0, 3) .sublist(0, 3)
.map( .map(
@ -57,7 +57,7 @@ class CategoriesRow2 extends StatelessWidget {
right: isColapsed ? 124 : 0, right: isColapsed ? 124 : 0,
child: Row( child: Row(
children: context children: context
.read<HomeState>() .read<RadarState>()
.categories .categories
.sublist(3, 6) .sublist(3, 6)
.map( .map(

View File

@ -1,6 +1,6 @@
import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/design_config.dart';
import 'package:didvan/models/radar_category.dart'; import 'package:didvan/models/radar_category.dart';
import 'package:didvan/pages/home/home_state.dart'; import 'package:didvan/pages/home/radar/radar_state.dart';
import 'package:didvan/widgets/animated_visibility.dart'; import 'package:didvan/widgets/animated_visibility.dart';
import 'package:didvan/widgets/didvan/text.dart'; import 'package:didvan/widgets/didvan/text.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -13,7 +13,7 @@ class CategoriesList extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final MediaQueryData d = MediaQuery.of(context); final MediaQueryData d = MediaQuery.of(context);
final HomeState state = context.read<HomeState>(); final RadarState state = context.read<RadarState>();
final List<RadarCategory> categories = []; final List<RadarCategory> categories = [];
categories.addAll(state.categories.sublist(3, 6)); categories.addAll(state.categories.sublist(3, 6));
categories.addAll(state.categories.sublist(0, 3)); categories.addAll(state.categories.sublist(0, 3));

View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class Statictics extends StatelessWidget {
const Statictics({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class Studio extends StatelessWidget {
const Studio({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

@ -1,7 +1,8 @@
import 'package:didvan/pages/authentication/authentication.dart'; import 'package:didvan/pages/authentication/authentication.dart';
import 'package:didvan/pages/authentication/authentication_state.dart'; import 'package:didvan/pages/authentication/authentication_state.dart';
import 'package:didvan/pages/home/home.dart'; import 'package:didvan/pages/home/home.dart';
import 'package:didvan/pages/home/home_state.dart'; import 'package:didvan/pages/home/radar/radar.dart';
import 'package:didvan/pages/home/radar/radar_state.dart';
import 'package:didvan/pages/splash/splash.dart'; import 'package:didvan/pages/splash/splash.dart';
import 'package:didvan/pages/splash/splash_state.dart'; import 'package:didvan/pages/splash/splash_state.dart';
import 'package:didvan/routes/routes.dart'; import 'package:didvan/routes/routes.dart';
@ -27,10 +28,7 @@ class RouteGenerator {
); );
case Routes.home: case Routes.home:
return _materialPageRouteGenerator( return _materialPageRouteGenerator(
ChangeNotifierProvider<HomeState>( const Home(),
create: (context) => HomeState(),
child: const Home(),
),
); );
default: default:
return _errorRoute(); return _errorRoute();