diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
new file mode 100644
index 0000000..64d4119
--- /dev/null
+++ b/.dart_tool/package_config.json
@@ -0,0 +1,284 @@
+{
+ "configVersion": 2,
+ "packages": [
+ {
+ "name": "_fe_analyzer_shared",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/_fe_analyzer_shared-46.0.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.17"
+ },
+ {
+ "name": "analyzer",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/analyzer-4.6.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.17"
+ },
+ {
+ "name": "args",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/args-2.3.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "async",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/async-2.8.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "boolean_selector",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/boolean_selector-2.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "build",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/build-2.3.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.14"
+ },
+ {
+ "name": "built_collection",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_collection-5.1.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "built_value",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_value-8.4.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "characters",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/characters-1.2.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "charcode",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/charcode-1.3.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "clock",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/clock-1.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "code_builder",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/code_builder-4.2.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.17"
+ },
+ {
+ "name": "collection",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/collection-1.16.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "convert",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/convert-3.0.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "crypto",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/crypto-3.0.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.14"
+ },
+ {
+ "name": "dart_style",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/dart_style-2.2.3",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "fake_async",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fake_async-1.3.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "file",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/file-6.1.4",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "fixnum",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fixnum-1.0.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter",
+ "rootUri": "file:///Users/datang/fvm/versions/3.0.0/packages/flutter",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_lints",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/flutter_lints-1.0.4",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "flutter_test",
+ "rootUri": "file:///Users/datang/fvm/versions/3.0.0/packages/flutter_test",
+ "packageUri": "lib/",
+ "languageVersion": "2.17"
+ },
+ {
+ "name": "glob",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/glob-2.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.15"
+ },
+ {
+ "name": "lints",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/lints-1.0.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "logging",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/logging-1.0.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "matcher",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.11",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "material_color_utilities",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/material_color_utilities-0.1.4",
+ "packageUri": "lib/",
+ "languageVersion": "2.13"
+ },
+ {
+ "name": "meta",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/meta-1.7.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "mockito",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/mockito-5.3.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.17"
+ },
+ {
+ "name": "package_config",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/package_config-2.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "path",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/path-1.8.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "plugin_platform_interface",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/plugin_platform_interface-2.1.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "pub_semver",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/pub_semver-2.1.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "sky_engine",
+ "rootUri": "file:///Users/datang/fvm/versions/3.0.0/bin/cache/pkg/sky_engine",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "source_gen",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_gen-1.2.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "source_span",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_span-1.8.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.14"
+ },
+ {
+ "name": "stack_trace",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.10.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "stream_channel",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "string_scanner",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "term_glyph",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "test_api",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/test_api-0.4.9",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "typed_data",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/typed_data-1.3.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "vector_math",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/vector_math-2.1.2",
+ "packageUri": "lib/",
+ "languageVersion": "2.14"
+ },
+ {
+ "name": "watcher",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/watcher-1.0.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.14"
+ },
+ {
+ "name": "yaml",
+ "rootUri": "file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/yaml-3.1.1",
+ "packageUri": "lib/",
+ "languageVersion": "2.12"
+ },
+ {
+ "name": "permission_handler_platform_interface",
+ "rootUri": "../",
+ "packageUri": "lib/",
+ "languageVersion": "2.14"
+ }
+ ],
+ "generated": "2022-08-29T07:21:04.113908Z",
+ "generator": "pub",
+ "generatorVersion": "2.17.0"
+}
diff --git a/.dart_tool/package_config_subset b/.dart_tool/package_config_subset
new file mode 100644
index 0000000..1cd32ac
--- /dev/null
+++ b/.dart_tool/package_config_subset
@@ -0,0 +1,185 @@
+_fe_analyzer_shared
+2.17
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/_fe_analyzer_shared-46.0.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/_fe_analyzer_shared-46.0.0/lib/
+analyzer
+2.17
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/analyzer-4.6.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/analyzer-4.6.0/lib/
+args
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/args-2.3.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/args-2.3.1/lib/
+async
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/async-2.8.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/async-2.8.2/lib/
+boolean_selector
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/boolean_selector-2.1.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/boolean_selector-2.1.0/lib/
+build
+2.14
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/build-2.3.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/build-2.3.0/lib/
+built_collection
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_collection-5.1.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_collection-5.1.1/lib/
+built_value
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_value-8.4.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_value-8.4.1/lib/
+characters
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/characters-1.2.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/characters-1.2.0/lib/
+charcode
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/charcode-1.3.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/charcode-1.3.1/lib/
+clock
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/clock-1.1.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/clock-1.1.0/lib/
+code_builder
+2.17
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/code_builder-4.2.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/code_builder-4.2.0/lib/
+collection
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/collection-1.16.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/collection-1.16.0/lib/
+convert
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/convert-3.0.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/convert-3.0.2/lib/
+crypto
+2.14
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/crypto-3.0.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/crypto-3.0.2/lib/
+dart_style
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/dart_style-2.2.3/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/dart_style-2.2.3/lib/
+fake_async
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fake_async-1.3.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fake_async-1.3.0/lib/
+file
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/file-6.1.4/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/file-6.1.4/lib/
+fixnum
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fixnum-1.0.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fixnum-1.0.1/lib/
+flutter_lints
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/flutter_lints-1.0.4/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/flutter_lints-1.0.4/lib/
+glob
+2.15
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/glob-2.1.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/glob-2.1.0/lib/
+lints
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/lints-1.0.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/lints-1.0.1/lib/
+logging
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/logging-1.0.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/logging-1.0.2/lib/
+matcher
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.11/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.11/lib/
+material_color_utilities
+2.13
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/material_color_utilities-0.1.4/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/material_color_utilities-0.1.4/lib/
+meta
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/meta-1.7.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/meta-1.7.0/lib/
+mockito
+2.17
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/mockito-5.3.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/mockito-5.3.0/lib/
+package_config
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/package_config-2.1.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/package_config-2.1.0/lib/
+path
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/path-1.8.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/path-1.8.1/lib/
+plugin_platform_interface
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/plugin_platform_interface-2.1.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/plugin_platform_interface-2.1.2/lib/
+pub_semver
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/pub_semver-2.1.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/pub_semver-2.1.1/lib/
+source_gen
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_gen-1.2.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_gen-1.2.2/lib/
+source_span
+2.14
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_span-1.8.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_span-1.8.2/lib/
+stack_trace
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.10.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.10.0/lib/
+stream_channel
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.1.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.1.0/lib/
+string_scanner
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/lib/
+term_glyph
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0/lib/
+test_api
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/test_api-0.4.9/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/test_api-0.4.9/lib/
+typed_data
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/typed_data-1.3.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/typed_data-1.3.1/lib/
+vector_math
+2.14
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/vector_math-2.1.2/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/vector_math-2.1.2/lib/
+watcher
+2.14
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/watcher-1.0.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/watcher-1.0.1/lib/
+yaml
+2.12
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/yaml-3.1.1/
+file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/yaml-3.1.1/lib/
+permission_handler_platform_interface
+2.14
+file:///Users/datang/Desktop/permission_handler_platform_interface-3.7.0/
+file:///Users/datang/Desktop/permission_handler_platform_interface-3.7.0/lib/
+sky_engine
+2.12
+file:///Users/datang/fvm/versions/3.0.0/bin/cache/pkg/sky_engine/
+file:///Users/datang/fvm/versions/3.0.0/bin/cache/pkg/sky_engine/lib/
+flutter
+2.12
+file:///Users/datang/fvm/versions/3.0.0/packages/flutter/
+file:///Users/datang/fvm/versions/3.0.0/packages/flutter/lib/
+flutter_test
+2.17
+file:///Users/datang/fvm/versions/3.0.0/packages/flutter_test/
+file:///Users/datang/fvm/versions/3.0.0/packages/flutter_test/lib/
+2
diff --git a/.dart_tool/version b/.dart_tool/version
new file mode 100644
index 0000000..56fea8a
--- /dev/null
+++ b/.dart_tool/version
@@ -0,0 +1 @@
+3.0.0
\ No newline at end of file
diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml
new file mode 100644
index 0000000..81b0d42
--- /dev/null
+++ b/.idea/libraries/Dart_Packages.xml
@@ -0,0 +1,372 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml
new file mode 100644
index 0000000..3dad229
--- /dev/null
+++ b/.idea/libraries/Dart_SDK.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml
new file mode 100644
index 0000000..b0f6971
--- /dev/null
+++ b/.idea/libraries/Flutter_Plugins.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..0fbf5da
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/permission_handler_platform_interface-3.7.0.iml b/.idea/permission_handler_platform_interface-3.7.0.iml
new file mode 100644
index 0000000..a7a886f
--- /dev/null
+++ b/.idea/permission_handler_platform_interface-3.7.0.iml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.packages b/.packages
new file mode 100644
index 0000000..c6a8eb2
--- /dev/null
+++ b/.packages
@@ -0,0 +1,52 @@
+# This file is deprecated. Tools should instead consume
+# `.dart_tool/package_config.json`.
+#
+# For more info see: https://dart.dev/go/dot-packages-deprecation
+#
+# Generated by pub on 2022-08-29 15:21:04.100866.
+_fe_analyzer_shared:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/_fe_analyzer_shared-46.0.0/lib/
+analyzer:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/analyzer-4.6.0/lib/
+args:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/args-2.3.1/lib/
+async:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/async-2.8.2/lib/
+boolean_selector:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/boolean_selector-2.1.0/lib/
+build:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/build-2.3.0/lib/
+built_collection:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_collection-5.1.1/lib/
+built_value:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/built_value-8.4.1/lib/
+characters:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/characters-1.2.0/lib/
+charcode:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/charcode-1.3.1/lib/
+clock:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/clock-1.1.0/lib/
+code_builder:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/code_builder-4.2.0/lib/
+collection:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/collection-1.16.0/lib/
+convert:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/convert-3.0.2/lib/
+crypto:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/crypto-3.0.2/lib/
+dart_style:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/dart_style-2.2.3/lib/
+fake_async:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fake_async-1.3.0/lib/
+file:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/file-6.1.4/lib/
+fixnum:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/fixnum-1.0.1/lib/
+flutter:file:///Users/datang/fvm/versions/3.0.0/packages/flutter/lib/
+flutter_lints:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/flutter_lints-1.0.4/lib/
+flutter_test:file:///Users/datang/fvm/versions/3.0.0/packages/flutter_test/lib/
+glob:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/glob-2.1.0/lib/
+lints:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/lints-1.0.1/lib/
+logging:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/logging-1.0.2/lib/
+matcher:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.11/lib/
+material_color_utilities:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/material_color_utilities-0.1.4/lib/
+meta:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/meta-1.7.0/lib/
+mockito:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/mockito-5.3.0/lib/
+package_config:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/package_config-2.1.0/lib/
+path:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/path-1.8.1/lib/
+plugin_platform_interface:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/plugin_platform_interface-2.1.2/lib/
+pub_semver:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/pub_semver-2.1.1/lib/
+sky_engine:file:///Users/datang/fvm/versions/3.0.0/bin/cache/pkg/sky_engine/lib/
+source_gen:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_gen-1.2.2/lib/
+source_span:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/source_span-1.8.2/lib/
+stack_trace:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.10.0/lib/
+stream_channel:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.1.0/lib/
+string_scanner:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/lib/
+term_glyph:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0/lib/
+test_api:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/test_api-0.4.9/lib/
+typed_data:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/typed_data-1.3.1/lib/
+vector_math:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/vector_math-2.1.2/lib/
+watcher:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/watcher-1.0.1/lib/
+yaml:file:///Users/datang/.pub-cache/hosted/pub.dartlang.org/yaml-3.1.1/lib/
+permission_handler_platform_interface:lib/
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..1a40faa
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,79 @@
+## 3.7.0
+
+* Added support for the new Android 12 Bluetooth permissions: BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE and BLUETOOTH_CONNECT.
+
+## 3.6.2
+
+* Updated the MethodChannelMock due to breaking changes in the platform channel test interface.
+
+## 3.6.1
+
+* Updated `meta` dependency to version `^1.3.0`.
+* Updated documentation for the `locationAlways` permission
+
+## 3.6.0
+
+* Add support for iOS Critical alerts and Android Access Notification Policy.
+
+## 3.5.1
+
+* Updated API documentation for the `PermissionStatus.permanentlyDenied` status.
+
+## 3.5.0
+
+* Added support for app tracking transparency permission.
+
+## 3.4.0
+
+* Added support request install packages permission.
+
+## 3.3.0
+
+* Added support for system alert window permission.
+
+## 3.2.0
+
+* Added support for manage external storage permission available on Android 10 and up.
+
+## 3.1.3
+
+* Implemented equality operator for `Permission` class;
+* Reverted services status check for notification permission. Turns out implementation does not fit with idea's of permission_handler plugin.
+
+## 3.1.2
+
+* Allow checking serviceStatus for notification permission.
+
+## 3.1.1
+
+* Fixed conversion issue where `PermissionStatus.denied` was not translated to the correct index.
+* Added unit-tests to guard API against breaking changes.
+
+## 3.1.0
+
+* Added support for bluetooth permissions.
+
+## 3.0.0+1
+
+* **BREAKING**: Removed PermissionStatus.undetermined. This is now replaced by PermissionStatus.denied.
+
+## 3.0.0
+
+* Migrated to null safety.
+
+## 2.0.2
+
+* Added support for the limited photos permission available on iOS 14 and up.
+
+## 2.0.1
+
+* Update `platform_interface 1.0.2`
+* Fix bug which allows requesting is the device has phone capabilities.
+
+## 2.0.0
+
+- **BREAKING**: Created a much more intuitive API using Dart's new extension methods ([#230](https://github.com/Baseflow/flutter-permission-handler/issues/230)). Big thank you to [@marcelgarus](https://github.com/marcelgarus) for the idea and doing all the grunt work.
+
+## 1.0.0
+
+- Initial open-source release.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..bd6192f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Baseflow
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..2e693b7
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,11 @@
+
+include: package:flutter_lints/flutter.yaml
+
+analyzer:
+ exclude:
+ # Ignore generated files
+ - '**/*.g.dart'
+ - 'lib/src/generated/*.dart'
+linter:
+ rules:
+ - public_member_api_docs
\ No newline at end of file
diff --git a/lib/permission_handler_platform_interface.dart b/lib/permission_handler_platform_interface.dart
new file mode 100644
index 0000000..4f44f61
--- /dev/null
+++ b/lib/permission_handler_platform_interface.dart
@@ -0,0 +1,11 @@
+library permission_handler_platform_interface;
+
+import 'dart:async';
+import 'package:meta/meta.dart';
+import 'package:plugin_platform_interface/plugin_platform_interface.dart';
+import 'src/method_channel/method_channel_permission_handler.dart';
+
+part 'src/permission_handler_platform_interface.dart';
+part 'src/permission_status.dart';
+part 'src/permissions.dart';
+part 'src/service_status.dart';
diff --git a/lib/src/method_channel/method_channel_permission_handler.dart b/lib/src/method_channel/method_channel_permission_handler.dart
new file mode 100644
index 0000000..2443cb8
--- /dev/null
+++ b/lib/src/method_channel/method_channel_permission_handler.dart
@@ -0,0 +1,88 @@
+import 'dart:async';
+
+import 'package:flutter/services.dart';
+
+import '../../permission_handler_platform_interface.dart';
+import 'utils/codec.dart';
+
+const MethodChannel _methodChannel =
+ MethodChannel('flutter.baseflow.com/permissions/methods');
+
+/// An implementation of [PermissionHandlerPlatform] that uses [MethodChannel]s.
+class MethodChannelPermissionHandler extends PermissionHandlerPlatform {
+ /// Checks the current status of the given [Permission].
+ @override
+ Future checkPermissionStatus(Permission permission) async {
+ final status = await _methodChannel.invokeMethod(
+ 'checkPermissionStatus', permission.value);
+
+ return decodePermissionStatus(status);
+ }
+
+ /// Checks the current status of the service associated with the given
+ /// [Permission].
+ ///
+ /// Notes about specific permissions:
+ /// - **[Permission.phone]**
+ /// - Android:
+ /// - The method will return [ServiceStatus.notApplicable] when:
+ /// - the device lacks the TELEPHONY feature
+ /// - TelephonyManager.getPhoneType() returns PHONE_TYPE_NONE
+ /// - when no Intents can be resolved to handle the `tel:` scheme
+ /// - The method will return [ServiceStatus.disabled] when:
+ /// - the SIM card is missing
+ /// - iOS:
+ /// - The method will return [ServiceStatus.notApplicable] when:
+ /// - the native code can not find a handler for the `tel:` scheme
+ /// - The method will return [ServiceStatus.disabled] when:
+ /// - the mobile network code (MNC) is either 0 or 65535. See
+ /// https://stackoverflow.com/a/11595365 for details
+ /// - **PLEASE NOTE that this is still not a perfect indication** of the
+ /// device's capability to place & connect phone calls as it also depends
+ /// on the network condition.
+ @override
+ Future checkServiceStatus(Permission permission) async {
+ final status = await _methodChannel.invokeMethod(
+ 'checkServiceStatus', permission.value);
+
+ return decodeServiceStatus(status);
+ }
+
+ /// Opens the app settings page.
+ ///
+ /// Returns [true] if the app settings page could be opened, otherwise
+ /// [false].
+ @override
+ Future openAppSettings() async {
+ final wasOpened = await _methodChannel.invokeMethod('openAppSettings');
+
+ return wasOpened ?? false;
+ }
+
+ /// Requests the user for access to the supplied list of [Permission]s, if
+ /// they have not already been granted before.
+ ///
+ /// Returns a [Map] containing the status per requested [Permission].
+ @override
+ Future