D1APP-26 home (static)
This commit is contained in:
parent
5925e71beb
commit
0276f996cc
|
|
@ -1,10 +1,11 @@
|
|||
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:didvan/pages/home/news/news.dart';
|
||||
import 'package:didvan/pages/home/profile/profile.dart';
|
||||
import 'package:didvan/pages/home/radar/radar.dart';
|
||||
import 'package:didvan/pages/home/radar/radar_state.dart';
|
||||
import 'package:didvan/pages/home/statistics/statistics.dart';
|
||||
import 'package:didvan/pages/home/studio/studio..dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class Home extends StatefulWidget {
|
||||
const Home({Key? key}) : super(key: key);
|
||||
|
|
@ -13,86 +14,35 @@ class Home extends StatefulWidget {
|
|||
State<Home> createState() => _HomeState();
|
||||
}
|
||||
|
||||
class _HomeState extends State<Home> {
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
|
||||
bool _isColapsed = false;
|
||||
bool _isAnimating = false;
|
||||
class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
|
||||
late final TabController _tabController;
|
||||
|
||||
@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;
|
||||
}
|
||||
});
|
||||
_tabController = TabController(length: 5, vsync: this);
|
||||
_tabController.addListener(() {});
|
||||
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),
|
||||
],
|
||||
body: DefaultTabController(
|
||||
length: 5,
|
||||
child: TabBarView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
controller: _tabController,
|
||||
children: [
|
||||
const News(),
|
||||
const Statictics(),
|
||||
ChangeNotifierProvider<RadarState>(
|
||||
create: (context) => RadarState(),
|
||||
child: const Radar(),
|
||||
),
|
||||
const Studio(),
|
||||
const Profile(),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ import 'package:didvan/constants/assets.dart';
|
|||
import 'package:didvan/models/radar_category.dart';
|
||||
import 'package:didvan/providers/core_provider.dart';
|
||||
|
||||
class HomeState extends CoreProvier {
|
||||
class RadarState extends CoreProvier {
|
||||
final List<RadarCategory> categories = [
|
||||
RadarCategory(
|
||||
id: 1,
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:didvan/config/design_config.dart';
|
||||
import 'package:didvan/pages/home/home_state.dart';
|
||||
import 'package:didvan/pages/home/widgets/category_item.dart';
|
||||
import 'package:didvan/pages/home/radar/radar_state.dart';
|
||||
import 'package:didvan/pages/home/radar/widgets/category_item.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
|
@ -18,7 +18,7 @@ class CategoriesRow1 extends StatelessWidget {
|
|||
right: isColapsed ? d.size.width : 0,
|
||||
child: Row(
|
||||
children: context
|
||||
.read<HomeState>()
|
||||
.read<RadarState>()
|
||||
.categories
|
||||
.sublist(0, 3)
|
||||
.map(
|
||||
|
|
@ -57,7 +57,7 @@ class CategoriesRow2 extends StatelessWidget {
|
|||
right: isColapsed ? 124 : 0,
|
||||
child: Row(
|
||||
children: context
|
||||
.read<HomeState>()
|
||||
.read<RadarState>()
|
||||
.categories
|
||||
.sublist(3, 6)
|
||||
.map(
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:didvan/config/design_config.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/didvan/text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -13,7 +13,7 @@ class CategoriesList extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final MediaQueryData d = MediaQuery.of(context);
|
||||
final HomeState state = context.read<HomeState>();
|
||||
final RadarState state = context.read<RadarState>();
|
||||
final List<RadarCategory> categories = [];
|
||||
categories.addAll(state.categories.sublist(3, 6));
|
||||
categories.addAll(state.categories.sublist(0, 3));
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
import 'package:didvan/pages/authentication/authentication.dart';
|
||||
import 'package:didvan/pages/authentication/authentication_state.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_state.dart';
|
||||
import 'package:didvan/routes/routes.dart';
|
||||
|
|
@ -27,10 +28,7 @@ class RouteGenerator {
|
|||
);
|
||||
case Routes.home:
|
||||
return _materialPageRouteGenerator(
|
||||
ChangeNotifierProvider<HomeState>(
|
||||
create: (context) => HomeState(),
|
||||
child: const Home(),
|
||||
),
|
||||
const Home(),
|
||||
);
|
||||
default:
|
||||
return _errorRoute();
|
||||
|
|
|
|||
Loading…
Reference in New Issue