From b5992b94ab2bff9a33905bfc3ec0c61fa4047e93 Mon Sep 17 00:00:00 2001
From: hs <873121290@qq.com>
Date: Wed, 27 Aug 2025 16:14:50 +0800
Subject: [PATCH] =?UTF-8?q?nfc=E5=B7=A1=E6=A3=80=E6=9A=82=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ios/Runner.xcodeproj/project.pbxproj | 21 +-
ios/Runner/AppDelegate.swift | 130 +-
ios/Runner/Info.plist | 171 +-
ios/Runner/Runner.entitlements | 9 +-
lib/customWidget/custom_button.dart | 76 +-
lib/customWidget/photo_picker_row.dart | 18 +-
lib/http/ApiService.dart | 2346 ++++++++++-------
lib/main.dart | 75 +-
.../app/Danger_paicha/quick_report_page.dart | 3 +-
lib/pages/home/NFC/home_nfc_add_page.dart | 56 +-
.../home/NFC/home_nfc_check_danger_page.dart | 380 ++-
lib/pages/home/NFC/home_nfc_check_page.dart | 0
lib/pages/home/NFC/home_nfc_detail_page.dart | 584 ++--
.../home/NFC/nfc_check_danger_detail.dart | 583 ++++
lib/pages/home/NFC/nfc_question_fecebook.dart | 241 ++
lib/pages/home/tap/item_list_widget.dart | 6 +-
lib/services/nfc_service.dart | 210 +-
lib/tools/tools.dart | 42 +-
18 files changed, 3383 insertions(+), 1568 deletions(-)
delete mode 100644 lib/pages/home/NFC/home_nfc_check_page.dart
create mode 100644 lib/pages/home/NFC/nfc_check_danger_detail.dart
create mode 100644 lib/pages/home/NFC/nfc_question_fecebook.dart
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 6c1ee3d..af9ab3f 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -491,9 +491,11 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
- DEVELOPMENT_TEAM = 8AKCJ9LW7D;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
@@ -504,6 +506,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.zhuoyun.qhdprevention.qhdPrevention;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "flutter-weihua";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
@@ -682,9 +685,11 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
- DEVELOPMENT_TEAM = 8AKCJ9LW7D;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
@@ -695,6 +700,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.zhuoyun.qhdprevention.qhdPrevention;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "flutter-weihua";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@@ -710,9 +716,11 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
- DEVELOPMENT_TEAM = 8AKCJ9LW7D;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8AKCJ9LW7D;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
@@ -723,6 +731,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.zhuoyun.qhdprevention.qhdPrevention;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "flutter-weihua";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
index 764ad24..fb52aaf 100644
--- a/ios/Runner/AppDelegate.swift
+++ b/ios/Runner/AppDelegate.swift
@@ -1,77 +1,77 @@
-import UIKit
-import Flutter
+ import UIKit
+ import Flutter
-@main
-@objc class AppDelegate: FlutterAppDelegate {
- // 动态方向掩码(默认竖屏)
- static var orientationMask: UIInterfaceOrientationMask = .portrait
+ @main
+ @objc class AppDelegate: FlutterAppDelegate {
+ // 动态方向掩码(默认竖屏)
+ static var orientationMask: UIInterfaceOrientationMask = .portrait
- override func application(
- _ application: UIApplication,
- didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
- ) -> Bool {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
- let controller = window?.rootViewController as! FlutterViewController
- let channel = FlutterMethodChannel(name: "app.orientation",
- binaryMessenger: controller.binaryMessenger)
+ let controller = window?.rootViewController as! FlutterViewController
+ let channel = FlutterMethodChannel(name: "app.orientation",
+ binaryMessenger: controller.binaryMessenger)
- channel.setMethodCallHandler { [weak self] call, result in
- guard let self = self else { return }
+ channel.setMethodCallHandler { [weak self] call, result in
+ guard let self = self else { return }
- if call.method == "setOrientation" {
- guard let arg = call.arguments as? String else {
- result(FlutterError(code: "BAD_ARGS", message: "need 'landscape' | 'portrait'", details: nil))
- return
- }
-
- // 先更新允许的方向掩码
- if arg == "landscape" {
- AppDelegate.orientationMask = .landscape
- } else if arg == "portrait" {
- AppDelegate.orientationMask = .portrait
- } else {
- result(FlutterError(code: "BAD_ARGS", message: "unknown arg", details: nil))
- return
- }
-
-
- // 再请求实际旋转
- if #available(iOS 16.0, *) {
- // 通知顶层 VC:其 supportedInterfaceOrientations 需要刷新
- self.window?.rootViewController?.setNeedsUpdateOfSupportedInterfaceOrientations()
-
- if let scene = self.window?.windowScene {
- let orientations: UIInterfaceOrientationMask =
- (arg == "landscape") ? .landscape : .portrait
- do {
- try scene.requestGeometryUpdate(.iOS(interfaceOrientations: orientations))
- } catch {
- result(FlutterError(code: "GEOMETRY_UPDATE_FAILED",
- message: error.localizedDescription, details: nil))
+ if call.method == "setOrientation" {
+ guard let arg = call.arguments as? String else {
+ result(FlutterError(code: "BAD_ARGS", message: "need 'landscape' | 'portrait'", details: nil))
return
}
+
+ // 先更新允许的方向掩码
+ if arg == "landscape" {
+ AppDelegate.orientationMask = .landscape
+ } else if arg == "portrait" {
+ AppDelegate.orientationMask = .portrait
+ } else {
+ result(FlutterError(code: "BAD_ARGS", message: "unknown arg", details: nil))
+ return
+ }
+
+
+ // 再请求实际旋转
+ if #available(iOS 16.0, *) {
+ // 通知顶层 VC:其 supportedInterfaceOrientations 需要刷新
+ self.window?.rootViewController?.setNeedsUpdateOfSupportedInterfaceOrientations()
+
+ if let scene = self.window?.windowScene {
+ let orientations: UIInterfaceOrientationMask =
+ (arg == "landscape") ? .landscape : .portrait
+ do {
+ try scene.requestGeometryUpdate(.iOS(interfaceOrientations: orientations))
+ } catch {
+ result(FlutterError(code: "GEOMETRY_UPDATE_FAILED",
+ message: error.localizedDescription, details: nil))
+ return
+ }
+ }
+ } else {
+ let target: UIInterfaceOrientation =
+ (arg == "landscape") ? .landscapeLeft : .portrait
+ UIDevice.current.setValue(target.rawValue, forKey: "orientation")
+ UIViewController.attemptRotationToDeviceOrientation()
+ }
+
+ result(true)
+ } else {
+ result(FlutterMethodNotImplemented)
}
- } else {
- let target: UIInterfaceOrientation =
- (arg == "landscape") ? .landscapeLeft : .portrait
- UIDevice.current.setValue(target.rawValue, forKey: "orientation")
- UIViewController.attemptRotationToDeviceOrientation()
}
- result(true)
- } else {
- result(FlutterMethodNotImplemented)
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+
+ // 关键:把当前的掩码提供给系统
+ override func application(_ application: UIApplication,
+ supportedInterfaceOrientationsFor window: UIWindow?)
+ -> UIInterfaceOrientationMask {
+ return AppDelegate.orientationMask
}
}
-
- GeneratedPluginRegistrant.register(with: self)
- return super.application(application, didFinishLaunchingWithOptions: launchOptions)
- }
-
- // 关键:把当前的掩码提供给系统
- override func application(_ application: UIApplication,
- supportedInterfaceOrientationsFor window: UIWindow?)
- -> UIInterfaceOrientationMask {
- return AppDelegate.orientationMask
- }
-}
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 69c07f3..ee7a908 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -1,89 +1,94 @@
-
- CADisableMinimumFrameDurationOnPhone
-
- CFBundleDisplayName
+
+ CADisableMinimumFrameDurationOnPhone
+
+ CFBundleDisplayName
${PRODUCT_NAME}
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- 智守安全
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- $(FLUTTER_BUILD_NAME)
- CFBundleSignature
- ????
- CFBundleVersion
- $(FLUTTER_BUILD_NUMBER)
- LSRequiresIPhoneOS
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ 智守安全
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ NFCReaderUsageDescription
+ 需要NFC权限来读取和写入标签
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
- NFCReaderUsageDescription
- 用于读取 NFC 标签
- UIBackgroundModes
-
- remote-notification
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
-
- NSBluetoothAlwaysUsageDescription
- app需要蓝牙权限连接设备
- NSCameraUsageDescription
- app需要相机权限来扫描二维码
- NSContactsUsageDescription
- app需要通讯录权限添加好友
- NSHealthShareUsageDescription
- app需要读取健康数据
- NSHealthUpdateUsageDescription
- app需要写入健康数据
- NSLocalNetworkUsageDescription
- app需要发现本地网络设备
- NSLocationAlwaysAndWhenInUseUsageDescription
- app需要后台定位以实现持续跟踪
- NSLocationAlwaysUsageDescription
- 需要位置权限以提供定位服务
- NSLocationWhenInUseUsageDescription
- 需要位置权限以提供定位服务
- NSMicrophoneUsageDescription
- app需要麦克风权限进行语音通话
- NSMotionUsageDescription
- app需要访问运动数据统计步数
- NSPhotoLibraryAddUsageDescription
- app需要保存图片到相册
- NSPhotoLibraryUsageDescription
- app需要访问相册以上传图片
- NSUserNotificationsUsageDescription
- app需要发送通知提醒重要信息
- UIApplicationSupportsIndirectInputEvents
-
- UILaunchStoryboardName
- LaunchScreen
- UIMainStoryboardFile
- Main
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIStatusBarHidden
-
-
\ No newline at end of file
+ NSBluetoothAlwaysUsageDescription
+ app需要蓝牙权限连接设备
+ NSCameraUsageDescription
+ app需要相机权限来扫描二维码
+ NSContactsUsageDescription
+ app需要通讯录权限添加好友
+ NSHealthShareUsageDescription
+ app需要读取健康数据
+ NSHealthUpdateUsageDescription
+ app需要写入健康数据
+ NSLocalNetworkUsageDescription
+ app需要发现本地网络设备
+ NSLocationAlwaysAndWhenInUseUsageDescription
+ app需要后台定位以实现持续跟踪
+ NSLocationAlwaysUsageDescription
+ 需要位置权限以提供定位服务
+ NSLocationWhenInUseUsageDescription
+ 需要位置权限以提供定位服务
+ NSMicrophoneUsageDescription
+ app需要麦克风权限进行语音通话
+ NSMotionUsageDescription
+ app需要访问运动数据统计步数
+ NSPhotoLibraryAddUsageDescription
+ app需要保存图片到相册
+ NSPhotoLibraryUsageDescription
+ app需要访问相册以上传图片
+ NSUserNotificationsUsageDescription
+ app需要发送通知提醒重要信息
+ UIApplicationSupportsIndirectInputEvents
+
+ UIBackgroundModes
+
+ remote-notification
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UIStatusBarHidden
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ com.apple.developer.nfc.readersession.formats
+
+ NDEF
+ TAG
+
+
+
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
index 2bb4dee..3833536 100644
--- a/ios/Runner/Runner.entitlements
+++ b/ios/Runner/Runner.entitlements
@@ -3,8 +3,11 @@
com.apple.developer.nfc.readersession.formats
-
- TAG
-
+
+ NDEF
+ TAG
+
+
+
diff --git a/lib/customWidget/custom_button.dart b/lib/customWidget/custom_button.dart
index dc85dea..39d5b41 100644
--- a/lib/customWidget/custom_button.dart
+++ b/lib/customWidget/custom_button.dart
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
-
-/// 自定义默认按钮
+/// 自定义默认按钮(支持不可点击/禁用状态)
class CustomButton extends StatelessWidget {
final String text; // 按钮文字
final Color backgroundColor; // 按钮背景色
@@ -11,6 +10,16 @@ class CustomButton extends StatelessWidget {
final double? height; // 按钮高度
final TextStyle? textStyle; // 文字样式
+ /// 新增:是否可点击(true 可点,false 禁用)
+ /// 注意:如果 onPressed 为 null,也会被视为不可点击
+ final bool enabled;
+
+ /// 新增:禁用时的背景色(可选)
+ final Color? disabledBackgroundColor;
+
+ /// 新增:禁用时的文字颜色(可选)
+ final Color? disabledTextColor;
+
const CustomButton({
super.key,
required this.text,
@@ -21,27 +30,56 @@ class CustomButton extends StatelessWidget {
this.margin,
this.height,
this.textStyle,
+ this.enabled = true,
+ this.disabledBackgroundColor,
+ this.disabledTextColor,
});
@override
Widget build(BuildContext context) {
- return GestureDetector(
- onTap: onPressed,
- child: Container(
- height: height ?? 45, // 默认高度45
- padding: padding ?? const EdgeInsets.all(8), // 默认内边距
- margin: margin ?? const EdgeInsets.symmetric(horizontal: 5), // 默认外边距
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(borderRadius),
- color: backgroundColor,
- ),
- child: Center(
- child: Text(
- text,
- style: textStyle ?? const TextStyle(
- color: Colors.white,
- fontSize: 15,
- fontWeight: FontWeight.bold,
+ // 如果 enabled 为 false 或 onPressed 为 null,则视为不可点击
+ final bool isEnabled = enabled && onPressed != null;
+
+ // 计算展示用背景色与文字样式
+ final Color bgColor = isEnabled
+ ? backgroundColor
+ : (disabledBackgroundColor ?? Colors.grey.shade400);
+
+ TextStyle finalTextStyle;
+ if (textStyle != null) {
+ finalTextStyle = isEnabled
+ ? textStyle!
+ : textStyle!.copyWith(
+ color: disabledTextColor ?? textStyle!.color?.withOpacity(0.8) ?? Colors.white70,
+ );
+ } else {
+ finalTextStyle = TextStyle(
+ color: isEnabled ? Colors.white : (disabledTextColor ?? Colors.white70),
+ fontSize: 15,
+ fontWeight: FontWeight.bold,
+ );
+ }
+
+ // 点击拦截器 + 视觉反馈(禁用时降低不透明度)
+ return Opacity(
+ opacity: isEnabled ? 1.0 : 0.65,
+ child: AbsorbPointer(
+ absorbing: !isEnabled,
+ child: GestureDetector(
+ onTap: isEnabled ? onPressed : null,
+ child: Container(
+ height: height ?? 45, // 默认高度45
+ padding: padding ?? const EdgeInsets.all(8), // 默认内边距
+ margin: margin ?? const EdgeInsets.symmetric(horizontal: 5), // 默认外边距
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(borderRadius),
+ color: bgColor,
+ ),
+ child: Center(
+ child: Text(
+ text,
+ style: finalTextStyle,
+ ),
),
),
),
diff --git a/lib/customWidget/photo_picker_row.dart b/lib/customWidget/photo_picker_row.dart
index 04a2f0d..da6bba1 100644
--- a/lib/customWidget/photo_picker_row.dart
+++ b/lib/customWidget/photo_picker_row.dart
@@ -20,6 +20,8 @@ class MediaPickerRow extends StatefulWidget {
final ValueChanged? onMediaRemoved;
final ValueChanged? onMediaTapped; // 新增:媒体点击回调
final bool isEdit; // 新增:控制编辑状态
+ final bool isCamera; // 新增:只能拍照
+
const MediaPickerRow({
Key? key,
@@ -31,6 +33,7 @@ class MediaPickerRow extends StatefulWidget {
this.onMediaRemoved,
this.onMediaTapped, // 新增
this.isEdit = true, // 默认可编辑
+ this.isCamera = false,
}) : super(key: key);
@override
@@ -53,7 +56,16 @@ class _MediaPickerGridState extends State {
);
});
}
+ Future _cameraAction() async {
+ XFile? picked = await _picker.pickImage(source: ImageSource.camera);
+ if (picked != null) {
+ final path = picked.path;
+ setState(() => _mediaPaths.add(path));
+ widget.onChanged(_mediaPaths.map((p) => File(p)).toList());
+ widget.onMediaAdded?.call(path);
+ }
+ }
Future _showPickerOptions() async {
if (!widget.isEdit) return; // 不可编辑时直接返回
@@ -237,7 +249,7 @@ class _MediaPickerGridState extends State {
// 显示添加按钮
else if (showAddButton) {
return GestureDetector(
- onTap: _showPickerOptions,
+ onTap: widget.isCamera?_cameraAction:_showPickerOptions,
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.black12),
@@ -273,6 +285,8 @@ class RepairedPhotoSection extends StatefulWidget {
final bool isRequired;
final bool isShowNum;
final bool isEdit; // 新增:控制编辑状态
+ final bool isCamera; // 新增:只能拍照
+
const RepairedPhotoSection({
Key? key,
@@ -290,6 +304,7 @@ class RepairedPhotoSection extends StatefulWidget {
this.isRequired = false,
this.isShowNum = true,
this.isEdit = true, // 默认可编辑
+ this.isCamera = false,
}) : super(key: key);
@override
@@ -331,6 +346,7 @@ class _RepairedPhotoSectionState extends State {
maxCount: widget.maxCount,
mediaType: widget.mediaType,
initialMediaPaths: _mediaPaths,
+ isCamera: widget.isCamera,
onChanged: (files) {
final newPaths = files.map((f) => f.path).toList();
setState(() {
diff --git a/lib/http/ApiService.dart b/lib/http/ApiService.dart
index a0e7cc7..95c3ecd 100644
--- a/lib/http/ApiService.dart
+++ b/lib/http/ApiService.dart
@@ -37,8 +37,8 @@ class ApiService {
'https://pm.qhdsafety.com/zy-projectManage';
/// NFC巡检接口
- static const String baseNFCPath =
- "http://192.168.0.37:8099/api/app/";
+ static const String baseNFCPath = "http://192.168.0.37:8099/api/app";
+
// /// 人脸识别服务
// static const String baseFacePath =
// "https://qaaqwh.qhdsafety.com/whb_stu_face/";
@@ -57,7 +57,6 @@ class ApiService {
// static const String projectManagerUrl =
// 'https://pm.qhdsafety.com/zy-projectManage';
-
/// RSA 公钥
static const publicKey = '''
-----BEGIN PUBLIC KEY-----
@@ -68,9 +67,6 @@ U6Hzm1ninpWeE+awIDAQAB
-----END PUBLIC KEY-----
''';
-
-
-
/// 登录验证接口
static Future