This commit is contained in:
Mohammed Al-Samarraie
2025-12-13 17:39:24 +03:00
parent 5cdfa102f3
commit 489a99a0a3
7 changed files with 289 additions and 268 deletions

View File

@@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import '../widgets/finance_summary_card.dart';
import '../widgets/work_day_card.dart';
import '../widgets/settings_bar.dart';
@@ -15,25 +14,31 @@ class FinanceScreen extends StatefulWidget {
class _FinanceScreenState extends State<FinanceScreen> {
String dropdownValue = "الكل";
bool _showSettings = true; // local control of settings bar
late ScrollController scrollController;
@override
void initState() {
super.initState();
scrollController = ScrollController();
}
@override
void dispose() {
scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Directionality(
textDirection: TextDirection.rtl,
child: Stack(
children: [
/// --------------------------------------------------
/// SETTINGS BAR (STATIC, INSIDE THE SCREEN)
/// --------------------------------------------------
AnimatedPositioned(
duration: const Duration(milliseconds: 250),
top: _showSettings ? 0 : -80,
left: 0,
right: 0,
child: SafeArea(
child: Padding(
padding: const EdgeInsets.only(top: 8),
textDirection: TextDirection.ltr,
child: SafeArea(
child: CustomScrollView(
controller: scrollController,
physics: const BouncingScrollPhysics(),
slivers: [
SliverToBoxAdapter(
child: SettingsBar(
selectedIndex: 0,
showBackButton: false,
@@ -46,55 +51,38 @@ class _FinanceScreenState extends State<FinanceScreen> {
},
),
),
),
),
/// --------------------------------------------------
/// MAIN CONTENT - LIST
/// --------------------------------------------------
Positioned.fill(
top: 70, // space for SettingsBar
child: NotificationListener<UserScrollNotification>(
onNotification: (notif) {
if (notif.direction == ScrollDirection.reverse) {
setState(() => _showSettings = false);
widget.onScrollEvent?.call(true);
} else if (notif.direction == ScrollDirection.forward) {
setState(() => _showSettings = true);
widget.onScrollEvent?.call(false);
}
return true;
},
child: ListView(
padding: const EdgeInsets.only(
top: 0,
bottom: 120),
children: [
/// SUMMARY CARD
FinanceSummaryCard(
totalAmount: "333,000",
dropdownValue: dropdownValue,
onCalendarTap: () => showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2020),
lastDate: DateTime(2030),
),
onDropdownChanged: (value) {
setState(() => dropdownValue = value!);
},
const SliverToBoxAdapter(child: SizedBox(height: 5)),
/// SUMMARY CARD
SliverToBoxAdapter(
child: FinanceSummaryCard(
totalAmount: "333,000",
dropdownValue: dropdownValue,
onCalendarTap: () => showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2020),
lastDate: DateTime(2030),
),
/// WORK DAY CARDS
const WorkDayCard(),
const WorkDayCard(),
const WorkDayCard(),
],
onDropdownChanged: (value) {
setState(() => dropdownValue = value!);
},
),
),
),
),
],
/// WORK DAY CARDS
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return const WorkDayCard();
},
childCount: 3,
),
),
const SliverToBoxAdapter(child: SizedBox(height: 120)),
],
),
),
);
}