From 9ec9b7a77272775bf0b8d715ddc237c3bcd9bafa Mon Sep 17 00:00:00 2001 From: otsmr Date: Thu, 27 Mar 2025 17:06:29 +0100 Subject: [PATCH] fix #57 --- .../image_editor/layers/filter_layer.dart | 61 ++++++++++++++----- .../layers/filters/datetime_filter.dart | 8 ++- .../layers/filters/location_filter.dart | 31 +++++----- 3 files changed, 69 insertions(+), 31 deletions(-) diff --git a/lib/src/components/image_editor/layers/filter_layer.dart b/lib/src/components/image_editor/layers/filter_layer.dart index 6a08efc..8bc5965 100644 --- a/lib/src/components/image_editor/layers/filter_layer.dart +++ b/lib/src/components/image_editor/layers/filter_layer.dart @@ -38,9 +38,11 @@ class FilterSceleton extends StatelessWidget { } class FilterText extends StatelessWidget { - const FilterText(this.text, {super.key, this.fontSize = 24}); + const FilterText(this.text, + {super.key, this.fontSize = 24, this.color = Colors.white}); final String text; final double fontSize; + final Color color; @override Widget build(BuildContext context) { @@ -49,7 +51,7 @@ class FilterText extends StatelessWidget { textAlign: TextAlign.start, style: TextStyle( fontSize: fontSize, - color: Colors.white, + color: color, shadows: [ Shadow( color: const Color.fromARGB(122, 0, 0, 0), @@ -62,20 +64,51 @@ class FilterText extends StatelessWidget { } class _FilterLayerState extends State { + final PageController pageController = PageController(); + final List pages = [ + FilterSceleton(), + DateTimeFilter(), + LocationFilter(), + ImageFilter(imagePath: "random/lol.png"), + ImageFilter(imagePath: "random/hide_the_pain.png"), + ImageFilter(imagePath: "random/yolo.png"), + ImageFilter(imagePath: "random/chillen.png"), + ImageFilter(imagePath: "random/avocardio.png"), + ImageFilter(imagePath: "random/duck.png"), + FilterSceleton(), + ]; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + pageController.jumpToPage(1); + }); + } + @override Widget build(BuildContext context) { - return PageView( - children: [ - FilterSceleton(), - DateTimeFilter(), - LocationFilter(), - ImageFilter(imagePath: "random/lol.png"), - ImageFilter(imagePath: "random/hide_the_pain.png"), - ImageFilter(imagePath: "random/yolo.png"), - ImageFilter(imagePath: "random/chillen.png"), - ImageFilter(imagePath: "random/avocardio.png"), - ImageFilter(imagePath: "random/duck.png"), - ], + return PageView.builder( + controller: pageController, + itemCount: pages.length + 2, // Add two for the duplicated pages + itemBuilder: (context, index) { + if (index == 0) { + return pages.last; // Show the last page + } else if (index == pages.length + 1) { + return pages.first; // Show the first page + } else { + return pages[index - 1]; // Show the actual pages + } + }, + onPageChanged: (index) { + if (index == 0) { + // If the user swipes to the first duplicated page, jump to the last page + pageController.jumpToPage(pages.length); + } else if (index == pages.length + 1) { + // If the user swipes to the last duplicated page, jump to the first page + pageController.jumpToPage(1); + } + }, ); } } diff --git a/lib/src/components/image_editor/layers/filters/datetime_filter.dart b/lib/src/components/image_editor/layers/filters/datetime_filter.dart index 850d99e..7a937ac 100644 --- a/lib/src/components/image_editor/layers/filters/datetime_filter.dart +++ b/lib/src/components/image_editor/layers/filters/datetime_filter.dart @@ -3,7 +3,9 @@ import 'package:intl/intl.dart'; import 'package:twonly/src/components/image_editor/layers/filter_layer.dart'; class DateTimeFilter extends StatelessWidget { - const DateTimeFilter({super.key}); + const DateTimeFilter({super.key, this.color = Colors.white}); + + final Color color; @override Widget build(BuildContext context) { @@ -16,8 +18,8 @@ class DateTimeFilter extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - FilterText(currentTime), - FilterText(currentDate), + FilterText(currentTime, color: color), + FilterText(currentDate, color: color), ], ), ), diff --git a/lib/src/components/image_editor/layers/filters/location_filter.dart b/lib/src/components/image_editor/layers/filters/location_filter.dart index a615f48..a5ea42c 100644 --- a/lib/src/components/image_editor/layers/filters/location_filter.dart +++ b/lib/src/components/image_editor/layers/filters/location_filter.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/components/image_editor/layers/filter_layer.dart'; +import 'package:twonly/src/components/image_editor/layers/filters/datetime_filter.dart'; import 'package:twonly/src/components/image_editor/layers/filters/image_filter.dart'; import 'package:twonly/src/proto/api/server_to_client.pb.dart'; @@ -66,22 +67,24 @@ class _LocationFilterState extends State { } if (location != null) { - return FilterSceleton( - child: Positioned( - bottom: 50, - left: 40, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - FilterText(location!.city), - FilterText(location!.region), - FilterText(location!.county), - ], + if (location!.county != "-") { + return FilterSceleton( + child: Positioned( + bottom: 50, + left: 40, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + FilterText(location!.city), + FilterText(location!.region), + FilterText(location!.county), + ], + ), ), - ), - ); + ); + } } - return Container(); + return DateTimeFilter(color: Colors.black); } }