minor home screen fix

This commit is contained in:
2026-05-29 15:23:02 +02:00
parent 88aad6ec3e
commit 287cb37048
3 changed files with 124 additions and 103 deletions

View File

@@ -113,6 +113,17 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
await homeController.getTransactions(prefs.getString("userId")!);
}
Future<void> _onRefresh() async {
await homeController.getAccounts();
await homeController.getCategories();
await homeController.getProviders();
prefs = await SharedPreferences.getInstance();
if (prefs.getString("userId") != null) {
await homeController.getTransactions(prefs.getString("userId")!);
}
}
void _onRouteChanged() async {
final location = router.routerDelegate.currentConfiguration.uri.toString();
if (location.startsWith('/home')) {
@@ -159,117 +170,120 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
body: ListenableBuilder(
listenable: homeController,
builder: (context, child) {
return CustomScrollView(
physics: const BouncingScrollPhysics(),
slivers: [
SliverAppBar(
pinned: false,
floating: true,
stretch: true,
surfaceTintColor: Colors.transparent,
backgroundColor: isDark
? const Color(0xFF0D0D0D)
: const Color(0xFFF8F9FA),
title: constraints.maxWidth < ResponsivePolicy.md
? Image(
image: const AssetImage('assets/velocity.png'),
width: 130,
)
: null,
actions: [
if (_isLoggedIn) ...[
Container(
width: 30,
height: 30,
margin: const EdgeInsets.only(right: 4),
decoration: BoxDecoration(
border: Border.all(
color: isDark
? Colors.white.withValues(alpha: 0.12)
: Colors.black87.withAlpha(20),
return RefreshIndicator(
onRefresh: _onRefresh,
child: CustomScrollView(
physics: const BouncingScrollPhysics(),
slivers: [
SliverAppBar(
pinned: false,
floating: true,
stretch: true,
surfaceTintColor: Colors.transparent,
backgroundColor: isDark
? const Color(0xFF0D0D0D)
: const Color(0xFFF8F9FA),
title: constraints.maxWidth < ResponsivePolicy.md
? Image(
image: const AssetImage('assets/velocity.png'),
width: 130,
)
: null,
actions: [
if (_isLoggedIn) ...[
Container(
width: 30,
height: 30,
margin: const EdgeInsets.only(right: 4),
decoration: BoxDecoration(
border: Border.all(
color: isDark
? Colors.white.withValues(alpha: 0.12)
: Colors.black87.withAlpha(20),
),
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
theme.colorScheme.primary.withValues(
alpha: 0.15,
),
theme.colorScheme.tertiary.withValues(
alpha: 0.05,
),
],
stops: const [0.3, 0.7],
begin: Alignment.topRight,
end: Alignment.bottomLeft,
),
),
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
theme.colorScheme.primary.withValues(
alpha: 0.15,
child: Center(
child: Text(
initials,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
color: isDark ? Colors.white : Colors.black87,
),
theme.colorScheme.tertiary.withValues(
alpha: 0.05,
),
],
stops: const [0.3, 0.7],
begin: Alignment.topRight,
end: Alignment.bottomLeft,
),
),
child: Center(
child: Text(
initials,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
color: isDark ? Colors.white : Colors.black87,
),
),
),
),
IconButton(
icon: Icon(
Icons.logout_rounded,
color: isDark ? Colors.white54 : Colors.black54,
size: 20,
IconButton(
icon: Icon(
Icons.logout_rounded,
color: isDark ? Colors.white54 : Colors.black54,
size: 20,
),
onPressed: _showLogoutDialog,
),
onPressed: _showLogoutDialog,
),
],
],
],
),
SliverToBoxAdapter(
child: Center(
child: SizedBox(
width: constraints.maxWidth > 600
? 600
: constraints.maxWidth,
child: Padding(
padding: const EdgeInsets.fromLTRB(16, 8, 16, 32),
child: LayoutBuilder(
builder: (context, innerConstraints) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
FadeTransition(
opacity: _providersFadeAnimation,
child: SlideTransition(
position: _providersSlideAnimation,
child: _buildProvidersSection(
theme,
isDark,
innerConstraints,
),
SliverToBoxAdapter(
child: Center(
child: SizedBox(
width: constraints.maxWidth > 600
? 600
: constraints.maxWidth,
child: Padding(
padding: const EdgeInsets.fromLTRB(16, 8, 16, 32),
child: LayoutBuilder(
builder: (context, innerConstraints) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
FadeTransition(
opacity: _providersFadeAnimation,
child: SlideTransition(
position: _providersSlideAnimation,
child: _buildProvidersSection(
theme,
isDark,
innerConstraints,
),
),
),
),
const SizedBox(height: 24),
FadeTransition(
opacity: _transactionsFadeAnimation,
child: SlideTransition(
position: _transactionsSlideAnimation,
child: _buildTransactionsSection(
theme,
isDark,
innerConstraints,
const SizedBox(height: 24),
FadeTransition(
opacity: _transactionsFadeAnimation,
child: SlideTransition(
position: _transactionsSlideAnimation,
child: _buildTransactionsSection(
theme,
isDark,
innerConstraints,
),
),
),
),
],
);
},
],
);
},
),
),
),
),
),
),
],
],
),
);
},
),
@@ -299,6 +313,15 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildSectionLabel(theme, isDark, Icons.grid_view_rounded, "Pay"),
IconButton(
icon: Icon(
Icons.refresh_rounded,
color: isDark ? Colors.white54 : Colors.black54,
size: 20,
),
onPressed: _onRefresh,
tooltip: 'Refresh',
),
],
),
const SizedBox(height: 12),