diff --git a/gro_sense/android/app/src/main/AndroidManifest.xml b/gro_sense/android/app/src/main/AndroidManifest.xml index 284ffee..9350e0f 100644 --- a/gro_sense/android/app/src/main/AndroidManifest.xml +++ b/gro_sense/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,22 @@ - + + + + + + + + + + + + + + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> + android:name="io.flutter.embedding.android.SplashScreenDrawable" + android:resource="@drawable/launch_background" + /> diff --git a/gro_sense/assets/app-logo.png b/gro_sense/assets/app-logo.png new file mode 100644 index 0000000..339d31f Binary files /dev/null and b/gro_sense/assets/app-logo.png differ diff --git a/gro_sense/assets/app-logo@110x110.png b/gro_sense/assets/app-logo@110x110.png new file mode 100644 index 0000000..a59a995 Binary files /dev/null and b/gro_sense/assets/app-logo@110x110.png differ diff --git a/gro_sense/assets/banner1.png b/gro_sense/assets/banner1.png new file mode 100644 index 0000000..7e44eeb Binary files /dev/null and b/gro_sense/assets/banner1.png differ diff --git a/gro_sense/lib/main.dart b/gro_sense/lib/main.dart index 8ec4906..d3d9807 100644 --- a/gro_sense/lib/main.dart +++ b/gro_sense/lib/main.dart @@ -4,6 +4,7 @@ import 'package:gro_sense/screens/dashboard.dart'; import 'package:gro_sense/screens/first_screen.dart'; import 'package:gro_sense/screens/screen_login.dart'; import 'package:firebase_core/firebase_core.dart'; +import 'package:gro_sense/navigation.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); @@ -33,13 +34,13 @@ class MyApp extends StatelessWidget { home: FutureBuilder( future: checkLoginStatus(), builder: ( - BuildContext context, AsyncSnapshot + BuildContext context, AsyncSnapshot snapshot){ - if(snapshot.data == false){ - return FirstPage(); - } - return DashBoardScreen(); - }) + if(snapshot.data == false){ + return FirstPage(); + } + return MyBottomNavigation(); + }) ); } } diff --git a/gro_sense/lib/navigation.dart b/gro_sense/lib/navigation.dart new file mode 100644 index 0000000..21fd941 --- /dev/null +++ b/gro_sense/lib/navigation.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:gro_sense/screens/dashboard.dart'; +import 'package:gro_sense/screens/settings.dart'; + +import '../screens/addProduct.dart'; +import '../screens/charityDetails.dart'; +import '../screens/tabbarPage.dart'; + +class MyBottomNavigation extends StatefulWidget { + @override + _MyBottomNavigationState createState() => _MyBottomNavigationState(); +} + +class _MyBottomNavigationState extends State { + + List pages =[ + DashBoardScreen(), + tabbarPage(), + AddaProductScreen(), + LocationScreen(), + SettingsScreen(), + ]; + int currentIndex = 0; + void onTap(int index){ + setState((){ + currentIndex = index; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: pages[currentIndex], + bottomNavigationBar: BottomNavigationBar( + type: BottomNavigationBarType.fixed, + onTap: onTap, + currentIndex: currentIndex, + selectedItemColor: Colors.green[400], + unselectedItemColor: Colors.grey, + showSelectedLabels: false, + showUnselectedLabels: false, + items: [ + BottomNavigationBarItem(label: "Home", icon: Icon(Icons.home)), + BottomNavigationBarItem(label: "List",icon: Icon(Icons.format_list_bulleted_rounded)), + BottomNavigationBarItem(label: "Add Product",icon: Icon(Icons.add)), + BottomNavigationBarItem(label: "Charitable Trust",icon: Icon(Icons.share)), + BottomNavigationBarItem(label: "Settings",icon: Icon(Icons.settings)), + ], + ), + ); + } +} diff --git a/gro_sense/lib/screens/dashboard.dart b/gro_sense/lib/screens/dashboard.dart index ec5595d..79616b9 100644 --- a/gro_sense/lib/screens/dashboard.dart +++ b/gro_sense/lib/screens/dashboard.dart @@ -1,7 +1,8 @@ import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; - -import 'edit_profile_screen.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:intl/intl.dart'; +import '../Model/user_model.dart'; class DashBoardScreen extends StatefulWidget { const DashBoardScreen({Key? key}) : super(key: key); @@ -12,53 +13,282 @@ class DashBoardScreen extends StatefulWidget { class _DashBoardScreenState extends State { final _auth = FirebaseAuth.instance; + UserModel loggedInUser = UserModel(); + + List> userMap = []; + bool isLoading = false; + List productData = []; + int? userId; + + Future getData() async { + setState(() { + isLoading = true; + }); + User? currentUser = FirebaseAuth.instance.currentUser; + FirebaseFirestore.instance.collection('users').get().then((value) { + // print(value.size); + // for(int i=0;i[ - IconButton( - icon: Icon(Icons.home), - onPressed: () {}, - ), - IconButton( - icon: Icon(Icons.menu), - onPressed: () {}, + + body: SafeArea ( + child: isLoading + ? const Center( + child: Center( + child: CircularProgressIndicator( + valueColor: + AlwaysStoppedAnimation(Colors.blueAccent), ), - SizedBox(width:20), - IconButton( - icon: Icon(Icons.card_giftcard_rounded), + ), + ) + : Container( + width: double.infinity, + padding: const EdgeInsets.symmetric(horizontal: 20.0), + color: const Color(0xFFF6F6F6), + child: Stack(children: [ + SingleChildScrollView( + physics: BouncingScrollPhysics(), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: double.infinity, + padding: const EdgeInsets.symmetric( + horizontal: 5.0, + ), + margin: const EdgeInsets.only(top: 25.0, bottom: 10.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20.0), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Welcome", + style: TextStyle( + color: Color(0xFF000000), + fontSize: 30.0, + fontWeight: FontWeight.w800, + ), + ), + Padding( + padding: EdgeInsets.only( + top: 5.0, + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 2.0, bottom: 10.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(20), + child: Image( + image: AssetImage("assets/banner1.png"), + width: double.infinity, + ), + )), + Container( + width: double.infinity, + padding: const EdgeInsets.symmetric( + // horizontal: 24.0, + vertical: 10.0, + ), + margin: EdgeInsets.only(bottom: 10.0), + decoration: BoxDecoration( + // color: Colors.white, + borderRadius: BorderRadius.circular(20.0), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + Text( + "Upcoming Expires", + style: TextStyle( + color: Color(0x9E000000), + fontSize: 20.0, + ), + ), + Padding( + padding: EdgeInsets.only( + top: 5.0, + ), + ), + ], + ), + ), + + userMap[0]['Add Product']!=null? + Container( + height: 600, + child: ListView.builder( + physics: BouncingScrollPhysics(), + itemBuilder: (BuildContext context, int index) { - onPressed: () {}, + return buildItem(context,productData[index]); + }, + itemCount: productData.length, + // controller: listScrollController, + ), + ):Container( + height: 200, + child: Center(child: Text("No data found")), + ), + + ], + ), ), - IconButton( - icon: Icon(Icons.settings), - onPressed: () { - Navigator.of(context).pushReplacement( - MaterialPageRoute(builder: (context) => EditProfileScreen())); - }, - ) - ], + ]), ), ), + // floatingActionButton: FloatingActionButton.extended( + // elevation: 5.0, + // icon: const Icon(Icons.add), + // label: const Text('Add'), + // onPressed: () { + // Navigator.of(context).pushReplacement( + // MaterialPageRoute(builder: (context) => AddaProductScreen())); + // }, + // ), + // floatingActionButtonLocation: + // FloatingActionButtonLocation.centerDocked, + // bottomNavigationBar: BottomAppBar( + // + // // hasNotch: false, + // child: new Row( + // mainAxisSize: MainAxisSize.max, + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // // IconButton( + // // icon: Icon(Icons.home), + // // onPressed: () {}, + // // ), + // // IconButton( + // // icon: Icon(Icons.menu), + // // onPressed: () { + // // Navigator.of(context).pushReplacement( + // // MaterialPageRoute(builder: (context) => tabbarPage())); + // // + // // }, + // // ), + // // SizedBox(width:20), + // // IconButton( + // // icon: Icon(Icons.card_giftcard_rounded), + // // + // // onPressed: () { + // // Navigator.of(context).pushReplacement( + // // MaterialPageRoute(builder: (context) => LocationScreen())); + // // }, + // // ), + // // IconButton( + // // icon: Icon(Icons.settings), + // // onPressed: () { + // // Navigator.of(context).pushReplacement( + // // MaterialPageRoute(builder: (context) => SettingsScreen())); + // // }, + // // ) + // ], + // ), + // ), + ); + } +} + +DateTime formatTimestamp(Timestamp timestamp) { + var format = new DateFormat('y-MM-d'); // <- use skeleton here + return timestamp.toDate(); +} +Widget buildItem(BuildContext context,map) { + print("-------------------------->>>>>"+map.toString()); + print(map); + if (map != null) { + + var date = new DateTime.now(); + + final difference =formatTimestamp(map['expiryDate']).difference(date).inDays; + return difference <0?Container( + height: MediaQuery.of(context).size.height, + width:MediaQuery.of(context).size.width, + child: Text("No expired products"), + ) :Container( + width: double.infinity, + padding: EdgeInsets.symmetric( + horizontal: 24.0, + vertical: 26.0, + ), + margin: EdgeInsets.only(bottom: 10.0), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(20.0)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + Text( + map['productName'].toString(), + style: TextStyle( + color: Color(0xFF000000), + fontSize: 18.0, + fontWeight: FontWeight.bold, + ), + ), + Padding( + padding: EdgeInsets.only( + top: 5.0, + ), + child: Text( + formatTimestamp(map['expiryDate']).toString().substring(0,10), + style: TextStyle( + fontSize: 16.0, + height: 1.0, + color: Color(0xFFA8A8A8), + ), + ), + ), + ], + ), + ); + + } else { + return Container( + height: MediaQuery.of(context).size.height, + width:MediaQuery.of(context).size.width, + child: Text("No Data Found"), ); } -} \ No newline at end of file +} diff --git a/gro_sense/lib/screens/edit_profile_screen.dart b/gro_sense/lib/screens/edit_profile_screen.dart index 947c519..098159b 100644 --- a/gro_sense/lib/screens/edit_profile_screen.dart +++ b/gro_sense/lib/screens/edit_profile_screen.dart @@ -2,8 +2,7 @@ import 'package:flutter/material.dart'; import 'package:gro_sense/screens/dashboard.dart'; import 'package:gro_sense/screens/screen_login.dart'; -class EditProfileScreen extends StatelessWidget{ - +class EditProfileScreen extends StatelessWidget { @override Widget build(BuildContext context){ return Scaffold( diff --git a/gro_sense/lib/screens/first_screen.dart b/gro_sense/lib/screens/first_screen.dart index a01be64..c1d97cd 100644 --- a/gro_sense/lib/screens/first_screen.dart +++ b/gro_sense/lib/screens/first_screen.dart @@ -2,103 +2,88 @@ import 'package:flutter/material.dart'; import 'package:gro_sense/screens/screen_login.dart'; import 'package:gro_sense/screens/registration_screen.dart'; - class FirstPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - final loginButton = Material( - elevation: 5, - borderRadius: BorderRadius.circular(30), - color: Colors.green[400], - child: MaterialButton( - padding: EdgeInsets.fromLTRB(20, 15, 20, 15), - minWidth: MediaQuery - .of(context) - .size - .width, - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - LoginScreen())); - }, - child: Text( - "Login", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20, - color: Colors.white, - fontWeight: FontWeight.bold), - )), - ); - final signUpButton = Material( - elevation: 5, - borderRadius: BorderRadius.circular(30), - color: Colors.green[400], - child: MaterialButton( - padding: EdgeInsets.fromLTRB(20, 15, 20, 15), - minWidth: MediaQuery - .of(context) - .size - .width, - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - RegistrationScreen())); - }, - child: Text( - "SignUp", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20, color: Colors.white, fontWeight: FontWeight.bold), - )), - ); +class FirstPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + final loginButton = Material( + elevation: 5, + borderRadius: BorderRadius.circular(30), + color: Colors.green[400], + child: MaterialButton( + padding: EdgeInsets.fromLTRB(20, 15, 20, 15), + minWidth: MediaQuery.of(context).size.width, + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => LoginScreen())); + }, + child: Text( + "Login", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20, color: Colors.white, fontWeight: FontWeight.bold), + )), + ); + final signUpButton = Material( + elevation: 5, + borderRadius: BorderRadius.circular(30), + color: Colors.green[400], + child: MaterialButton( + padding: EdgeInsets.fromLTRB(20, 15, 20, 15), + minWidth: MediaQuery.of(context).size.width, + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => RegistrationScreen())); + }, + child: Text( + "SignUp", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20, color: Colors.white, fontWeight: FontWeight.bold), + )), + ); - return Scaffold( - - - body: Container( - width: double.infinity, - height: double.infinity, - - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/logo.png"), - colorFilter: new ColorFilter.mode( - Colors.black.withOpacity(0.3), BlendMode.dstATop), - fit: BoxFit.cover, - ), - ), - child: SingleChildScrollView( - child: Container( - color: Colors.transparent, - child: Padding( - padding: const EdgeInsets.all(36.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox(height: 100), - Text("GRO-SENSE", style: TextStyle( - color: Colors.green[400], - fontWeight: FontWeight.bold, - fontSize: 50),), - SizedBox(height: 100), - SizedBox(height: 35), - loginButton, - SizedBox(height: 25), - Text("OR"), - SizedBox(height: 25), - signUpButton, - SizedBox(height: 15), - ] - ), - ), - ), - ) - ) - ); - } - } \ No newline at end of file + return Scaffold( + body: Container( + width: double.infinity, + height: double.infinity, + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/logo.png"), + colorFilter: new ColorFilter.mode( + Colors.black.withOpacity(0.3), BlendMode.dstATop), + fit: BoxFit.cover, + ), + ), + child: SingleChildScrollView( + child: Container( + color: Colors.transparent, + child: Padding( + padding: const EdgeInsets.all(36.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: 100), + Text( + "GRO-SENSE", + style: TextStyle( + color: Colors.green[400], + fontWeight: FontWeight.bold, + fontSize: 50), + ), + SizedBox(height: 100), + SizedBox(height: 35), + loginButton, + SizedBox(height: 25), + Text("OR"), + SizedBox(height: 25), + signUpButton, + SizedBox(height: 15), + ]), + ), + ), + ) + ) + ); + } +} diff --git a/gro_sense/lib/screens/screen_login.dart b/gro_sense/lib/screens/screen_login.dart index a707626..2d46218 100644 --- a/gro_sense/lib/screens/screen_login.dart +++ b/gro_sense/lib/screens/screen_login.dart @@ -11,6 +11,8 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:gro_sense/screens/reset_password_screen.dart'; + +import 'package:gro_sense/navigation.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({Key? key}) : super(key: key); @@ -240,7 +242,7 @@ class _LoginScreenState extends State { var userEmail = googleUser.email; Fluttertoast.showToast(msg: "Login Successful"); Navigator.of(context).pushReplacement( - MaterialPageRoute(builder: (context) => DashBoardScreen())); + MaterialPageRoute(builder: (context) => MyBottomNavigation())); // Once signed in, return the UserCredential return await FirebaseAuth.instance.signInWithCredential(credential); @@ -253,7 +255,7 @@ class _LoginScreenState extends State { await storage.write(key: "uid", value: userCredential.user?.uid); Fluttertoast.showToast(msg: "Login Successful"); Navigator.of(context).pushReplacement( - MaterialPageRoute(builder: (context) => DashBoardScreen())); + MaterialPageRoute(builder: (context) => MyBottomNavigation())); } on FirebaseAuthException catch (error) { switch (error.code) { case "invalid-email": diff --git a/gro_sense/lib/widget.dart b/gro_sense/lib/widget.dart new file mode 100644 index 0000000..450be62 --- /dev/null +++ b/gro_sense/lib/widget.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +// import 'package:gro_sense/model/user_model.dart'; + + +class TaskCardWidget extends StatelessWidget { + // final String priority; + final String title; + final String description; + + const TaskCardWidget( + {Key? key, + // required this.priority, + required this.title, + required this.description}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: double.infinity, + padding: EdgeInsets.symmetric( + horizontal: 24.0, + vertical: 26.0, + ), + margin: EdgeInsets.only(bottom: 10.0), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(20.0)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Text( + // priority, + // style: TextStyle( + // color: Color(0xFFFF0000), + // fontSize: 14.0, + // fontWeight: FontWeight.w600, + // ), + // ), + Text( + title, + style: TextStyle( + color: Color(0xFF000000), + fontSize: 16.0, + fontWeight: FontWeight.w400, + ), + ), + Padding( + padding: EdgeInsets.only( + top: 5.0, + ), + child: Text( + description, + style: TextStyle( + fontSize: 16.0, + height: 1.0, + color: Color(0xFFA8A8A8), + ), + ), + ), + ], + ), + ); + } +} + +class TodoWidget extends StatelessWidget { + // const TodoWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric( + vertical: 24.0, + horizontal: 8.0, + ), + child: Row( + children: [ + Container( + width: 20, + height: 20, + margin: EdgeInsets.only( + right: 12.0, + ), + decoration: BoxDecoration( + color: Color(0xFFFEF200), + borderRadius: BorderRadius.circular(5.0), + ), + child: Image( + image: AssetImage('assets/images/check.png'), + ), + padding: EdgeInsets.all(5.0), + ), + Text( + "This is gonna edit", + style: TextStyle( + color: Color(0xFF211551), + fontSize: 16.0, + ), + ), + ], + ), + ); + } +} diff --git a/gro_sense/pubspec.lock b/gro_sense/pubspec.lock index 93fdfb7..4c797e0 100644 --- a/gro_sense/pubspec.lock +++ b/gro_sense/pubspec.lock @@ -1,6 +1,20 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.1" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.1" async: dependency: transitive description: @@ -42,21 +56,21 @@ packages: name: cloud_firestore url: "https://pub.dartlang.org" source: hosted - version: "2.5.4" + version: "3.4.2" cloud_firestore_platform_interface: dependency: transitive description: name: cloud_firestore_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "5.5.7" + version: "5.7.0" cloud_firestore_web: dependency: transitive description: name: cloud_firestore_web url: "https://pub.dartlang.org" source: hosted - version: "2.6.16" + version: "2.8.2" collection: dependency: transitive description: @@ -78,6 +92,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.5" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.7" fake_async: dependency: transitive description: @@ -85,48 +106,83 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.0" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.2" firebase_auth: dependency: "direct main" description: name: firebase_auth url: "https://pub.dartlang.org" source: hosted - version: "3.3.19" + version: "3.6.1" firebase_auth_platform_interface: dependency: transitive description: name: firebase_auth_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "6.2.7" + version: "6.5.1" firebase_auth_web: dependency: transitive description: name: firebase_auth_web url: "https://pub.dartlang.org" source: hosted - version: "3.3.16" + version: "4.2.1" firebase_core: dependency: "direct main" description: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "1.17.1" + version: "1.20.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "4.5.0" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" + version: "1.7.1" + firebase_storage: + dependency: "direct main" + description: + name: firebase_storage + url: "https://pub.dartlang.org" + source: hosted + version: "10.3.4" + firebase_storage_platform_interface: + dependency: transitive + description: + name: firebase_storage_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.1.12" + firebase_storage_web: + dependency: transitive + description: + name: firebase_storage_web + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.2" flutter: dependency: "direct main" description: flutter @@ -160,6 +216,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.6.0+2" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.3" + flutter_local_notifications: + dependency: "direct main" + description: + name: flutter_local_notifications + url: "https://pub.dartlang.org" + source: hosted + version: "9.7.0" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0+1" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" flutter_secure_storage: dependency: "direct main" description: @@ -225,35 +309,35 @@ packages: name: google_sign_in url: "https://pub.dartlang.org" source: hosted - version: "5.3.3" + version: "5.4.0" google_sign_in_android: dependency: transitive description: name: google_sign_in_android url: "https://pub.dartlang.org" source: hosted - version: "5.2.8" + version: "6.0.1" google_sign_in_ios: dependency: transitive description: name: google_sign_in_ios url: "https://pub.dartlang.org" source: hosted - version: "5.3.1" + version: "5.4.0" google_sign_in_platform_interface: dependency: transitive description: name: google_sign_in_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.2.0" google_sign_in_web: dependency: transitive description: name: google_sign_in_web url: "https://pub.dartlang.org" source: hosted - version: "0.10.1+3" + version: "0.10.2" http: dependency: transitive description: @@ -268,13 +352,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.0.1" - intl: + image: dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" + intl: + dependency: "direct main" description: name: intl url: "https://pub.dartlang.org" source: hosted version: "0.17.0" + ionicons: + dependency: "direct main" + description: + name: ionicons + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" js: dependency: transitive description: @@ -317,6 +415,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" plugin_platform_interface: dependency: transitive description: @@ -324,6 +436,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" provider: dependency: "direct main" description: @@ -385,6 +504,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.4.9" + time_machine: + dependency: "direct main" + description: + name: time_machine + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.17" + timezone: + dependency: "direct main" + description: + name: timezone + url: "https://pub.dartlang.org" + source: hosted + version: "0.8.0" twitter_login: dependency: "direct main" description: @@ -406,6 +539,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0+1" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" sdks: - dart: ">=2.17.0-0 <3.0.0" + dart: ">=2.17.0 <3.0.0" flutter: ">=2.8.0" diff --git a/gro_sense/pubspec.yaml b/gro_sense/pubspec.yaml index 0889d83..9147149 100644 --- a/gro_sense/pubspec.yaml +++ b/gro_sense/pubspec.yaml @@ -21,12 +21,16 @@ environment: sdk: ">=2.12.0 <3.0.0" dependencies: - cloud_firestore: ^2.5.1 + cloud_firestore: ^3.1.18 firebase_auth: ^3.1.0 firebase_core: ^1.6.0 google_sign_in: ^5.0.3 + firebase_storage: ^10.2.18 flutter: sdk: flutter + intl: ^0.17.0 + flutter_local_notifications: ^9.7.0 + timezone: ^0.8.0 fluttertoast: ^8.0.8 provider: ^5.0.0 flutter_facebook_auth: ^3.5.1 @@ -36,10 +40,18 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 + ionicons: ^0.1.2 + time_machine: ^0.9.17 dev_dependencies: flutter_test: sdk: flutter + flutter_launcher_icons: "^0.9.2" + +flutter_icons: + android: true + image_path: "assets/app-logo@110x110.png" + @@ -59,7 +71,7 @@ flutter: # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg assets: - - assets/logo.png + - assets/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware.