policy validation bug fix

This commit is contained in:
Surendiran 2026-01-23 11:10:19 +05:30
parent e59d163a2e
commit 97759378de
21 changed files with 1585 additions and 1083 deletions

File diff suppressed because one or more lines are too long

View File

@ -5,8 +5,8 @@ class Env {
);
static const String apiUrl = String.fromEnvironment(
'API_URL',
// defaultValue: 'https://partner.nhanceindia.in/partner_api/api/', /* Live build (enable index.html line 18) */
defaultValue: 'https://venbait.in/nhance/partner/dev/api/', /* Test build (enable index.html line 19) */
defaultValue: 'https://partner.nhanceindia.in/partner_api/api/', /* Live build (enable index.html line 18) */
// defaultValue: 'https://venbait.in/nhance/partner/dev/api/', /* Test build (enable index.html line 19) */
// defaultValue: 'http://localhost/nhance_partner_be/', /* localhost build (enable index.html line 19) */
);
// static const String baseUrl = String.fromEnvironment(

View File

@ -737,6 +737,26 @@ class ApiService {
return response;
}
// ----------------------------------- Staff Level Count -------------------------------------------------
Future<Map<String, dynamic>> fetchStaffLevelCount(id, userId) async {
// print(_token);
if (_token == null) {
await _initializeToken();
}
final url;
url = Uri.parse('${Env.apiUrl}dashboard/managerDashboard?manager_id=$id&staff_id=$userId');
final headers = {
'Authorization': 'Bearer $_token' ?? '',
'app-signature': Env.App_Signature,
};
final response = await _makeGetRequest(url, headers);
return response;
}
// ----------------------------------- Dashboard -------------------------------------------------
Future<Map<String, dynamic>> fetchDashboard(int id, role, userId) async {
// print(_token);
@ -1372,6 +1392,7 @@ class ApiService {
String? fromDate,
String? toDate,
String? selectedStaffId,
String ? selectedStatus
}) async {
print(
"fetchPolicyDataOnlyListAPI - mangerID- $managerId - id - $id - role -$role ",
@ -1387,9 +1408,10 @@ class ApiService {
if (role == 'manager') {
query = 'manager_id=$managerId';
} else if (role == 'Accounts') {
query = 'manager_id=$managerId';
} else if (role == 'Accounts') {
query = 'manager_id=$managerId';
// query = 'manager_id=$managerId';
query = selectedStatus != null
? 'manager_id=$managerId&show_policy_report=${Uri.encodeComponent(selectedStatus)}'
: 'manager_id=$managerId';
} else if (role == 'staff') {
query = 'staff_id=$id';
} else if (role == 'handler') {
@ -1573,7 +1595,7 @@ class ApiService {
// --------------------------------- MASTER DATA DROPDOWN----------------------------------------------
Future<Map<String, dynamic>> fetchMasterDropDown(String val) async {
Future<Map<String, dynamic>> fetchMasterDropDown(String val ,[String? type]) async {
// print(_token);
if (_token == null) {
await _initializeToken();
@ -1586,7 +1608,16 @@ class ApiService {
if (val == 'staffRole') {
url = Uri.parse('${Env.apiUrl}master/getRoleMaster');
} else if (val == 'vehicleType') {
url = Uri.parse('${Env.apiUrl}master/getVehicleTypeMaster');
// url = Uri.parse('${Env.apiUrl}master/getVehicleTypeMaster');
if(type == 'dropdown'){
url = Uri.parse('${Env.apiUrl}master/getVehicleTypeMaster?value_for=dropdown');
}else{
url = Uri.parse('${Env.apiUrl}master/getVehicleTypeMaster');
}
// url = Uri.parse('${Env.apiUrl}master/getVehicleTypeMaster')
// .replace(queryParameters: {
// if (type != null) 'value_for': type,
//});
} else if (val == 'InsuranceType') {
url = Uri.parse('${Env.apiUrl}master/getInsurancePlanTypeMaster');
} else if (val == 'Insurers') {
@ -2083,9 +2114,9 @@ class ApiService {
}
}
Future<void> generatePolicyExcel(managerId, fromDate, toDate, searchValue) async {
Future<void> generatePolicyExcel(managerId, fromDate, toDate, searchValue,flag) async {
final url = Uri.parse(
'${Env.apiUrl}reports/policy-excel?manager_id=$managerId&from_date=${fromDate ?? ''}&to_date=${toDate ?? ''}&search=${searchValue ?? ''}',
'${Env.apiUrl}reports/policy-excel?manager_id=$managerId&from_date=${fromDate ?? ''}&to_date=${toDate ?? ''}&search=${searchValue ?? ''}&show_policy_report=${flag ?? ''}',
);
print('getPdfDownload policy-excel - $url');
await _initializeToken();

View File

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
@ -32,6 +34,17 @@ class _AppHeaderState extends ConsumerState<AppHeader> {
OverlayEntry? _overlayEntry;
String? _activeMenu;
Timer? _queueTimer;
int totalAssigned = 0;
int totalPending = 0;
int todayAssigned = 0;
int todayPending = 0;
int todayInProgress = 0;
int todayCompleted = 0;
int queueCount = 0; // badge count
@override
void initState() {
super.initState();
@ -42,6 +55,7 @@ class _AppHeaderState extends ConsumerState<AppHeader> {
@override
void dispose() {
_queueTimer?.cancel();
_hidePopup();
super.dispose();
}
@ -91,8 +105,71 @@ class _AppHeaderState extends ConsumerState<AppHeader> {
role = prefs.getString('userRole') ?? "Guest";
});
print('AppHeader Role - $role');
// Initial fetch + auto refresh
WidgetsBinding.instance.addPostFrameCallback((_) {
print('111');
if (role == 'staff') {
print('staff 111');
getStaffLevelCount(profileData?['manager_id'], profileData?['id']);
_queueTimer = Timer.periodic(
const Duration(seconds: 30),
(_) => getStaffLevelCount(
profileData?['manager_id'],
profileData?['id'],
),
);
}
});
}
Future<void> getStaffLevelCount(managerId, userId) async {
print('staff 222');
print('$managerId ,$userId');
print('staff 333');
try {
final response = await apiService.fetchStaffLevelCount(managerId, userId);
if (response['status'] == 'success') {
final List summary =
response['data']['staff_level_pending_summary'] ?? [];
int _totalAssigned = 0;
int _totalPending = 0;
int _todayAssigned = 0;
int _todayPending = 0;
int _todayInProgress = 0;
int _todayCompleted = 0;
for (final item in summary) {
_totalAssigned += int.parse(item['total_assigned'] ?? '0');
_totalPending += int.parse(item['total_pending'] ?? '0');
_todayAssigned += int.parse(item['today_assigned'] ?? '0');
_todayPending += int.parse(item['today_pending'] ?? '0');
_todayInProgress += int.parse(item['today_in_progress'] ?? '0');
_todayCompleted += int.parse(item['today_completed'] ?? '0');
}
if (!mounted) return;
setState(() {
totalAssigned = _totalAssigned;
totalPending = _totalPending;
todayAssigned = _todayAssigned;
todayPending = _todayPending;
todayInProgress = _todayInProgress;
todayCompleted = _todayCompleted;
queueCount = totalPending + todayPending + todayInProgress;
});
}
} catch (e) {
debugPrint('Queue API Exception: $e');
}
}
// Clear dashboard filters
Future<void> _clearDashboardFilters() async {
final prefs = await SharedPreferences.getInstance();
@ -408,6 +485,12 @@ class _AppHeaderState extends ConsumerState<AppHeader> {
),
const SizedBox(width: 16),
],
if (role == 'staff') ...[
_buildQueueIcon(),
const SizedBox(width: 12),
],
// if (role != 'Accounts') ...[
if (!['Accounts', 'agent'].contains(role)) ...[
// Proposal button
@ -564,6 +647,123 @@ class _AppHeaderState extends ConsumerState<AppHeader> {
);
}
Widget _buildQueueIcon() {
return Builder(
builder: (iconContext) {
return MouseRegion(
onEnter: (_) {
final box = iconContext.findRenderObject() as RenderBox;
_showQueuePopup(
context,
box.localToGlobal(Offset.zero),
box.size,
);
},
onExit: (_) => _hidePopup(),
child: Stack(
clipBehavior: Clip.none,
children: [
Container(
width: 36,
height: 36,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
border: Border.all(color: Colors.grey.shade200),
),
child: const Icon(Icons.priority_high, size: 20),
),
// 🔴 Badge
// if (queueCount > 0)
Positioned(
right: -6,
top: -6,
child: Container(
padding: const EdgeInsets.all(4),
decoration: const BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
constraints:
const BoxConstraints(minWidth: 18, minHeight: 18),
child: Text(
queueCount.toString(),
textAlign: TextAlign.center,
style: const TextStyle(
color: Colors.white,
fontSize: 10,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
);
},
);
}
void _showQueuePopup(BuildContext context, Offset offset, Size size) {
_hidePopup();
_overlayEntry = OverlayEntry(
builder: (_) => Positioned(
left: offset.dx,
top: offset.dy + size.height + 4,
child: MouseRegion(
onExit: (_) => _hidePopup(),
child: Material(
elevation: 10,
borderRadius: BorderRadius.circular(8),
child: Container(
width: 180,
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_queueRow('Total Assigned', totalAssigned),
_queueRow('Total Pending', totalPending),
const Divider(),
_queueRow('Today Assigned', todayAssigned),
_queueRow('Today Pending', todayPending),
_queueRow('Today In Progress', todayInProgress),
_queueRow('Today Completed', todayCompleted),
],
),
),
),
),
),
);
Overlay.of(context, rootOverlay: true).insert(_overlayEntry!);
}
Widget _queueRow(String label, int value) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 4),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(label,
style:
GoogleFonts.inter(fontSize: 12, color: Colors.grey.shade700)),
Text(value.toString(),
style: GoogleFonts.inter(
fontSize: 12, fontWeight: FontWeight.w600)),
],
),
);
}
// Simple menu item widget
Widget _buildMenuItem({
required IconData icon,

View File

@ -178,7 +178,7 @@ class EnquiryTabState extends ConsumerState<EnquiryTab> {
});
try {
final response = await apiService.fetchMasterDropDown('vehicleType');
final response = await apiService.fetchMasterDropDown('vehicleType','dropdown');
if (response['status'] == 200) {
print('getVehicleTypeData - ${response['data']}');

View File

@ -842,7 +842,7 @@ class AgentState extends ConsumerState<Agent> {
contentPadding: EdgeInsets.all(3),
filled: true,
fillColor: Colors.white,
hintText: "Search Executive...",
hintText: "Select Executive...",
hintStyle: GoogleFonts.inter(
fontSize: 12,
color: Colors.black,

View File

@ -713,7 +713,7 @@ class StaffState extends ConsumerState<Staff> {
contentPadding: EdgeInsets.all(3),
filled: true,
fillColor: Colors.white,
hintText: "Search Role...",
hintText: "Select Role...",
hintStyle: GoogleFonts.inter(
fontSize: 12,
color: Colors.black,

View File

@ -1082,7 +1082,7 @@ class EnquiryHandlerState extends ConsumerState<EnquiryListHandler> {
});
try {
final response = await apiService.fetchMasterDropDown('vehicleType');
final response = await apiService.fetchMasterDropDown('vehicleType','dropdown');
if (response['status'] == 200) {
print('getVehicleTypeData - ${response['data']}');

View File

@ -1322,7 +1322,7 @@ class EnquiryStaffState extends ConsumerState<EnquiryListStaffInline> {
});
try {
final response = await apiService.fetchMasterDropDown('vehicleType');
final response = await apiService.fetchMasterDropDown('vehicleType','dropdown');
if (response['status'] == 200) {
print('getVehicleTypeData - ${response['data']}');

View File

@ -646,13 +646,13 @@ class EnquiryStaffState extends ConsumerState<EnquiryListStaffInline> {
});
try {
final response = await apiService.fetchMasterDropDown('vehicleType');
final response = await apiService.fetchMasterDropDown('vehicleType','dropdown');
if (response['status'] == 200) {
// print('EIL 2getVT-Data - ${response['data']}');
print('EIL 2getVT-Data - ${response['data']}');
setState(() {
// getVehicleTypeData = List<Map<String, dynamic>>.from(response['data']);
getVehicleTypeData = List<Map<String, dynamic>>.from(response['data']).where((item) => item['is_active']?.toString() == '1').toList();
getVehicleTypeData = List<Map<String, dynamic>>.from(response['data']);
// getVehicleTypeData = List<Map<String, dynamic>>.from(response['data']).where((item) => item['is_active']?.toString() == '1').toList();
// print('EIL 3getVT-B4filterData : $getVehicleTypeData');
filteredVehicleData = List.from(getVehicleTypeData);

View File

@ -1557,7 +1557,7 @@ class EnquiryStaffState extends ConsumerState<EnquiryListStaffInline> {
});
try {
final response = await apiService.fetchMasterDropDown('vehicleType');
final response = await apiService.fetchMasterDropDown('vehicleType','dropdown');
if (response['status'] == 200) {
print('getVehicleTypeData - ${response['data']}');

View File

@ -1132,7 +1132,7 @@ class EnquiryStaffState extends ConsumerState<EnquiryListStaffInline> {
});
try {
final response = await apiService.fetchMasterDropDown('vehicleType');
final response = await apiService.fetchMasterDropDown('vehicleType','dropdown');
if (response['status'] == 200) {
print('getVehicleTypeData - ${response['data']}');

View File

@ -226,7 +226,7 @@ class RaiseEnqFormState extends ConsumerState<RaiseEnqForm> {
});
try {
final response = await apiService.fetchMasterDropDown('vehicleType');
final response = await apiService.fetchMasterDropDown('vehicleType','dropdown');
if (response['status'] == 200) {
print('getVehicleTypeData - ${response['data']}');

View File

@ -54,7 +54,7 @@ class policylistState extends ConsumerState<policylist> {
@override
void initState() {
super.initState();
SelectedStatus = 'All';
apiService = ApiService();
for (String field in tabHeader) {
@ -68,7 +68,7 @@ class policylistState extends ConsumerState<policylist> {
print("D49 => r : $roleId | mId: $managerId | uId: $userId ");
if (userId != null) {
getStaffList(managerId!, userId, roleId);
getStaffList(managerId!, userId, roleId , selectedStatus : SelectedStatus ?? 'All');
}
refreshSub = ref.listenManual<bool>(policyDataAcurancyRefreshProvider, (
@ -79,7 +79,7 @@ class policylistState extends ConsumerState<policylist> {
print('refresh triggered Quick Creation');
// callRefresh();
getStaffList(managerId!, userId, roleId);
getStaffList(managerId!, userId, roleId,selectedStatus : SelectedStatus ?? 'All');
ref.read(policyDataAcurancyRefreshProvider.notifier).state = false;
}
});
@ -93,7 +93,7 @@ class policylistState extends ConsumerState<policylist> {
// print("D61 => r : $roleId | mId: $id | uId: $userId");
if (userId != null) {
getStaffList(managerId, userId, roleId);
getStaffList(managerId, userId, roleId,selectedStatus : SelectedStatus ?? 'All');
}
}
@ -103,6 +103,7 @@ class policylistState extends ConsumerState<policylist> {
role, {
String fromDate = '',
String toDate = '',
String selectedStatus = 'All',
}) async {
print('D68 => Fns called => $managerId | $role');
setState(() {
@ -137,6 +138,7 @@ class policylistState extends ConsumerState<policylist> {
fromDate: fromDt,
toDate: toDt,
selectedStaffId: SelectedStaffId ?? '',
selectedStatus:selectedStatus
);
if (response['status'] == 'success') {
@ -226,7 +228,7 @@ class policylistState extends ConsumerState<policylist> {
print('filterDateRange 1s');
print('manager - $managerId - userID -$userId - roledId -$roleId');
getStaffList(managerId!, userId, roleId);
getStaffList(managerId!, userId, roleId, selectedStatus : SelectedStatus ?? 'All');
}
print('filterDateRange 1');
}
@ -236,13 +238,13 @@ class policylistState extends ConsumerState<policylist> {
SelectedStaffId = null;
controllers['startDate']!.clear();
controllers['endDate']!.clear();
SelectedStatus ='All';
controllers['startDate']?.text = '';
controllers['endDate']?.text = '';
// Reset the FormField validation
_formKey.currentState?.reset();
});
getStaffList(managerId, userId, roleId);
getStaffList(managerId, userId, roleId, selectedStatus : SelectedStatus ?? 'All');
}
void filterData(String query) {
@ -304,6 +306,7 @@ class policylistState extends ConsumerState<policylist> {
fromDate,
toDate,
searchValue,
SelectedStatus ?? 'All'
);
// Map your controllers and IDs to the API parameters
// final String fromDate = controllers['startDate']!.text; // "11-01-2025"
@ -429,8 +432,11 @@ class policylistState extends ConsumerState<policylist> {
selectedStaffId: SelectedStaffId,
startController: controllers['startDate']!,
endController: controllers['endDate']!,
selectedStatusVal: SelectedStatus,
onStatusChanged: (val) {
SelectedStatus = val; // update parent
setState(() {
SelectedStatus = val; // update parent
});
},
formKey: _formKey,
isMobile: ResponsiveLayout.isMobile(context),
@ -465,8 +471,11 @@ class policylistState extends ConsumerState<policylist> {
selectedStaffId: SelectedStaffId,
startController: controllers['startDate']!,
endController: controllers['endDate']!,
selectedStatusVal: SelectedStatus,
onStatusChanged: (val) {
SelectedStatus = val; // update parent
setState(() {
SelectedStatus = val; // update parent
});
},
formKey: _formKey,
isMobile: ResponsiveLayout.isMobile(context),

File diff suppressed because it is too large Load Diff

View File

@ -187,6 +187,11 @@ class _DateFilterRowState extends ConsumerState<DateFilterRow> {
buildSelectStaffMem(context),
SizedBox(width: spacing),
],
if (widget.role == 'Accounts' && widget.dataFrom == 'Policy') ...[
buildPolicyReportFlagSearch(context),
SizedBox(width: spacing),
],
];
final buttons = [
@ -480,6 +485,142 @@ class _DateFilterRowState extends ConsumerState<DateFilterRow> {
);
}
Widget buildPolicyReportFlagSearch(BuildContext context) {
final List<Map<String, dynamic>> policyReportStatusOptions;
policyReportStatusOptions = [
{'id': 'All', 'status': 'All'},
{'id': 'Verified', 'status': 'Verified'},
{'id': 'Not Verified', 'status': 'Not Verified'},
];
Map<String, dynamic>? selectedPolicyReportStatusMap = policyReportStatusOptions
.where((element) => element['status'] == widget.selectedStatusVal)
.cast<Map<String, dynamic>>()
.toList()
.firstOrNull;
Map<String, dynamic>? selectedItem = policyReportStatusOptions
.cast<Map<String, dynamic>>()
.firstWhere(
(e) => e['status'] == widget.selectedStatusVal,
orElse: () => {}, // return empty map
);
if (selectedItem.isEmpty) selectedItem = null;
// Map<String, dynamic>? selectedStatus; // Default: no selection
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Text('Status', style: _textStyle),
// SizedBox(height: 5),
SizedBox(
height: 35,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5.0),
border: Border.all(color: Color(0xFFE2E8F0)),
// color: Colors.black,
),
width: ResponsiveLayout.isMobile(context)
? null
: MediaQuery.of(context).size.width * 0.14,
child: DropdownSearch<Map<String, dynamic>>(
// selectedItem: selectedStatus,
selectedItem: selectedPolicyReportStatusMap,
// selectedItem: policyReportStatusOptions.firstWhere(
// (element) => element['status'] == selectedStatusVal,
// orElse: () => null, // return null if not found
// ),
items: (filter, infiniteScrollProps) => policyReportStatusOptions,
itemAsString: (val) => val['status'].toString(),
compareFn: (item, selectedItem) =>
item['status'] == selectedItem['status'],
dropdownBuilder: (context, selectedItem) => Align(
alignment: Alignment.centerLeft,
child: Text(
selectedItem != null ? selectedItem['status'].toString() : "",
style: GoogleFonts.poppins(fontSize: 11, color: Colors.black),
overflow: TextOverflow.ellipsis,
maxLines: 1,
softWrap: false,
),
),
// validator: (val) {
// if (val == null) {
// return "Please select a status";
// }
// return null;
// },
decoratorProps: DropDownDecoratorProps(
decoration:
AppInputDecorations.dropdownDecoration(
label: "Select Policy Status",
).copyWith(
filled: true,
fillColor: Colors.white,
isDense: true, // 👈 reduces built-in vertical padding
contentPadding: const EdgeInsets.symmetric(
horizontal: 6,
vertical: 1, // 👈 adjust this to make the field shorter
),
),
),
// popupProps: PopupProps.menu(
// fit: FlexFit.loose,
// constraints: BoxConstraints(maxHeight: 200),
// menuProps: MenuProps(backgroundColor: Colors.white),
// showSearchBox: false, // 👈 no search box since it's static
//
// ),
popupProps: PopupProps.menu(
fit: FlexFit.loose,
constraints: const BoxConstraints(maxHeight: 200),
menuProps: const MenuProps(backgroundColor: Colors.white),
showSearchBox: false,
itemBuilder: (context, item, isDisabled, isSelected) {
// 4 parameters
return Container(
// color: isSelected ? Colors.blue.withOpacity(0.1) : null,
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
child: Text(
item['status'].toString(),
style: GoogleFonts.inter(
fontSize: 13,
color: Colors.black,
),
),
);
},
),
onChanged: (val) {
if (val != null) {
print("Selected Status: ${val['status']}");
if (widget.onStatusChanged != null)
widget.onStatusChanged!(val['status']);
Future.microtask(() => widget.onFilter());
}
},
),
),
),
],
);
}
Widget buildSelectStaffMem(BuildContext context) {
// Map<String, dynamic>? selectedVehicle = filteredStaffData.firstWhere(
// (item) => item['id'].toString() == selectedStaff,

View File

@ -1,4 +1,4 @@
platform :osx, '10.14'
platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@ -1,42 +1,261 @@
PODS:
- AppAuth (2.0.0):
- AppAuth/Core (= 2.0.0)
- AppAuth/ExternalUserAgent (= 2.0.0)
- AppAuth/Core (2.0.0)
- AppAuth/ExternalUserAgent (2.0.0):
- AppAuth/Core
- AppCheckCore (11.2.0):
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- connectivity_plus (0.0.1):
- FlutterMacOS
- device_info_plus (0.0.1):
- FlutterMacOS
- file_picker (0.0.1):
- FlutterMacOS
- Firebase/Auth (12.4.0):
- Firebase/CoreOnly
- FirebaseAuth (~> 12.4.0)
- Firebase/CoreOnly (12.4.0):
- FirebaseCore (~> 12.4.0)
- Firebase/Messaging (12.4.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 12.4.0)
- firebase_auth (6.1.2):
- Firebase/Auth (~> 12.4.0)
- Firebase/CoreOnly (~> 12.4.0)
- firebase_core
- FlutterMacOS
- firebase_core (4.2.1):
- Firebase/CoreOnly (~> 12.4.0)
- FlutterMacOS
- firebase_messaging (16.0.4):
- Firebase/CoreOnly (~> 12.4.0)
- Firebase/Messaging (~> 12.4.0)
- firebase_core
- FlutterMacOS
- FirebaseAppCheckInterop (12.4.0)
- FirebaseAuth (12.4.0):
- FirebaseAppCheckInterop (~> 12.4.0)
- FirebaseAuthInterop (~> 12.4.0)
- FirebaseCore (~> 12.4.0)
- FirebaseCoreExtension (~> 12.4.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GTMSessionFetcher/Core (< 6.0, >= 3.4)
- RecaptchaInterop (~> 101.0)
- FirebaseAuthInterop (12.4.0)
- FirebaseCore (12.4.0):
- FirebaseCoreInternal (~> 12.4.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 8.1)
- FirebaseCoreExtension (12.4.0):
- FirebaseCore (~> 12.4.0)
- FirebaseCoreInternal (12.4.0):
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseInstallations (12.4.0):
- FirebaseCore (~> 12.4.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (12.4.0):
- FirebaseCore (~> 12.4.0)
- FirebaseInstallations (~> 12.4.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Reachability (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- flutter_secure_storage_macos (6.1.3):
- FlutterMacOS
- FlutterMacOS (1.0.0)
- google_sign_in_ios (0.0.1):
- Flutter
- FlutterMacOS
- GoogleSignIn (~> 9.0)
- GTMSessionFetcher (>= 3.4.0)
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- GoogleSignIn (9.0.0):
- AppAuth (~> 2.0)
- AppCheckCore (~> 11.0)
- GTMAppAuth (~> 5.0)
- GTMSessionFetcher/Core (~> 3.3)
- GoogleUtilities/AppDelegateSwizzler (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Privacy
- GoogleUtilities/Environment (8.1.0):
- GoogleUtilities/Privacy
- GoogleUtilities/Logger (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Privacy
- GoogleUtilities/Network (8.1.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Privacy
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (8.1.0)":
- GoogleUtilities/Privacy
- GoogleUtilities/Privacy (8.1.0)
- GoogleUtilities/Reachability (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GoogleUtilities/UserDefaults (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GTMAppAuth (5.0.0):
- AppAuth/Core (~> 2.0)
- GTMSessionFetcher/Core (< 4.0, >= 3.3)
- GTMSessionFetcher (3.5.0):
- GTMSessionFetcher/Full (= 3.5.0)
- GTMSessionFetcher/Core (3.5.0)
- GTMSessionFetcher/Full (3.5.0):
- GTMSessionFetcher/Core
- local_auth_darwin (0.0.1):
- Flutter
- FlutterMacOS
- nanopb (3.30910.0):
- nanopb/decode (= 3.30910.0)
- nanopb/encode (= 3.30910.0)
- nanopb/decode (3.30910.0)
- nanopb/encode (3.30910.0)
- open_file_mac (0.0.1):
- FlutterMacOS
- package_info_plus (0.0.1):
- FlutterMacOS
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- pdf_render (0.0.1):
- FlutterMacOS
- PromisesObjC (2.4.0)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- syncfusion_pdfviewer_macos (0.0.1):
- FlutterMacOS
- url_launcher_macos (0.0.1):
- FlutterMacOS
DEPENDENCIES:
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`)
- firebase_auth (from `Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos`)
- firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`)
- firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`)
- flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- google_sign_in_ios (from `Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin`)
- local_auth_darwin (from `Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin`)
- open_file_mac (from `Flutter/ephemeral/.symlinks/plugins/open_file_mac/macos`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- pdf_render (from `Flutter/ephemeral/.symlinks/plugins/pdf_render/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- syncfusion_pdfviewer_macos (from `Flutter/ephemeral/.symlinks/plugins/syncfusion_pdfviewer_macos/macos`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
SPEC REPOS:
trunk:
- AppAuth
- AppCheckCore
- Firebase
- FirebaseAppCheckInterop
- FirebaseAuth
- FirebaseAuthInterop
- FirebaseCore
- FirebaseCoreExtension
- FirebaseCoreInternal
- FirebaseInstallations
- FirebaseMessaging
- GoogleDataTransport
- GoogleSignIn
- GoogleUtilities
- GTMAppAuth
- GTMSessionFetcher
- nanopb
- PromisesObjC
EXTERNAL SOURCES:
connectivity_plus:
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos
device_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
file_picker:
:path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos
firebase_auth:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos
firebase_core:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos
firebase_messaging:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos
flutter_secure_storage_macos:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos
FlutterMacOS:
:path: Flutter/ephemeral
google_sign_in_ios:
:path: Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin
local_auth_darwin:
:path: Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin
open_file_mac:
:path: Flutter/ephemeral/.symlinks/plugins/open_file_mac/macos
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
pdf_render:
:path: Flutter/ephemeral/.symlinks/plugins/pdf_render/macos
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
syncfusion_pdfviewer_macos:
:path: Flutter/ephemeral/.symlinks/plugins/syncfusion_pdfviewer_macos/macos
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
SPEC CHECKSUMS:
AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
connectivity_plus: 4adf20a405e25b42b9c9f87feff8f4b6fde18a4e
device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
Firebase: f07b15ae5a6ec0f93713e30b923d9970d144af3e
firebase_auth: 87ea88759d0282ccf1e2afe96f88ff3c07547938
firebase_core: e054894ab56033ef9bcbe2d9eac9395e5306e2fc
firebase_messaging: 373ac3a56e5aa37bb9aff4127f700aa5973c1168
FirebaseAppCheckInterop: f734c802f21fe1da0837708f0f9a27218c8a4ed0
FirebaseAuth: 4a2aed737c84114a9d9b33d11ae1b147d6b94889
FirebaseAuthInterop: 858e6b754966e70740a4370dd1503dfffe6dbb49
FirebaseCore: bb595f3114953664e3c1dc032f008a244147cfd3
FirebaseCoreExtension: 7e1f7118ee970e001a8013719fb90950ee5e0018
FirebaseCoreInternal: d7f5a043c2cd01a08103ab586587c1468047bca6
FirebaseInstallations: ae9f4902cb5bf1d0c5eaa31ec1f4e5495a0714e2
FirebaseMessaging: d33971b7bb252745ea6cd31ab190d1a1df4b8ed5
flutter_secure_storage_macos: 7f45e30f838cf2659862a4e4e3ee1c347c2b3b54
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
google_sign_in_ios: 205742c688aea0e64db9da03c33121694a365109
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleSignIn: c7f09cfbc85a1abf69187be091997c317cc33b77
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
open_file_mac: 01874b6d6a2c1485ac9b126d7105b99102dea2cf
package_info_plus: f0052d280d17aa382b932f399edf32507174e870
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
pdf_render: 97e703cf7cd7122ab240825e8c99dc0616c5123c
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
syncfusion_pdfviewer_macos: b3b110c68039178ca4105dd03ef38761eca3b36b
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
PODFILE CHECKSUM: 7eb978b976557c8c1cd717d8185ec483fd090a82
PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009
COCOAPODS: 1.16.2

View File

@ -241,6 +241,7 @@
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
67721E8F298A2F647E244CBA /* [CP] Embed Pods Frameworks */,
82AA3A8A3181F6A9D1E2499E /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -378,6 +379,23 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
82AA3A8A3181F6A9D1E2499E /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
E94A1CE8DCEF40365836C7DF /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -557,7 +575,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
@ -639,7 +657,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
@ -689,7 +707,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;

View File

@ -700,26 +700,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev"
source: hosted
version: "10.0.9"
version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
version: "3.0.9"
version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
lints:
dependency: transitive
description:
@ -1297,10 +1297,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
url: "https://pub.dev"
source: hosted
version: "0.7.4"
version: "0.7.6"
toastification:
dependency: "direct main"
description:
@ -1417,10 +1417,10 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.2.0"
vm_service:
dependency: transitive
description:

View File

@ -15,8 +15,8 @@
the `--base-href` argument provided to `flutter build`.
-->
<!-- <base href="$FLUTTER_BASE_HREF">-->
<!--<base href="/partner/"> &lt;!&ndash; Live build: also check env.dart (line 8)&ndash;&gt;-->
<base href="/nhance/partner/app/"> <!-- Testing build: also check env.dart (line 9) -->
<base href="/partner/"> <!-- Live build: also check env.dart (line 8) -->
<!--<base href="/nhance/partner/app/"> Testing build: also check env.dart (line 9) -->
<meta charset="UTF-8">