diff --git a/lib/assets/savings_icon.svg b/lib/assets/savings_icon.svg new file mode 100644 index 0000000..3db78b9 --- /dev/null +++ b/lib/assets/savings_icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 43e6da1..69dfe38 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,6 +6,7 @@ import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:syncfusion_flutter_charts/charts.dart'; import 'package:tests/preferences.dart'; +import 'package:tests/saving_tips.dart'; import 'package:tests/theme/theme_constants.dart'; import 'package:tests/theme/theme_manager.dart'; import "package:easy_localization/easy_localization.dart"; @@ -507,6 +508,20 @@ class AccountDetailPageState extends State with SingleTickerP appBar: AppBar( backgroundColor: Colors.transparent, elevation: 0, + actions: [ + Padding( + padding: EdgeInsets.only(right: 10.0), + child: IconButton( + icon: Icon(Icons.info,color: Colors.grey,), + onPressed: () { + showDialog( + context: context, + builder: (BuildContext context) => SavingsTipsDialog(), + ); + }, + ), + ), + ], toolbarHeight: 80, title: Text( widget.account.name, diff --git a/lib/saving_tips.dart b/lib/saving_tips.dart new file mode 100644 index 0000000..2e7c5f7 --- /dev/null +++ b/lib/saving_tips.dart @@ -0,0 +1,101 @@ +import 'package:flutter/material.dart'; +import 'package:carousel_slider/carousel_slider.dart'; +import 'package:flutter_neumorphic/flutter_neumorphic.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:flutter/cupertino.dart'; + + +class SavingsTipsDialog extends StatelessWidget { + final List savingsTips = [ + 'Spare jeden Monat einen festen Betrag.', + 'Vergleiche Preise, bevor du etwas kaufst.', + 'Vermeide unnötige Ausgaben.', + 'Setze dir konkrete Sparziele.', + 'Überprüfe regelmäßig deine Ausgaben.', + 'Verkaufe Dinge, die du nicht mehr brauchst.', + 'Nutze Cashback-Programme beim Einkaufen.', + 'Koche selbst anstatt auswärts zu essen.', + 'Nutze kostenlose Angebote und Gutscheine.', + 'Vermeide Impulskäufe und schlafe vor größeren Ausgaben eine Nacht darüber.', + 'Fahre mit dem Fahrrad oder öffentlichen Verkehrsmitteln anstatt mit dem Auto.', + 'Plane deine Mahlzeiten im Voraus, um Lebensmittelverschwendung zu vermeiden.', + 'Vergleiche Versicherungen und Verträge, um Geld zu sparen.', + 'Mache deine eigenen Reinigungsmittel statt teure Produkte zu kaufen.', + 'Nutze kostenlose Online-Ressourcen für Weiterbildung und Hobbys.', + ]; + + @override + Widget build(BuildContext context) { + return Dialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15.0), + ), + child: Container( + padding: const EdgeInsets.all(25.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + CarouselSlider.builder( + itemCount: savingsTips.length, + itemBuilder: (BuildContext context, int index, int realIndex) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Neumorphic( + style: NeumorphicStyle( + + boxShape: NeumorphicBoxShape.roundRect(BorderRadius.circular(13.0)), + ), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.grey.shade100, // Setze die Hintergrundfarbe auf rot + ), + padding: const EdgeInsets.all(16.0), + child: Column( mainAxisAlignment: MainAxisAlignment.center, + children: [ + + Text( + savingsTips[index], + style: TextStyle(fontSize: 18.0), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + ); + }, + options: CarouselOptions( + height: 250.0, + enlargeCenterPage: true, + viewportFraction: 0.85, + initialPage: 0, + enableInfiniteScroll: true, + autoPlay: true, + autoPlayInterval: Duration(seconds: 4), + autoPlayAnimationDuration: Duration(milliseconds: 700), + autoPlayCurve: Curves.fastOutSlowIn, + pauseAutoPlayOnTouch: true, + ), + ), + SizedBox(height: 16.0), + NeumorphicButton( + child: Text('Close'), + onPressed: () { + Navigator.of(context).pop(); + }, + style: NeumorphicStyle( + color: Colors.grey.shade100, + depth: 10, + intensity: 0.9, + shape: NeumorphicShape.flat, + boxShape: NeumorphicBoxShape.roundRect(BorderRadius.circular(15.0)), + ), + ), + + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 8766b72..33044db 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -33,6 +33,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + carousel_slider: + dependency: "direct main" + description: + name: carousel_slider + sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" + url: "https://pub.dev" + source: hosted + version: "4.2.1" characters: dependency: transitive description: @@ -147,6 +155,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: f991fdb1533c3caeee0cdc14b04f50f0c3916f0dbcbc05237ccbe4e3c6b93f3f + url: "https://pub.dev" + source: hosted + version: "2.0.5" flutter_test: dependency: "direct dev" description: flutter @@ -245,6 +261,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.2" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_provider_linux: dependency: transitive description: @@ -269,6 +293,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.7" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" + source: hosted + version: "5.1.0" platform: dependency: transitive description: @@ -442,6 +474,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: ea8d3fc7b2e0f35de38a7465063ecfcf03d8217f7962aa2a6717132cb5d43a79 + url: "https://pub.dev" + source: hosted + version: "1.1.5" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: a5eaa5d19e123ad4f61c3718ca1ed921c4e6254238d9145f82aa214955d9aced + url: "https://pub.dev" + source: hosted + version: "1.1.5" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "15edc42f7eaa478ce854eaf1fbb9062a899c0e4e56e775dd73b7f4709c97c4ca" + url: "https://pub.dev" + source: hosted + version: "1.1.5" vector_math: dependency: transitive description: @@ -466,6 +522,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + xml: + dependency: transitive + description: + name: xml + sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + url: "https://pub.dev" + source: hosted + version: "6.2.2" sdks: dart: ">=2.19.6 <3.0.0" - flutter: ">=3.3.0" + flutter: ">=3.7.0-0" diff --git a/pubspec.yaml b/pubspec.yaml index 123fc11..1c15353 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,6 +40,9 @@ dependencies: flutter_neumorphic: ^3.2.0 awesome_dialog: ^3.1.0 easy_localization: ^3.0.2 + carousel_slider: ^4.2.1 + flutter_svg: ^2.0.0 + dev_dependencies: flutter_test: @@ -65,6 +68,7 @@ flutter: assets: - lib/assets/translations/ + - lib/assets/savings_icon.svg fonts: - family: Montserrat