From d3aaf591ca3761c45f5ef5587bf911f3e7b4c0f0 Mon Sep 17 00:00:00 2001 From: Nicolas Gruber Date: Wed, 26 Apr 2023 19:52:45 +0200 Subject: [PATCH] Firebase working with input + output --- android/app/google-services.json | 2 +- lib/UserDefinedList.dart | 165 +++++++++++++++---------------- lib/home.dart | 2 +- 3 files changed, 81 insertions(+), 88 deletions(-) diff --git a/android/app/google-services.json b/android/app/google-services.json index 67518fa..25ba270 100644 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -34,7 +34,7 @@ "client_id": "576683162451-vf1g0qoge66lb3bmpsg4neckv4opovub.apps.googleusercontent.com", "client_type": 2, "ios_info": { - "bundle_id": "com.example.demoapp" + "bundle_id": "com.oggauergemeindetrommler.app" } } ] diff --git a/lib/UserDefinedList.dart b/lib/UserDefinedList.dart index 2299caa..e80e0de 100644 --- a/lib/UserDefinedList.dart +++ b/lib/UserDefinedList.dart @@ -1,3 +1,4 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'DetailPage.dart'; import 'package:intl/intl.dart'; @@ -96,108 +97,100 @@ class UserDefinedItem extends StatelessWidget { +class NewsList extends StatefulWidget { + const NewsList({Key? key}) : super(key: key); -class NewsList extends StatelessWidget { - const NewsList({super.key}); + @override + _NewsListState createState() => _NewsListState(); +} + +class _NewsListState extends State { + final FirebaseFirestore firestore = FirebaseFirestore.instance; + late Stream newsStream; + + @override + void initState() { + super.initState(); + newsStream = firestore.collection('News').snapshots(); + } @override Widget build(BuildContext context) { - return ListView( - - children: [ - UserDefinedItem( - title: 'Rosalia Kapelle', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Kapelle bei der Ausfahrt von Oggau', - image: Image.network('https://upload.wikimedia.org/wikipedia/commons/d/d7/Oggau_Rosaliakapelle.JPG'), - ), - UserDefinedItem( - title: 'Kirche der Marktgemeinde Oggau', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Die römisch-katholische Pfarrkirche Oggau steht abseits der Hauptstraße in einem ehemaligen ummauerten Friedhof in der Marktgemeinde Oggau am Neusiedler See im Bezirk Eisenstadt-Umgebung im Burgenland. Die der Heiligen Dreifaltigkeit und Simon Zelotes und Judas Thaddäus geweihte Pfarrkirche gehört zum Dekanat Eisenstadt-Rust in der Diözese Eisenstadt. Die Kirche steht unter Denkmalschutz.', - image: Image.network('https://upload.wikimedia.org/wikipedia/commons/e/e6/Oggau_Kirche2.JPG'), - ), - UserDefinedItem( - title: 'Gasthaus Monika', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Herzlich willkommen im Gasthaus Monika\nDas traditionelle Gasthaus Monika in Oggau am Neusiedler See steht bereits seit vielen Jahren für Gastfreundschaft. Vor über 80 Jahren wurde das Wirtshaus erbaut und stetig modernisiert. Mit der Übernahme im Jahr 1975 hat sich Familie Gmasz es sich zur Aufgabe gemacht, ihr Wirtshaus authentisch und traditionell weiterzuführen.\nDas freundliche und kompetente Team rund um Monika Gmasz, verwöhnt seine Gäste mit guter, bodenständiger Küche in gemütlicher Atmosphäre.\nIm Juni, Juli und August haben wir für Sie auch jeden Montag geöffnet.', - image: Image.network('https://thumbor.apps.unitecms.io/unsafe/1400x0/https://ama-media.ams3.digitaloceanspaces.com/5f4e06d582ddc/a_pov81202.jpg'), - ), - UserDefinedItem( - title: 'Sebastiankeller', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Kulinarik - Spezialitäten von Sonja und Bernhard Landauer\nGemeinsam mit meinem Sohn Bernhard und unserem Küchenteam sorgen wir für besondere und vor allem regionalen und traditionellen, kulinarischen Genüsse. Mein Mann, Ossi Landauer und das Serviceteam ist um Ihr Wohl bemüht und lässt keine Wünsche offen.\nAuf der Speisekarte des Sebastiankellers sind neben Fisch, -Grill, -Sautanzspezialitäten viele saisonale Schmankerl und auch nicht alltägliche Gerichte wie „Gebackenen Fledermäuse“ (da ist das beste Teil vom Schweinsschlögl) oder „Geschmorte Rindswangerl“, zu finden.\nÜberwiegend werden regionale Produkte, zum Teil aus eigenem Anbau verarbeitet. So kommen die Brombeeren, Zwetschen, Quitten, Hollunder oder Kürbisse aus unserem eigenen Garten. Was an Früchten zu viel ist wird, kochen wir ein, wird zu Saft verarbeitet oder destilliert.', - image: Image.network('https://10619-2.s.cdn12.com/rests/original/315_49137159.jpg'), - ), - UserDefinedItem( - title: 'Rosalia Kapelle', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Kapelle bei der Ausfahrt von Oggau', - image: Image.network('https://upload.wikimedia.org/wikipedia/commons/d/d7/Oggau_Rosaliakapelle.JPG'), - ), - UserDefinedItem( - title: 'Rosalia Kapelle', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Kapelle bei der Ausfahrt von Oggau', - image: Image.network('https://upload.wikimedia.org/wikipedia/commons/d/d7/Oggau_Rosaliakapelle.JPG'), - ), - UserDefinedItem( - title: 'Rosalia Kapelle', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Kapelle bei der Ausfahrt von Oggau', - image: Image.network('https://upload.wikimedia.org/wikipedia/commons/d/d7/Oggau_Rosaliakapelle.JPG'), - ), - UserDefinedItem( - title: 'Gemeinde Amt Oggau', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Gemeide Amt der Marktgemeinde Oggau. SPÖ regierend', - image: Image.network('https://upload.wikimedia.org/wikipedia/commons/a/a1/Oggau_am_Neusiedler_See_-_Gemeindeamt_%2801%29.jpg'), - ), - - ], + return StreamBuilder( + stream: newsStream, + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasError) { + return Text('Error: ${snapshot.error}'); + } + switch (snapshot.connectionState) { + case ConnectionState.waiting: + return const Text('Loading...'); + default: + final List documents = snapshot.data!.docs; + return ListView.builder( + itemCount: documents.length, + itemBuilder: (BuildContext context, int index) { + final Map data = + documents[index].data()! as Map; + return UserDefinedItem( + title: data['title'] ?? '', + datum: (data['createdDate'].toDate().toString()).substring(0,10), + description: data['description'] ?? '', + image: Image.network((data['imageUrl'])), + ); + }, + ); + } + }, ); } } -IssueList issueList = IssueList(); -class IssueList extends StatelessWidget { - final List _items = []; + class IssueList extends StatefulWidget { + const IssueList({Key? key}) : super(key: key); - IssueList({super.key}); + @override + _IssueListState createState() => _IssueListState(); +} - void addUDI(UserDefinedItem udi) { - _items.add(udi); - } +class _IssueListState extends State { + final FirebaseFirestore firestore = FirebaseFirestore.instance; + late Stream issueStream; - void removeUDI(UserDefinedItem udi) { - _items.remove(udi); + @override + void initState() { + super.initState(); + issueStream = firestore.collection('Issues').snapshots(); } @override Widget build(BuildContext context) { - final UserDefinedItem item1 = UserDefinedItem( - title: 'Licht ausgebrannt', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Licht ist ausgebrannt in der Sebastianstraße', - image: Image.network('https://api.ebsg.at/uploads/immo70/originals/objekt_809_oggau-am-neusiedler-see_7063_6021.jpeg',), - ); - final UserDefinedItem item2 = UserDefinedItem( - title: 'test2', - datum: DateFormat('dd.MM.yyyy').format(DateTime.now()), - description: 'Gemeide Amt der Marktgemeinde Oggau. SPÖ regierend', - image: Image.network('https://upload.wikimedia.org/wikipedia/commons/a/a1/Oggau_am_Neusiedler_See_-_Gemeindeamt_%2801%29.jpg'), - ); - //addUDI(item1); - //addUDI(item2); - return ListView( - children: _items.map((item) => UserDefinedItem( - title: item.title, - datum: item.datum, - description: item.description, - image: item.image, - ), - ).toList(), + return StreamBuilder( + stream: issueStream, + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasError) { + return Text('Error: ${snapshot.error}'); + } + switch (snapshot.connectionState) { + case ConnectionState.waiting: + return const Text('Loading...'); + default: + final List documents = snapshot.data!.docs; + return ListView.builder( + itemCount: documents.length, + itemBuilder: (BuildContext context, int index) { + final Map data = documents[index].data()! as Map; + return UserDefinedItem( + title: data['title'] ?? '', + datum: (data['createdDate'].toDate().toString()).substring(0,10), + description: data['description'] ?? '', + image: Image.network(data['imageUrl'] ?? ''), + ); + }, + ); + } + }, ); } } \ No newline at end of file diff --git a/lib/home.dart b/lib/home.dart index af61ff5..b3d8033 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -33,7 +33,7 @@ class _MyHomePageState extends State { Widget build(BuildContext context) { final List widgetOptions = [ const NewsList(), - login ? issueList: const Text( + login ? const IssueList(): const Text( 'Mängel (nur für angemeldete Benutzer verfügbar)', style: optionStyle, textAlign: TextAlign.center,