Commit c43cc7ec authored by Adam Bruck's avatar Adam Bruck

search

parent e953b7df
{"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}} {"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-28 16:53:03.119488","version":"3.29.2","swift_package_manager_enabled":{"ios":false,"macos":false}}
\ No newline at end of file \ No newline at end of file
...@@ -2,33 +2,44 @@ import 'package:flutter/material.dart'; ...@@ -2,33 +2,44 @@ import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
class BookDetailsPage extends StatelessWidget { class BookDetailsPage extends StatelessWidget {
final QueryDocumentSnapshot book; final Map<String, dynamic> book;
BookDetailsPage({required this.book}); BookDetailsPage({required this.book});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final title = book['title'] ?? 'No title available';
final author = book['author'] ?? 'No author available';
final isbn = book['isbn'] ?? 'No ISBN available';
final price = book['price'] is String ? double.tryParse(book['price']) ?? 0.0 : book['price'] ?? 0.0;
final condition = book['condition'] ?? 'Condition not available';
final description = book['description'] ?? 'No description available';
final imageUrl = book['imageUrl'] ?? 'https://via.placeholder.com/200'; // Fallback URL
return Scaffold( return Scaffold(
appBar: AppBar(title: Text(book['title'])), appBar: AppBar(title: Text(title)),
body: Padding( body: SingleChildScrollView( // Makes content scrollable
padding: const EdgeInsets.all(16.0), child: Padding(
child: Column( padding: EdgeInsets.all(16.0),
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Center( children: [
child: book['imageUrl'] != null Center(
? Image.network(book['imageUrl'], height: 200, fit: BoxFit.cover) child: imageUrl.isNotEmpty
: Icon(Icons.book, size: 100), ? Image.network(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)), SizedBox(height: 20),
Text("Author: ${book['author']}", style: TextStyle(fontSize: 18)), Text("Title: $title", style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold)),
Text("ISBN: ${book['isbn']}", style: TextStyle(fontSize: 16)), Text("Author: $author", style: TextStyle(fontSize: 18)),
Text("Price: \$${book['price']}", style: TextStyle(fontSize: 16, color: Colors.green)), Text("ISBN: $isbn", style: TextStyle(fontSize: 16)),
SizedBox(height: 10), Text("Price: \$${price.toStringAsFixed(2)}", style: TextStyle(fontSize: 16, color: Colors.green)),
Text("Description:", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), Text("Condition: $condition", style: TextStyle(fontSize: 16)),
Text(book['description'] ?? 'No description available', style: TextStyle(fontSize: 16)), SizedBox(height: 10),
], Text("Description:", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
Text(description, style: TextStyle(fontSize: 16)),
],
),
), ),
), ),
); );
......
...@@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; ...@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'post.dart'; import 'post.dart';
import 'inbox.dart'; import 'inbox.dart';
class HomeScreen extends StatefulWidget { class HomeScreen extends StatefulWidget {
const HomeScreen({super.key}); const HomeScreen({super.key});
......
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart';
import 'package:paperchase_app/book_detail_page.dart';
import 'package:paperchase_app/mybooks.dart'; import 'package:paperchase_app/mybooks.dart';
import 'firebase_options.dart'; import 'firebase_options.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
...@@ -101,6 +103,7 @@ class _HomePageState extends State<HomePage> { ...@@ -101,6 +103,7 @@ class _HomePageState extends State<HomePage> {
void initState() { void initState() {
super.initState(); super.initState();
_checkUserLoginStatus(); _checkUserLoginStatus();
_loadRecentBooks();
} }
void _checkUserLoginStatus() { void _checkUserLoginStatus() {
...@@ -121,23 +124,54 @@ class _HomePageState extends State<HomePage> { ...@@ -121,23 +124,54 @@ class _HomePageState extends State<HomePage> {
} }
Future<void> _searchBooks() async { Future<void> _searchBooks() async {
final query = _searchController.text; final query = _searchController.text;
if (query.isEmpty) return; if (query.isEmpty) {
_loadRecentBooks(); // If search is empty, load recent books
return;
}
try {
final QuerySnapshot snapshot = await FirebaseFirestore.instance
.collection('books')
.orderBy('timestamp', descending: true) // Sort by the most recent posts
.get();
final url = Uri.parse('https://www.googleapis.com/books/v1/volumes?q=${Uri.encodeComponent(query)}'); // Now filter books locally based on the title
final filteredBooks = snapshot.docs.where((doc) {
final title = doc['title'].toString().toLowerCase();
return title.contains(query.toLowerCase()); // Case-insensitive search
}).toList();
setState(() {
_books = filteredBooks.map((doc) => doc.data()).toList();
});
} catch (e) {
print("Error searching books: $e");
}
}
Future<void> _loadRecentBooks() async {
try { try {
final response = await http.get(url); final QuerySnapshot snapshot = await FirebaseFirestore.instance
final data = json.decode(response.body); .collection('books')
.orderBy('timestamp', descending: true) // Sort by the most recent posts
.limit(10) // Optionally limit to the latest 10 books
.get();
setState(() { setState(() {
_books = data['items'] ?? []; _books = snapshot.docs.map((doc) => doc.data()).toList();
}); });
} catch (error) { } catch (e) {
print("Error fetching books: $error"); print("Error fetching recent books: $e");
} }
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
...@@ -198,23 +232,24 @@ class _HomePageState extends State<HomePage> { ...@@ -198,23 +232,24 @@ class _HomePageState extends State<HomePage> {
child: ListView.builder( child: ListView.builder(
itemCount: _books.length, itemCount: _books.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final book = _books[index]['volumeInfo']; final book = _books[index];
final title = book['title'] ?? "Unknown Title"; final title = book['title'] ?? "Unknown Title";
final authors = book['authors']?.join(", ") ?? "Unknown Author"; final author = book['author'] ?? "No author available";
final thumbnail = book['imageLinks']?['thumbnail'] ?? "https://via.placeholder.com/50"; final thumbnail = book['imageUrl'] ?? "https://via.placeholder.com/50";
final link = book['infoLink'] ?? "#";
return ListTile( return ListTile(
leading: Image.network(thumbnail, width: 50, height: 50, fit: BoxFit.cover), leading: Image.network(thumbnail, width: 50, height: 50, fit: BoxFit.cover),
title: Text(title), title: Text(title),
subtitle: Text(authors), subtitle: Text(author),
onTap: () async { onTap: () {
final Uri url = Uri.parse(link);
if (await canLaunchUrl(url)) { Navigator.push(
await launchUrl(url); context,
} else { MaterialPageRoute(
print("Could not open $url"); builder: (context) => BookDetailsPage(book: book), // Pass book data
} ),
);
}, },
); );
}, },
......
...@@ -28,7 +28,7 @@ class MyBooksPage extends StatelessWidget { ...@@ -28,7 +28,7 @@ class MyBooksPage extends StatelessWidget {
return ListView.builder( return ListView.builder(
itemCount: books.length, itemCount: books.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
var book = books[index]; var book = books[index].data() as Map<String, dynamic>; // Use data() to get the map
return ListTile( return ListTile(
leading: book['imageUrl'] != null leading: book['imageUrl'] != null
......
...@@ -19,6 +19,7 @@ class _PostBookPageState extends State<PostBookPage> { ...@@ -19,6 +19,7 @@ class _PostBookPageState extends State<PostBookPage> {
final TextEditingController authorController = TextEditingController(); final TextEditingController authorController = TextEditingController();
final TextEditingController descriptionController = TextEditingController(); final TextEditingController descriptionController = TextEditingController();
File? _imageFile; File? _imageFile;
String _selectedCondition = "Like New";
// Function to pick an image from camera or gallery // Function to pick an image from camera or gallery
Future<void> _pickImage(ImageSource source) async { Future<void> _pickImage(ImageSource source) async {
...@@ -52,19 +53,22 @@ Future<String?> fetchBookDescription(String isbn) async { ...@@ -52,19 +53,22 @@ Future<String?> fetchBookDescription(String isbn) async {
Future<String?> uploadImageToImgur(File imageFile) async { Future<String?> uploadImageToImgur(File imageFile) async {
try { try {
final uri = Uri.parse('https://api.imgur.com/3/upload'); var request = http.MultipartRequest(
final request = http.MultipartRequest('POST', uri) 'POST', Uri.parse('https://api.imgur.com/3/upload')
..headers['Authorization'] = '00caf989adf38fa' );
..files.add(await http.MultipartFile.fromPath('image', imageFile.path));
request.headers['Authorization'] = 'Client-ID 00caf989adf38fa';
final response = await request.send(); var pic = await http.MultipartFile.fromPath('image', imageFile.path);
request.files.add(pic);
var response = await request.send();
if (response.statusCode == 200) { if (response.statusCode == 200) {
final responseData = await response.stream.bytesToString(); final responseData = await response.stream.bytesToString();
final jsonData = json.decode(responseData); final jsonData = json.decode(responseData);
return jsonData['data']['link']; // The image URL from Imgur return jsonData['data']['link']; // Image URL from Imgur
} else { } else {
print('Failed to upload image to Imgur'); print('Failed to upload image: ${response.reasonPhrase}');
return null; return null;
} }
} catch (e) { } catch (e) {
...@@ -91,8 +95,10 @@ Future<String?> uploadImageToImgur(File imageFile) async { ...@@ -91,8 +95,10 @@ Future<String?> uploadImageToImgur(File imageFile) async {
'isbn': isbnController.text, 'isbn': isbnController.text,
'price': priceController.text, 'price': priceController.text,
'description': descriptionController.text, 'description': descriptionController.text,
'condition': _selectedCondition,
'userId': user.uid, // 🔹 Save logged-in user's ID 'userId': user.uid, // 🔹 Save logged-in user's ID
'imageUrl': imageUrl ?? "", // Optional image 'imageUrl': imageUrl ?? "", // Optional image
'timestamp': FieldValue.serverTimestamp(),
}); });
return true; return true;
} catch(e) { } catch(e) {
...@@ -167,7 +173,21 @@ Future<String?> uploadImageToImgur(File imageFile) async { ...@@ -167,7 +173,21 @@ Future<String?> uploadImageToImgur(File imageFile) async {
decoration: InputDecoration(labelText: 'Author'), decoration: InputDecoration(labelText: 'Author'),
), ),
SizedBox(height: 20), SizedBox(height: 20),
DropdownButtonFormField<String>(
value: _selectedCondition,
items: ['Like New', 'Good', 'Fair', 'Poor']
.map((condition) => DropdownMenuItem(
value: condition,
child: Text(condition),
))
.toList(),
onChanged: (value) {
setState(() {
_selectedCondition = value!;
});
},
decoration: InputDecoration(labelText: 'Condition'),
),
// Image Picker Buttons // Image Picker Buttons
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
......
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