Commit e953b7df authored by Adam Bruck's avatar Adam Bruck

Updated Post

parent c08d00b7
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"camera_avfoundation","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.18+11/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_app_check","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check-0.3.2+4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"image_picker_ios","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_apple","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_apple-9.4.6/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_ios","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/","native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"camera_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/camera_android-0.10.10+1/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_app_check","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check-0.3.2+4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.26/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+21/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"permission_handler_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_android-12.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"file_selector_macos","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_app_check","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check-0.3.2+4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"image_picker_macos","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/","native_build":false,"dependencies":["file_selector_macos"],"dev_dependency":false},{"name":"url_launcher_macos","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/","native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_selector_linux","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_linux","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/","native_build":false,"dependencies":["file_selector_linux"],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"file_selector_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"image_picker_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/","native_build":false,"dependencies":["file_selector_windows"],"dev_dependency":false},{"name":"permission_handler_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_windows-0.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"camera_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/camera_web-0.3.5/","dependencies":[],"dev_dependency":false},{"name":"cloud_firestore_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore_web-4.4.5/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"firebase_app_check_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check_web-0.2.0+8/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"firebase_auth_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth_web-5.14.1/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"firebase_core_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core_web-2.21.1/","dependencies":[],"dev_dependency":false},{"name":"firebase_storage_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage_web-3.10.11/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"image_picker_for_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/","dependencies":[],"dev_dependency":false},{"name":"permission_handler_html","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_html-0.1.3+5/","dependencies":[],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"camera","dependencies":["camera_android","camera_avfoundation","camera_web","flutter_plugin_android_lifecycle"]},{"name":"camera_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"camera_avfoundation","dependencies":[]},{"name":"camera_web","dependencies":[]},{"name":"cloud_firestore","dependencies":["cloud_firestore_web","firebase_core"]},{"name":"cloud_firestore_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"file_selector_linux","dependencies":[]},{"name":"file_selector_macos","dependencies":[]},{"name":"file_selector_windows","dependencies":[]},{"name":"firebase_app_check","dependencies":["firebase_app_check_web","firebase_core"]},{"name":"firebase_app_check_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"firebase_auth","dependencies":["firebase_auth_web","firebase_core"]},{"name":"firebase_auth_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"firebase_storage","dependencies":["firebase_core","firebase_storage_web"]},{"name":"firebase_storage_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios","image_picker_linux","image_picker_macos","image_picker_windows"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]},{"name":"image_picker_linux","dependencies":["file_selector_linux"]},{"name":"image_picker_macos","dependencies":["file_selector_macos"]},{"name":"image_picker_windows","dependencies":["file_selector_windows"]},{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_html","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_html","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-03-25 21:08:54.807837","version":"3.29.2","swift_package_manager_enabled":{"ios":false,"macos":false}} {"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"camera_avfoundation","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.18+11/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_app_check","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check-0.3.2+4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"image_picker_ios","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_apple","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_apple-9.4.6/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_ios","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.2/","native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"camera_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/camera_android-0.10.10+1/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_app_check","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check-0.3.2+4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.26/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+21/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"permission_handler_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_android-12.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_android","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.14/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"file_selector_macos","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_app_check","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check-0.3.2+4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"image_picker_macos","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/","native_build":false,"dependencies":["file_selector_macos"],"dev_dependency":false},{"name":"url_launcher_macos","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.2/","native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_selector_linux","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_linux","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/","native_build":false,"dependencies":["file_selector_linux"],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"cloud_firestore","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore-5.6.5/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"file_selector_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_auth","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth-5.5.1/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"firebase_core","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core-3.12.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"firebase_storage","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage-12.4.4/","native_build":true,"dependencies":["firebase_core"],"dev_dependency":false},{"name":"image_picker_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/","native_build":false,"dependencies":["file_selector_windows"],"dev_dependency":false},{"name":"permission_handler_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_windows-0.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"camera_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/camera_web-0.3.5/","dependencies":[],"dev_dependency":false},{"name":"cloud_firestore_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/cloud_firestore_web-4.4.5/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"firebase_app_check_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_app_check_web-0.2.0+8/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"firebase_auth_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_auth_web-5.14.1/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"firebase_core_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_core_web-2.21.1/","dependencies":[],"dev_dependency":false},{"name":"firebase_storage_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/firebase_storage_web-3.10.11/","dependencies":["firebase_core_web"],"dev_dependency":false},{"name":"image_picker_for_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/","dependencies":[],"dev_dependency":false},{"name":"permission_handler_html","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/permission_handler_html-0.1.3+5/","dependencies":[],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/arbruck/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"camera","dependencies":["camera_android","camera_avfoundation","camera_web","flutter_plugin_android_lifecycle"]},{"name":"camera_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"camera_avfoundation","dependencies":[]},{"name":"camera_web","dependencies":[]},{"name":"cloud_firestore","dependencies":["cloud_firestore_web","firebase_core"]},{"name":"cloud_firestore_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"file_selector_linux","dependencies":[]},{"name":"file_selector_macos","dependencies":[]},{"name":"file_selector_windows","dependencies":[]},{"name":"firebase_app_check","dependencies":["firebase_app_check_web","firebase_core"]},{"name":"firebase_app_check_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"firebase_auth","dependencies":["firebase_auth_web","firebase_core"]},{"name":"firebase_auth_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"firebase_storage","dependencies":["firebase_core","firebase_storage_web"]},{"name":"firebase_storage_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios","image_picker_linux","image_picker_macos","image_picker_windows"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]},{"name":"image_picker_linux","dependencies":["file_selector_linux"]},{"name":"image_picker_macos","dependencies":["file_selector_macos"]},{"name":"image_picker_windows","dependencies":["file_selector_windows"]},{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_html","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_html","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-03-26 17:42:13.844121","version":"3.29.2","swift_package_manager_enabled":{"ios":false,"macos":false}}
\ No newline at end of file \ No newline at end of file
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class BookDetailsPage extends StatelessWidget {
final QueryDocumentSnapshot book;
BookDetailsPage({required this.book});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(book['title'])),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(
child: book['imageUrl'] != null
? Image.network(book['imageUrl'], height: 200, fit: BoxFit.cover)
: Icon(Icons.book, size: 100),
),
SizedBox(height: 20),
Text("Title: ${book['title']}", style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold)),
Text("Author: ${book['author']}", style: TextStyle(fontSize: 18)),
Text("ISBN: ${book['isbn']}", style: TextStyle(fontSize: 16)),
Text("Price: \$${book['price']}", style: TextStyle(fontSize: 16, color: Colors.green)),
SizedBox(height: 10),
Text("Description:", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
Text(book['description'] ?? 'No description available', style: TextStyle(fontSize: 16)),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'book_detail_page.dart';
class MyBooksPage extends StatelessWidget { class MyBooksPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// Get current user ID
String userId = FirebaseAuth.instance.currentUser?.uid ?? "";
return Scaffold( return Scaffold(
appBar: AppBar(title: Text('My Books')), appBar: AppBar(title: Text("My Books")),
body: StreamBuilder<QuerySnapshot>( body: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('books').snapshots(), stream: FirebaseFirestore.instance
.collection('books')
.where('userId', isEqualTo: userId) // 🔹 Filter by logged-in user ID
.snapshots(),
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) { if (!snapshot.hasData) return Center(child: CircularProgressIndicator());
return Center(child: CircularProgressIndicator());
}
if (!snapshot.hasData || snapshot.data!.docs.isEmpty) {
return Center(child: Text('No books found.'));
}
var books = snapshot.data!.docs; var books = snapshot.data!.docs;
if (books.isEmpty) {
return Center(child: Text("No books posted yet."));
}
return ListView.builder( return ListView.builder(
itemCount: books.length, itemCount: books.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
var book = books[index].data() as Map<String, dynamic>; var book = books[index];
return ListTile( return ListTile(
title: Text(book['title'] ?? 'No Title'), leading: book['imageUrl'] != null
subtitle: Text(book['author'] ?? 'Unknown Author'), ? Image.network(book['imageUrl'], width: 50, height: 50, fit: BoxFit.cover)
trailing: Text("\$${book['price']}"), : Icon(Icons.book),
title: Text(book['title']),
subtitle: Text(book['author']),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BookDetailsPage(book: book),
),
);
},
); );
}, },
); );
......
import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart'; import 'package:firebase_storage/firebase_storage.dart';
...@@ -11,10 +14,10 @@ class PostBookPage extends StatefulWidget { ...@@ -11,10 +14,10 @@ class PostBookPage extends StatefulWidget {
class _PostBookPageState extends State<PostBookPage> { class _PostBookPageState extends State<PostBookPage> {
final TextEditingController titleController = TextEditingController(); final TextEditingController titleController = TextEditingController();
final TextEditingController descriptionController = TextEditingController();
final TextEditingController priceController = TextEditingController(); final TextEditingController priceController = TextEditingController();
final TextEditingController isbnController = TextEditingController(); final TextEditingController isbnController = TextEditingController();
final TextEditingController authorController = TextEditingController(); final TextEditingController authorController = TextEditingController();
final TextEditingController descriptionController = TextEditingController();
File? _imageFile; File? _imageFile;
// Function to pick an image from camera or gallery // Function to pick an image from camera or gallery
...@@ -30,32 +33,77 @@ class _PostBookPageState extends State<PostBookPage> { ...@@ -30,32 +33,77 @@ class _PostBookPageState extends State<PostBookPage> {
} }
} }
Future<String?> fetchBookDescription(String isbn) async {
final String url = "https://www.googleapis.com/books/v1/volumes?q=isbn:$isbn";
try {
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
if (data['totalItems'] > 0) {
return data['items'][0]['volumeInfo']['description'] ?? 'No description available';
}
}
} catch (e) {
print("Error fetching book details: $e");
}
return null; // Return null if no description is found
}
Future<String?> uploadImageToImgur(File imageFile) async {
try {
final uri = Uri.parse('https://api.imgur.com/3/upload');
final request = http.MultipartRequest('POST', uri)
..headers['Authorization'] = '00caf989adf38fa'
..files.add(await http.MultipartFile.fromPath('image', imageFile.path));
final response = await request.send();
if (response.statusCode == 200) {
final responseData = await response.stream.bytesToString();
final jsonData = json.decode(responseData);
return jsonData['data']['link']; // The image URL from Imgur
} else {
print('Failed to upload image to Imgur');
return null;
}
} catch (e) {
print('Error uploading image: $e');
return null;
}
}
// Function to upload book data to Firebase // Function to upload book data to Firebase
Future<bool> uploadBook() async { Future<bool> uploadBook() async {
try { try {
// Store book details in Firestore User? user = FirebaseAuth.instance.currentUser;
if (user == null) return false; // Ensure user is logged in
String? imageUrl;
if (_imageFile != null) {
imageUrl = await uploadImageToImgur(_imageFile!);
if (imageUrl == null) return false; // Upload and get URL
}
await FirebaseFirestore.instance.collection('books').add({ await FirebaseFirestore.instance.collection('books').add({
'title': titleController.text, 'title': titleController.text,
'description': descriptionController.text,
'price': priceController.text,
'isbn': isbnController.text,
'author': authorController.text, 'author': authorController.text,
'imageUrl': '', // Remove Firebase Storage dependency 'isbn': isbnController.text,
'createdAt': Timestamp.now(), 'price': priceController.text,
'description': descriptionController.text,
'userId': user.uid, // 🔹 Save logged-in user's ID
'imageUrl': imageUrl ?? "", // Optional image
}); });
return true; return true;
} catch (e) { } catch(e) {
print('Error uploading book: $e'); print("Error uploading book: $e");
return false; return false;
} }
} }
// Function to handle book posting // Function to handle book posting
Future<void> _postBook() async { Future<void> _postBook() async {
if (titleController.text.isEmpty || descriptionController.text.isEmpty || if (titleController.text.isEmpty ||
priceController.text.isEmpty || isbnController.text.isEmpty || priceController.text.isEmpty || isbnController.text.isEmpty ||
authorController.text.isEmpty) { authorController.text.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
...@@ -63,6 +111,10 @@ class _PostBookPageState extends State<PostBookPage> { ...@@ -63,6 +111,10 @@ class _PostBookPageState extends State<PostBookPage> {
); );
return; return;
} }
String? description = await fetchBookDescription(isbnController.text);
descriptionController.text = description ?? 'No description available';
bool success = await uploadBook(); bool success = await uploadBook();
if (success) { if (success) {
Navigator.pushReplacementNamed(context, '/mybooks'); Navigator.pushReplacementNamed(context, '/mybooks');
...@@ -91,13 +143,7 @@ class _PostBookPageState extends State<PostBookPage> { ...@@ -91,13 +143,7 @@ class _PostBookPageState extends State<PostBookPage> {
), ),
SizedBox(height: 10), SizedBox(height: 10),
// Description Input
TextField(
controller: descriptionController,
decoration: InputDecoration(labelText: 'Description'),
maxLines: 3,
),
SizedBox(height: 10),
// Price Input // Price Input
TextField( TextField(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment