diff --git a/android/app/build.gradle b/android/app/build.gradle index 8350aec..a5adc9d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -29,7 +29,7 @@ if (flutterVersionName == null) { } android { - namespace = "com.example.cheminova" + namespace = "com.example.sc_cheminova" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion @@ -40,7 +40,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.cheminova" + applicationId = "com.example.sc_cheminova" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdk = flutter.minSdkVersion diff --git a/android/app/google-services.json b/android/app/google-services.json index 40ed628..0182894 100644 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -9,7 +9,7 @@ "client_info": { "mobilesdk_app_id": "1:242950171023:android:7fdc614b0429b52445c3fa", "android_client_info": { - "package_name": "com.example.cheminova" + "package_name": "com.example.sc_cheminova" } }, "oauth_client": [], diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 04c6c49..2c40c4d 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,13 +1,13 @@ - - + + android:icon="@mipmap/launcher_icon"> getTask() async { + // setLoading(true); + // try { + // Response response = await _apiClient.get(ApiUrls.salesTaskUrl); + // setLoading(false); + // if (response.statusCode == 200) { + // final data = SalesTaskResponse.fromJson(response.data); + // tasksList = data.products ?? []; + // notifyListeners(); + // } + // } catch (e) { + // setLoading(false); + // debugPrint("Error occurred while fetching sales tasks: $e"); + // } + // } + + + Future getTask() async { - setLoading(true); - try { - Response response = await _apiClient.get(ApiUrls.salesTaskUrl); - setLoading(false); - if (response.statusCode == 200) { - final data = SalesTaskResponse.fromJson(response.data); - tasksList = data.products ?? []; - notifyListeners(); + bool moreDataAvailable = true; + int page = 1; + + // Loop to fetch all pages + while (moreDataAvailable) { + Response response = await _apiClient.get( + '${ApiUrls.salesTaskUrl}?page=$page'); + if (response.statusCode == 200) { + // productResponse = ProductResponse.fromJson(response.data); + final data = SalesTaskResponse.fromJson(response.data); + tasksList.addAll(data.products ?? []); // Add new products to the list + moreDataAvailable = data.totalPages! > page; + page++; + notifyListeners(); // Notify listeners to update the UI with the new product list + } } - } catch (e) { - setLoading(false); - debugPrint("Error occurred while fetching sales tasks: $e"); } - } + + + void filterProducts(String val) { tasksList = tasksList.where((element) { diff --git a/lib/provider/notification_provider.dart b/lib/provider/notification_provider.dart index 6dbcdbf..b6c8db7 100644 --- a/lib/provider/notification_provider.dart +++ b/lib/provider/notification_provider.dart @@ -8,7 +8,7 @@ import '../services/api_urls.dart'; class NotificationProvider extends ChangeNotifier { NotificationProvider() { - getNotification(); + // getNotification(); } final _apiClient = ApiClient(); @@ -23,18 +23,41 @@ class NotificationProvider extends ChangeNotifier { notifyListeners(); } - Future getNotification() async { + // Future getNotification(String date) async { + // final String url = "${ApiUrls.notificationUrl}?Date=$date"; + // setLoading(true); + // try { + // Response response = await _apiClient.get(url); + // setLoading(false); + // if (response.statusCode == 200) { + // final data = NotificationListResponse.fromJson(response.data); + // notificationList = data.notifications ?? []; + // notifyListeners(); + // } + // } catch (e) { + // setLoading(false); + // } + // } + + + Future getNotification(String date) async { + if (date.isEmpty) return; // Invalid call ko prevent karein + final String url = "${ApiUrls.notificationUrl}?Date=$date"; + setLoading(true); try { - Response response = await _apiClient.get(ApiUrls.notificationUrl); - setLoading(false); - if (response.statusCode == 200) { - final data = NotificationListResponse.fromJson(response.data); - notificationList = data.notifications ?? []; - notifyListeners(); - } + Response response = await _apiClient.get(url); + if (response.statusCode == 200) { + final data = NotificationListResponse.fromJson(response.data); + notificationList = data.notifications ?? []; + } else { + notificationList = []; + } } catch (e) { - setLoading(false); + notificationList = []; } + setLoading(false); + notifyListeners(); } + } diff --git a/lib/provider/products_provider.dart b/lib/provider/products_provider.dart index 07422c7..d50117e 100644 --- a/lib/provider/products_provider.dart +++ b/lib/provider/products_provider.dart @@ -38,19 +38,50 @@ class ProductProvider extends ChangeNotifier { } // Fetch the list of products from the API + // Future getProducts() async { + // Response response = await _apiClient.get(ApiUrls.getProducts); + // debugPrint('Response: $response'); + // setLoading(false); + // if (response.statusCode == 200) { + // productResponse = ProductResponse.fromJson(response.data); + // productList = productResponse!.products! + // .map((product) => ProductModel(sku: product.sKU!, productName: product.name!,id: product.sId!)) + // .toList(); + // notifyListeners(); // Notify listeners to update the UI with the product list + // } + // } + + + Future getProducts() async { - Response response = await _apiClient.get(ApiUrls.getProducts); - debugPrint('Response: $response'); - setLoading(false); - if (response.statusCode == 200) { - productResponse = ProductResponse.fromJson(response.data); - productList = productResponse!.products! - .map((product) => ProductModel(sku: product.sKU!, productName: product.name!,id: product.sId!)) - .toList(); - notifyListeners(); // Notify listeners to update the UI with the product list + bool moreDataAvailable = true; + int page = 1; + + while (moreDataAvailable) { + Response response = await _apiClient.get('${ApiUrls.getProducts}?page=$page'); + debugPrint('Response: $response'); + setLoading(false); + + if (response.statusCode == 200) { + productResponse = ProductResponse.fromJson(response.data); + productList.addAll( + productResponse!.products!.map( + (product) => ProductModel( + sku: product.sKU!, + productName: product.name!, + id: product.sId!, + ), + ).toList(), + ); + + moreDataAvailable = productResponse!.totalPages! > page; + page++; + notifyListeners(); // Notify listeners to update the UI with the new product list + } } } + // Submit selected products to the API Future submitProducts( {required String distributorType, required String pdRdId, String? inventoryId}) async { diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 4e019c5..ce70bce 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -121,12 +121,12 @@ class _HomePageState extends State { 'Quickly display Sales', buttonWidth, onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SalesTaskScreen(), - ), - ); + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => SalesTaskScreen(), + // ), + // ); }, ), ), @@ -174,12 +174,12 @@ class _HomePageState extends State { '', buttonWidth, onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const ProductPurchaseData(), - ), - ); + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => const ProductPurchaseData(), + // ), + // ); }, ), ), diff --git a/lib/screens/notification_screen.dart b/lib/screens/notification_screen.dart index bdacede..7024727 100644 --- a/lib/screens/notification_screen.dart +++ b/lib/screens/notification_screen.dart @@ -26,6 +26,21 @@ class NotificationScreenState extends State { super.initState(); } + Future _selectDate(BuildContext context) async { + DateTime? selectedDate = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: DateTime(2020), // Adjust the start date as needed + lastDate: DateTime.now(), + ); + + if (selectedDate != null) { + // Format the date to dd/MM/yyyy + String formattedDate = DateFormat('dd/MM/yyyy').format(selectedDate); + // Call the API with the selected date + _notificationProvider.getNotification(formattedDate); + } + } @override Widget build(BuildContext context) { // Use ChangeNotifierProvider to supply NotificationProvider to the widget tree @@ -53,15 +68,45 @@ class NotificationScreenState extends State { fontFamily: 'Anek')), backgroundColor: Colors.transparent, elevation: 0, + bottom: PreferredSize( + preferredSize: Size.fromHeight(80), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: TextButton( + onPressed: () { + _selectDate(context); + }, + child: + Row( + children: [ + Text("Select Date: ",style: TextStyle(fontWeight: FontWeight.bold,fontSize: 18),), + IconButton( + icon: const Icon(Icons.calendar_today), + onPressed: () { + _selectDate(context); + }, + ), + ], + ), + ), + ), + ), ), drawer: const CommonDrawer(), // Consumer listens for changes in the NotificationProvider - body: Consumer( - builder: (context, value, child) => value.isLoading - // Display a loading indicator if notifications are still loading - ? const Center(child: CircularProgressIndicator()) - // Show the list of notifications once loaded - : MyListView(value: value), + body: + Consumer( + builder: (context, value, child) { + if (value.isLoading) { + return const Center(child: CircularProgressIndicator()); + } else if (value.notificationList.isEmpty) { + // Handle empty notification list + return const Center(child: Text("No notifications available")); + } else { + // Show the notification list once data is fetched + return MyListView(value: value); + } + }, ), ), ), @@ -69,6 +114,9 @@ class NotificationScreenState extends State { } } + + + // Function that builds a button for a product Widget buildProductButton(String productName) { return Padding( @@ -106,9 +154,14 @@ class MyListView extends StatelessWidget { } groupedNotifications[date]!.add(notification); } + if (groupedNotifications.isEmpty) { + return const Center(child: Text("No notifications available")); + } + // Build a ListView for grouped notifications - return ListView.builder( + return + ListView.builder( padding: const EdgeInsets.only(top: 15), itemCount: groupedNotifications.length, // Number of date groups itemBuilder: (context, index) { diff --git a/lib/widgets/common_app_bar.dart b/lib/widgets/common_app_bar.dart index f614528..a7c5b38 100644 --- a/lib/widgets/common_app_bar.dart +++ b/lib/widgets/common_app_bar.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; class CommonAppBar extends StatelessWidget implements PreferredSizeWidget { final Widget title; final List? actions; - final TabBar? bottom; + final PreferredSizeWidget? bottom; const CommonAppBar({super.key, required this.title, this.actions, required Color backgroundColor, required int elevation, this.bottom}); @@ -25,5 +25,5 @@ class CommonAppBar extends StatelessWidget implements PreferredSizeWidget { } @override - Size get preferredSize => const Size.fromHeight(kToolbarHeight); + Size get preferredSize => Size.fromHeight(kToolbarHeight + (bottom?.preferredSize.height ?? 0)); } diff --git a/lib/widgets/common_drawer.dart b/lib/widgets/common_drawer.dart index d1b0eb3..d8cac97 100644 --- a/lib/widgets/common_drawer.dart +++ b/lib/widgets/common_drawer.dart @@ -1,3 +1,89 @@ +// import 'package:cheminova/provider/home_provider.dart'; +// import 'package:cheminova/screens/change_password_screen.dart'; +// import 'package:cheminova/screens/home_screen.dart'; +// import 'package:cheminova/screens/login_screen.dart'; +// import 'package:cheminova/screens/profile_screen.dart'; +// import 'package:cheminova/services/secure__storage_service.dart'; +// import 'package:flutter/material.dart'; +// import 'package:provider/provider.dart'; +// +// class CommonDrawer extends StatelessWidget { +// const CommonDrawer({super.key}); +// +// @override +// Widget build(BuildContext context) { +// return Drawer( +// child: ListView( +// padding: EdgeInsets.zero, +// children: [ +// SizedBox( +// height: 150, +// child: DrawerHeader( +// decoration: const BoxDecoration( +// color: Colors.black87, +// ), +// child: Consumer( +// builder: (context, value, child) => +// (value.profileResponse == null || +// value.profileResponse!.myData == null || +// value.profileResponse!.myData!.name == null) +// ? const SizedBox() +// : Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// mainAxisAlignment: MainAxisAlignment.start, +// children: [ +// Text(value.profileResponse!.myData!.name!, +// style: const TextStyle( +// color: Colors.white, +// fontSize: 18)), +// Text(value.profileResponse!.myData!.uniqueId!, +// style: const TextStyle( +// color: Colors.white, +// fontSize: 15)) +// ])))), +// ListTile( +// leading: const Icon(Icons.home), +// title: const Text('Home'), +// onTap: () => Navigator.push(context, +// MaterialPageRoute(builder: (context) => const HomePage()))), +// ListTile( +// leading: const Icon(Icons.person), +// title: const Text('Profile'), +// onTap: () { +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) => const ProfileScreen(), +// )); +// }, +// ), +// ListTile( +// leading: const Icon(Icons.settings), +// title: const Text('Change Password'), +// onTap: () { +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) => const ChangePasswordPage(), +// )); +// }, +// ), +// ListTile( +// leading: const Icon(Icons.exit_to_app), +// title: const Text('Logout'), +// onTap: () { +// Provider.of(context,listen: false).logOut(context); +// +// }, +// ), +// ], +// ), +// ); +// } +// } + + + import 'package:cheminova/provider/home_provider.dart'; import 'package:cheminova/screens/change_password_screen.dart'; import 'package:cheminova/screens/home_screen.dart'; @@ -5,42 +91,70 @@ import 'package:cheminova/screens/login_screen.dart'; import 'package:cheminova/screens/profile_screen.dart'; import 'package:cheminova/services/secure__storage_service.dart'; import 'package:flutter/material.dart'; +import 'package:package_info_plus/package_info_plus.dart'; import 'package:provider/provider.dart'; -class CommonDrawer extends StatelessWidget { +class CommonDrawer extends StatefulWidget { const CommonDrawer({super.key}); + @override + State createState() => _CommonDrawerState(); +} + +class _CommonDrawerState extends State { + + + + String _appVersion = ''; + + @override + void initState() { + super.initState(); + _getAppVersion(); + } + + Future _getAppVersion() async { + PackageInfo packageInfo = await PackageInfo.fromPlatform( + + ); + setState(() { + _appVersion = packageInfo.version; // 1.0.0 + }); + } + @override Widget build(BuildContext context) { return Drawer( - child: ListView( - padding: EdgeInsets.zero, + child: Column( children: [ SizedBox( height: 150, + width:double.infinity, child: DrawerHeader( decoration: const BoxDecoration( color: Colors.black87, ), child: Consumer( builder: (context, value, child) => - (value.profileResponse == null || - value.profileResponse!.myData == null || - value.profileResponse!.myData!.name == null) - ? const SizedBox() - : Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text(value.profileResponse!.myData!.name!, - style: const TextStyle( - color: Colors.white, - fontSize: 18)), - Text(value.profileResponse!.myData!.uniqueId!, - style: const TextStyle( - color: Colors.white, - fontSize: 15)) - ])))), + (value.profileResponse == null || + value.profileResponse!.myData == null || + value.profileResponse!.myData!.name == null) + ? const SizedBox() + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text(value.profileResponse!.myData!.name!, + style: const TextStyle( + color: Colors.white, + fontSize: 18)), + Text(value.profileResponse!.myData!.uniqueId!, + style: const TextStyle( + color: Colors.white, + fontSize: 15)) + ])))), + + // Drawer List Items ListTile( leading: const Icon(Icons.home), title: const Text('Home'), @@ -72,10 +186,20 @@ class CommonDrawer extends StatelessWidget { leading: const Icon(Icons.exit_to_app), title: const Text('Logout'), onTap: () { - Provider.of(context,listen: false).logOut(context); - + Provider.of(context, listen: false).logOut(context); }, ), + const Spacer(), + // Version Text at the Bottom + Padding( + padding: const EdgeInsets.all(8.0), + child: Center( + child: Text( + 'Version: $_appVersion', + style: TextStyle(color: Colors.grey[600], fontSize: 12), + ), + ), + ), ], ), ); diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index d64d061..339b26c 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -12,6 +12,7 @@ import firebase_messaging import flutter_local_notifications import flutter_secure_storage_macos import geolocator_apple +import package_info_plus import path_provider_foundation import sqflite @@ -23,6 +24,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) + FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) } diff --git a/pubspec.lock b/pubspec.lock index b92dcef..7b47eac 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -25,6 +25,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.4.1" + archive: + dependency: transitive + description: + name: archive + sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" + url: "https://pub.dev" + source: hosted + version: "4.0.2" args: dependency: transitive description: @@ -49,70 +57,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" - url: "https://pub.dev" - source: hosted - version: "2.4.11" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe - url: "https://pub.dev" - source: hosted - version: "7.3.1" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" characters: dependency: transitive description: @@ -129,6 +73,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: @@ -137,14 +89,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" collection: dependency: transitive description: @@ -406,22 +350,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.6.0" - flutter_gen_runner: + flutter_launcher_icons: dependency: "direct dev" description: - name: flutter_gen_runner - sha256: "931b03f77c164df0a4815aac0efc619a6ac8ec4cada55025119fca4894dada90" + name: flutter_launcher_icons + sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c url: "https://pub.dev" source: hosted - version: "5.6.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" + version: "0.14.3" flutter_local_notifications: dependency: "direct main" description: @@ -528,14 +464,6 @@ packages: description: flutter source: sdk version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" geocoding: dependency: "direct main" description: @@ -624,14 +552,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - graphs: - dependency: transitive - description: - name: graphs - sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" - source: hosted - version: "2.3.2" hashcodes: dependency: transitive description: @@ -648,14 +568,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.2" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" http_parser: dependency: transitive description: @@ -664,6 +576,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6" + url: "https://pub.dev" + source: hosted + version: "4.5.2" image_picker: dependency: "direct main" description: @@ -744,14 +664,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.17.0" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" js: dependency: transitive description: @@ -772,18 +684,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.5" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: @@ -792,22 +704,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" matcher: dependency: transitive description: @@ -820,18 +716,18 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.12.0" mime: dependency: transitive description: @@ -856,6 +752,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + package_info_plus: + dependency: "direct main" + description: + name: package_info_plus + sha256: "739e0a5c3c4055152520fa321d0645ee98e932718b4c8efeeb51451968fe0790" + url: "https://pub.dev" + source: hosted + version: "8.1.3" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b + url: "https://pub.dev" + source: hosted + version: "3.0.2" path: dependency: transitive description: @@ -1000,14 +912,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pool: + posix: dependency: transitive description: - name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a url: "https://pub.dev" source: hosted - version: "1.5.1" + version: "6.0.1" pretty_dio_logger: dependency: "direct main" description: @@ -1032,14 +944,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" rxdart: dependency: transitive description: @@ -1048,22 +952,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.28.0" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" - url: "https://pub.dev" - source: hosted - version: "2.0.0" simple_gesture_detector: dependency: transitive description: @@ -1105,10 +993,10 @@ packages: dependency: transitive description: name: sqflite_common - sha256: "7b41b6c3507854a159e24ae90a8e3e9cc01eb26a477c118d6dca065b5f55453e" + sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" url: "https://pub.dev" source: hosted - version: "2.5.4+2" + version: "2.5.4" stack_trace: dependency: transitive description: @@ -1125,14 +1013,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" string_scanner: dependency: transitive description: @@ -1145,10 +1025,10 @@ packages: dependency: transitive description: name: synchronized - sha256: a824e842b8a054f91a728b783c177c1e4731f6b124f9192468457a8913371255 + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.1.0+1" table_calendar: dependency: "direct main" description: @@ -1169,10 +1049,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.0" time: dependency: transitive description: @@ -1189,14 +1069,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.4" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" typed_data: dependency: transitive description: @@ -1257,10 +1129,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "14.2.4" + version: "14.2.1" watcher: dependency: transitive description: @@ -1277,30 +1149,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" - url: "https://pub.dev" - source: hosted - version: "0.1.6" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" - url: "https://pub.dev" - source: hosted - version: "3.0.1" win32: dependency: transitive description: name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.5.4" xdg_directories: dependency: transitive description: @@ -1326,5 +1182,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.5.0 <4.0.0" + dart: ">=3.4.3 <4.0.0" flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index 592efa5..bc388db 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+1 +version: 2.0.1+1 environment: sdk: '>=3.4.3 <4.0.0' @@ -50,10 +50,19 @@ dependencies: flutter_local_notifications: ^17.2.1+2 firebase_crashlytics: ^4.0.4 flutter_cached_pdfview: ^0.4.2 + package_info_plus: ^8.1.3 + dev_dependencies: flutter_test: sdk: flutter + flutter_launcher_icons: ^0.14.3 + + +flutter_launcher_icons: + android: "launcher_icon" + ios: true + image_path: "assets/app-icon-sales-coordinator.png" flutter_lints: ^3.0.0 build_runner: