发布版本星锁 1.0.0.02(preRelease-20231124),修改已知bug
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/starLock.iml" filepath="$PROJECT_DIR$/.idea/starLock.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
259
.idea/starLock.iml
generated
Normal file
@ -0,0 +1,259 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_map/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_map/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_map/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_location/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_location/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_location/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aliyun_push/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aliyun_push/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aliyun_push/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/network_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/network_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/network_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/permission_handler_apple/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/permission_handler_apple/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/permission_handler_apple/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/image_picker_windows/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/image_picker_windows/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/image_picker_windows/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/path_provider_foundation/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/path_provider_foundation/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/path_provider_foundation/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/url_launcher_ios/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/url_launcher_ios/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/url_launcher_ios/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/network_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/network_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/network_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/permission_handler_windows/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/permission_handler_windows/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/permission_handler_windows/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/webview_flutter_wkwebview/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/webview_flutter_wkwebview/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/webview_flutter_wkwebview/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/image_picker_linux/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/image_picker_linux/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/image_picker_linux/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/package_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/package_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/package_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/image_picker_ios/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/image_picker_ios/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/image_picker_ios/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/shared_preferences_foundation/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/shared_preferences_foundation/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/shared_preferences_foundation/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/device_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/device_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/device_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/camera_avfoundation/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/camera_avfoundation/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/camera_avfoundation/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/permission_handler_windows/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/permission_handler_windows/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/permission_handler_windows/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/auto_orientation/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/auto_orientation/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/auto_orientation/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_location/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_location/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_location/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/file_selector_windows/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/file_selector_windows/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/file_selector_windows/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/permission_handler_apple/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/permission_handler_apple/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/permission_handler_apple/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios11/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios11/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios11/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/device_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/device_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/device_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/network_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/network_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/network_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/image_picker_windows/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/image_picker_windows/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/image_picker_windows/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/file_selector_windows/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/file_selector_windows/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/file_selector_windows/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/auto_orientation/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/auto_orientation/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/auto_orientation/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/package_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/package_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/package_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/network_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/network_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/network_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aj_captcha_flutter/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aj_captcha_flutter/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aj_captcha_flutter/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/flutter_native_contact_picker/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/flutter_native_contact_picker/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/flutter_native_contact_picker/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/path_provider_foundation/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/path_provider_foundation/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/path_provider_foundation/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_map/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_map/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/amap_flutter_map/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/sqflite/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/sqflite/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/sqflite/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/package_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/package_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/package_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios12/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios12/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios12/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/package_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/package_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/package_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/device_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/device_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/device_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/video_player_avfoundation/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/video_player_avfoundation/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/video_player_avfoundation/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/network_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/network_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/network_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/image_picker_linux/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/image_picker_linux/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/image_picker_linux/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/device_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/device_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/device_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/file_selector_linux/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/file_selector_linux/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/file_selector_linux/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/shared_preferences_foundation/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/shared_preferences_foundation/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/shared_preferences_foundation/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/aj_captcha_flutter/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/package_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/package_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/package_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/reactive_ble_mobile/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/reactive_ble_mobile/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/reactive_ble_mobile/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/video_player_avfoundation/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/video_player_avfoundation/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/video_player_avfoundation/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/network_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/network_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/network_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/image_picker_ios/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/image_picker_ios/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/image_picker_ios/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/shared_preferences_linux/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/shared_preferences_linux/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/shared_preferences_linux/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/fluttertoast/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/fluttertoast/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/fluttertoast/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/device_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/device_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/device_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/flutter_native_contact_picker/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/flutter_native_contact_picker/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/flutter_native_contact_picker/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/fluttertoast/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/fluttertoast/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/fluttertoast/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios13/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios13/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/ios13/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/url_launcher_ios/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/url_launcher_ios/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/url_launcher_ios/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/file_selector_linux/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/file_selector_linux/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/file_selector_linux/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/shared/maps_example_dart/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/shared/maps_example_dart/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/google_maps_flutter_ios/example/shared/maps_example_dart/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aj_captcha_flutter/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aj_captcha_flutter/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aj_captcha_flutter/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/camera_avfoundation/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/camera_avfoundation/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/camera_avfoundation/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/shared_preferences_linux/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/shared_preferences_linux/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/shared_preferences_linux/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/webview_flutter_wkwebview/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/webview_flutter_wkwebview/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/webview_flutter_wkwebview/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/package_info_plus/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/package_info_plus/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/package_info_plus/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/device_info_plus/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/device_info_plus/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/linux/flutter/ephemeral/.plugin_symlinks/device_info_plus/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/sqflite/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/sqflite/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/sqflite/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aliyun_push/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aliyun_push/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/star_lock/ios/.symlinks/plugins/aliyun_push/example/.dart_tool" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="?android:colorBackground" />
|
||||
<item android:drawable="@android:color/white" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
android:src="@mipmap/ic_logo" />
|
||||
</item>
|
||||
</layer-list>
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
<item android:drawable="@android:color/white" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
android:src="@mipmap/ic_logo" />
|
||||
</item>
|
||||
</layer-list>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 3.5 KiB |
BIN
star_lock/images/main/icon_lockElectricLevel_1.png
Normal file
|
After Width: | Height: | Size: 859 B |
BIN
star_lock/images/main/icon_lockElectricLevel_2.png
Normal file
|
After Width: | Height: | Size: 907 B |
BIN
star_lock/images/main/icon_lockElectricLevel_3.png
Normal file
|
After Width: | Height: | Size: 940 B |
BIN
star_lock/images/main/icon_lockElectricLevel_4.png
Normal file
|
After Width: | Height: | Size: 930 B |
BIN
star_lock/images/main/icon_lockElectricLevel_5.png
Normal file
|
After Width: | Height: | Size: 826 B |
@ -1,5 +1,5 @@
|
||||
# Uncomment this line to define a global platform for your project
|
||||
platform :ios, '11.0'
|
||||
# platform :ios, '11.0'
|
||||
#use_modular_headers!
|
||||
use_frameworks! :linkage => :static
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
|
||||
214
star_lock/ios/Podfile.lock
Normal file
@ -0,0 +1,214 @@
|
||||
PODS:
|
||||
- aj_captcha_flutter (0.0.1):
|
||||
- Flutter
|
||||
- AlicloudPush (1.9.9.8):
|
||||
- AlicloudSender
|
||||
- AlicloudUT
|
||||
- AlicloudUtils
|
||||
- AlicloudSender (1.0.0.3):
|
||||
- AlicloudUTDID
|
||||
- EMASRest
|
||||
- AlicloudUT (5.2.0.16):
|
||||
- AlicloudUTDID
|
||||
- AlicloudUTDID (1.5.0.94)
|
||||
- AlicloudUtils (1.4.1):
|
||||
- AlicloudUTDID
|
||||
- aliyun_push (0.0.1):
|
||||
- AlicloudPush
|
||||
- Flutter
|
||||
- AMap3DMap (9.7.0):
|
||||
- AMapFoundation (>= 1.8.0)
|
||||
- amap_flutter_location (0.0.1):
|
||||
- AMapLocation
|
||||
- Flutter
|
||||
- amap_flutter_map (0.0.1):
|
||||
- AMap3DMap
|
||||
- Flutter
|
||||
- AMapFoundation (1.8.2)
|
||||
- AMapLocation (2.10.0):
|
||||
- AMapFoundation (>= 1.8.0)
|
||||
- auto_orientation (0.0.1):
|
||||
- Flutter
|
||||
- camera_avfoundation (0.0.1):
|
||||
- Flutter
|
||||
- device_info_plus (0.0.1):
|
||||
- Flutter
|
||||
- EMASRest (11.1.1.2)
|
||||
- Flutter (1.0.0)
|
||||
- flutter_native_contact_picker (0.0.1):
|
||||
- Flutter
|
||||
- fluttertoast (0.0.2):
|
||||
- Flutter
|
||||
- Toast
|
||||
- FMDB (2.7.5):
|
||||
- FMDB/standard (= 2.7.5)
|
||||
- FMDB/standard (2.7.5)
|
||||
- google_maps_flutter_ios (0.0.1):
|
||||
- Flutter
|
||||
- GoogleMaps (< 8.0)
|
||||
- GoogleMaps (5.2.0):
|
||||
- GoogleMaps/Maps (= 5.2.0)
|
||||
- GoogleMaps/Base (5.2.0)
|
||||
- GoogleMaps/Maps (5.2.0):
|
||||
- GoogleMaps/Base
|
||||
- image_picker_ios (0.0.1):
|
||||
- Flutter
|
||||
- network_info_plus (0.0.1):
|
||||
- Flutter
|
||||
- package_info_plus (0.4.5):
|
||||
- Flutter
|
||||
- path_provider_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- permission_handler_apple (9.1.1):
|
||||
- Flutter
|
||||
- Protobuf (3.25.1)
|
||||
- reactive_ble_mobile (0.0.1):
|
||||
- Flutter
|
||||
- Protobuf (~> 3.5)
|
||||
- SwiftProtobuf (~> 1.0)
|
||||
- shared_preferences_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- sqflite (0.0.3):
|
||||
- Flutter
|
||||
- FMDB (>= 2.7.5)
|
||||
- SwiftProtobuf (1.25.1)
|
||||
- Toast (4.0.0)
|
||||
- url_launcher_ios (0.0.1):
|
||||
- Flutter
|
||||
- video_player_avfoundation (0.0.1):
|
||||
- Flutter
|
||||
- webview_flutter_wkwebview (0.0.1):
|
||||
- Flutter
|
||||
|
||||
DEPENDENCIES:
|
||||
- aj_captcha_flutter (from `.symlinks/plugins/aj_captcha_flutter/ios`)
|
||||
- AlicloudPush (~> 1.9.9)
|
||||
- aliyun_push (from `.symlinks/plugins/aliyun_push/ios`)
|
||||
- amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`)
|
||||
- amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`)
|
||||
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
|
||||
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
|
||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||
- Flutter (from `Flutter`)
|
||||
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
|
||||
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
||||
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
|
||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||
- network_info_plus (from `.symlinks/plugins/network_info_plus/ios`)
|
||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
||||
- reactive_ble_mobile (from `.symlinks/plugins/reactive_ble_mobile/ios`)
|
||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`)
|
||||
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
|
||||
|
||||
SPEC REPOS:
|
||||
https://github.com/aliyun/aliyun-specs.git:
|
||||
- AlicloudPush
|
||||
- AlicloudSender
|
||||
- AlicloudUT
|
||||
- AlicloudUTDID
|
||||
- AlicloudUtils
|
||||
- EMASRest
|
||||
https://github.com/CocoaPods/Specs.git:
|
||||
- AMap3DMap
|
||||
- AMapFoundation
|
||||
- AMapLocation
|
||||
- FMDB
|
||||
- GoogleMaps
|
||||
- Protobuf
|
||||
- SwiftProtobuf
|
||||
- Toast
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
aj_captcha_flutter:
|
||||
:path: ".symlinks/plugins/aj_captcha_flutter/ios"
|
||||
aliyun_push:
|
||||
:path: ".symlinks/plugins/aliyun_push/ios"
|
||||
amap_flutter_location:
|
||||
:path: ".symlinks/plugins/amap_flutter_location/ios"
|
||||
amap_flutter_map:
|
||||
:path: ".symlinks/plugins/amap_flutter_map/ios"
|
||||
auto_orientation:
|
||||
:path: ".symlinks/plugins/auto_orientation/ios"
|
||||
camera_avfoundation:
|
||||
:path: ".symlinks/plugins/camera_avfoundation/ios"
|
||||
device_info_plus:
|
||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||
Flutter:
|
||||
:path: Flutter
|
||||
flutter_native_contact_picker:
|
||||
:path: ".symlinks/plugins/flutter_native_contact_picker/ios"
|
||||
fluttertoast:
|
||||
:path: ".symlinks/plugins/fluttertoast/ios"
|
||||
google_maps_flutter_ios:
|
||||
:path: ".symlinks/plugins/google_maps_flutter_ios/ios"
|
||||
image_picker_ios:
|
||||
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||
network_info_plus:
|
||||
:path: ".symlinks/plugins/network_info_plus/ios"
|
||||
package_info_plus:
|
||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||
path_provider_foundation:
|
||||
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
||||
permission_handler_apple:
|
||||
:path: ".symlinks/plugins/permission_handler_apple/ios"
|
||||
reactive_ble_mobile:
|
||||
:path: ".symlinks/plugins/reactive_ble_mobile/ios"
|
||||
shared_preferences_foundation:
|
||||
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
|
||||
sqflite:
|
||||
:path: ".symlinks/plugins/sqflite/ios"
|
||||
url_launcher_ios:
|
||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||
video_player_avfoundation:
|
||||
:path: ".symlinks/plugins/video_player_avfoundation/ios"
|
||||
webview_flutter_wkwebview:
|
||||
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
aj_captcha_flutter: dd7af1aa064bdd621ae335b819bab07309c3c023
|
||||
AlicloudPush: 88529c9b796e4ece0601de0867b30359f55b61f7
|
||||
AlicloudSender: 1f468b6bd962a099ffc19d45e3608b0fe98f259d
|
||||
AlicloudUT: 6d1cf30d57d096b7e9bb4b069dd0ba6ad59a3338
|
||||
AlicloudUTDID: 7323c443dcdf9a73e2224dc6ce51703671d7a765
|
||||
AlicloudUtils: 873a76615bebcee8b1996f20820d366e433c3eab
|
||||
aliyun_push: e92c2a8ca91b134bfabf7631816cce5f36e04a44
|
||||
AMap3DMap: dce25dd3e51e6b92109caa7d0c97fc6055830fb3
|
||||
amap_flutter_location: 44ff5beb64f42e0bf5feb402fe299dac0013af6f
|
||||
amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a
|
||||
AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec
|
||||
AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033
|
||||
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
|
||||
camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb
|
||||
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
|
||||
EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475
|
||||
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
|
||||
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
|
||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||
google_maps_flutter_ios: abdac20d6ce8931f6ebc5f46616df241bfaa2cfd
|
||||
GoogleMaps: 025272d5876d3b32604e5c080dc25eaf68764693
|
||||
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
||||
network_info_plus: 122280582fe2fa2bbb8681a4269745cd5c3a9b32
|
||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
||||
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
||||
Protobuf: d94761c33f1239c0a43a0817ca1a5f7f7c900241
|
||||
reactive_ble_mobile: 9ce6723d37ccf701dbffd202d487f23f5de03b4c
|
||||
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
||||
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
||||
SwiftProtobuf: 69f02cd54fb03201c5e6bf8b76f687c5ef7541a3
|
||||
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
|
||||
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
||||
video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126
|
||||
webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
|
||||
|
||||
PODFILE CHECKSUM: adf6d8caf5faa9ea4ee2a2ea37f5aea37a6520d7
|
||||
|
||||
COCOAPODS: 1.14.3
|
||||
@ -8,6 +8,7 @@
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||
3364C3F42B0C902100AA5ABC /* lcokStarMain.png in Resources */ = {isa = PBXBuildFile; fileRef = 3364C3F32B0C902100AA5ABC /* lcokStarMain.png */; };
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||
3EF1E85D6F1EE0C0DCF8449F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09D8B2FA2B26BA5BFF31AB2A /* Pods_Runner.framework */; };
|
||||
8297E4102AE75AC500E886FA /* XSFlutterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8297E40E2AE75AC500E886FA /* XSFlutterManager.m */; };
|
||||
@ -143,6 +144,7 @@
|
||||
09D8B2FA2B26BA5BFF31AB2A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||
3364C3F32B0C902100AA5ABC /* lcokStarMain.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = lcokStarMain.png; sourceTree = "<group>"; };
|
||||
33BF41252A96174D009D92E2 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||
@ -604,6 +606,7 @@
|
||||
97C146F01CF9000F007C117D /* Runner */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3364C3F32B0C902100AA5ABC /* lcokStarMain.png */,
|
||||
82C026552AEB6C050011FE6A /* img */,
|
||||
82C026532AE8AC6D0011FE6A /* AliyunEmasServices-Info.plist */,
|
||||
8297E4992AE7974700E886FA /* AppDelegate.h */,
|
||||
@ -733,6 +736,7 @@
|
||||
82C026D72AEB6C050011FE6A /* mic.png in Resources */,
|
||||
82C026C32AEB6C050011FE6A /* call_menu_on.png in Resources */,
|
||||
82C026B02AEB6C050011FE6A /* call_call_on.png in Resources */,
|
||||
3364C3F42B0C902100AA5ABC /* lcokStarMain.png in Resources */,
|
||||
82C026C82AEB6C050011FE6A /* hf.png in Resources */,
|
||||
82C026BE2AEB6C050011FE6A /* vcontacts2.png in Resources */,
|
||||
82C026AC2AEB6C050011FE6A /* spk.png in Resources */,
|
||||
@ -1102,8 +1106,12 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "cn.star-lock.starLock";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Profile;
|
||||
@ -1347,9 +1355,13 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "cn.star-lock.starLock";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Debug;
|
||||
@ -1486,8 +1498,12 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "cn.star-lock.starLock";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Release;
|
||||
|
||||
@ -37,12 +37,12 @@
|
||||
[self.window makeKeyAndVisible];
|
||||
|
||||
//关闭可视对讲功能 需打开时再解注释
|
||||
[self initSound];
|
||||
_udp = [[UdpHelper alloc] init];
|
||||
[_udp Open];
|
||||
_talk = [[talk_Class alloc] init];
|
||||
//[self initSound];
|
||||
//_udp = [[UdpHelper alloc] init];
|
||||
//[_udp Open];
|
||||
//_talk = [[talk_Class alloc] init];
|
||||
|
||||
sysinfo.launchtime = [Sformat timestamp];
|
||||
//sysinfo.launchtime = [Sformat timestamp];
|
||||
|
||||
|
||||
return YES;
|
||||
|
||||
@ -108,7 +108,7 @@
|
||||
"size" : "83.5x83.5"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-1024x1024@1x.png",
|
||||
"filename" : "icon-1024.png",
|
||||
"idiom" : "ios-marketing",
|
||||
"scale" : "1x",
|
||||
"size" : "1024x1024"
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 50 KiB |
6
star_lock/ios/Runner/Assets.xcassets/Contents.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@ -2,22 +2,19 @@
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 68 B |
|
Before Width: | Height: | Size: 68 B |
|
Before Width: | Height: | Size: 68 B |
@ -1,8 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
@ -14,24 +16,28 @@
|
||||
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
|
||||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="lcokStarMain.png" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
|
||||
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="akv-M9-cg9"/>
|
||||
<constraint firstAttribute="bottom" secondItem="YRO-k0-Ey4" secondAttribute="bottom" id="dOX-RK-oMR"/>
|
||||
<constraint firstAttribute="trailing" secondItem="YRO-k0-Ey4" secondAttribute="trailing" id="ggK-0n-yNj"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="hJn-S1-TNY"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
<point key="canvasLocation" x="80.916030534351137" y="264.08450704225356"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="LaunchImage" width="168" height="185"/>
|
||||
<image name="lcokStarMain.png" width="750" height="1624"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
|
||||
BIN
star_lock/ios/Runner/lcokStarMain.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
@ -6,22 +6,15 @@ import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/ma
|
||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/addFamily/addFamily_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/catEyeWorkMode/catEyeWorkMode_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/coerceFingerprint/coerceFingerprint_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/coerceFingerprintList/coerceFingerprintList_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/coerceOpenDoor/coerceOpenDoor_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet/catEyeSet_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/faceUnlock/faceUnlock_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/familyDetails/familyDetails_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/lockUser/lockUser_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/lowBatteryReminder/lowBatteryReminder_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/motorPower/motorPower_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/msgNotification/msgNotification_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/msgNotification/msgNotification/msgNotification_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/notificationMode/notificationMode_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/openDoorDirection/openDoorDirection_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/openDoorNotify/openDoorNotify_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_main_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/nDaysUnopened/nDaysUnopened_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/otherTypeKey/addFace/addFace_page.dart';
|
||||
import 'package:star_lock/mine/about/webviewShow_page.dart';
|
||||
import 'package:star_lock/mine/mine/safeVerify/safeVerify_page.dart';
|
||||
@ -63,6 +56,7 @@ import 'main/lockDetail/lcokSet/basicInformation/editLockName/editLockName_page.
|
||||
import 'main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/lockSeletGrouping_page.dart';
|
||||
import 'main/lockDetail/lcokSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_page.dart';
|
||||
import 'main/lockDetail/lcokSet/burglarAlarm/burglarAlarm_page.dart';
|
||||
import 'main/lockDetail/lcokSet/catEyeSet/catEyeWorkMode/catEyeWorkMode_page.dart';
|
||||
import 'main/lockDetail/lcokSet/checkInCreatCompany/checkInCreatCompany_page.dart';
|
||||
import 'main/lockDetail/lcokSet/configuringWifi/configuringWifi_page.dart';
|
||||
import 'main/lockDetail/lcokSet/diagnose/diagnose_page.dart';
|
||||
@ -75,6 +69,12 @@ import 'main/lockDetail/lcokSet/lockSet/lockSet_page.dart';
|
||||
import 'main/lockDetail/lcokSet/lockSoundSet/lockSoundSet_page.dart';
|
||||
import 'main/lockDetail/lcokSet/lockTime/lockTime_page.dart';
|
||||
import 'main/lockDetail/lcokSet/markedHouseState/markedHouseState_page.dart';
|
||||
import 'main/lockDetail/lcokSet/msgNotification/coerceOpenDoor/coerceFingerprint/coerceFingerprint_page.dart';
|
||||
import 'main/lockDetail/lcokSet/msgNotification/coerceOpenDoor/coerceFingerprintList/coerceFingerprintList_page.dart';
|
||||
import 'main/lockDetail/lcokSet/msgNotification/coerceOpenDoor/coerceOpenDoor/coerceOpenDoor_page.dart';
|
||||
import 'main/lockDetail/lcokSet/msgNotification/lowBatteryReminder/lowBatteryReminder_page.dart';
|
||||
import 'main/lockDetail/lcokSet/msgNotification/nDaysUnopened/nDaysUnopened_page.dart';
|
||||
import 'main/lockDetail/lcokSet/msgNotification/openDoorNotify/openDoorNotify_page.dart';
|
||||
import 'main/lockDetail/lcokSet/normallyOpenMode/normallyOpenMode_page.dart';
|
||||
import 'main/lockDetail/lcokSet/remoteUnlocking/remoteUnlocking_page.dart';
|
||||
import 'main/lockDetail/lcokSet/resetButton/resetButton_page.dart';
|
||||
|
||||
@ -120,6 +120,10 @@ class BlueManage{
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(deviceConnectionState == DeviceConnectionState.connected){
|
||||
return;
|
||||
}
|
||||
_flutterReactiveBle!.connectToDevice(id: connectDeviceMacAddress, connectionTimeout: const Duration(seconds: 100000)).listen((connectionStateUpdate) async {
|
||||
// 获取状态
|
||||
deviceConnectionState = connectionStateUpdate.connectionState;
|
||||
@ -214,12 +218,15 @@ class BlueManage{
|
||||
}
|
||||
|
||||
// 重新连接
|
||||
Future<void> judgeReconnect(String deviceMAC, String deviceName, ConnectStateCallBack? connectStateCallBack, {bool isShowLoading = true}) async {
|
||||
Future<void> judgeReconnect(String deviceMAC, String deviceName, ConnectStateCallBack? connectStateCallBack, {bool isShowLoading = true, bool isShowToast = true}) async {
|
||||
// print("11111111$deviceConnectionState");
|
||||
if(deviceMAC.isEmpty){
|
||||
Toast.show(msg: "未连接到设备,请确保在设备附近,设备未被连接,设备已打开");
|
||||
// return;
|
||||
if(isShowToast){
|
||||
if(deviceMAC.isEmpty){
|
||||
Toast.show(msg: "未连接到设备,请确保在设备附近,设备未被连接,设备已打开");
|
||||
// return;
|
||||
}
|
||||
}
|
||||
|
||||
if(deviceConnectionState == DeviceConnectionState.connected){
|
||||
// print("2222222:$deviceConnectionState");
|
||||
if(isShowLoading){
|
||||
@ -303,7 +310,7 @@ class BlueManage{
|
||||
// 当包有头时
|
||||
// 判断是否需要分包
|
||||
dataLen = data[8] * 256 + data[9];
|
||||
print("dataLen1111:$dataLen getDataLength:${data.length}");
|
||||
// print("dataLen1111:$dataLen getDataLength:${data.length}");
|
||||
if(dataLen + 12 > data.length){
|
||||
// 当前包的长度小于实际的包时 分包添加 不解析
|
||||
allData.addAll(data);
|
||||
@ -318,7 +325,7 @@ class BlueManage{
|
||||
// 当包没有头时 是分包的包 直接添加
|
||||
allData.addAll(data);
|
||||
// var len = allData[8] * 256 + allData[9];
|
||||
print("dataLen222:$dataLen");
|
||||
// print("dataLen222:$dataLen");
|
||||
if(dataLen <= (allData.length - 14)){
|
||||
// 当长度小于等于当前包的数据时 直接解析数据
|
||||
CommandReciverManager.appDataReceive(allData);
|
||||
|
||||
@ -13,6 +13,7 @@ class OpenLockCommand extends SenderProtocol {
|
||||
String? userID;
|
||||
int? openMode;
|
||||
int? openTime;
|
||||
String? onlineToken;
|
||||
List<int>? token;
|
||||
int? needAuthor;
|
||||
List<int>? signKey;
|
||||
@ -22,6 +23,7 @@ class OpenLockCommand extends SenderProtocol {
|
||||
this.userID,
|
||||
this.openMode,
|
||||
this.openTime,
|
||||
this.onlineToken,
|
||||
this.token,
|
||||
this.needAuthor,
|
||||
this.signKey,
|
||||
@ -102,6 +104,15 @@ class OpenLockCommand extends SenderProtocol {
|
||||
data.addAll(authCode.bytes);
|
||||
}
|
||||
|
||||
//onlineToken 16
|
||||
print("onlineToken:$onlineToken");
|
||||
if(onlineToken!.isNotEmpty){
|
||||
int onlineTokenLength = utf8.encode(onlineToken!).length;
|
||||
print("openDoorOnlineToken:${utf8.encode(onlineToken!)} utf8.encode(onlineToken!).length:${utf8.encode(onlineToken!).length}");
|
||||
data.addAll(utf8.encode(onlineToken!));
|
||||
data = getFixedLengthList(data, 16 - onlineTokenLength);
|
||||
}
|
||||
|
||||
if ((data.length % 16) != 0) {
|
||||
int add = (16 - data.length % 16);
|
||||
for (int i = 0; i < add; i++) {
|
||||
|
||||
@ -8,7 +8,7 @@ import '../io_sender.dart';
|
||||
import '../io_type.dart';
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
//TODO:设置自定义密码
|
||||
//TODO:设置开锁密码(备注:先添加管理员密码, 管理员满了后就是开锁密码)
|
||||
/*
|
||||
备注:删除单个密码规则:pwd 设置为 6 个 0,UseCountLimit 设置为 0。删除全部密码规则:pwd 设置为 6 个 0,UseCountLimit 设置为 0,pwdNo 设置为 255,userId 设置为“DeleteAll !@#”,只有门锁管理员才有权限
|
||||
**/
|
||||
|
||||
@ -161,6 +161,7 @@ class IoSenderManage {
|
||||
String? userID,
|
||||
int? openMode,
|
||||
int? openTime,
|
||||
String? onlineToken,
|
||||
List<int>? token,
|
||||
int? needAuthor,
|
||||
List<int>? signKey,
|
||||
@ -172,6 +173,7 @@ class IoSenderManage {
|
||||
userID: userID,
|
||||
openMode: openMode,
|
||||
openTime: openTime,
|
||||
onlineToken: onlineToken,
|
||||
token: token,
|
||||
needAuthor: needAuthor,
|
||||
signKey: signKey,
|
||||
|
||||
@ -194,24 +194,6 @@ class _AuthorizedAdminDetailPageState extends State<AuthorizedAdminDetailPage> {
|
||||
hintText: "请输入要修改的名字",
|
||||
//不需要输入框下划线
|
||||
border: InputBorder.none,
|
||||
//左边图标设置
|
||||
// icon: Padding(
|
||||
// padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w),
|
||||
// child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,),
|
||||
// ),
|
||||
// //右边图标设置
|
||||
// suffixIcon: GestureDetector(
|
||||
// onTap: () {
|
||||
// //addPostFrameCallback是 StatefulWidge 渲染结束的回调,只会被调用一次
|
||||
// // SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||
// // _controller.text = "";
|
||||
// // });
|
||||
// },
|
||||
// child: Padding(
|
||||
// padding: EdgeInsets.all(8),
|
||||
// child: Image.asset('images/main/icon_main_cell.png', width: 50.w, height: 50.w,),
|
||||
// ),
|
||||
// )
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@ -79,7 +79,7 @@ class _SendElectronicKeyManageTabbarState
|
||||
return Tab(
|
||||
// text: item.title,
|
||||
child: Container(
|
||||
width: 1.sw / 8,
|
||||
// width: 1.sw / 8,
|
||||
margin: EdgeInsets.all(10.w),
|
||||
// color: Colors.red,
|
||||
child: Text(
|
||||
|
||||
@ -138,7 +138,7 @@ class AutomaticBlockingLogic extends BaseGetXController{
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置支持功能(带参数)
|
||||
|
||||
@ -36,7 +36,7 @@ class AdminOpenLockPasswordLogic extends BaseGetXController{
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@ -133,7 +133,7 @@ class BurglarAlarmLogic extends BaseGetXController{
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置支持功能(带参数)
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet_state.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
|
||||
import 'catEyeSet_state.dart';
|
||||
|
||||
class CatEyeSetLogic extends BaseGetXController {
|
||||
final CatEyeSetState state = CatEyeSetState();
|
||||
}
|
||||
@ -1,13 +1,14 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet_logic.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet/catEyeSet_logic.dart';
|
||||
import 'package:star_lock/tools/commonItem.dart';
|
||||
import 'package:star_lock/tools/custom_bottom_sheet.dart';
|
||||
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../tools/titleAppBar.dart';
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
|
||||
class CatEyeSetPage extends StatefulWidget {
|
||||
const CatEyeSetPage({Key? key}) : super(key: key);
|
||||
@ -23,7 +24,7 @@ class _CatEyeSetPageState extends State<CatEyeSetPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle: '猫眼设置',
|
||||
haveBack: true,
|
||||
@ -33,6 +34,7 @@ class _CatEyeSetPageState extends State<CatEyeSetPage> {
|
||||
CommonItem(
|
||||
leftTitel: '猫眼工作模式',
|
||||
rightTitle: "",
|
||||
allHeight: 70.h,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
@ -1,8 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../tools/titleAppBar.dart';
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
|
||||
|
||||
class CatEyeWorkModePage extends StatefulWidget {
|
||||
const CatEyeWorkModePage({Key? key}) : super(key: key);
|
||||
@ -172,7 +172,7 @@ class ConfiguringWifiLogic extends BaseGetXController{
|
||||
privateKey: getPrivateKeyList,
|
||||
);
|
||||
}
|
||||
});
|
||||
}, isShowLoading: true);
|
||||
}
|
||||
|
||||
final _networkInfo = NetworkInfo();
|
||||
|
||||
@ -33,6 +33,7 @@ class _FaceUnlockPageState extends State<FaceUnlockPage> {
|
||||
CommonItem(
|
||||
leftTitel: '面容开锁',
|
||||
rightTitle: "",
|
||||
allHeight: 70.h,
|
||||
isHaveLine: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget:
|
||||
|
||||
@ -202,7 +202,13 @@ class LockSetLogic extends BaseGetXController {
|
||||
//成功
|
||||
print("${reply.commandType}数据解析成功");
|
||||
// Toast.show(msg: "操作成功");featureEnable = state.isOpenStayWarn.value == 1 ? 0 : 1;
|
||||
if(state.settingUpSupportFeatures == 56){
|
||||
if(state.settingUpSupportFeatures == 55){
|
||||
// APP开锁时是否需联网
|
||||
state.isOpenLockNeedOnline.value = state.isOpenLockNeedOnline.value == 1 ? 0 : 1;
|
||||
state.lockSetInfoData.value.lockSettingInfo!.appUnlockOnline = state.isOpenLockNeedOnline.value;
|
||||
setLockSetOpenLockNeedOnline();
|
||||
eventBus.fire(LockSetChangeSetRefreshLockDetailWithType(0, state.lockSetInfoData.value.lockSettingInfo!.appUnlockOnline!));
|
||||
}else if(state.settingUpSupportFeatures == 56){
|
||||
// 蓝牙广播
|
||||
state.isOpenBlueBroadcast.value = state.isOpenBlueBroadcast.value == 1 ? 0 : 1;
|
||||
state.lockSetInfoData.value.lockSettingInfo!.bluetoothBroadcast = state.isOpenBlueBroadcast.value;
|
||||
@ -215,7 +221,6 @@ class LockSetLogic extends BaseGetXController {
|
||||
state.isOpenExceptionWarnings.value = state.isOpenExceptionWarnings.value == 1 ? 0 : 1;
|
||||
state.lockSetInfoData.value.lockSettingInfo!.abnormalWarn = state.isOpenExceptionWarnings.value;
|
||||
}
|
||||
|
||||
print("isOpenBlueBroadcast111:${state.isOpenBlueBroadcast.value}");
|
||||
break;
|
||||
case 0x06:
|
||||
@ -337,7 +342,10 @@ class LockSetLogic extends BaseGetXController {
|
||||
state.settingUpSupportFeatures = type;
|
||||
|
||||
var featureEnable = 0;
|
||||
if(type == 56){
|
||||
if(type == 55){
|
||||
// APP开锁时是否需联网
|
||||
featureEnable = state.isOpenLockNeedOnline.value == 1 ? 0 : 1;
|
||||
}else if(type == 56){
|
||||
// 蓝牙广播
|
||||
featureEnable = state.isOpenBlueBroadcast.value == 1 ? 0 : 1;
|
||||
}else if(type == 61){
|
||||
@ -371,9 +379,11 @@ class LockSetLogic extends BaseGetXController {
|
||||
state.lockFeature.value = state.lockSetInfoData.value.lockFeature!;
|
||||
state.lockStatus.value = state.lockSetInfoData.value.lockStatus!;
|
||||
state.isAttendance.value = state.lockSettingInfo.value.attendance!;
|
||||
state.isOpenLockNeedOnline.value = state.lockSettingInfo.value.appUnlockOnline!;
|
||||
|
||||
state.isOpenBlueBroadcast.value = state.lockSettingInfo.value.bluetoothBroadcast!;
|
||||
state.isOpenExceptionWarnings.value = state.lockSettingInfo.value.bluetoothBroadcast!;
|
||||
|
||||
// await _readSupportFunctionsNoParameters(56);
|
||||
// _readSupportFunctionsNoParameters(62);
|
||||
}
|
||||
@ -406,7 +416,7 @@ class LockSetLogic extends BaseGetXController {
|
||||
password: state.passwordTF.text,
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
// deletLockInfoData();
|
||||
deletLockInfoData();
|
||||
|
||||
blockDeletNumberCheckPasswordCallback();
|
||||
// if(state.currentDeviceUUid.value.isEmpty){
|
||||
@ -459,6 +469,8 @@ class LockSetLogic extends BaseGetXController {
|
||||
|
||||
state.isAttendance.value = (state.isAttendance.value == 1 ? 0 : 1);
|
||||
state.lockSettingInfo.value.attendance = state.isAttendance.value;
|
||||
|
||||
eventBus.fire(LockSetChangeSetRefreshLockDetailWithType(0, state.lockSettingInfo.value.attendance!));
|
||||
print("state.lockSettingInfo.value.attendance:${state.lockSettingInfo.value.attendance}");
|
||||
Toast.show(msg: "设置成功");
|
||||
}
|
||||
@ -479,6 +491,24 @@ class LockSetLogic extends BaseGetXController {
|
||||
} else {}
|
||||
}
|
||||
|
||||
// 设置是否打开开锁时是否需联网
|
||||
void setLockSetOpenLockNeedOnline() async {
|
||||
var entity = await ApiRepository.to.setOpenLockNeedOnlineData(
|
||||
lockId: state.lockSetInfoData.value.lockId!,
|
||||
appUnlockOnline:state.isOpenLockNeedOnline.value == 1 ? 0 : 1,
|
||||
);
|
||||
if(entity.errorCode!.codeIsSuccessful){
|
||||
eventBus.fire(RefreshLockListInfoDataEvent());
|
||||
|
||||
state.isAttendance.value = (state.isAttendance.value == 1 ? 0 : 1);
|
||||
state.lockSettingInfo.value.attendance = state.isAttendance.value;
|
||||
|
||||
eventBus.fire(LockSetChangeSetRefreshLockDetailWithType(0, state.lockSettingInfo.value.attendance!));
|
||||
print("state.lockSettingInfo.value.attendance:${state.lockSettingInfo.value.attendance}");
|
||||
Toast.show(msg: "设置成功");
|
||||
}
|
||||
}
|
||||
|
||||
// 下级界面修改成功后传递数据
|
||||
StreamSubscription? _passCurrentLockInformationEvent;
|
||||
void initLoadDataAction(BlockSetStateCallback blockSetStateCallback) {
|
||||
|
||||
@ -414,6 +414,19 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: _lockRemindSwitch())),
|
||||
),
|
||||
// APP开锁时是否需联网
|
||||
Obx(() =>
|
||||
Visibility(
|
||||
visible: state.lockFeature.value.appUnlockOnline == 1 ? true : false,
|
||||
child:
|
||||
CommonItem(
|
||||
leftTitel: "开锁时是否需联网",
|
||||
rightTitle: "",
|
||||
isHaveLine: false,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: _openLockNeedOnlineSwitch()),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10.h),
|
||||
// wifi配网
|
||||
Obx(
|
||||
@ -533,6 +546,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
||||
style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor));
|
||||
}
|
||||
|
||||
// 开启考勤
|
||||
CupertinoSwitch _openCheckInSwitch() {
|
||||
// print("111111state.lockSettingInfo.value.attendance:${state.lockSettingInfo.value.attendance}");
|
||||
return CupertinoSwitch(
|
||||
@ -552,6 +566,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
||||
);
|
||||
}
|
||||
|
||||
// 开锁提醒
|
||||
CupertinoSwitch _lockRemindSwitch() {
|
||||
return CupertinoSwitch(
|
||||
activeColor: CupertinoColors.activeBlue,
|
||||
@ -566,6 +581,21 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
||||
);
|
||||
}
|
||||
|
||||
// APP开锁时是否需联网
|
||||
CupertinoSwitch _openLockNeedOnlineSwitch() {
|
||||
return CupertinoSwitch(
|
||||
activeColor: CupertinoColors.activeBlue,
|
||||
trackColor: CupertinoColors.systemGrey5,
|
||||
thumbColor: CupertinoColors.white,
|
||||
value: (state.isOpenLockNeedOnline.value) == 1 ? true : false,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
logic.sendBurglarAlarm(55);
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// 异常警告
|
||||
CupertinoSwitch _lockExceptionWarningsSwitch() {
|
||||
print("isOpenBlueBroadcast222:${state.isOpenExceptionWarnings.value}");
|
||||
|
||||
@ -13,6 +13,7 @@ class LockSetState {
|
||||
|
||||
var isAttendance = 0.obs;// 是否开启考勤
|
||||
var currentDeviceUUid = "".obs;// 当前设备的uuid
|
||||
var isOpenLockNeedOnline = 0.obs;// APP开锁时是否需联网
|
||||
|
||||
var isLockPickingReminder = 0.obs;// 是否开启开锁提醒
|
||||
var isOpenBlueBroadcast = 0.obs;// 是否开启蓝牙广播
|
||||
|
||||
@ -141,7 +141,7 @@ class LockSoundSetLogic extends BaseGetXController {
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置支持功能(带参数)
|
||||
|
||||
@ -31,58 +31,58 @@ class LockTimeLogic extends BaseGetXController{
|
||||
}
|
||||
|
||||
// 获取锁状态
|
||||
if(reply is GetLockStatuReply) {
|
||||
_replyGetLockStatus(reply);
|
||||
}
|
||||
// if(reply is GetLockStatuReply) {
|
||||
// _replyGetLockStatus(reply);
|
||||
// }
|
||||
});
|
||||
}
|
||||
|
||||
// 获取锁状态数据解析
|
||||
Future<void> _replyGetLockStatus(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
switch(status){
|
||||
case 0x00:
|
||||
//成功
|
||||
print("${reply.commandType}数据解析成功");
|
||||
|
||||
// 锁当前时间
|
||||
var lockTime = reply.data.sublist(60, 64);
|
||||
|
||||
int value = (
|
||||
(0xff & lockTime[(0)]) << 24 |
|
||||
(0xff & lockTime[1]) << 16 |
|
||||
(0xff & lockTime[2]) << 8 |
|
||||
(0xFF & lockTime[3]));
|
||||
|
||||
String dataEime = DateTool().dateToYMDHNSString("$value");
|
||||
state.dateTime.value = dataEime;
|
||||
|
||||
// String dataEime = DateTool().dateToYMDHNSString("${value}");
|
||||
// state.dateTime.value = dataEime;
|
||||
print("lockTime:$lockTime value:$value dataEime:$dataEime");
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
print("${reply.commandType}需要鉴权");
|
||||
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("${reply.commandType}用户无权限");
|
||||
|
||||
break;
|
||||
case 0x09:
|
||||
// 权限校验错误
|
||||
print("${reply.commandType}权限校验错误");
|
||||
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("${reply.commandType}失败");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Future<void> _replyGetLockStatus(Reply reply) async {
|
||||
// int status = reply.data[2];
|
||||
// switch(status){
|
||||
// case 0x00:
|
||||
// //成功
|
||||
// print("${reply.commandType}数据解析成功");
|
||||
//
|
||||
// // 锁当前时间
|
||||
// var lockTime = reply.data.sublist(60, 64);
|
||||
//
|
||||
// int value = (
|
||||
// (0xff & lockTime[(0)]) << 24 |
|
||||
// (0xff & lockTime[1]) << 16 |
|
||||
// (0xff & lockTime[2]) << 8 |
|
||||
// (0xFF & lockTime[3]));
|
||||
//
|
||||
// String dataEime = DateTool().dateToYMDHNSString("$value");
|
||||
// state.dateTime.value = dataEime;
|
||||
//
|
||||
// // String dataEime = DateTool().dateToYMDHNSString("${value}");
|
||||
// // state.dateTime.value = dataEime;
|
||||
// print("lockTime:$lockTime value:$value dataEime:$dataEime");
|
||||
// break;
|
||||
// case 0x06:
|
||||
// //无权限
|
||||
// print("${reply.commandType}需要鉴权");
|
||||
//
|
||||
// break;
|
||||
// case 0x07:
|
||||
// //无权限
|
||||
// print("${reply.commandType}用户无权限");
|
||||
//
|
||||
// break;
|
||||
// case 0x09:
|
||||
// // 权限校验错误
|
||||
// print("${reply.commandType}权限校验错误");
|
||||
//
|
||||
// break;
|
||||
// default:
|
||||
// //失败
|
||||
// print("${reply.commandType}失败");
|
||||
//
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// 校时数据解析
|
||||
Future<void> _replyTiming(Reply reply) async {
|
||||
@ -129,20 +129,20 @@ class LockTimeLogic extends BaseGetXController{
|
||||
}
|
||||
|
||||
// 获取锁状态
|
||||
Future<void> _getLockStatus() async {
|
||||
// 进来之后首先连接
|
||||
BlueManage().judgeReconnect(BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName, (DeviceConnectionState state) async {
|
||||
if (state == DeviceConnectionState.connected) {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
IoSenderManage.senderGetLockStatu(
|
||||
lockID:BlueManage().connectDeviceName,
|
||||
userID:await Storage.getUid(),
|
||||
privateKey:getPrivateKeyList,
|
||||
);
|
||||
}
|
||||
}, isShowLoading: false);
|
||||
}
|
||||
// Future<void> _getLockStatus() async {
|
||||
// // 进来之后首先连接
|
||||
// BlueManage().judgeReconnect(BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName, (DeviceConnectionState state) async {
|
||||
// if (state == DeviceConnectionState.connected) {
|
||||
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
// IoSenderManage.senderGetLockStatu(
|
||||
// lockID:BlueManage().connectDeviceName,
|
||||
// userID:await Storage.getUid(),
|
||||
// privateKey:getPrivateKeyList,
|
||||
// );
|
||||
// }
|
||||
// }, isShowLoading: false);
|
||||
// }
|
||||
|
||||
// 校验时间
|
||||
Future<void> sendTiming() async {
|
||||
|
||||
@ -132,7 +132,7 @@ class MotorPowerLogic extends BaseGetXController {
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置支持功能(带参数)
|
||||
|
||||
@ -5,8 +5,8 @@ import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/tools/commonItem.dart';
|
||||
import 'package:star_lock/tools/submitBtn.dart';
|
||||
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
import '../../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../../tools/titleAppBar.dart';
|
||||
|
||||
class CoerceFingerprintPage extends StatefulWidget {
|
||||
const CoerceFingerprintPage({Key? key}) : super(key: key);
|
||||
@ -2,10 +2,11 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/lockUser/lockUser_logic.dart';
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../tools/submitBtn.dart';
|
||||
import '../../../../tools/titleAppBar.dart';
|
||||
import '../../../../translations/trans_lib.dart';
|
||||
|
||||
import '../../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../../tools/submitBtn.dart';
|
||||
import '../../../../../../tools/titleAppBar.dart';
|
||||
import '../../../../../../translations/trans_lib.dart';
|
||||
|
||||
class CoerceFingerprintListPage extends StatefulWidget {
|
||||
const CoerceFingerprintListPage({Key? key}) : super(key: key);
|
||||
@ -1,6 +1,7 @@
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/coerceOpenDoor/coerceOpenDoor_state.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
|
||||
import 'coerceOpenDoor_state.dart';
|
||||
|
||||
class CoerceOpenDoorLogic extends BaseGetXController {
|
||||
final CoerceOpenDoorState state = CoerceOpenDoorState();
|
||||
}
|
||||
@ -2,10 +2,11 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/coerceOpenDoor/coerceOpenDoor_logic.dart';
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../tools/submitBtn.dart';
|
||||
import '../../../../tools/titleAppBar.dart';
|
||||
|
||||
import '../../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../../tools/submitBtn.dart';
|
||||
import '../../../../../../tools/titleAppBar.dart';
|
||||
import 'coerceOpenDoor_logic.dart';
|
||||
|
||||
class CoerceOpenDoorPage extends StatefulWidget {
|
||||
const CoerceOpenDoorPage({Key? key}) : super(key: key);
|
||||
@ -1,6 +1,7 @@
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/lowBatteryReminder/lowBatteryReminder_state.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
|
||||
import 'lowBatteryReminder_state.dart';
|
||||
|
||||
class LowBatteryReminderLogic extends BaseGetXController {
|
||||
LowBatteryReminderState state = LowBatteryReminderState();
|
||||
}
|
||||
@ -3,12 +3,12 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/lowBatteryReminder/lowBatteryReminder_logic.dart';
|
||||
import 'package:star_lock/tools/commonItem.dart';
|
||||
import 'package:star_lock/tools/submitBtn.dart';
|
||||
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
import 'lowBatteryReminder_logic.dart';
|
||||
|
||||
class LowBatteryReminderPage extends StatefulWidget {
|
||||
const LowBatteryReminderPage({Key? key}) : super(key: key);
|
||||
@ -1,5 +1,6 @@
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/msgNotification/msgNotification_state.dart';
|
||||
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import 'msgNotification_state.dart';
|
||||
|
||||
class MsgNotificationLogic extends BaseGetXController {
|
||||
final MsgNotificationState state = MsgNotificationState();
|
||||
@ -3,11 +3,11 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/msgNotification/msgNotification_logic.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/msgNotification/msgNotification/msgNotification_logic.dart';
|
||||
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../tools/commonItem.dart';
|
||||
import '../../../../tools/titleAppBar.dart';
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/commonItem.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
|
||||
class MsgNotificationPage extends StatefulWidget {
|
||||
const MsgNotificationPage({Key? key}) : super(key: key);
|
||||
@ -38,7 +38,7 @@ class _MsgNotificationPageState extends State<MsgNotificationPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle: '消息提醒',
|
||||
haveBack: true,
|
||||
@ -51,31 +51,33 @@ class _MsgNotificationPageState extends State<MsgNotificationPage> {
|
||||
Widget _buildMainItem() {
|
||||
return Column(
|
||||
children: [
|
||||
Container(
|
||||
alignment: Alignment.centerLeft,
|
||||
margin: EdgeInsets.only(left: 40.w, top: 40.h, bottom: 30.h),
|
||||
child: Text(
|
||||
'门锁通知',
|
||||
style:
|
||||
TextStyle(color: AppColors.msgNoticeTextColor, fontSize: 24.sp),
|
||||
),
|
||||
),
|
||||
// Container(
|
||||
// alignment: Alignment.centerLeft,
|
||||
// margin: EdgeInsets.only(left: 40.w, top: 20.h, bottom: 20.h),
|
||||
// child: Text(
|
||||
// '门锁通知',
|
||||
// style: TextStyle(color: Colors.black, fontSize: 26.sp, fontWeight: FontWeight.w500),
|
||||
// ),
|
||||
// ),
|
||||
// Divider(
|
||||
// color: AppColors.greyLineColor,
|
||||
// indent: 20.w,
|
||||
// endIndent: 20.w,
|
||||
// height: 1,
|
||||
// ),
|
||||
CommonItem(
|
||||
leftTitel: '开门通知',
|
||||
rightTitle: "已启用",
|
||||
isHaveLine: false,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
Get.toNamed(Routers.openDoorNotifyPage);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
CommonItem(
|
||||
leftTitel: 'N天未开门',
|
||||
rightTitle: "已启用",
|
||||
isHaveLine: false,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
Get.toNamed(Routers.nDaysUnopenedPage);
|
||||
@ -91,40 +93,28 @@ class _MsgNotificationPageState extends State<MsgNotificationPage> {
|
||||
// isHaveRightWidget: true,
|
||||
// rightWidget:
|
||||
// SizedBox(width: 60.w, height: 50.h, child: _switch(1)))),
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: '门未关好',
|
||||
rightTitle: "",
|
||||
isHaveLine: false,
|
||||
isHaveLine: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget:
|
||||
SizedBox(width: 60.w, height: 50.h, child: _switch(2)))),
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
CommonItem(
|
||||
leftTitel: '防拆报警',
|
||||
rightTitle: "已启用",
|
||||
isHaveLine: false,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
CommonItem(
|
||||
leftTitel: '低电量提醒',
|
||||
rightTitle: "已启用",
|
||||
isHaveLine: false,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
Get.toNamed(Routers.lowBatteryReminderPage);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
CommonItem(
|
||||
leftTitel: '胁迫开门',
|
||||
rightTitle: "",
|
||||
@ -134,17 +124,16 @@ class _MsgNotificationPageState extends State<MsgNotificationPage> {
|
||||
Get.toNamed(Routers.coerceOpenDoorPage);
|
||||
},
|
||||
),
|
||||
// Container(
|
||||
// alignment: Alignment.centerLeft,
|
||||
// margin: EdgeInsets.only(left: 40.w, top: 20.h, bottom: 20.h),
|
||||
// child: Text(
|
||||
// '门铃通知',
|
||||
// style: TextStyle(color: Colors.black, fontSize: 26.sp, fontWeight: FontWeight.w500),
|
||||
// ),
|
||||
// ),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Container(
|
||||
alignment: Alignment.centerLeft,
|
||||
margin: EdgeInsets.only(left: 40.w, top: 40.h, bottom: 30.h),
|
||||
child: Text(
|
||||
'门铃通知',
|
||||
style:
|
||||
TextStyle(color: AppColors.msgNoticeTextColor, fontSize: 24.sp),
|
||||
),
|
||||
height: 10.h,
|
||||
),
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: '有人按门铃',
|
||||
@ -153,22 +142,21 @@ class _MsgNotificationPageState extends State<MsgNotificationPage> {
|
||||
isHaveRightWidget: true,
|
||||
rightWidget:
|
||||
SizedBox(width: 60.w, height: 50.h, child: _switch(3)))),
|
||||
// Container(
|
||||
// alignment: Alignment.centerLeft,
|
||||
// margin: EdgeInsets.only(left: 40.w, top: 40.h, bottom: 30.h),
|
||||
// child: Text(
|
||||
// '猫眼通知',
|
||||
// style:TextStyle(color: Colors.black, fontSize: 26.sp, fontWeight: FontWeight.w500)
|
||||
// ),
|
||||
// ),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Container(
|
||||
alignment: Alignment.centerLeft,
|
||||
margin: EdgeInsets.only(left: 40.w, top: 40.h, bottom: 30.h),
|
||||
child: Text(
|
||||
'猫眼通知',
|
||||
style:
|
||||
TextStyle(color: AppColors.msgNoticeTextColor, fontSize: 24.sp),
|
||||
),
|
||||
height: 10.h,
|
||||
),
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: '有人出现在门口',
|
||||
rightTitle: "",
|
||||
isHaveLine: false,
|
||||
isHaveLine: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget:
|
||||
SizedBox(width: 60.w, height: 50.h, child: _switch(4)))),
|
||||
@ -1,6 +1,7 @@
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/nDaysUnopened/nDaysUnopened_state.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
|
||||
import 'nDaysUnopened_state.dart';
|
||||
|
||||
class NDaysUnopenedLogic extends BaseGetXController {
|
||||
NDaysUnopenedState state = NDaysUnopenedState();
|
||||
}
|
||||
@ -5,12 +5,12 @@ import 'package:flutter_pickers/style/default_style.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/nDaysUnopened/nDaysUnopened_logic.dart';
|
||||
import 'package:star_lock/tools/commonItem.dart';
|
||||
import 'package:star_lock/tools/submitBtn.dart';
|
||||
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
import 'nDaysUnopened_logic.dart';
|
||||
|
||||
class NDaysUnopenedPage extends StatefulWidget {
|
||||
const NDaysUnopenedPage({Key? key}) : super(key: key);
|
||||
@ -1,5 +1,6 @@
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/openDoorNotify/openDoorNotify_state.dart';
|
||||
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import 'openDoorNotify_state.dart';
|
||||
|
||||
class OpenDoorNotifyLogic extends BaseGetXController {
|
||||
final OpenDoorNotifyState state = OpenDoorNotifyState();
|
||||
@ -2,10 +2,11 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/main/lockDetail/lcokSet/openDoorNotify/openDoorNotify_logic.dart';
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../tools/submitBtn.dart';
|
||||
import '../../../../tools/titleAppBar.dart';
|
||||
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/submitBtn.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
import 'openDoorNotify_logic.dart';
|
||||
|
||||
class OpenDoorNotifyPage extends StatefulWidget {
|
||||
const OpenDoorNotifyPage({Key? key}) : super(key: key);
|
||||
@ -160,7 +160,7 @@ class NormallyOpenModeLogic extends BaseGetXController{
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置支持功能(带参数)
|
||||
|
||||
@ -134,7 +134,7 @@ class OpenDoorDirectionLogic extends BaseGetXController {
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置支持功能(带参数)
|
||||
|
||||
@ -135,7 +135,7 @@ class ResetButtonLogic extends BaseGetXController{
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
}, isShowLoading: true);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置支持功能(带参数)
|
||||
|
||||
@ -27,7 +27,7 @@ class _UploadDataPageState extends State<UploadDataPage> {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(child: Text(TranslationLoader.lanKeys!.uploadDataTip!.tr, style: TextStyle(fontSize: 24.sp,),)),
|
||||
Expanded(child: Text(TranslationLoader.lanKeys!.uploadDataTip!.tr, style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor),)),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 30.h,),
|
||||
|
||||
@ -1,14 +1,10 @@
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_editUser.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_factoryDataReset.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_getLockStatu.dart';
|
||||
import 'package:star_lock/blue/io_type.dart';
|
||||
import 'package:star_lock/tools/toast.dart';
|
||||
@ -18,12 +14,9 @@ import '../../../blue/io_protocol/io_getStarLockStatusInfo.dart';
|
||||
import '../../../blue/io_protocol/io_openLock.dart';
|
||||
import '../../../blue/io_protocol/io_referEventRecordTime.dart';
|
||||
import '../../../blue/io_reply.dart';
|
||||
import '../../../blue/io_tool/io_manager.dart';
|
||||
import '../../../blue/io_tool/io_tool.dart';
|
||||
import '../../../blue/io_tool/manager_event_bus.dart';
|
||||
import '../../../blue/sender_manage.dart';
|
||||
import '../../../login/login/entity/LoginData.dart';
|
||||
import '../../../login/login/entity/LoginEntity.dart';
|
||||
import '../../../network/api_repository.dart';
|
||||
import '../../../tools/baseGetXController.dart';
|
||||
import '../../../tools/eventBusEventManage.dart';
|
||||
@ -31,6 +24,7 @@ import '../../../tools/storage.dart';
|
||||
import '../electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart';
|
||||
import '../lockOperatingRecord/lockOperatingRecordGetLastRecordTime_entity.dart';
|
||||
import 'lockDetail_state.dart';
|
||||
import 'lockNetToken_entity.dart';
|
||||
|
||||
class LockDetailLogic extends BaseGetXController{
|
||||
final LockDetailState state = LockDetailState();
|
||||
@ -44,15 +38,10 @@ class LockDetailLogic extends BaseGetXController{
|
||||
_replyOpenLock(reply);
|
||||
}
|
||||
|
||||
// 获取锁状态
|
||||
if(reply is GetLockStatuReply) {
|
||||
_replyGetLockStatus(reply);
|
||||
}
|
||||
|
||||
// 编辑锁用户
|
||||
if(reply is EditUserReply){
|
||||
_replyEditUserKey(reply);
|
||||
}
|
||||
// if(reply is EditUserReply){
|
||||
// _replyEditUserKey(reply);
|
||||
// }
|
||||
|
||||
// 获取星锁状态信息
|
||||
if(reply is GetStarLockStatuInfoReply){
|
||||
@ -76,11 +65,12 @@ class LockDetailLogic extends BaseGetXController{
|
||||
|
||||
var tokenData = reply.data.sublist(2, 6);
|
||||
var saveStrList = changeIntListToStringList(tokenData);
|
||||
print("openDoorToken:$tokenData");
|
||||
// print("openDoorToken:$tokenData");
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
// 电量
|
||||
int power = reply.data[7];
|
||||
state.electricQuantity.value = power;
|
||||
|
||||
int status = reply.data[6];
|
||||
print("status:$status");
|
||||
@ -96,15 +86,15 @@ class LockDetailLogic extends BaseGetXController{
|
||||
// state.animationController.isCompleted;
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
//无权限
|
||||
print("${reply.commandType}需要鉴权");
|
||||
|
||||
print("millisecondsSinceEpoch/1000:${DateTime.now().millisecondsSinceEpoch~/1000}");
|
||||
IoSenderManage.senderOpenLock(
|
||||
keyID: BlueManage().connectDeviceName,
|
||||
userID: await Storage.getUid(),
|
||||
openMode: 1,
|
||||
openTime: DateTime.now().millisecondsSinceEpoch~/1000,
|
||||
onlineToken:state.lockNetToken,
|
||||
token: tokenData,
|
||||
needAuthor: 1,
|
||||
signKey: signKeyDataList,
|
||||
@ -130,139 +120,67 @@ class LockDetailLogic extends BaseGetXController{
|
||||
}
|
||||
}
|
||||
|
||||
// 获取锁状态数据解析
|
||||
Future<void> _replyGetLockStatus(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
switch(status){
|
||||
case 0x00:
|
||||
//成功
|
||||
print("${reply.commandType}数据解析成功");
|
||||
var softVersion = reply.data.sublist(3, 7);
|
||||
print("softVersion:$softVersion");
|
||||
|
||||
var power = reply.data[7];
|
||||
print("power:$power");
|
||||
|
||||
// APP 用户数量
|
||||
var appUserCount = reply.data.sublist(50, 53);
|
||||
print("appUserCount:$appUserCount");
|
||||
|
||||
// 黑名单用户数量
|
||||
var blacklistCount = reply.data[53];
|
||||
print("blacklistCount:$blacklistCount");
|
||||
|
||||
// 蓝牙钥匙数量
|
||||
var bleKeyCount = reply.data[54];
|
||||
print("bleKeyCount:$bleKeyCount");
|
||||
|
||||
// 剩余可添加用户数量
|
||||
var remainCount = reply.data.sublist(54, 56);
|
||||
print("remainCount:$remainCount");
|
||||
|
||||
// 未上传开锁记录数量
|
||||
var notUploadCount = reply.data.sublist(56, 58);
|
||||
print("notUploadCount:$notUploadCount");
|
||||
|
||||
// 已设置开门密码数量
|
||||
var pwdCount = reply.data[58];
|
||||
print("pwdCount:$pwdCount");
|
||||
|
||||
// 已设置开门指纹数量
|
||||
var fingerprintCount = reply.data[59];
|
||||
print("fingerprintCount:$fingerprintCount");
|
||||
|
||||
// 锁当前时间
|
||||
var lockTime = reply.data.sublist(60, 64);
|
||||
print("lockTime:$lockTime");
|
||||
|
||||
// 硬件版本信息,为固件升级提供判断依据
|
||||
var hardVersion = reply.data.sublist(64, 68);
|
||||
print("hardVersion:$hardVersion");
|
||||
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
print("${reply.commandType}需要鉴权");
|
||||
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("${reply.commandType}用户无权限");
|
||||
|
||||
break;
|
||||
case 0x09:
|
||||
// 权限校验错误
|
||||
print("${reply.commandType}权限校验错误");
|
||||
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("${reply.commandType}失败");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑用户数据解析
|
||||
Future<void> _replyEditUserKey(Reply reply) async {
|
||||
var token = reply.data.sublist(2, 6);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
print("_replyEditUserKeyToken:$token");
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
int status = reply.data[6];
|
||||
print("status:$status");
|
||||
|
||||
switch(status){
|
||||
case 0x00:
|
||||
//成功
|
||||
print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
print("${reply.commandType!.typeValue} 需要鉴权");
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
IoSenderManage.senderEditUser(
|
||||
lockID:BlueManage().connectDeviceName,
|
||||
authUserID:await Storage.getUid(),
|
||||
keyID:"1",
|
||||
userID:await Storage.getUid(),
|
||||
openMode:1,
|
||||
keyType:1,
|
||||
startDate:0x11223344,
|
||||
expireDate:0x11223344,
|
||||
role:255,
|
||||
password:"123456",
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: token
|
||||
);
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("${reply.commandType!.typeValue} 用户无权限");
|
||||
|
||||
break;
|
||||
case 0x09:
|
||||
// 权限校验错误
|
||||
print("${reply.commandType!.typeValue} 权限校验错误");
|
||||
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("${reply.commandType!.typeValue} 失败");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Future<void> _replyEditUserKey(Reply reply) async {
|
||||
// var token = reply.data.sublist(2, 6);
|
||||
// var saveStrList = changeIntListToStringList(token);
|
||||
// print("_replyEditUserKeyToken:$token");
|
||||
// Storage.setStringList(saveBlueToken, saveStrList);
|
||||
//
|
||||
// int status = reply.data[6];
|
||||
// print("status:$status");
|
||||
//
|
||||
// switch(status){
|
||||
// case 0x00:
|
||||
// //成功
|
||||
// print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
//
|
||||
// break;
|
||||
// case 0x06:
|
||||
// //无权限
|
||||
// print("${reply.commandType!.typeValue} 需要鉴权");
|
||||
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
//
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
//
|
||||
// IoSenderManage.senderEditUser(
|
||||
// lockID:BlueManage().connectDeviceName,
|
||||
// authUserID:await Storage.getUid(),
|
||||
// keyID:"1",
|
||||
// userID:await Storage.getUid(),
|
||||
// openMode:1,
|
||||
// keyType:1,
|
||||
// startDate:0x11223344,
|
||||
// expireDate:0x11223344,
|
||||
// role:255,
|
||||
// password:"123456",
|
||||
// needAuthor:1,
|
||||
// publicKey:publicKeyDataList,
|
||||
// privateKey:getPrivateKeyList,
|
||||
// token: token
|
||||
// );
|
||||
// break;
|
||||
// case 0x07:
|
||||
// //无权限
|
||||
// print("${reply.commandType!.typeValue} 用户无权限");
|
||||
//
|
||||
// break;
|
||||
// case 0x09:
|
||||
// // 权限校验错误
|
||||
// print("${reply.commandType!.typeValue} 权限校验错误");
|
||||
//
|
||||
// break;
|
||||
// default:
|
||||
// //失败
|
||||
// print("${reply.commandType!.typeValue} 失败");
|
||||
//
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// 获取锁状态数据解析
|
||||
Future<void> _replyGetStarLockStatusInfo(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
switch(status){
|
||||
@ -271,55 +189,55 @@ class LockDetailLogic extends BaseGetXController{
|
||||
print("${reply.commandType}数据解析成功");
|
||||
// 厂商名称
|
||||
var vendor = reply.data.sublist(3, 23);
|
||||
print("vendor:$vendor");
|
||||
// print("vendor:$vendor");
|
||||
|
||||
// 锁设备类型
|
||||
var product = reply.data[23];
|
||||
print("product:$product");
|
||||
// print("product:$product");
|
||||
|
||||
// 产品名称
|
||||
var model = reply.data.sublist(24, 44);
|
||||
print("model:$model");
|
||||
// print("model:$model");
|
||||
|
||||
// 软件版本
|
||||
var fwVersion = reply.data.sublist(44, 64);
|
||||
print("fwVersion:$fwVersion");
|
||||
// print("fwVersion:$fwVersion");
|
||||
|
||||
// 硬件版本
|
||||
var hwVersion = reply.data.sublist(64, 84);
|
||||
print("hwVersion:$hwVersion");
|
||||
// print("hwVersion:$hwVersion");
|
||||
|
||||
// 厂商序列号
|
||||
var serialNum0 = reply.data.sublist(84, 100);
|
||||
print("serialNum0:$serialNum0");
|
||||
// print("serialNum0:$serialNum0");
|
||||
|
||||
// 成品商序列号
|
||||
var serialNum1 = reply.data.sublist(100, 116);
|
||||
print("serialNum1:$serialNum1");
|
||||
// print("serialNum1:$serialNum1");
|
||||
|
||||
// 蓝牙名称
|
||||
var btDeviceName = reply.data.sublist(116, 132);
|
||||
print("btDeviceName:$btDeviceName");
|
||||
// print("btDeviceName:$btDeviceName");
|
||||
|
||||
// 电池剩余电量
|
||||
var battRemCap = reply.data[132];
|
||||
print("battRemCap:$battRemCap");
|
||||
// print("battRemCap:$battRemCap");
|
||||
|
||||
// 重置次数
|
||||
var restoreCounter = reply.data.sublist(133, 135);
|
||||
print("restoreCounter:$restoreCounter");
|
||||
// print("restoreCounter:$restoreCounter");
|
||||
|
||||
// 重置时间
|
||||
var restoreDate = reply.data.sublist(135, 139);
|
||||
print("restoreDate:$restoreDate");
|
||||
// print("restoreDate:$restoreDate");
|
||||
|
||||
// 主控芯片型号
|
||||
var icPartNo = reply.data.sublist(139, 149);
|
||||
print("icPartNo:$icPartNo");
|
||||
// print("icPartNo:$icPartNo");
|
||||
|
||||
// 有效时间
|
||||
var indate = reply.data.sublist(149, 153);
|
||||
print("indate:$indate");
|
||||
// print("indate:$indate");
|
||||
|
||||
break;
|
||||
case 0x06:
|
||||
@ -356,9 +274,11 @@ class LockDetailLogic extends BaseGetXController{
|
||||
reply.data.removeRange(0, 6);
|
||||
// 把得到的数据按8位分割成数组 然后塞进一个新的数组里面
|
||||
var getList = splitList(reply.data, 8);
|
||||
// print("getList:$getList");
|
||||
var uploadList = [];
|
||||
for(int i = 0; i<getList.length; i++){
|
||||
var indexList = getList[i];
|
||||
// print("indexList:$indexList");
|
||||
var indexMap = {};
|
||||
indexMap["seq"] = indexList[0].toString();
|
||||
indexMap["user"] = indexList[3].toString();
|
||||
@ -409,8 +329,8 @@ class LockDetailLogic extends BaseGetXController{
|
||||
// Toast.show(msg: "正在连接设备,请稍等。");
|
||||
// return;
|
||||
// }
|
||||
BlueManage().judgeReconnect(BlueManage().connectDeviceMacAddress, state.keyInfos.value.bluetooth!.bluetoothDeviceName!, (DeviceConnectionState state) async {
|
||||
if (state == DeviceConnectionState.connected){
|
||||
BlueManage().judgeReconnect(BlueManage().connectDeviceMacAddress, state.keyInfos.value.bluetooth!.bluetoothDeviceName!, (DeviceConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == DeviceConnectionState.connected){
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
@ -433,13 +353,14 @@ class LockDetailLogic extends BaseGetXController{
|
||||
userID: await Storage.getUid(),
|
||||
openMode: 1,
|
||||
openTime: DateTime.now().millisecondsSinceEpoch~/1000,
|
||||
onlineToken:state.lockNetToken,
|
||||
token: getTokenList,
|
||||
needAuthor: 1,
|
||||
signKey: signKeyDataList,
|
||||
privateKey: getPrivateKeyList,
|
||||
);
|
||||
}
|
||||
}, isShowLoading: false);
|
||||
}, isShowLoading: false, isShowToast: false);
|
||||
}
|
||||
|
||||
// 编辑用户事件
|
||||
@ -524,12 +445,12 @@ class LockDetailLogic extends BaseGetXController{
|
||||
privateKey:getPrivateKeyList,
|
||||
);
|
||||
}
|
||||
});
|
||||
}, isShowLoading: false);
|
||||
}
|
||||
|
||||
void startScanAction(){
|
||||
BlueManage().startScan(true, (v){
|
||||
print("startScanAllDevice:${v}");
|
||||
// print("startScanAllDevice:${v}");
|
||||
final knownDeviceIndex = v.indexWhere((d) => d.name == state.keyInfos.value.bluetooth!.bluetoothDeviceName!);
|
||||
// 当扫描到的时候
|
||||
if (knownDeviceIndex >= 0) {
|
||||
@ -545,7 +466,12 @@ class LockDetailLogic extends BaseGetXController{
|
||||
startConnect() {
|
||||
state.lockState.value = 1;
|
||||
state.animationController.forward();
|
||||
openDoorAction();
|
||||
|
||||
if(state.isOpenLockNeedOnline.value == 0){
|
||||
openDoorAction();
|
||||
}else{
|
||||
getLockNetToken();
|
||||
}
|
||||
|
||||
Future.delayed(const Duration(seconds: 10), () {
|
||||
if(state.lockState.value == 1){
|
||||
@ -563,6 +489,16 @@ class LockDetailLogic extends BaseGetXController{
|
||||
|
||||
}
|
||||
|
||||
// 获取手机联网token,根据锁设置里面获取的开锁时是否联网来判断是否调用这个接口
|
||||
void getLockNetToken() async {
|
||||
LockNetTokenEntity entity = await ApiRepository.to.getLockNetToken(lockId: state.keyInfos.value.lockId.toString());
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
state.lockNetToken = entity.data!.token!;
|
||||
print("state.lockNetToken:${state.lockNetToken}");
|
||||
openDoorAction();
|
||||
}
|
||||
}
|
||||
|
||||
// 查询锁记录最后时间
|
||||
void getLockRecordLastUploadDataTime() async {
|
||||
LockOperatingRecordGetLastRecordTimeEntity entity =
|
||||
@ -583,20 +519,42 @@ class LockDetailLogic extends BaseGetXController{
|
||||
}
|
||||
}
|
||||
|
||||
/// 锁设置里面开启关闭考勤刷新锁详情
|
||||
StreamSubscription? _lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent;
|
||||
void initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction() {
|
||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||
_lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent = eventBus.on<LockSetChangeSetRefreshLockDetailWithType>().listen((event) {
|
||||
if(event.type == 0){
|
||||
// 0考勤
|
||||
print("event.setResult:${event.setResult}");
|
||||
state.isAttendance.value = event.setResult;
|
||||
state.keyInfos.value.lockSetting!.attendance = event.setResult;
|
||||
print("state.keyInfos.value.lockSetting!.attendance:${state.keyInfos.value.lockSetting!.attendance}");
|
||||
}else if(event.type == 1){
|
||||
// 1 开锁时是否需联网
|
||||
state.isOpenLockNeedOnline.value = event.setResult;
|
||||
state.keyInfos.value.lockSetting!.appUnlockOnline = event.setResult;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
// TODO: implement onReady
|
||||
super.onReady();
|
||||
print("onReady()");
|
||||
_initReplySubscription();
|
||||
initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction();
|
||||
|
||||
if(Platform.isIOS){
|
||||
print("有蓝牙权限开始扫描");
|
||||
startScanAction();
|
||||
}else{
|
||||
getMicrophonePermission()
|
||||
.then((value) {
|
||||
if (value) {
|
||||
// 有权限
|
||||
print("有蓝牙权限开始扫描");
|
||||
startScanAction();
|
||||
}else{
|
||||
//没有权限
|
||||
@ -610,7 +568,7 @@ class LockDetailLogic extends BaseGetXController{
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
print("lockDetail_onInit()");
|
||||
// print("lockDetail_onInit()");
|
||||
|
||||
// 进来获取锁状态
|
||||
// connectBlue();
|
||||
@ -621,7 +579,10 @@ class LockDetailLogic extends BaseGetXController{
|
||||
@override
|
||||
void onClose() {
|
||||
// TODO: implement onClose
|
||||
print("锁详情界面销毁了");
|
||||
|
||||
_replySubscription.cancel();
|
||||
_lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent!.cancel();
|
||||
}
|
||||
|
||||
///请求录音相机权限
|
||||
|
||||
@ -38,6 +38,10 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
super.initState();
|
||||
|
||||
state.keyInfos.value = widget.lockListInfoItemEntity;
|
||||
state.isAttendance.value = state.keyInfos.value.lockSetting!.attendance!;
|
||||
state.isOpenLockNeedOnline.value = state.keyInfos.value.lockSetting!.appUnlockOnline!;
|
||||
state.electricQuantity.value = state.keyInfos.value.electricQuantity!;
|
||||
|
||||
BlueManage().connectDeviceName =
|
||||
state.keyInfos.value.bluetooth!.bluetoothDeviceName!;
|
||||
// BlueManage().connectDeviceMacAddress =
|
||||
@ -74,7 +78,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
child: Column(
|
||||
children: [
|
||||
topWidget(),
|
||||
Expanded(child: bottomWidget())
|
||||
Expanded(child: Obx(() => bottomWidget()))
|
||||
],
|
||||
),
|
||||
);
|
||||
@ -85,35 +89,6 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
return Column(
|
||||
children: [
|
||||
SizedBox(height: 50.h),
|
||||
// Stack(
|
||||
// alignment: Alignment.center,
|
||||
// children: [
|
||||
// Align(
|
||||
// alignment: Alignment.center,
|
||||
// child: Text(
|
||||
// widget.keyInfo!.lockAlias!,
|
||||
// style:
|
||||
// TextStyle(fontSize: 22.sp, fontWeight: FontWeight.w400),
|
||||
// )),
|
||||
// Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.end,
|
||||
// children: [
|
||||
// Text(
|
||||
// "100%",
|
||||
// style: TextStyle(
|
||||
// fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
// ),
|
||||
// SizedBox(width: 2.w),
|
||||
// Image.asset(
|
||||
// 'images/main/icon_main_cell.png',
|
||||
// width: 30.w,
|
||||
// height: 24.w,
|
||||
// ),
|
||||
// SizedBox(width: 30.w),
|
||||
// ],
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
@ -126,15 +101,15 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
TextStyle(fontSize: 22.sp, fontWeight: FontWeight.w400),
|
||||
))),
|
||||
Positioned(
|
||||
child: Row(
|
||||
child: Obx(() => Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text("100%", style: TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor)),
|
||||
Text("${state.electricQuantity.value}%", style: TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor)),
|
||||
SizedBox(width: 2.w),
|
||||
Image.asset('images/main/icon_main_cell.png', width: 30.w, height: 24.w),
|
||||
Image.asset(showElectricIcon(state.electricQuantity.value), width: 30.w, height: 24.w),
|
||||
SizedBox(width: 30.w),
|
||||
],
|
||||
)
|
||||
))
|
||||
)
|
||||
],
|
||||
),
|
||||
@ -299,9 +274,9 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
|
||||
List<Widget> getShowWidget() {
|
||||
var showWidgetArr = <Widget>[];
|
||||
|
||||
print("pagepagepage:state.keyInfos.value.lockSetting!.attendance:${state.keyInfos.value.lockSetting!.attendance}");
|
||||
// 考勤
|
||||
if (state.keyInfos.value.lockSetting!.attendance == 1) {
|
||||
if (state.isAttendance.value == 1) {
|
||||
showWidgetArr.add(bottomItem('images/main/icon_main_clockingIn.png',
|
||||
TranslationLoader.lanKeys!.checkingIn!.tr, () {
|
||||
Get.toNamed(Routers.checkingInListPage,
|
||||
@ -410,9 +385,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
Get.toNamed(Routers.msgNotificationPage);
|
||||
}),
|
||||
// 设置
|
||||
bottomItem(
|
||||
'images/main/icon_main_set.png', TranslationLoader.lanKeys!.set!.tr,
|
||||
() {
|
||||
bottomItem('images/main/icon_main_set.png', TranslationLoader.lanKeys!.set!.tr, () {
|
||||
BlueManage().stopScan();
|
||||
Get.toNamed(Routers.lockSetPage,
|
||||
arguments: {"lockId": widget.lockListInfoItemEntity.lockId});
|
||||
@ -467,6 +440,21 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
});
|
||||
}
|
||||
|
||||
String showElectricIcon (int electricnumber){
|
||||
if(electricnumber >= 100){
|
||||
return 'images/main/icon_lockElectricLevel_5.png';
|
||||
}else if((electricnumber > 50) && (electricnumber < 100)){
|
||||
return 'images/main/icon_lockElectricLevel_4.png';
|
||||
}else if((electricnumber > 25) && (electricnumber <= 50)){
|
||||
return 'images/main/icon_lockElectricLevel_3.png';
|
||||
}else if((electricnumber > 5) && (electricnumber <= 25)){
|
||||
return 'images/main/icon_lockElectricLevel_2.png';
|
||||
}else if(electricnumber <= 5){
|
||||
return 'images/main/icon_lockElectricLevel_1.png';
|
||||
}
|
||||
return 'images/main/icon_lockElectricLevel_5.png';
|
||||
}
|
||||
|
||||
static Future<dynamic> tokNative(String method,
|
||||
{required Map arguments}) async {
|
||||
if (arguments == null) {
|
||||
|
||||
@ -17,6 +17,12 @@ import '../../lockMian/entity/lockListInfo_entity.dart';
|
||||
class LockDetailState {
|
||||
Rx<LockListInfoItemEntity> keyInfos = LockListInfoItemEntity().obs;
|
||||
|
||||
String lockNetToken = "";
|
||||
|
||||
var isAttendance = 0.obs;// 是否开启考勤
|
||||
var isOpenLockNeedOnline = 0.obs; // APP开锁时是否需联网
|
||||
var electricQuantity = 0.obs; // 电量
|
||||
|
||||
//过渡动画控制器
|
||||
late AnimationController animationController;
|
||||
var lockState = 0.obs;// 0未连接普通状态 1连接开锁中(展示动画) 2已连接开锁成功 3检测可用性 4连接失败
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
class LockNetTokenEntity {
|
||||
int? errorCode;
|
||||
String? description;
|
||||
String? errorMsg;
|
||||
Data? data;
|
||||
|
||||
LockNetTokenEntity(
|
||||
{this.errorCode, this.description, this.errorMsg, this.data});
|
||||
|
||||
LockNetTokenEntity.fromJson(Map<String, dynamic> json) {
|
||||
errorCode = json['errorCode'];
|
||||
description = json['description'];
|
||||
errorMsg = json['errorMsg'];
|
||||
data = json['data'] != null ? Data.fromJson(json['data']) : null;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['errorCode'] = errorCode;
|
||||
data['description'] = description;
|
||||
data['errorMsg'] = errorMsg;
|
||||
if (this.data != null) {
|
||||
data['data'] = this.data!.toJson();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Data {
|
||||
String? token;
|
||||
|
||||
Data({this.token});
|
||||
|
||||
Data.fromJson(Map<String, dynamic> json) {
|
||||
token = json['token'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['token'] = token;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -81,9 +81,11 @@ class LockOperatingRecordLogic extends BaseGetXController{
|
||||
reply.data.removeRange(0, 6);
|
||||
// 把得到的数据按8位分割成数组 然后塞进一个新的数组里面
|
||||
var getList = splitList(reply.data, 8);
|
||||
print("getList:$getList");
|
||||
var uploadList = [];
|
||||
for(int i = 0; i<getList.length; i++){
|
||||
var indexList = getList[i];
|
||||
print("indexList:$indexList");
|
||||
var indexMap = {};
|
||||
indexMap["seq"] = indexList[0].toString();
|
||||
indexMap["user"] = indexList[3].toString();
|
||||
|
||||
@ -307,7 +307,7 @@ class OtherTypeKeyListLogic extends BaseGetXController{
|
||||
}
|
||||
// 获取指纹状态
|
||||
Future<void> senderQueryingFingerprintStatus() async {
|
||||
BlueManage().judgeReconnect(BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName, (DeviceConnectionState state) async {
|
||||
BlueManage().judgeReconnect(BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName,(DeviceConnectionState state) async {
|
||||
if (state == DeviceConnectionState.connected) {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
@ -84,8 +84,8 @@ class _PasswordKeyManageTabbarPageState
|
||||
Tab _tab(ItemView item) {
|
||||
return Tab(
|
||||
// text: item.title,
|
||||
child: SizedBox(
|
||||
width: item.title.length > 2 ? 1.sw / 8 : 1.sw / 12,
|
||||
child: Container(
|
||||
// width: item.title.length > 2 ? 1.sw / 8 : 1.sw / 12,
|
||||
// margin: EdgeInsets.all(10.w),
|
||||
// color: Colors.red,
|
||||
child: Text(
|
||||
|
||||
@ -102,7 +102,10 @@ class _VideoLogPageState extends State<VideoLogPage> {
|
||||
state.isNavLocal.value = false;
|
||||
});
|
||||
},
|
||||
child: Obx(() => Text("云存", style: state.isNavLocal.value == true ? TextStyle(color: Colors.grey, fontSize: 26.sp) : TextStyle(color: Colors.white, fontSize: 28.sp)))
|
||||
child: Obx(() => Text("云存",
|
||||
style: state.isNavLocal.value == true ?
|
||||
TextStyle(color: Colors.grey, fontSize: 26.sp, fontWeight: FontWeight.w600) :
|
||||
TextStyle(color: Colors.white, fontSize: 28.sp, fontWeight: FontWeight.w600)))
|
||||
),
|
||||
TextButton(
|
||||
onPressed: (){
|
||||
@ -110,7 +113,10 @@ class _VideoLogPageState extends State<VideoLogPage> {
|
||||
state.isNavLocal.value = true;
|
||||
});
|
||||
},
|
||||
child: Obx(() => Text("本地", style: state.isNavLocal.value == true ? TextStyle(color: Colors.white, fontSize: 28.sp) : TextStyle(color: Colors.grey, fontSize: 26.sp)))
|
||||
child: Obx(() => Text("本地",
|
||||
style: state.isNavLocal.value == true ?
|
||||
TextStyle(color: Colors.white, fontSize: 28.sp, fontWeight: FontWeight.w600) :
|
||||
TextStyle(color: Colors.grey, fontSize: 26.sp, fontWeight: FontWeight.w600)))
|
||||
),
|
||||
],
|
||||
),
|
||||
@ -136,13 +142,13 @@ class _VideoLogPageState extends State<VideoLogPage> {
|
||||
Expanded(child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text("3天滚动储存", style: TextStyle(fontSize: 26.sp)),
|
||||
Text("3天滚动储存", style: TextStyle(fontSize: 24.sp)),
|
||||
SizedBox(height: 10.h),
|
||||
Text("星锁已为本设备免费提供3大滚动视频储存服务", style: TextStyle(fontSize: 22.sp, color: Colors.grey)),
|
||||
],
|
||||
)),
|
||||
SizedBox(width: 15.w),
|
||||
Text("去升级", style: TextStyle(fontSize: 24.sp)),
|
||||
Text("去升级", style: TextStyle(fontSize: 22.sp)),
|
||||
Image(width: 40.w, height: 24.w, image: const AssetImage("images/icon_right_black.png"))
|
||||
],
|
||||
),
|
||||
@ -170,7 +176,7 @@ class _VideoLogPageState extends State<VideoLogPage> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
// SizedBox(height: 20.h),
|
||||
Text("下载列表", style: TextStyle(fontSize: 26.sp)),
|
||||
Text("下载列表", style: TextStyle(fontSize: 24.sp)),
|
||||
SizedBox(height: 15.h),
|
||||
Text("暂无下载内容", style: TextStyle(fontSize: 22.sp, color: Colors.grey)),
|
||||
],
|
||||
@ -191,7 +197,7 @@ class _VideoLogPageState extends State<VideoLogPage> {
|
||||
child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(state.isNavLocal.value == true ? "已下载":"全部视频", style: TextStyle(fontSize: 28.sp)),
|
||||
Text(state.isNavLocal.value == true ? "已下载":"全部视频", style: TextStyle(fontSize: 26.sp, fontWeight: FontWeight.w500)),
|
||||
Expanded(child: SizedBox(width: 10.w)),
|
||||
IconButton(
|
||||
icon: Image(width: 40.w, height: 40.w, image: const AssetImage("images/main/icon_lockDetail_monitoringEditVoice.png")),
|
||||
|
||||
@ -41,7 +41,11 @@ class _DemoModeLockDetailPageState extends State<DemoModeLockDetailPage> {
|
||||
height: 1.sh - ScreenUtil().statusBarHeight * 2,
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
children: [topTip(), topWidget(), Expanded(child: bottomWidget())],
|
||||
children: [
|
||||
topTip(),
|
||||
topWidget(),
|
||||
Expanded(child: bottomWidget())
|
||||
],
|
||||
),
|
||||
));
|
||||
}
|
||||
@ -375,4 +379,5 @@ class _DemoModeLockDetailPageState extends State<DemoModeLockDetailPage> {
|
||||
// Get.toNamed(Routers.seletLockTypePage);
|
||||
Toast.show(msg: "演示模式");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -242,6 +242,12 @@ class _DemoModeLockSetPageState extends State<DemoModeLockSetPage> {
|
||||
isHaveLine: false,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: _lockRemindSwitch()),
|
||||
CommonItem(
|
||||
leftTitel: "开锁时是否需联网",
|
||||
rightTitle: "",
|
||||
isHaveLine: false,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: _lockRemindSwitch()),
|
||||
SizedBox(height: 10.h),
|
||||
// wifi配网
|
||||
CommonItem(
|
||||
|
||||
@ -144,7 +144,7 @@ class _LockListPageState extends State<LockListPage> {
|
||||
),
|
||||
SizedBox(width: 2.w),
|
||||
Image.asset(
|
||||
'images/main/icon_main_cell.png',
|
||||
showElectricIcon(keyInfo.electricQuantity!),
|
||||
width: 30.w,
|
||||
height: 24.w,
|
||||
),
|
||||
@ -201,4 +201,19 @@ class _LockListPageState extends State<LockListPage> {
|
||||
return useDateStr;
|
||||
}
|
||||
|
||||
String showElectricIcon (int electricnumber){
|
||||
if(electricnumber >= 100){
|
||||
return 'images/main/icon_lockElectricLevel_5.png';
|
||||
}else if((electricnumber > 50) && (electricnumber < 100)){
|
||||
return 'images/main/icon_lockElectricLevel_4.png';
|
||||
}else if((electricnumber > 25) && (electricnumber <= 50)){
|
||||
return 'images/main/icon_lockElectricLevel_3.png';
|
||||
}else if((electricnumber > 5) && (electricnumber <= 25)){
|
||||
return 'images/main/icon_lockElectricLevel_2.png';
|
||||
}else if(electricnumber <= 5){
|
||||
return 'images/main/icon_lockElectricLevel_1.png';
|
||||
}
|
||||
return 'images/main/icon_lockElectricLevel_5.png';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -90,6 +90,8 @@ class LockMainLogic extends BaseGetXController {
|
||||
}
|
||||
state.lockListInfoEntity.value = entity;
|
||||
}else{
|
||||
print("首页锁列表请求失败");
|
||||
state.dataLength.value = 0;
|
||||
// refreshController.loadFailed();
|
||||
}
|
||||
// refreshController.refreshCompleted();
|
||||
|
||||
@ -46,7 +46,7 @@ class _AbountPageState extends State<AbountPage> {
|
||||
height: 20.h,
|
||||
),
|
||||
Text(
|
||||
"星锁 1.0.0.01(preRelease-20231118)",
|
||||
"星锁 1.0.0.02(preRelease-20231124)",
|
||||
style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor),
|
||||
),
|
||||
SizedBox(
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:amap_flutter_location/amap_flutter_location.dart';
|
||||
@ -57,7 +58,7 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
// EasyLoading.dismiss();
|
||||
// }
|
||||
// });
|
||||
requestLocation();
|
||||
// requestLocation();
|
||||
}
|
||||
|
||||
Future<void> requestPermission() async {
|
||||
@ -69,8 +70,13 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
print("拒绝");
|
||||
break;
|
||||
case PermissionStatus.granted:
|
||||
_setLocationOption();
|
||||
location.startLocation();
|
||||
if(Platform.isIOS){
|
||||
_setLocationOption();
|
||||
requestIOSLocation();
|
||||
}else{
|
||||
requestAndroidLocation();
|
||||
location.startLocation();
|
||||
}
|
||||
break;
|
||||
case PermissionStatus.limited:
|
||||
print("限制");
|
||||
@ -82,7 +88,7 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> requestLocation() async {
|
||||
Future<void> requestAndroidLocation() async {
|
||||
location.onLocationChanged().listen((event) {
|
||||
print("listenLocationChanged$event");
|
||||
// EasyLoading.dismiss();
|
||||
@ -95,6 +101,22 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> requestIOSLocation() async {
|
||||
location = AMapFlutterLocation()
|
||||
..setLocationOption(AMapLocationOption())
|
||||
..onLocationChanged().listen((event) {
|
||||
print("listenLocationChanged$event");
|
||||
// EasyLoading.dismiss();
|
||||
if (event.isNotEmpty) {
|
||||
setState(() {
|
||||
addressInfo = event;
|
||||
});
|
||||
// location.stopLocation();
|
||||
}
|
||||
})
|
||||
..startLocation();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@ -123,9 +145,7 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
// ),
|
||||
// ],
|
||||
),
|
||||
body:
|
||||
addressInfo != null ?
|
||||
ListView(
|
||||
body: ListView(
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(left: 25.w, top: 40.h, bottom: 40.w),
|
||||
@ -137,83 +157,73 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 1.sw/5*4,
|
||||
width: 1.sw,
|
||||
child:
|
||||
(addressInfo!["address"].toString().isNotEmpty) ?
|
||||
AMapWidget(
|
||||
apiKey: amapApiKeys,
|
||||
// 初始化地图中心
|
||||
initialCameraPosition: (
|
||||
CameraPosition(
|
||||
target: LatLng(double.parse(addressInfo!['latitude'].toString()), double.parse(addressInfo!['longitude'].toString())),
|
||||
zoom: 10.0,
|
||||
)
|
||||
),
|
||||
//定位小蓝点
|
||||
myLocationStyleOptions: MyLocationStyleOptions(
|
||||
true,
|
||||
),
|
||||
// 普通地图normal,卫星地图satellite,夜间视图night,导航视图 navi,公交视图bus,
|
||||
mapType: MapType.normal,
|
||||
// 缩放级别范围
|
||||
minMaxZoomPreference: const MinMaxZoomPreference(3, 20),
|
||||
// 隐私政策包含高德 必须填写
|
||||
privacyStatement: const AMapPrivacyStatement(hasAgree: true, hasContains: true, hasShow: true),
|
||||
// 地图创建成功时返回AMapController
|
||||
onMapCreated: (AMapController controller) {
|
||||
mapController = controller;
|
||||
},
|
||||
) : Container(),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
addressInfo != null ?
|
||||
Column(
|
||||
children: [
|
||||
Text("检查以确保以下地址是正确的", style: TextStyle(fontSize: 24.sp)),
|
||||
],
|
||||
),
|
||||
),
|
||||
// SizedBox(height: 20.h),
|
||||
Container(
|
||||
margin: EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w),
|
||||
// decoration: BoxDecoration(
|
||||
// color: AppColors.mainColor,
|
||||
// borderRadius: BorderRadius.circular(15.w),
|
||||
// ),
|
||||
child:Column(
|
||||
children: [
|
||||
Container(
|
||||
// height: h(53),
|
||||
// padding: EdgeInsets.only(top: 15.h, bottom: 15, left:15.w, right: 15.w),
|
||||
child: Row(
|
||||
children: [
|
||||
// Image.asset('images/main/icon_addUserShowAddress.png', width: 30.w, height: 30.w),
|
||||
// SizedBox(width: 10.w),
|
||||
Expanded(
|
||||
child: Text(addressInfo!["address"].toString() ?? "", style: const TextStyle(color: Colors.grey, fontSize: 16, fontWeight: FontWeight.w500, overflow: TextOverflow.clip))
|
||||
),
|
||||
],
|
||||
SizedBox(
|
||||
height: 1.sw/5*4,
|
||||
width: 1.sw,
|
||||
child: AMapWidget(
|
||||
apiKey: amapApiKeys,
|
||||
// 初始化地图中心
|
||||
initialCameraPosition: (
|
||||
CameraPosition(
|
||||
target: LatLng(double.parse(addressInfo!['latitude'].toString()), double.parse(addressInfo!['longitude'].toString())),
|
||||
zoom: 10.0,
|
||||
)
|
||||
),
|
||||
//定位小蓝点
|
||||
myLocationStyleOptions: MyLocationStyleOptions(
|
||||
true,
|
||||
),
|
||||
// 普通地图normal,卫星地图satellite,夜间视图night,导航视图 navi,公交视图bus,
|
||||
mapType: MapType.normal,
|
||||
// 缩放级别范围
|
||||
minMaxZoomPreference: const MinMaxZoomPreference(3, 20),
|
||||
// 隐私政策包含高德 必须填写
|
||||
privacyStatement: const AMapPrivacyStatement(hasAgree: true, hasContains: true, hasShow: true),
|
||||
// 地图创建成功时返回AMapController
|
||||
onMapCreated: (AMapController controller) {
|
||||
mapController = controller;
|
||||
},
|
||||
),
|
||||
SizedBox(height: 5.h),
|
||||
Container(height: 1.h, color: AppColors.mainColor,),
|
||||
// Container(
|
||||
// // height: h(52),
|
||||
// padding: EdgeInsets.only(top: 15.h, bottom: 15, left:15.w, right: 15.w),
|
||||
// child: Row(
|
||||
// children: [
|
||||
// Image.asset('images/main/icon_addUserAddressShowTime.png', width: 30.w, height: 30.w),
|
||||
// SizedBox(width: 10.w,),
|
||||
// Expanded(
|
||||
// child: Text(DateTool().getNowDateYMDHM(), style: const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500),)
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
)
|
||||
),
|
||||
Container(
|
||||
// color: Colors.red,
|
||||
height: 45.h,
|
||||
margin: EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text("检查以确保以下地址是正确的", style: TextStyle(fontSize: 24.sp)),
|
||||
],
|
||||
),
|
||||
),
|
||||
// SizedBox(height: 20.h),
|
||||
Container(
|
||||
// color: Colors.red,
|
||||
// height: 45.h,
|
||||
margin: EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w),
|
||||
child:Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Text(addressInfo!["address"].toString() ?? "", style: const TextStyle(color: Colors.grey, fontSize: 16, fontWeight: FontWeight.w500, overflow: TextOverflow.clip))
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 5.h),
|
||||
Container(height: 1.h, color: AppColors.mainColor,),
|
||||
],
|
||||
)
|
||||
),
|
||||
],
|
||||
) : SizedBox(
|
||||
height: 1.sw/5*4 + 65.h*2,
|
||||
child: const Center(child: Text('地图加载中,请稍候。。。')))
|
||||
,
|
||||
),
|
||||
SizedBox(height:200.h),
|
||||
Row(
|
||||
@ -291,8 +301,7 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
// )
|
||||
// ),),
|
||||
],
|
||||
)
|
||||
: const Center(child: Text('地图加载中,请稍候。。。')),
|
||||
),
|
||||
);
|
||||
|
||||
}
|
||||
@ -343,11 +352,10 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>{
|
||||
location.setLocationOption(locationOption);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
|
||||
location.stopLocation();
|
||||
location.destroy();
|
||||
print("地图界面销毁了");
|
||||
}
|
||||
|
||||
@ -36,6 +36,7 @@ class SaveLockLogic extends BaseGetXController {
|
||||
});
|
||||
}
|
||||
|
||||
// 添加用户
|
||||
Future<void> _replyAddUserKey(Reply reply) async {
|
||||
var lockId = reply.data.sublist(2, 42);
|
||||
// print("lockId:$lockId");
|
||||
@ -101,6 +102,7 @@ class SaveLockLogic extends BaseGetXController {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取星锁状态
|
||||
Future<void> _replyGetStarLockStatusInfo(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
switch(status){
|
||||
|
||||
@ -1,19 +1,12 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/common/safetyVerification/entity/Data.dart';
|
||||
import 'package:star_lock/tools/toast.dart';
|
||||
|
||||
import '../../appRouters.dart';
|
||||
import '../../app_settings/app_colors.dart';
|
||||
import '../../baseWidget.dart';
|
||||
import '../../login/login/entity/LoginData.dart';
|
||||
import '../../login/login/entity/LoginEntity.dart';
|
||||
import '../../tools/store_service.dart';
|
||||
import '../../tools/submitBtn.dart';
|
||||
import '../../tools/titleAppBar.dart';
|
||||
import '../../translations/trans_lib.dart';
|
||||
import 'starLockMine_logic.dart';
|
||||
|
||||
@ -39,9 +32,7 @@ class _StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
|
||||
children: [
|
||||
topWidget(),
|
||||
bottomListWidget(),
|
||||
SizedBox(
|
||||
height: 40.h,
|
||||
),
|
||||
SizedBox(height: 40.h,),
|
||||
// keyBottomWidget()
|
||||
],
|
||||
),
|
||||
@ -93,7 +84,7 @@ class _StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
Text(state.mobile(),
|
||||
Text(state.nickname(),
|
||||
style: TextStyle(
|
||||
fontSize: 22.sp,
|
||||
color: Colors.white,
|
||||
@ -101,7 +92,7 @@ class _StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Text("${TranslationLoader.lanKeys!.accountNumber!.tr}:-",
|
||||
Text("${TranslationLoader.lanKeys!.accountNumber!.tr}:${state.mobile().isNotEmpty ? state.mobile() : state.email()}",
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: Colors.white,
|
||||
|
||||
@ -40,6 +40,14 @@ class StarLockMineState {
|
||||
return loginData.value.mobile ?? '-';
|
||||
}
|
||||
|
||||
String email() {
|
||||
return loginData.value.email ?? '-';
|
||||
}
|
||||
|
||||
String nickname() {
|
||||
return loginData.value.nickname ?? '-';
|
||||
}
|
||||
|
||||
///用户头像
|
||||
String headUrl() {
|
||||
return loginData.value.headUrl ?? '';
|
||||
|
||||
@ -43,7 +43,6 @@ class _MineMultiLanguagePageState extends State<MineMultiLanguagePage> {
|
||||
CommonItem(
|
||||
leftTitel: '跟随系统',
|
||||
rightTitle: "",
|
||||
allHeight: 90.h,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: false,
|
||||
isHaveRightWidget: true,
|
||||
@ -59,7 +58,6 @@ class _MineMultiLanguagePageState extends State<MineMultiLanguagePage> {
|
||||
CommonItem(
|
||||
leftTitel: lanType.lanTitle,
|
||||
rightTitle: "",
|
||||
allHeight: 90.h,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: false,
|
||||
isHaveRightWidget: true,
|
||||
|
||||
@ -0,0 +1,89 @@
|
||||
class MinePersonGetUploadFileInfoEntity {
|
||||
int? errorCode;
|
||||
String? description;
|
||||
String? errorMsg;
|
||||
Data? data;
|
||||
|
||||
MinePersonGetUploadFileInfoEntity(
|
||||
{this.errorCode, this.description, this.errorMsg, this.data});
|
||||
|
||||
MinePersonGetUploadFileInfoEntity.fromJson(Map<String, dynamic> json) {
|
||||
errorCode = json['errorCode'];
|
||||
description = json['description'];
|
||||
errorMsg = json['errorMsg'];
|
||||
data = json['data'] != null ? Data.fromJson(json['data']) : null;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['errorCode'] = errorCode;
|
||||
data['description'] = description;
|
||||
data['errorMsg'] = errorMsg;
|
||||
if (this.data != null) {
|
||||
data['data'] = this.data!.toJson();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Data {
|
||||
String? uploadUrl;
|
||||
Map<String, dynamic>? formData;
|
||||
String? fileUrl;
|
||||
String? fileField;
|
||||
|
||||
Data({this.uploadUrl, this.formData, this.fileUrl, this.fileField});
|
||||
|
||||
Data.fromJson(Map<String, dynamic> json) {
|
||||
uploadUrl = json['uploadUrl'];
|
||||
formData = json['formData'];
|
||||
fileUrl = json['fileUrl'];
|
||||
fileField = json['fileField'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['uploadUrl'] = uploadUrl;
|
||||
data['formData'] = formData;
|
||||
data['fileUrl'] = fileUrl;
|
||||
data['fileField'] = fileField;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
// class GetFormData {
|
||||
// String? oSSAccessKeyId;
|
||||
// String? host;
|
||||
// String? policy;
|
||||
// String? signature;
|
||||
// int? expire;
|
||||
// String? key;
|
||||
//
|
||||
// GetFormData(
|
||||
// {this.oSSAccessKeyId,
|
||||
// this.host,
|
||||
// this.policy,
|
||||
// this.signature,
|
||||
// this.expire,
|
||||
// this.key});
|
||||
//
|
||||
// GetFormData.fromJson(Map<String, dynamic> json) {
|
||||
// oSSAccessKeyId = json['OSSAccessKeyId'];
|
||||
// host = json['host'];
|
||||
// policy = json['policy'];
|
||||
// signature = json['signature'];
|
||||
// expire = json['expire'];
|
||||
// key = json['key'];
|
||||
// }
|
||||
//
|
||||
// Map<String, dynamic> toJson() {
|
||||
// final Map<String, dynamic> data = <String, dynamic>{};
|
||||
// data['OSSAccessKeyId'] = oSSAccessKeyId;
|
||||
// data['host'] = host;
|
||||
// data['policy'] = policy;
|
||||
// data['signature'] = signature;
|
||||
// data['expire'] = expire;
|
||||
// data['key'] = key;
|
||||
// return data;
|
||||
// }
|
||||
// }
|
||||
@ -1,10 +1,14 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart';
|
||||
import 'package:star_lock/tools/toast.dart';
|
||||
import '../../../../network/api_repository.dart';
|
||||
import '../../../../tools/baseGetXController.dart';
|
||||
import 'minePersonGetUploadFileInfo_entity.dart';
|
||||
|
||||
class MinePersonInfoLogic extends BaseGetXController {
|
||||
class MinePersonInfoLogic extends GetConnect{
|
||||
final MinePersonInfoState state = MinePersonInfoState();
|
||||
//用户信息
|
||||
Future<void> getUserInfoRequest() async {
|
||||
@ -20,9 +24,57 @@ class MinePersonInfoLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
//上传头像 先获取upToken 再调用updateUserInfo
|
||||
Future<void> getUpTokenRequest() async {
|
||||
var entity = await ApiRepository.to.getUpToken(state.typeStr.value);
|
||||
if (entity.errorCode!.codeIsSuccessful) {}
|
||||
Future<void> getUpTokenRequest(String filename, int size) async {
|
||||
var entity = await ApiRepository.to.getUpToken(
|
||||
module: 'avatar',
|
||||
typeKey: 'userId',
|
||||
type: state.mineInfoData.value.uid!,
|
||||
filename: filename,
|
||||
size: size
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
uploadFile(entity);
|
||||
// print("aaaaa:$loginEntity");
|
||||
}
|
||||
}
|
||||
|
||||
// 上传头像
|
||||
void uploadFile(MinePersonGetUploadFileInfoEntity minePersonGetUploadFileInfoEntity) async {
|
||||
// String json = JsonDecoder(minePersonGetUploadFileInfoEntity.data!.formData!);
|
||||
|
||||
// var formData = FormData();
|
||||
//
|
||||
// formData.files.add(MapEntry(
|
||||
// "files", //后台接收的名字
|
||||
// MultipartFile(state.image!.path, filename: 'b'),
|
||||
// ));
|
||||
|
||||
Map<String, dynamic> user = minePersonGetUploadFileInfoEntity.data!.formData!;
|
||||
user[minePersonGetUploadFileInfoEntity.data!.fileField!] = state.image!.path;
|
||||
final form = FormData(user);
|
||||
var entity = await ApiRepository.to.uploadFile(
|
||||
url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!,
|
||||
body: form
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
|
||||
}
|
||||
|
||||
// final formData = FormData.fromMap({
|
||||
// 'file': await MultipartFile.fromFile(imageFile.path, contentType: MediaType.parse(mimeType))
|
||||
// });
|
||||
|
||||
// final form = FormData(user);
|
||||
// Response response= await post(minePersonGetUploadFileInfoEntity.data!.uploadUrl, form);
|
||||
// print("statusText:${response.statusText} statusCode:${response.statusCode} response:$response");
|
||||
}
|
||||
|
||||
void postCases(List<int> image) async {
|
||||
final form = FormData({
|
||||
'file': MultipartFile(image, filename: 'avatar.png'),
|
||||
'otherFile': MultipartFile(image, filename: 'cover.png'),
|
||||
});
|
||||
Response response= await post('http://youapi/users/upload', form);
|
||||
}
|
||||
|
||||
//更新个人信息-头像
|
||||
@ -32,4 +84,27 @@ class MinePersonInfoLogic extends BaseGetXController {
|
||||
Toast.show(msg: '操作成功');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
// TODO: implement onReady
|
||||
super.onReady();
|
||||
|
||||
getUserInfoRequest();
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
|
||||
getUserInfoRequest();
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
// TODO: implement onClose
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,12 +23,12 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
|
||||
final logic = Get.put(MinePersonInfoLogic());
|
||||
final state = Get.find<MinePersonInfoLogic>().state;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
logic.getUserInfoRequest();
|
||||
}
|
||||
// @override
|
||||
// void initState() {
|
||||
// super.initState();
|
||||
//
|
||||
// logic.getUserInfoRequest();
|
||||
// }
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -198,7 +198,14 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
|
||||
maxHeight: 250,
|
||||
maxWidth: 250,
|
||||
);
|
||||
if (image != null) state.image = image;
|
||||
setState(() {});
|
||||
if (image != null) {
|
||||
state.image = image;
|
||||
var bytes = File(state.image!.path);
|
||||
var enc = await bytes.readAsBytes();
|
||||
print(enc.length);
|
||||
print("state.image!.path:${state.image!.path} state.image!.name:${state.image!.name} state.image!.length():${state.image!.length()}");
|
||||
logic.getUpTokenRequest(state.image!.name, enc.length);
|
||||
setState((){});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -198,6 +198,14 @@ class _MineSetPageState extends State<MineSetPage> {
|
||||
action: () {
|
||||
Toast.show(msg: "功能暂未开放");
|
||||
}),
|
||||
CommonItem(
|
||||
leftTitel: "小米IoT平台",
|
||||
rightTitle: "",
|
||||
isHaveLine: false,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
Toast.show(msg: "功能暂未开放");
|
||||
}),
|
||||
// CommonItem(leftTitel:TranslationLoader.lanKeys!.valueAddedServices!.tr, rightTitle:"", isHaveDirection: true, action: (){
|
||||
//
|
||||
// }),
|
||||
|
||||
@ -26,6 +26,8 @@ abstract class Api {
|
||||
final String lockRecordUploadURL = '/lockRecords/fromLock'; //操作上传
|
||||
final String getLockRecordLastUploadDataTimeURL = '/lockRecords/getLastRecordTime'; //查询锁记录最后时间
|
||||
|
||||
final String getLockNetTokenURL = '/lock/getLockNetToken'; //获取手机联网token
|
||||
|
||||
final String bindingBlueAdminURL = '/lock/bindAdmin'; //绑定蓝牙管理员
|
||||
final String modifyKeyNameURL = '/key/modifyKeyName'; //修改锁名称
|
||||
final String updateLockNameURL = '/lock/updateLockName'; //修改锁名(新)
|
||||
@ -141,7 +143,7 @@ abstract class Api {
|
||||
'/safeAnswer/getOwnQuestionList'; //获取已设置的安全信息
|
||||
final String setSafeAnswerURL = '/safeAnswer/set'; //设置安全信息
|
||||
final String getUpTokenURL =
|
||||
'/user/getUpToken'; //上传头像 先获取upToken 再调用updateUserInfo
|
||||
'/file/getUploadParams'; //上传头像 先获取upToken 再调用updateUserInfo
|
||||
final String unbindPhoneTokenURL = '/user/unbindPhoneToken'; //获取解绑手机号Token
|
||||
final String unbindEmailTokenURL = '/user/unbindEmailToken'; //获取解绑邮箱Token
|
||||
final String pushBindAppIdURL = '/user/bindAppId'; //推送绑定APP设备
|
||||
|
||||
@ -260,14 +260,24 @@ class ApiProvider extends BaseProvider {
|
||||
jsonEncode({
|
||||
'lockId': lockId,
|
||||
'records': records,
|
||||
}));
|
||||
}),
|
||||
isUnShowLoading:true);
|
||||
|
||||
// 查询锁记录最后时间
|
||||
Future<Response> getLockRecordLastUploadDataTime(String lockId) => post(
|
||||
getLockRecordLastUploadDataTimeURL.toUrl,
|
||||
jsonEncode({
|
||||
'lockId': lockId,
|
||||
}));
|
||||
}),
|
||||
isUnShowLoading: true);
|
||||
|
||||
// 获取手机联网token
|
||||
Future<Response> getLockNetToken(String lockId) => post(
|
||||
getLockNetTokenURL.toUrl,
|
||||
jsonEncode({
|
||||
'lockId': lockId,
|
||||
}),
|
||||
isUnShowLoading: true);
|
||||
|
||||
// 绑定蓝牙管理员
|
||||
Future<Response> bindingBlueAdmin(
|
||||
@ -603,6 +613,15 @@ class ApiProvider extends BaseProvider {
|
||||
'attendance': resetSwitch,
|
||||
}));
|
||||
|
||||
// 设置开锁时是否需联网
|
||||
Future<Response> setOpenLockNeedOnlineData(int lockId, int appUnlockOnline) =>
|
||||
post(
|
||||
updateLockSettingUrl.toUrl,
|
||||
jsonEncode({
|
||||
'lockId': lockId,
|
||||
'appUnlockOnline': appUnlockOnline,
|
||||
}));
|
||||
|
||||
// 设置标记房态
|
||||
Future<Response> setRoomStatusData(int lockId, int roomStatus) =>
|
||||
post(
|
||||
@ -1319,9 +1338,19 @@ class ApiProvider extends BaseProvider {
|
||||
setSafeAnswerURL.toUrl,
|
||||
jsonEncode({"questionAndAnswerList": questionAndAnswerList}));
|
||||
|
||||
//上传头像 先获取upToken 再调用updateUserInfo
|
||||
Future<Response> getUpToken(String type) =>
|
||||
post(getUpTokenURL.toUrl, jsonEncode({"type": type}));
|
||||
// 获取上传文件的upToken 再调用updateUserInfo
|
||||
Future<Response> getUpToken(String module, String typeKey, String type, String filename, int size) =>
|
||||
post(
|
||||
getUpTokenURL.toUrl,
|
||||
jsonEncode({
|
||||
"module": module,
|
||||
typeKey: type,
|
||||
"filename": filename,
|
||||
"size": size,
|
||||
}));
|
||||
|
||||
// 文件上传
|
||||
Future<Response> uploadFile(String url, dynamic boay) => post(url, boay, isUnUploadFile: false, contentType:'multipart/form-data');
|
||||
|
||||
//获取解绑手机号Token
|
||||
Future<Response> unbindPhoneToken(String verificationCode) => post(
|
||||
|
||||