Merge branch 'Firebase' into 'main'

Firebase

See merge request Gruber.Nicolas/oggauer_gemeindetrommler!4
This commit is contained in:
2023-04-27 13:17:28 +00:00
18 changed files with 507 additions and 123 deletions
+3 -2
View File
@@ -44,13 +44,14 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.demoapp"
applicationId "com.oggauergemeindetrommler.app"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion
minSdkVersion 19
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
buildTypes {
+46
View File
@@ -0,0 +1,46 @@
{
"project_info": {
"project_number": "576683162451",
"project_id": "gemeinde-trommler",
"storage_bucket": "gemeinde-trommler.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:576683162451:android:48edba9829ee7925083fa6",
"android_client_info": {
"package_name": "com.oggauergemeindetrommler.app"
}
},
"oauth_client": [
{
"client_id": "576683162451-pl7mb5k00rj5dhg3krqcqh8bpvn8ijbq.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAWjSjX1f2rGUGHLbXQS873DYY_oXqcHhs"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "576683162451-pl7mb5k00rj5dhg3krqcqh8bpvn8ijbq.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "576683162451-vf1g0qoge66lb3bmpsg4neckv4opovub.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.oggauergemeindetrommler.app"
}
}
]
}
}
}
],
"configuration_version": "1"
}
+1 -1
View File
@@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demoapp">
package="com.oggauergemeindetrommler.app">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
+1 -1
View File
@@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demoapp">
package="com.oggauergemeindetrommler.app">
<application
android:label="Oggauer Gemeindetrommler"
android:name="${applicationName}"
@@ -1,6 +0,0 @@
package com.example.oggauer_gemeindetrommler
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
@@ -1,4 +1,4 @@
package com.example.demoapp
package com.oggauergemeindetrommler.app
import io.flutter.embedding.android.FlutterActivity
+1 -1
View File
@@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demoapp">
package="com.oggauergemeindetrommler.app">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
+34
View File
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>576683162451-vf1g0qoge66lb3bmpsg4neckv4opovub.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.576683162451-vf1g0qoge66lb3bmpsg4neckv4opovub</string>
<key>API_KEY</key>
<string>AIzaSyDV441PhkPEC7igZmYMpJ_axLMc2bKQ5fY</string>
<key>GCM_SENDER_ID</key>
<string>576683162451</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.oggauergemeindetrommler.app</string>
<key>PROJECT_ID</key>
<string>gemeinde-trommler</string>
<key>STORAGE_BUCKET</key>
<string>gemeinde-trommler.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:576683162451:ios:2fd841a4b4ca70d5083fa6</string>
</dict>
</plist>
+3 -3
View File
@@ -5,15 +5,15 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Demoapp</string>
<string>Oggauer GemeindeTrommler</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<string>com.oggauergemeindetrommler.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>demoapp</string>
<string>oggauer_gemeinde_trommler</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
+7
View File
@@ -0,0 +1,7 @@
{
"file_generated_by": "FlutterFire CLI",
"purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
"GOOGLE_APP_ID": "1:576683162451:ios:f3e9140edfc4c945083fa6",
"FIREBASE_PROJECT_ID": "gemeinde-trommler",
"GCM_SENDER_ID": "576683162451"
}
+66 -5
View File
@@ -1,13 +1,18 @@
import 'dart:io';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class AddScreen extends StatefulWidget {
const AddScreen({super.key});
final int initialIndex;
AddScreen({required this.initialIndex});
@override
_AddScreenState createState() => _AddScreenState();
}
class _AddScreenState extends State<AddScreen> {
@@ -15,6 +20,14 @@ class _AddScreenState extends State<AddScreen> {
final _titleController = TextEditingController();
final _descriptionController = TextEditingController();
File? _imageFile;
bool _uploading = false;
int _selectedIndex = 0;
@override
void initState() {
super.initState();
_selectedIndex = widget.initialIndex;
}
Future<void> _getImage(ImageSource source) async {
final pickedFile = await ImagePicker().getImage(source: source);
@@ -26,6 +39,41 @@ class _AddScreenState extends State<AddScreen> {
}
}
Future<void> addNewElementToFirestore(String title, String description, File imageFile) async {
// Zunächst das Bild in Firebase Storage speichern
// Das neue Element in der Firestore-Sammlung "Issues" speichern
if(_selectedIndex == 1)
{
Reference ref = FirebaseStorage.instance.ref().child("Issues/${DateTime.now().toString()}");
UploadTask uploadTask = ref.putFile(imageFile);
String imageUrl = await (await uploadTask).ref.getDownloadURL();
await FirebaseFirestore.instance.collection("Issues").add({
"title": title,
"description": description,
"imageUrl": imageUrl,
"createdDate": DateTime.now(),
});
}
else
{
Reference ref = FirebaseStorage.instance.ref().child("News/${DateTime.now().toString()}");
UploadTask uploadTask = ref.putFile(imageFile);
String imageUrl = await (await uploadTask).ref.getDownloadURL();
await FirebaseFirestore.instance.collection("News").add({
"title": title,
"description": description,
"imageUrl": imageUrl,
"createdDate": DateTime.now(),
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
@@ -49,12 +97,25 @@ class _AddScreenState extends State<AddScreen> {
padding: const EdgeInsets.only(right: 8.0),
child: IconButton(
icon: Icon(Icons.check),
onPressed: () {
if (_formKey.currentState!.validate()) {
// Hier wird die Logik zum Hinzufügen des neuen Elements ausgeführt
Navigator.pop(context);
onPressed: () async {
if (_formKey.currentState!.validate() && _imageFile != null && !_uploading) {
setState(() {
_uploading = true;
});
try {
await addNewElementToFirestore(_titleController.text, _descriptionController.text, _imageFile!);
Navigator.pop(context);
} catch (e) {
print(e);
// Fehlerbehandlung hier
} finally {
setState(() {
_uploading = false;
});
}
}
},
),
),
],
+136 -91
View File
@@ -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,152 @@ class UserDefinedItem extends StatelessWidget {
class NewsList extends StatelessWidget {
const NewsList({super.key});
class NewsList extends StatefulWidget {
const NewsList({Key? key}) : super(key: key);
@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'),
),
],
);
}
_NewsListState createState() => _NewsListState();
}
IssueList issueList = IssueList();
class _NewsListState extends State<NewsList> {
final FirebaseFirestore firestore = FirebaseFirestore.instance;
late Stream<QuerySnapshot> newsStream;
class IssueList extends StatelessWidget {
final List<UserDefinedItem> _items = [];
IssueList({super.key});
void addUDI(UserDefinedItem udi) {
_items.add(udi);
}
void removeUDI(UserDefinedItem udi) {
_items.remove(udi);
@override
void initState() {
super.initState();
newsStream = firestore.collection('News').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',),
return StreamBuilder<QuerySnapshot>(
stream: newsStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return const Text('Loading...');
default:
final List<QueryDocumentSnapshot> documents = snapshot.data!.docs;
return ListView.builder(
itemCount: documents.length,
itemBuilder: (BuildContext context, int index) {
final Map<String, dynamic> data = documents[index].data()! as Map<String, dynamic>;
final DateTime createdDate = data['createdDate'].toDate();
final formattedDate = DateFormat('dd.MM.yyyy').format(createdDate);
return UserDefinedItem(
title: data['title'] ?? '',
datum: formattedDate,
description: data['description'] ?? '',
image: Image.network((data['imageUrl'])),
);
},
);
}
},
);
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'),
}
}
class IssueList extends StatefulWidget {
const IssueList({Key? key}) : super(key: key);
@override
_IssueListState createState() => _IssueListState();
}
class _IssueListState extends State<IssueList> {
final FirebaseFirestore firestore = FirebaseFirestore.instance;
late Stream<QuerySnapshot> issueStream;
@override
void initState() {
super.initState();
issueStream = firestore.collection('Issues').snapshots();
}
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: issueStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return const Text('Loading...');
default:
final List<QueryDocumentSnapshot> documents = snapshot.data!.docs;
return ListView.builder(
itemCount: documents.length,
itemBuilder: (BuildContext context, int index) {
final Map<String, dynamic> data = documents[index].data()! as Map<String, dynamic>;
final DateTime createdDate = data['createdDate'].toDate();
final formattedDate = DateFormat('dd.MM.yyyy').format(createdDate);
return UserDefinedItem(
title: data['title'] ?? '',
datum: formattedDate,
description: data['description'] ?? '',
image: Image.network((data['imageUrl'])),
);
},
);
}
},
);
//addUDI(item1);
//addUDI(item2);
return ListView(
children: _items.map((item) => UserDefinedItem(
title: item.title,
datum: item.datum,
description: item.description,
image: item.image,
),
).toList(),
}
}
class CitizensForum extends StatefulWidget {
const CitizensForum({Key? key}) : super(key: key);
@override
_CitizensForum createState() => _CitizensForum();
}
class _CitizensForum extends State<IssueList> {
final FirebaseFirestore firestore = FirebaseFirestore.instance;
late Stream<QuerySnapshot> citizenStream;
@override
void initState() {
super.initState();
citizenStream = firestore.collection('CitizensForum').snapshots();
}
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: citizenStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return const Text('Loading...');
default:
final List<QueryDocumentSnapshot> documents = snapshot.data!.docs;
return ListView.builder(
itemCount: documents.length,
itemBuilder: (BuildContext context, int index) {
final Map<String, dynamic> data = documents[index].data()! as Map<String, dynamic>;
final DateTime createdDate = data['createdDate'].toDate();
final formattedDate = DateFormat('dd.MM.yyyy').format(createdDate);
return UserDefinedItem(
title: data['title'] ?? '',
datum: formattedDate,
description: data['description'] ?? '',
image: Image.network((data['imageUrl'])),
);
},
);
}
},
);
}
}
+69
View File
@@ -0,0 +1,69 @@
// File generated by FlutterFire CLI.
// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
import 'package:flutter/foundation.dart'
show defaultTargetPlatform, kIsWeb, TargetPlatform;
/// Default [FirebaseOptions] for use with your Firebase apps.
///
/// Example:
/// ```dart
/// import 'firebase_options.dart';
/// // ...
/// await Firebase.initializeApp(
/// options: DefaultFirebaseOptions.currentPlatform,
/// );
/// ```
class DefaultFirebaseOptions {
static FirebaseOptions get currentPlatform {
if (kIsWeb) {
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for web - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
}
switch (defaultTargetPlatform) {
case TargetPlatform.android:
return android;
case TargetPlatform.iOS:
return ios;
case TargetPlatform.macOS:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for macos - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
case TargetPlatform.windows:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for windows - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
case TargetPlatform.linux:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for linux - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
default:
throw UnsupportedError(
'DefaultFirebaseOptions are not supported for this platform.',
);
}
}
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyAWjSjX1f2rGUGHLbXQS873DYY_oXqcHhs',
appId: '1:576683162451:android:48edba9829ee7925083fa6',
messagingSenderId: '576683162451',
projectId: 'gemeinde-trommler',
storageBucket: 'gemeinde-trommler.appspot.com',
);
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyDV441PhkPEC7igZmYMpJ_axLMc2bKQ5fY',
appId: '1:576683162451:ios:f3e9140edfc4c945083fa6',
messagingSenderId: '576683162451',
projectId: 'gemeinde-trommler',
storageBucket: 'gemeinde-trommler.appspot.com',
iosClientId: '576683162451-vf1g0qoge66lb3bmpsg4neckv4opovub.apps.googleusercontent.com',
iosBundleId: 'com.example.demoapp',
);
}
+3 -3
View File
@@ -1,4 +1,4 @@
import 'package:demoapp/AddPage.dart';
import 'package:oggauergemeindetrommler/AddPage.dart';
import 'package:flutter/material.dart';
import 'UserDefinedList.dart';
@@ -33,7 +33,7 @@ class _MyHomePageState extends State<MyHomePage> {
Widget build(BuildContext context) {
final List<Widget> widgetOptions = <Widget>[
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,
@@ -70,7 +70,7 @@ class _MyHomePageState extends State<MyHomePage> {
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AddScreen()),
MaterialPageRoute(builder: (context) => AddScreen(initialIndex: _selectedIndex,)),
);
},
tooltip: "Add",
+11 -1
View File
@@ -2,9 +2,19 @@
import 'package:flutter/material.dart';
import 'home.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
void main() {
// ...
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
+123 -11
View File
@@ -1,6 +1,14 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
_flutterfire_internals:
dependency: transitive
description:
name: _flutterfire_internals
sha256: f175bc1414e4edf8c5b83372c98eeabecf8353f39c9da423c2cfdf1f1f508788
url: "https://pub.dev"
source: hosted
version: "1.1.0"
async:
dependency: transitive
description:
@@ -17,6 +25,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.1"
change_app_package_name:
dependency: "direct main"
description:
name: change_app_package_name
sha256: f9ebaf68a4b5a68c581492579bb68273c523ef325fbf9ce2f1b57fb136ad023b
url: "https://pub.dev"
source: hosted
version: "1.1.0"
characters:
dependency: transitive
description:
@@ -33,6 +49,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.1"
cloud_firestore:
dependency: "direct main"
description:
name: cloud_firestore
sha256: f5431cf41ab5c5e9c64e03ac2af103e10be22bf89020f394130c04b81add0010
url: "https://pub.dev"
source: hosted
version: "4.5.1"
cloud_firestore_platform_interface:
dependency: transitive
description:
name: cloud_firestore_platform_interface
sha256: "29349a0687bc31290ab81d1de2b1cdadb40d0ea3ab30d247323c6c5be0d4c6fc"
url: "https://pub.dev"
source: hosted
version: "5.12.0"
cloud_firestore_web:
dependency: transitive
description:
name: cloud_firestore_web
sha256: "228f1944fb3c61ddf5de3647ec5b6ed88d6aacb0a4d485ef597c1211fe98ef8b"
url: "https://pub.dev"
source: hosted
version: "3.4.1"
collection:
dependency: transitive
description:
@@ -65,6 +105,78 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.1"
firebase_auth:
dependency: "direct main"
description:
name: firebase_auth
sha256: e5254a39daab8c5bc76b17f5a161c11a7a97a3718cd314f460e2b4366c850c7d
url: "https://pub.dev"
source: hosted
version: "4.4.1"
firebase_auth_platform_interface:
dependency: transitive
description:
name: firebase_auth_platform_interface
sha256: "5d5f283517ba34afd69ef448cc81ea23bcf8887393bedae4f70f45060b045fb9"
url: "https://pub.dev"
source: hosted
version: "6.13.0"
firebase_auth_web:
dependency: transitive
description:
name: firebase_auth_web
sha256: c631ec90d05c990fe971774ff12e96ee88fc3dd22839d5cab3b04c8693859116
url: "https://pub.dev"
source: hosted
version: "5.3.1"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
sha256: ed611fb8e67e43ecc7956f242cecca383d87cf71aace27287aa5dd4bdba4ac07
url: "https://pub.dev"
source: hosted
version: "2.9.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
sha256: "0df0a064ab0cad7f8836291ca6f3272edd7b83ad5b3540478ee46a0849d8022b"
url: "https://pub.dev"
source: hosted
version: "4.6.0"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
sha256: "347351a8f0518f3343d79a9a0690fa67ad232fc32e2ea270677791949eac792b"
url: "https://pub.dev"
source: hosted
version: "2.3.0"
firebase_storage:
dependency: "direct main"
description:
name: firebase_storage
sha256: a27909491c25acef90acc932be4d87bafb9d33fb98678edd2f81eaec9568a109
url: "https://pub.dev"
source: hosted
version: "11.1.0"
firebase_storage_platform_interface:
dependency: transitive
description:
name: firebase_storage_platform_interface
sha256: f254e064890df4ee588f10bea06d679e047018910451a4bc3c529b9791adb0a9
url: "https://pub.dev"
source: hosted
version: "4.2.0"
firebase_storage_web:
dependency: transitive
description:
name: firebase_storage_web
sha256: b6d3c104fecafdce5fe1795306d33856c9a11fa76f73fe7eb062430fc151d686
url: "https://pub.dev"
source: hosted
version: "3.4.0"
flutter:
dependency: "direct main"
description: flutter
@@ -82,10 +194,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "4bef634684b2c7f3468c77c766c831229af829a0cd2d4ee6c1b99558bd14e5d2"
sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf
url: "https://pub.dev"
source: hosted
version: "2.0.8"
version: "2.0.9"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -116,34 +228,34 @@ packages:
dependency: "direct main"
description:
name: image_picker
sha256: "22207768556b82d55ec70166824350fee32298732d5efa4d6e756f848f51f66a"
sha256: "8b0efbf350ba4f2be1531d629396a994983d0c02f4a82a128aed84d954b90cfa"
url: "https://pub.dev"
source: hosted
version: "0.8.6+3"
version: "0.8.7+2"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "68d067baf7f6e401b1124ee83dd6967e67847314250fd68012aab34a69beb344"
sha256: dfb5b0f28b8786fcc662b7ed42bfb4b82a6cbbd74da1958384b10d40bdf212a7
url: "https://pub.dev"
source: hosted
version: "0.8.5+7"
version: "0.8.6+6"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
sha256: "66fc6e3877bbde82c33d122f3588777c3784ac5bd7d1cdd79213ef7aecb85b34"
sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c"
url: "https://pub.dev"
source: hosted
version: "2.1.11"
version: "2.1.12"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
sha256: "39aa70b5f1e5e7c94585b9738632d5fdb764a5655e40cd9e7b95fbd2fc50c519"
sha256: a1546ff5861fc15812953d4733b520c3d371cec3d2859a001ff04c46c4d81883
url: "https://pub.dev"
source: hosted
version: "0.8.6+9"
version: "0.8.7+3"
image_picker_platform_interface:
dependency: transitive
description:
@@ -287,4 +399,4 @@ packages:
version: "2.1.4"
sdks:
dart: ">=2.18.2 <3.0.0"
flutter: ">=3.0.0"
flutter: ">=3.3.0"
+7 -2
View File
@@ -1,5 +1,5 @@
name: demoapp
description: test app
name: oggauergemeindetrommler
description: Gemeinde Trommler
# The following line prevents the package from being accidentally published to
@@ -40,6 +40,11 @@ dependencies:
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
image_picker: ^0.8.6+3
firebase_core: ^2.9.0
firebase_auth: ^4.4.1
firebase_storage: ^11.1.0
cloud_firestore: ^4.5.1
change_app_package_name: ^1.1.0
dev_dependencies:
+1 -1
View File
@@ -8,7 +8,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:demoapp/main.dart';
import 'package:oggauergemeindetrommler/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {