NFC manager package replaced with FlutterNFCKit

main_production_upgrade
WaseemAbbasi22 6 hours ago
parent 2df279aedd
commit 0d7240792a

@ -233,10 +233,14 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Copy Pods Resources"; name = "[CP] Copy Pods Resources";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
@ -265,10 +269,14 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Embed Pods Frameworks"; name = "[CP] Embed Pods Frameworks";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
@ -394,7 +402,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_TEAM = 99Z3UD3LJM; DEVELOPMENT_TEAM = F3XW3W7X9G;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
@ -612,7 +620,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_TEAM = 99Z3UD3LJM; DEVELOPMENT_TEAM = F3XW3W7X9G;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
@ -716,7 +724,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5; CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_TEAM = 99Z3UD3LJM; DEVELOPMENT_TEAM = F3XW3W7X9G;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;

@ -2,7 +2,7 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/notification/firebase_notification_manger.dart'; import 'package:test_sa/controllers/notification/firebase_notification_manger.dart';
import 'package:test_sa/controllers/notification/notification_manger.dart'; import 'package:test_sa/controllers/notification/notification_manger.dart';
@ -105,6 +105,7 @@ class _DashboardViewState extends State<DashboardView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final user = Provider.of<UserProvider>(context, listen: false).user; final user = Provider.of<UserProvider>(context, listen: false).user;
bool isEngineer = (user?.type) == UsersTypes.engineer; bool isEngineer = (user?.type) == UsersTypes.engineer;
///Need to check which info need to show on dashboard for quality user. ///Need to check which info need to show on dashboard for quality user.
bool isQualityUser = (user?.type) == UsersTypes.qualityUser; bool isQualityUser = (user?.type) == UsersTypes.qualityUser;
@ -141,7 +142,13 @@ class _DashboardViewState extends State<DashboardView> {
bottom: 20.toScreenHeight, bottom: 20.toScreenHeight,
child: GestureDetector( child: GestureDetector(
onTap: () async { onTap: () async {
bool isNfcSupported = await NfcManager.instance.isAvailable(); var availability = await FlutterNfcKit.nfcAvailability;
bool isNfcSupported = false;
if (availability != NFCAvailability.available) {
isNfcSupported = false;
} else {
isNfcSupported = true;
}
SwipeGeneralUtils.instance.showSwipeTypeBottomSheetSheet(isNfcSupported: isNfcSupported); SwipeGeneralUtils.instance.showSwipeTypeBottomSheetSheet(isNfcSupported: isNfcSupported);
}, },
child: CircularAnimatedContainer( child: CircularAnimatedContainer(

@ -19,7 +19,7 @@ import 'package:google_api_availability/google_api_availability.dart';
// import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; // import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
// import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; // import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
// import 'package:mohem_flutter_app/widgets/loading_dialog.dart'; // import 'package:mohem_flutter_app/widgets/loading_dialog.dart';
import 'package:nfc_manager/nfc_manager.dart'; // import 'package:nfc_manager/nfc_manager.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/views/widgets/dialogs/confirm_dialog.dart'; import 'package:test_sa/views/widgets/dialogs/confirm_dialog.dart';
@ -415,45 +415,45 @@ class Utils {
// } // }
// return selectedDate; // return selectedDate;
// } // }
//Unused code....
static void readNFc({required Function(String) onRead}) { // static void readNFc({required Function(String) onRead}) {
NfcManager.instance.startSession( // NfcManager.instance.startSession(
onDiscovered: (NfcTag tag) async { // onDiscovered: (NfcTag tag) async {
String identifier = ''; // String identifier = '';
//
try { // try {
final dynamic tagDynamic = tag; // final dynamic tagDynamic = tag;
final Map<String, dynamic> tagData = Map<String, dynamic>.from(tagDynamic.data as Map); // final Map<String, dynamic> tagData = Map<String, dynamic>.from(tagDynamic.data as Map);
//
if (Platform.isAndroid) { // if (Platform.isAndroid) {
if (tagData.containsKey('nfca')) { // if (tagData.containsKey('nfca')) {
final nfcaData = tagData['nfca'] as Map<dynamic, dynamic>; // final nfcaData = tagData['nfca'] as Map<dynamic, dynamic>;
if (nfcaData.containsKey('identifier')) { // if (nfcaData.containsKey('identifier')) {
final List<int> idBytes = List<int>.from(nfcaData['identifier'] as List); // final List<int> idBytes = List<int>.from(nfcaData['identifier'] as List);
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
} // }
} // }
} else { // } else {
if (tagData.containsKey('mifare')) { // if (tagData.containsKey('mifare')) {
final mifareData = tagData['mifare'] as Map<dynamic, dynamic>; // final mifareData = tagData['mifare'] as Map<dynamic, dynamic>;
if (mifareData.containsKey('identifier')) { // if (mifareData.containsKey('identifier')) {
final List<int> idBytes = List<int>.from(mifareData['identifier'] as List); // final List<int> idBytes = List<int>.from(mifareData['identifier'] as List);
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
} // }
} // }
} // }
} catch (e) { // } catch (e) {
print('Error reading NFC: $e'); // print('Error reading NFC: $e');
} // }
//
NfcManager.instance.stopSession(); // NfcManager.instance.stopSession();
onRead(identifier); // onRead(identifier);
}, // },
pollingOptions: {NfcPollingOption.iso14443}, // pollingOptions: {NfcPollingOption.iso14443},
).catchError((err) { // ).catchError((err) {
print(err); // print(err);
}); // });
} // }
//HUAWEI DECISION MAKING //HUAWEI DECISION MAKING
static Future<bool> isGoogleServicesAvailable() async { static Future<bool> isGoogleServicesAvailable() async {

@ -1,6 +1,9 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
@ -24,7 +27,18 @@ class _NonHmgEmployeeSwipeViewState extends State<NonHmgEmployeeSwipeView> {
} }
void checkForNfcAndLocationPermission() async { void checkForNfcAndLocationPermission() async {
isNfcEnabled = await NfcManager.instance.isAvailable(); // isNfcEnabled = await NfcManager.instance.isAvailable();
try {
var availability = await FlutterNfcKit.nfcAvailability;
if (availability != NFCAvailability.available) {
isNfcEnabled = false;
} else {
isNfcEnabled = true;
}
} catch (e) {
log('error checking NFC availability: $e');
isNfcEnabled = false;
}
} }
@override @override

@ -1,5 +1,6 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -24,7 +25,18 @@ class _NonHmgEmployeeSwipeViewState extends State<NonHmgEmployeeSwipeView> {
} }
void checkForNfcAndLocationPermission() async { void checkForNfcAndLocationPermission() async {
isNfcEnabled = await NfcManager.instance.isAvailable(); // isNfcEnabled = await NfcManager.instance.isAvailable();
try {
var availability = await FlutterNfcKit.nfcAvailability;
if (availability != NFCAvailability.available) {
isNfcEnabled = false;
} else {
isNfcEnabled = true;
}
} catch (e) {
log('error checking NFC availability: $e');
isNfcEnabled = false;
}
} }
@override @override

@ -1,5 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nfc_manager/nfc_manager.dart'; import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
@ -119,12 +119,32 @@ class _SwipeViewState extends State<SwipeView> {
SwipeHistoryView().expanded, SwipeHistoryView().expanded,
], ],
), ),
// void checkForNfcAndLocationPermission() async {
// // isNfcEnabled = await NfcManager.instance.isAvailable();
// try {
// var availability = await FlutterNfcKit.nfcAvailability;
// if (availability != NFCAvailability.available) {
// isNfcEnabled = false;
// } else {
// isNfcEnabled = true;
// }
// } catch (e) {
// log('error checking NFC availability: $e');
// isNfcEnabled = false;
// }
// }
Positioned( Positioned(
right: 20.toScreenWidth, right: 20.toScreenWidth,
bottom: 60.toScreenHeight, bottom: 60.toScreenHeight,
child: GestureDetector( child: GestureDetector(
onTap: () async { onTap: () async {
bool isNfcSupported = await NfcManager.instance.isAvailable(); var availability = await FlutterNfcKit.nfcAvailability;
bool isNfcSupported = false;
if (availability != NFCAvailability.available) {
isNfcSupported = false;
} else {
isNfcSupported = true;
}
SwipeGeneralUtils.instance.showSwipeTypeBottomSheetSheet(isNfcSupported: isNfcSupported); SwipeGeneralUtils.instance.showSwipeTypeBottomSheetSheet(isNfcSupported: isNfcSupported);
}, },
child: CircularAnimatedContainer( child: CircularAnimatedContainer(

@ -10,7 +10,8 @@ import 'package:geolocator/geolocator.dart';
import 'package:google_api_availability/google_api_availability.dart'; import 'package:google_api_availability/google_api_availability.dart';
import 'package:huawei_location/huawei_location.dart'; import 'package:huawei_location/huawei_location.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:nfc_manager/nfc_manager.dart';
// import 'package:nfc_manager/nfc_manager.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
@ -408,7 +409,6 @@ class SwipeGeneralUtils {
try { try {
showNfcReader(context, onNcfScan: (String? nfcId) async { showNfcReader(context, onNcfScan: (String? nfcId) async {
log('nfc id from sheet: $nfcId'); log('nfc id from sheet: $nfcId');
if (nfcId == null || nfcId.isEmpty) return; if (nfcId == null || nfcId.isEmpty) return;
try { try {
await _processNfcAttendance(nfcId, latitude, longitude, context); await _processNfcAttendance(nfcId, latitude, longitude, context);
@ -697,44 +697,44 @@ class SwipeGeneralUtils {
} }
//older code.. //older code..
void readNFc({Function(String)? onRead}) { // void readNFc({Function(String)? onRead}) {
NfcManager.instance.startSession( // NfcManager.instance.startSession(
onDiscovered: (NfcTag tag) async { // onDiscovered: (NfcTag tag) async {
String identifier = ''; // String identifier = '';
//
try { // try {
final dynamic tagDynamic = tag; // final dynamic tagDynamic = tag;
final Map<String, dynamic> tagData = Map<String, dynamic>.from(tagDynamic.data as Map); // final Map<String, dynamic> tagData = Map<String, dynamic>.from(tagDynamic.data as Map);
//
if (Platform.isAndroid) { // if (Platform.isAndroid) {
if (tagData.containsKey('nfca')) { // if (tagData.containsKey('nfca')) {
final nfcaData = tagData['nfca'] as Map<dynamic, dynamic>; // final nfcaData = tagData['nfca'] as Map<dynamic, dynamic>;
if (nfcaData.containsKey('identifier')) { // if (nfcaData.containsKey('identifier')) {
final List<int> idBytes = List<int>.from(nfcaData['identifier'] as List); // final List<int> idBytes = List<int>.from(nfcaData['identifier'] as List);
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
} // }
} // }
} else { // } else {
if (tagData.containsKey('mifare')) { // if (tagData.containsKey('mifare')) {
final mifareData = tagData['mifare'] as Map<dynamic, dynamic>; // final mifareData = tagData['mifare'] as Map<dynamic, dynamic>;
if (mifareData.containsKey('identifier')) { // if (mifareData.containsKey('identifier')) {
final List<int> idBytes = List<int>.from(mifareData['identifier'] as List); // final List<int> idBytes = List<int>.from(mifareData['identifier'] as List);
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
} // }
} // }
} // }
} catch (e) { // } catch (e) {
print('Error reading NFC: $e'); // print('Error reading NFC: $e');
} // }
//
NfcManager.instance.stopSession(); // NfcManager.instance.stopSession();
onRead!(identifier); // onRead!(identifier);
}, // },
pollingOptions: {NfcPollingOption.iso14443}, // pollingOptions: {NfcPollingOption.iso14443},
).catchError((err) { // ).catchError((err) {
print(err); // print(err);
}); // });
} // }
//HUAWEI DECISION MAKING //HUAWEI DECISION MAKING
Future<bool> isGoogleServicesAvailable() async { Future<bool> isGoogleServicesAvailable() async {

@ -1,247 +1,249 @@
import 'dart:async'; //TODO delete unused file
import 'dart:io';
// import 'dart:async';
import 'package:flutter/material.dart'; // import 'dart:io';
import 'package:nfc_manager/nfc_manager.dart'; //
// import 'package:flutter/material.dart';
void showNfcReader(BuildContext context, {required Function(String? nfcId) onNcfScan}) { // // import 'package:nfc_manager/nfc_manager.dart';
showModalBottomSheet( //
context: context, // void showNfcReader(BuildContext context, {required Function(String? nfcId) onNcfScan}) {
enableDrag: false, // showModalBottomSheet(
isDismissible: false, // context: context,
shape: RoundedRectangleBorder( // enableDrag: false,
borderRadius: BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)), // isDismissible: false,
), // shape: const RoundedRectangleBorder(
backgroundColor: Colors.white, // borderRadius: BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12)),
builder: (context) { // ),
return NfcLayout( // backgroundColor: Colors.white,
onNcfScan: onNcfScan, // builder: (context) {
); // return NfcLayout(
}, // onNcfScan: onNcfScan,
); // );
} // },
// );
class NfcLayout extends StatefulWidget { // }
final Function(String? nfcId) onNcfScan; //
// class NfcLayout extends StatefulWidget {
const NfcLayout({super.key, required this.onNcfScan}); // final Function(String? nfcId) onNcfScan;
//
@override // const NfcLayout({super.key, required this.onNcfScan});
_NfcLayoutState createState() => _NfcLayoutState(); //
} // @override
// _NfcLayoutState createState() => _NfcLayoutState();
class _NfcLayoutState extends State<NfcLayout> { // }
bool _reading = false; //
Widget? mainWidget; // class _NfcLayoutState extends State<NfcLayout> {
String? nfcId; // bool _reading = false;
// Widget? mainWidget;
@override // String? nfcId;
void initState() { //
super.initState(); // @override
// void initState() {
NfcManager.instance.startSession( // super.initState();
onDiscovered: (NfcTag tag) async { //
String? identifier; // NfcManager.instance.startSession(
// onDiscovered: (NfcTag tag) async {
// Access tag identifier from the tag data // String? identifier;
// In nfc_manager 4.1.1, access data via dynamic cast to bypass protected member //
try { // // Access tag identifier from the tag data
final dynamic tagDynamic = tag; // // In nfc_manager 4.1.1, access data via dynamic cast to bypass protected member
final Map<String, dynamic> tagData = Map<String, dynamic>.from(tagDynamic.data as Map); // try {
// final dynamic tagDynamic = tag;
if (Platform.isAndroid) { // final Map<String, dynamic> tagData = Map<String, dynamic>.from(tagDynamic.data as Map);
// For Android, try NfcA technology first //
if (tagData.containsKey('nfca')) { // if (Platform.isAndroid) {
final nfcaData = tagData['nfca'] as Map<dynamic, dynamic>; // // For Android, try NfcA technology first
if (nfcaData.containsKey('identifier')) { // if (tagData.containsKey('nfca')) {
final List<int> idBytes = List<int>.from(nfcaData['identifier'] as List); // final nfcaData = tagData['nfca'] as Map<dynamic, dynamic>;
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // if (nfcaData.containsKey('identifier')) {
} // final List<int> idBytes = List<int>.from(nfcaData['identifier'] as List);
} // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
// Fallback to other technologies if NfcA is not available // }
if (identifier == null && tagData.containsKey('nfcb')) { // }
final nfcbData = tagData['nfcb'] as Map<dynamic, dynamic>; // // Fallback to other technologies if NfcA is not available
if (nfcbData.containsKey('identifier')) { // if (identifier == null && tagData.containsKey('nfcb')) {
final List<int> idBytes = List<int>.from(nfcbData['identifier'] as List); // final nfcbData = tagData['nfcb'] as Map<dynamic, dynamic>;
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // if (nfcbData.containsKey('identifier')) {
} // final List<int> idBytes = List<int>.from(nfcbData['identifier'] as List);
} // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
} else { // }
// For iOS, try MiFare technology // }
if (tagData.containsKey('mifare')) { // } else {
final mifareData = tagData['mifare'] as Map<dynamic, dynamic>; // // For iOS, try MiFare technology
if (mifareData.containsKey('identifier')) { // if (tagData.containsKey('mifare')) {
final List<int> idBytes = List<int>.from(mifareData['identifier'] as List); // final mifareData = tagData['mifare'] as Map<dynamic, dynamic>;
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // if (mifareData.containsKey('identifier')) {
} // final List<int> idBytes = List<int>.from(mifareData['identifier'] as List);
} // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
// Fallback to iso15693 for iOS // }
if (identifier == null && tagData.containsKey('iso15693')) { // }
final iso15693Data = tagData['iso15693'] as Map<dynamic, dynamic>; // // Fallback to iso15693 for iOS
if (iso15693Data.containsKey('identifier')) { // if (identifier == null && tagData.containsKey('iso15693')) {
final List<int> idBytes = List<int>.from(iso15693Data['identifier'] as List); // final iso15693Data = tagData['iso15693'] as Map<dynamic, dynamic>;
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // if (iso15693Data.containsKey('identifier')) {
} // final List<int> idBytes = List<int>.from(iso15693Data['identifier'] as List);
} // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
} // }
// }
// Universal fallback: try Ndef if available // }
if (identifier == null && tagData.containsKey('ndef')) { //
final ndefData = tagData['ndef'] as Map<dynamic, dynamic>; // // Universal fallback: try Ndef if available
if (ndefData.containsKey('identifier')) { // if (identifier == null && tagData.containsKey('ndef')) {
final List<int> idBytes = List<int>.from(ndefData['identifier'] as List); // final ndefData = tagData['ndef'] as Map<dynamic, dynamic>;
identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join(''); // if (ndefData.containsKey('identifier')) {
} // final List<int> idBytes = List<int>.from(ndefData['identifier'] as List);
} // identifier = idBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join('');
} catch (e) { // }
print('Error reading NFC tag: $e'); // }
} // } catch (e) {
// print('Error reading NFC tag: $e');
nfcId = identifier; // }
//
setState(() { // nfcId = identifier;
_reading = true; //
mainWidget = doneNfc(); // setState(() {
}); // _reading = true;
// mainWidget = doneNfc();
Future.delayed(const Duration(seconds: 1), () { // });
NfcManager.instance.stopSession(); //
Navigator.pop(context); // Future.delayed(const Duration(seconds: 1), () {
widget.onNcfScan(nfcId); // NfcManager.instance.stopSession();
}); // Navigator.pop(context);
}, // widget.onNcfScan(nfcId);
pollingOptions: {NfcPollingOption.iso14443}, // });
).catchError((err) { // },
print(err); // pollingOptions: {NfcPollingOption.iso14443},
}); // ).catchError((err) {
} // print(err);
// });
@override // }
Widget build(BuildContext context) { //
(mainWidget == null && !_reading) ? mainWidget = scanNfc() : mainWidget = doneNfc(); // @override
return AnimatedSwitcher(duration: Duration(milliseconds: 500), child: mainWidget); // Widget build(BuildContext context) {
} // (mainWidget == null && !_reading) ? mainWidget = scanNfc() : mainWidget = doneNfc();
// return AnimatedSwitcher(duration: Duration(milliseconds: 500), child: mainWidget);
Widget scanNfc() { // }
return Container( //
key: ValueKey(1), // Widget scanNfc() {
child: Column( // return Container(
mainAxisSize: MainAxisSize.min, // key: ValueKey(1),
children: <Widget>[ // child: Column(
SizedBox( // mainAxisSize: MainAxisSize.min,
height: 30, // children: <Widget>[
), // SizedBox(
Text( // height: 30,
"Ready To Scan", // ),
style: TextStyle( // Text(
fontWeight: FontWeight.bold, // "Ready To Scan",
fontSize: 24, // style: TextStyle(
), // fontWeight: FontWeight.bold,
), // fontSize: 24,
SizedBox( // ),
height: 30, // ),
), // SizedBox(
Image.asset( // height: 30,
"assets/images/nfc_dummy.png", // ),
height: MediaQuery.of(context).size.width / 3, // Image.asset(
width: double.infinity, // "assets/images/nfc_dummy.png",
), // height: MediaQuery.of(context).size.width / 3,
SizedBox( // width: double.infinity,
height: 30, // ),
), // SizedBox(
Text( // height: 30,
"Approach an NFC Tag", // ),
style: TextStyle( // Text(
fontSize: 18, // "Approach an NFC Tag",
), // style: TextStyle(
), // fontSize: 18,
SizedBox( // ),
height: 30, // ),
), // SizedBox(
ButtonTheme( // height: 30,
minWidth: MediaQuery.of(context).size.width / 1.2, // ),
height: 45.0, // ButtonTheme(
buttonColor: Colors.grey[300], // minWidth: MediaQuery.of(context).size.width / 1.2,
shape: RoundedRectangleBorder( // height: 45.0,
borderRadius: BorderRadius.circular(6), // buttonColor: Colors.grey[300],
), // shape: RoundedRectangleBorder(
child: TextButton( // borderRadius: BorderRadius.circular(6),
onPressed: () { // ),
NfcManager.instance.stopSession(); // child: TextButton(
Navigator.pop(context); // onPressed: () {
}, // NfcManager.instance.stopSession();
// elevation: 0, // Navigator.pop(context);
child: Text("CANCEL"), // },
), // // elevation: 0,
), // child: Text("CANCEL"),
SizedBox( // ),
height: 30, // ),
), // SizedBox(
], // height: 30,
), // ),
); // ],
} // ),
// );
Widget doneNfc() { // }
return Container( //
key: ValueKey(2), // Widget doneNfc() {
child: Column( // return Container(
mainAxisSize: MainAxisSize.min, // key: ValueKey(2),
children: <Widget>[ // child: Column(
SizedBox( // mainAxisSize: MainAxisSize.min,
height: 30, // children: <Widget>[
), // SizedBox(
Text( // height: 30,
"Successfully Scanned", // ),
style: TextStyle( // Text(
fontWeight: FontWeight.bold, // "Successfully Scanned",
fontSize: 24, // style: TextStyle(
), // fontWeight: FontWeight.bold,
), // fontSize: 24,
SizedBox( // ),
height: 30, // ),
), // SizedBox(
Image.asset( // height: 30,
// "assets/icons/nfc/ic_done.png", // ),
"assets/images/done_dummy.jpeg", // Image.asset(
height: MediaQuery.of(context).size.width / 3, // // "assets/icons/nfc/ic_done.png",
width: double.infinity, // "assets/images/done_dummy.jpeg",
), // height: MediaQuery.of(context).size.width / 3,
SizedBox( // width: double.infinity,
height: 30, // ),
), // SizedBox(
Text( // height: 30,
"Approach an NFC Tag", // ),
style: TextStyle( // Text(
fontSize: 18, // "Approach an NFC Tag",
), // style: TextStyle(
), // fontSize: 18,
SizedBox( // ),
height: 30, // ),
), // SizedBox(
ButtonTheme( // height: 30,
minWidth: MediaQuery.of(context).size.width / 1.2, // ),
height: 45.0, // ButtonTheme(
buttonColor: Colors.grey[300], // minWidth: MediaQuery.of(context).size.width / 1.2,
shape: RoundedRectangleBorder( // height: 45.0,
borderRadius: BorderRadius.circular(6), // buttonColor: Colors.grey[300],
), // shape: RoundedRectangleBorder(
child: TextButton( // borderRadius: BorderRadius.circular(6),
// onPressed: () { // ),
// _stream?.cancel(); // child: TextButton(
// widget.onNcfScan(nfcId); // // onPressed: () {
// Navigator.pop(context); // // _stream?.cancel();
// }, // // widget.onNcfScan(nfcId);
onPressed: null, // // Navigator.pop(context);
// elevation: 0, // // },
child: Text("DONE"), // onPressed: null,
), // // elevation: 0,
), // child: Text("DONE"),
SizedBox( // ),
height: 30, // ),
), // SizedBox(
], // height: 30,
), // ),
); // ],
} // ),
} // );
// }
// }

@ -1070,14 +1070,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.0" version: "0.4.0"
ndef_record:
dependency: transitive
description:
name: ndef_record
sha256: "210ffb12284961cab9e44b99462143316d9a20cd992581170706069ef77d74a6"
url: "https://pub.dev"
source: hosted
version: "1.4.2"
nested: nested:
dependency: transitive dependency: transitive
description: description:
@ -1086,14 +1078,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.0.0"
nfc_manager:
dependency: "direct main"
description:
name: nfc_manager
sha256: "24c78b0e5702da53e7f8794d073624c0bee7cd99924f257cbd11f5d1c5866879"
url: "https://pub.dev"
source: hosted
version: "4.1.1"
objective_c: objective_c:
dependency: transitive dependency: transitive
description: description:
@ -1964,5 +1948,5 @@ packages:
source: hosted source: hosted
version: "3.1.3" version: "3.1.3"
sdks: sdks:
dart: ">=3.11.0 <4.0.0" dart: ">=3.10.3 <4.0.0"
flutter: ">=3.38.4" flutter: ">=3.38.4"

@ -96,7 +96,7 @@ dependencies:
huawei_push: ^6.14.0+300 huawei_push: ^6.14.0+300
huawei_location: ^6.16.0+300 huawei_location: ^6.16.0+300
geolocator: ^9.0.2 geolocator: ^9.0.2
nfc_manager: ^4.1.1 # nfc_manager: ^4.1.1
flutter_nfc_kit: ^3.6.2 flutter_nfc_kit: ^3.6.2
wifi_iot: ^0.3.19+2 wifi_iot: ^0.3.19+2

Loading…
Cancel
Save