firebase issue list working :O

This commit is contained in:
2023-04-13 16:51:29 +02:00
parent 5fc9f1af7c
commit aeef64a109
10 changed files with 336 additions and 19 deletions
+2 -1
View File
@@ -47,10 +47,11 @@ android {
applicationId "com.example.demoapp" applicationId "com.example.demoapp"
// You can update the following values to match your application needs. // 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. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion minSdkVersion 19
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
multiDexEnabled true
} }
buildTypes { 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:b792a81fceafa932083fa6",
"android_client_info": {
"package_name": "com.example.demoapp"
}
},
"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.example.demoapp"
}
}
]
}
}
}
],
"configuration_version": "1"
}
+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.example.demoapp</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>
+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:2fd841a4b4ca70d5083fa6",
"FIREBASE_PROJECT_ID": "gemeinde-trommler",
"GCM_SENDER_ID": "576683162451"
}
+28 -3
View File
@@ -1,7 +1,10 @@
import 'dart:io'; import 'dart:io';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class AddScreen extends StatefulWidget { class AddScreen extends StatefulWidget {
@override @override
@@ -24,6 +27,23 @@ class _AddScreenState extends State<AddScreen> {
} }
} }
Future<void> addNewElementToFirestore(String title, String description, File imageFile) async {
// Zunächst das Bild in Firebase Storage speichern
Reference ref = FirebaseStorage.instance.ref().child("images/${DateTime.now().toString()}");
UploadTask uploadTask = ref.putFile(imageFile);
String imageUrl = await (await uploadTask).ref.getDownloadURL();
// Das neue Element in der Firestore-Sammlung "Issues" speichern
await FirebaseFirestore.instance.collection("Issues").add({
"title": title,
"description": description,
"imageUrl": imageUrl,
"createdDate": DateTime.now(),
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@@ -47,10 +67,15 @@ class _AddScreenState extends State<AddScreen> {
padding: const EdgeInsets.only(right: 8.0), padding: const EdgeInsets.only(right: 8.0),
child: IconButton( child: IconButton(
icon: Icon(Icons.check), icon: Icon(Icons.check),
onPressed: () { onPressed: () async {
if (_formKey.currentState!.validate()) { if (_formKey.currentState!.validate() && _imageFile != null) {
// Hier wird die Logik zum Hinzufügen des neuen Elements ausgeführt try {
await addNewElementToFirestore(_titleController.text, _descriptionController.text, _imageFile!);
Navigator.pop(context); Navigator.pop(context);
} catch (e) {
print(e);
// Fehlerbehandlung hier
}
} }
}, },
), ),
+4 -2
View File
@@ -1,18 +1,20 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'DetailPage.dart'; import 'DetailPage.dart';
class UserDefinedItem extends StatelessWidget { class UserDefinedItem extends StatelessWidget {
final String title; final String title;
final String description; final String description;
final Image? image; final Image? image;
const UserDefinedItem({super.key, const UserDefinedItem({super.key,
required this.title, required this.title,
required this.description, required this.description,
this.image, this.image,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
String shortDescription = "${description.substring(0, 30)}..."; String shortDescription = "${description.substring(0, 30)}...";
+76
View File
@@ -0,0 +1,76 @@
// 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) {
return web;
}
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 web = FirebaseOptions(
apiKey: 'AIzaSyBmdRrWkqosCAtlOeqs-G-4oWAvwLt3KnQ',
appId: '1:576683162451:web:71c67b5ef44ab7c1083fa6',
messagingSenderId: '576683162451',
projectId: 'gemeinde-trommler',
authDomain: 'gemeinde-trommler.firebaseapp.com',
storageBucket: 'gemeinde-trommler.appspot.com',
measurementId: 'G-ZH37BQ8679',
);
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyAWjSjX1f2rGUGHLbXQS873DYY_oXqcHhs',
appId: '1:576683162451:android:b792a81fceafa932083fa6',
messagingSenderId: '576683162451',
projectId: 'gemeinde-trommler',
storageBucket: 'gemeinde-trommler.appspot.com',
);
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyDV441PhkPEC7igZmYMpJ_axLMc2bKQ5fY',
appId: '1:576683162451:ios:2fd841a4b4ca70d5083fa6',
messagingSenderId: '576683162451',
projectId: 'gemeinde-trommler',
storageBucket: 'gemeinde-trommler.appspot.com',
iosClientId: '576683162451-vf1g0qoge66lb3bmpsg4neckv4opovub.apps.googleusercontent.com',
iosBundleId: 'com.example.demoapp',
);
}
+11 -1
View File
@@ -2,9 +2,19 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'home.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()); runApp(const MyApp());
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
+123 -11
View File
@@ -1,6 +1,14 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
_flutterfire_internals:
dependency: transitive
description:
name: _flutterfire_internals
sha256: f175bc1414e4edf8c5b83372c98eeabecf8353f39c9da423c2cfdf1f1f508788
url: "https://pub.dev"
source: hosted
version: "1.1.0"
async: async:
dependency: transitive dependency: transitive
description: description:
@@ -33,6 +41,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" 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: collection:
dependency: transitive dependency: transitive
description: description:
@@ -65,6 +97,78 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.1" 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: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -82,10 +186,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
sha256: "4bef634684b2c7f3468c77c766c831229af829a0cd2d4ee6c1b99558bd14e5d2" sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.8" version: "2.0.9"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@@ -116,34 +220,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: image_picker name: image_picker
sha256: "22207768556b82d55ec70166824350fee32298732d5efa4d6e756f848f51f66a" sha256: "8b0efbf350ba4f2be1531d629396a994983d0c02f4a82a128aed84d954b90cfa"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.6+3" version: "0.8.7+2"
image_picker_android: image_picker_android:
dependency: transitive dependency: transitive
description: description:
name: image_picker_android name: image_picker_android
sha256: "68d067baf7f6e401b1124ee83dd6967e67847314250fd68012aab34a69beb344" sha256: dfb5b0f28b8786fcc662b7ed42bfb4b82a6cbbd74da1958384b10d40bdf212a7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.5+7" version: "0.8.6+6"
image_picker_for_web: image_picker_for_web:
dependency: transitive dependency: transitive
description: description:
name: image_picker_for_web name: image_picker_for_web
sha256: "66fc6e3877bbde82c33d122f3588777c3784ac5bd7d1cdd79213ef7aecb85b34" sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.11" version: "2.1.12"
image_picker_ios: image_picker_ios:
dependency: transitive dependency: transitive
description: description:
name: image_picker_ios name: image_picker_ios
sha256: "39aa70b5f1e5e7c94585b9738632d5fdb764a5655e40cd9e7b95fbd2fc50c519" sha256: a1546ff5861fc15812953d4733b520c3d371cec3d2859a001ff04c46c4d81883
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.6+9" version: "0.8.7+3"
image_picker_platform_interface: image_picker_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -152,6 +256,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.3" version: "2.6.3"
intl:
dependency: transitive
description:
name: intl
sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
url: "https://pub.dev"
source: hosted
version: "0.17.0"
js: js:
dependency: transitive dependency: transitive
description: description:
@@ -279,4 +391,4 @@ packages:
version: "2.1.4" version: "2.1.4"
sdks: sdks:
dart: ">=2.18.2 <3.0.0" dart: ">=2.18.2 <3.0.0"
flutter: ">=3.0.0" flutter: ">=3.3.0"
+4
View File
@@ -37,6 +37,10 @@ dependencies:
# Use with the CupertinoIcons class for iOS style icons. # Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.2
image_picker: ^0.8.6+3 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
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: