Compare commits

...

1 Commits

Author SHA1 Message Date
4c0b86a80f new changes in notification screen 2025-02-21 15:43:43 +05:30
33 changed files with 420 additions and 419 deletions

View File

@ -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

View File

@ -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": [],

View File

@ -1,13 +1,13 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sc_cheminova">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="cheminova"
android:label="Sales Coordinator"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
android:icon="@mipmap/launcher_icon">
<activity
android:name=".MainActivity"
android:exported="true"

View File

@ -1,4 +1,4 @@
package com.example.cheminova
package com.example.sc_cheminova
import io.flutter.embedding.android.FlutterActivity

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -427,7 +427,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@ -484,7 +484,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";

View File

@ -1,122 +1 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -63,6 +63,6 @@ class DefaultFirebaseOptions {
messagingSenderId: '242950171023',
projectId: 'cheminova-1fcf0',
storageBucket: 'cheminova-1fcf0.appspot.com',
iosBundleId: 'com.example.cheminova',
iosBundleId: 'com.example.sc_cheminova',
);
}

View File

@ -23,21 +23,45 @@ class AddSalesProvider with ChangeNotifier {
notifyListeners();
}
// Future<void> 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<void> getTask() async {
setLoading(true);
try {
Response response = await _apiClient.get(ApiUrls.salesTaskUrl);
setLoading(false);
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 = data.products ?? [];
notifyListeners();
}
} catch (e) {
setLoading(false);
debugPrint("Error occurred while fetching sales tasks: $e");
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
}
}
}
void filterProducts(String val) {
tasksList = tasksList.where((element) {

View File

@ -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<void> getNotification() async {
// Future<void> 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<void> 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);
Response response = await _apiClient.get(url);
if (response.statusCode == 200) {
final data = NotificationListResponse.fromJson(response.data);
notificationList = data.notifications ?? [];
notifyListeners();
} else {
notificationList = [];
}
} catch (e) {
notificationList = [];
}
setLoading(false);
notifyListeners();
}
}
}

View File

@ -38,18 +38,49 @@ class ProductProvider extends ChangeNotifier {
}
// Fetch the list of products from the API
// Future<void> 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<void> getProducts() async {
Response response = await _apiClient.get(ApiUrls.getProducts);
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 = 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
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<void> submitProducts(

View File

@ -121,12 +121,12 @@ class _HomePageState extends State<HomePage> {
'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<HomePage> {
'',
buttonWidth,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ProductPurchaseData(),
),
);
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const ProductPurchaseData(),
// ),
// );
},
),
),

View File

@ -26,6 +26,21 @@ class NotificationScreenState extends State<NotificationScreen> {
super.initState();
}
Future<void> _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<NotificationScreen> {
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<NotificationProvider>(
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<NotificationProvider>(
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<NotificationScreen> {
}
}
// 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) {

View File

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
class CommonAppBar extends StatelessWidget implements PreferredSizeWidget {
final Widget title;
final List<Widget>? 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));
}

View File

@ -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: <Widget>[
// SizedBox(
// height: 150,
// child: DrawerHeader(
// decoration: const BoxDecoration(
// color: Colors.black87,
// ),
// child: Consumer<HomeProvider>(
// 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<HomeProvider>(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,19 +91,45 @@ 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<CommonDrawer> createState() => _CommonDrawerState();
}
class _CommonDrawerState extends State<CommonDrawer> {
String _appVersion = '';
@override
void initState() {
super.initState();
_getAppVersion();
}
Future<void> _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: <Widget>[
SizedBox(
height: 150,
width:double.infinity,
child: DrawerHeader(
decoration: const BoxDecoration(
color: Colors.black87,
@ -41,6 +153,8 @@ class CommonDrawer extends StatelessWidget {
color: Colors.white,
fontSize: 15))
])))),
// Drawer List Items
ListTile(
leading: const Icon(Icons.home),
title: const Text('Home'),
@ -73,9 +187,19 @@ class CommonDrawer extends StatelessWidget {
title: const Text('Logout'),
onTap: () {
Provider.of<HomeProvider>(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),
),
),
),
],
),
);

View File

@ -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"))
}

View File

@ -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"

View File

@ -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: