├── .flutter-plugins ├── .flutter-plugins-dependencies ├── .gitignore ├── .idea └── flutter_pub_dev.iml ├── LICENSE ├── README.md ├── android ├── .gitignore ├── .idea │ ├── .gitignore │ ├── caches │ │ └── build_file_checksums.ser │ ├── compiler.xml │ ├── gradle.xml │ ├── jarRepositories.xml │ ├── kotlinc.xml │ ├── libraries │ │ ├── Dart_SDK.xml │ │ ├── Gradle___Users_edvaldo_Projects_extra_work_flutter_pub_dev_build_app_intermediates_flutter_debug_libs_jar.xml │ │ ├── Gradle__androidx_activity_activity_1_0_0_aar.xml │ │ ├── Gradle__androidx_annotation_annotation_1_2_0.xml │ │ ├── Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml │ │ ├── Gradle__androidx_arch_core_core_common_2_1_0.xml │ │ ├── Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml │ │ ├── Gradle__androidx_collection_collection_1_1_0.xml │ │ ├── Gradle__androidx_core_core_1_6_0_aar.xml │ │ ├── Gradle__androidx_customview_customview_1_0_0_aar.xml │ │ ├── Gradle__androidx_fragment_fragment_1_1_0_aar.xml │ │ ├── Gradle__androidx_lifecycle_lifecycle_common_2_2_0.xml │ │ ├── Gradle__androidx_lifecycle_lifecycle_common_java8_2_2_0.xml │ │ ├── Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml │ │ ├── Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml │ │ ├── Gradle__androidx_lifecycle_lifecycle_runtime_2_2_0_aar.xml │ │ ├── Gradle__androidx_lifecycle_lifecycle_viewmodel_2_1_0_aar.xml │ │ ├── Gradle__androidx_loader_loader_1_0_0_aar.xml │ │ ├── Gradle__androidx_savedstate_savedstate_1_0_0_aar.xml │ │ ├── Gradle__androidx_test_core_1_0_0_aar.xml │ │ ├── Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml │ │ ├── Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml │ │ ├── Gradle__androidx_test_monitor_1_2_0_aar.xml │ │ ├── Gradle__androidx_test_rules_1_2_0_aar.xml │ │ ├── Gradle__androidx_test_runner_1_2_0_aar.xml │ │ ├── Gradle__androidx_tracing_tracing_1_0_0_aar.xml │ │ ├── Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml │ │ ├── Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml │ │ ├── Gradle__androidx_window_window_1_0_0_beta04_aar.xml │ │ ├── Gradle__androidx_window_window_java_1_0_0_beta04_aar.xml │ │ ├── Gradle__backport_util_concurrent_backport_util_concurrent_3_1.xml │ │ ├── Gradle__classworlds_classworlds_1_1_alpha_2.xml │ │ ├── Gradle__com_almworks_sqlite4java_sqlite4java_0_282.xml │ │ ├── Gradle__com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework_2_1.xml │ │ ├── Gradle__com_google_auto_auto_common_0_8.xml │ │ ├── Gradle__com_google_auto_service_auto_service_1_0_rc4.xml │ │ ├── Gradle__com_google_code_findbugs_jsr305_3_0_2.xml │ │ ├── Gradle__com_google_errorprone_error_prone_annotations_2_2_0.xml │ │ ├── Gradle__com_google_errorprone_error_prone_annotations_2_3_2.xml │ │ ├── Gradle__com_google_guava_failureaccess_1_0_1.xml │ │ ├── Gradle__com_google_guava_guava_27_0_1_jre.xml │ │ ├── Gradle__com_google_guava_guava_28_1_android.xml │ │ ├── Gradle__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml │ │ ├── Gradle__com_google_j2objc_j2objc_annotations_1_1.xml │ │ ├── Gradle__com_google_j2objc_j2objc_annotations_1_3.xml │ │ ├── Gradle__com_google_protobuf_protobuf_java_2_6_1.xml │ │ ├── Gradle__com_ibm_icu_icu4j_53_1.xml │ │ ├── Gradle__com_squareup_javawriter_2_1_1.xml │ │ ├── Gradle__io_flutter_arm64_v8a_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml │ │ ├── Gradle__io_flutter_armeabi_v7a_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml │ │ ├── Gradle__io_flutter_flutter_embedding_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml │ │ ├── Gradle__io_flutter_x86_64_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml │ │ ├── Gradle__io_flutter_x86_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml │ │ ├── Gradle__javax_annotation_javax_annotation_api_1_3_2.xml │ │ ├── Gradle__javax_inject_javax_inject_1.xml │ │ ├── Gradle__junit_junit_4_12.xml │ │ ├── Gradle__nekohtml_nekohtml_1_9_6_2.xml │ │ ├── Gradle__nekohtml_xercesMinimal_1_9_6_2.xml │ │ ├── Gradle__net_bytebuddy_byte_buddy_1_10_20.xml │ │ ├── Gradle__net_bytebuddy_byte_buddy_agent_1_10_20.xml │ │ ├── Gradle__net_sf_kxml_kxml2_2_3_0.xml │ │ ├── Gradle__org_apache_ant_ant_1_8_0.xml │ │ ├── Gradle__org_apache_ant_ant_launcher_1_8_0.xml │ │ ├── Gradle__org_apache_maven_maven_ant_tasks_2_1_3.xml │ │ ├── Gradle__org_apache_maven_maven_artifact_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_artifact_manager_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_error_diagnostics_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_model_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_plugin_registry_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_profile_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_project_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_repository_metadata_2_2_1.xml │ │ ├── Gradle__org_apache_maven_maven_settings_2_2_1.xml │ │ ├── Gradle__org_apache_maven_wagon_wagon_file_1_0_beta_6.xml │ │ ├── Gradle__org_apache_maven_wagon_wagon_http_lightweight_1_0_beta_6.xml │ │ ├── Gradle__org_apache_maven_wagon_wagon_http_shared_1_0_beta_6.xml │ │ ├── Gradle__org_apache_maven_wagon_wagon_provider_api_1_0_beta_6.xml │ │ ├── Gradle__org_bouncycastle_bcprov_jdk15on_1_52.xml │ │ ├── Gradle__org_checkerframework_checker_compat_qual_2_5_5.xml │ │ ├── Gradle__org_checkerframework_checker_qual_2_5_2.xml │ │ ├── Gradle__org_codehaus_mojo_animal_sniffer_annotations_1_17.xml │ │ ├── Gradle__org_codehaus_mojo_animal_sniffer_annotations_1_18.xml │ │ ├── Gradle__org_codehaus_plexus_plexus_container_default_1_0_alpha_9_stable_1.xml │ │ ├── Gradle__org_codehaus_plexus_plexus_interpolation_1_11.xml │ │ ├── Gradle__org_codehaus_plexus_plexus_utils_1_5_15.xml │ │ ├── Gradle__org_hamcrest_hamcrest_core_1_3.xml │ │ ├── Gradle__org_hamcrest_hamcrest_integration_1_3.xml │ │ ├── Gradle__org_hamcrest_hamcrest_library_1_3.xml │ │ ├── Gradle__org_jetbrains_annotations_13_0.xml │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_5_31.xml │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_7_21.xml │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_5_31.xml │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_7_21.xml │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_5_30.xml │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_7_21.xml │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_5_30.xml │ │ ├── Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_5_2.xml │ │ ├── Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_5_2.xml │ │ ├── Gradle__org_mockito_mockito_core_1_10_19.xml │ │ ├── Gradle__org_mockito_mockito_core_3_9_0.xml │ │ ├── Gradle__org_mockito_mockito_inline_3_9_0.xml │ │ ├── Gradle__org_objenesis_objenesis_3_2.xml │ │ ├── Gradle__org_ow2_asm_asm_7_0.xml │ │ ├── Gradle__org_ow2_asm_asm_analysis_7_0.xml │ │ ├── Gradle__org_ow2_asm_asm_commons_7_0.xml │ │ ├── Gradle__org_ow2_asm_asm_tree_7_0.xml │ │ ├── Gradle__org_ow2_asm_asm_util_7_0.xml │ │ ├── Gradle__org_robolectric_annotations_4_3.xml │ │ ├── Gradle__org_robolectric_junit_4_3.xml │ │ ├── Gradle__org_robolectric_pluginapi_4_3.xml │ │ ├── Gradle__org_robolectric_plugins_maven_dependency_resolver_4_3.xml │ │ ├── Gradle__org_robolectric_resources_4_3.xml │ │ ├── Gradle__org_robolectric_robolectric_4_3.xml │ │ ├── Gradle__org_robolectric_sandbox_4_3.xml │ │ ├── Gradle__org_robolectric_shadowapi_4_3.xml │ │ ├── Gradle__org_robolectric_shadows_framework_4_3.xml │ │ ├── Gradle__org_robolectric_utils_4_3.xml │ │ └── Gradle__org_robolectric_utils_reflector_4_3.xml │ ├── misc.xml │ ├── modules.xml │ ├── modules │ │ ├── 92155287 │ │ │ └── url_launcher_web-2.0.9.android.url_launcher_web.iml │ │ ├── 510311020 │ │ │ ├── android.share.androidTest.iml │ │ │ ├── android.share.iml │ │ │ ├── android.share.main.iml │ │ │ └── android.share.unitTest.iml │ │ ├── 939540491 │ │ │ └── shared_preferences-2.0.13.android.shared_preferences.iml │ │ ├── 999865580 │ │ │ └── shared_preferences_windows-2.1.0.android.shared_preferences_windows.iml │ │ ├── 1401572111 │ │ │ └── path_provider_linux-2.1.5.android.path_provider_linux.iml │ │ ├── 1825594717 │ │ │ └── shared_preferences_linux-2.1.0.android.shared_preferences_linux.iml │ │ ├── -1014497123 │ │ │ └── path_provider_windows-2.0.5.android.path_provider_windows.iml │ │ ├── -1126996793 │ │ │ ├── io.flutter.plugins.urllauncher.android.url_launcher_android.androidTest~1.iml │ │ │ ├── io.flutter.plugins.urllauncher.android.url_launcher_android.iml │ │ │ ├── io.flutter.plugins.urllauncher.android.url_launcher_android.main~1.iml │ │ │ └── io.flutter.plugins.urllauncher.android.url_launcher_android.unitTest~1.iml │ │ ├── -1143769122 │ │ │ └── shared_preferences_macos-2.0.3.android.shared_preferences_macos.iml │ │ ├── -1469823553 │ │ │ └── shared_preferences_web-2.0.3.android.shared_preferences_web.iml │ │ ├── -1528300327 │ │ │ ├── io.flutter.plugins.sharedpreferences.android.shared_preferences_android.androidTest~1.iml │ │ │ ├── io.flutter.plugins.sharedpreferences.android.shared_preferences_android.iml │ │ │ ├── io.flutter.plugins.sharedpreferences.android.shared_preferences_android.main~1.iml │ │ │ └── io.flutter.plugins.sharedpreferences.android.shared_preferences_android.unitTest~1.iml │ │ ├── -2124054156 │ │ │ ├── android.integration_test.androidTest.iml │ │ │ ├── android.integration_test.iml │ │ │ ├── android.integration_test.main.iml │ │ │ └── android.integration_test.unitTest.iml │ │ ├── -2130271511 │ │ │ └── url_launcher_ios-6.0.15.android.url_launcher_ios.iml │ │ ├── -294890834 │ │ │ └── url_launcher_macos-3.0.0.android.url_launcher_macos.iml │ │ ├── -371776130 │ │ │ └── url_launcher_windows-3.0.0.android.url_launcher_windows.iml │ │ ├── -428777967 │ │ │ └── url_launcher-6.0.20.android.url_launcher.iml │ │ ├── -562675594 │ │ │ └── shared_preferences_ios-2.1.0.android.shared_preferences_ios.iml │ │ ├── -950939025 │ │ │ └── url_launcher_linux-3.0.0.android.url_launcher_linux.iml │ │ ├── android.iml │ │ └── app │ │ │ ├── android.app.androidTest.iml │ │ │ ├── android.app.iml │ │ │ ├── android.app.main.iml │ │ │ └── android.app.unitTest.iml │ └── vcs.xml ├── android.iml ├── app │ ├── app.iml │ ├── build.gradle │ └── src │ │ ├── debug │ │ ├── AndroidManifest.xml │ │ └── debug.iml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── nunioz │ │ │ │ └── app │ │ │ │ └── pub_dev │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── launch_background.xml │ │ │ └── pubicon.png │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ ├── AndroidManifest.xml │ │ └── profile.iml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── pub_dev_android.iml ├── res │ └── values │ │ └── strings_en.arb └── settings.gradle ├── apple.png ├── assets ├── fonts │ ├── DINNextRoundedLTPro-Bold.otf │ └── DINNextRoundedLTPro-Regular.otf ├── icons │ ├── bug.svg │ ├── download.svg │ ├── globe.svg │ ├── info.svg │ ├── repository.svg │ ├── search.svg │ ├── settings.svg │ ├── share.svg │ └── swip.svg ├── images │ ├── dartlogo.png │ └── pubicon.png └── locale │ ├── i18n_en.json │ ├── i18n_pt.json │ └── i18n_zh.json ├── dartlogo.png ├── flutter_pub_dev.iml ├── google-play.png ├── integration_test ├── app_test.dart ├── detail_package_test.dart └── search_package_test.dart ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x-1.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x-1.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x-1.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x-1.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ ├── Icon-App-83.5x83.5@2x.png │ │ └── ItunesArtwork@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── Runner-Bridging-Header.h │ └── Runner.entitlements ├── lib ├── main.dart ├── router.dart └── src │ ├── app.dart │ ├── application │ ├── core │ │ ├── base_view_model.dart │ │ └── base_view_model.g.dart │ ├── packages │ │ ├── detail_package_view_model.dart │ │ ├── detail_package_view_model.g.dart │ │ ├── packages_view_model.dart │ │ └── packages_view_model.g.dart │ ├── search │ │ ├── search_view_model.dart │ │ └── search_view_model.g.dart │ └── settings │ │ ├── config_view_model.dart │ │ └── config_view_model.g.dart │ ├── domain │ ├── core │ │ ├── api_service.dart │ │ ├── data │ │ │ └── config_preference.dart │ │ ├── i_advanced_service.dart │ │ ├── navigation │ │ │ └── navigation_service.dart │ │ ├── request_failure.dart │ │ └── request_failure.freezed.dart │ ├── packages │ │ ├── entities │ │ │ ├── dependency.dart │ │ │ ├── environment.dart │ │ │ ├── metric.dart │ │ │ ├── package.dart │ │ │ ├── pubspec.dart │ │ │ ├── score.dart │ │ │ └── version.dart │ │ ├── i_package_repository.dart │ │ └── i_package_service.dart │ └── search │ │ ├── i_search_repository.dart │ │ └── i_search_service.dart │ ├── infrastructure │ ├── core │ │ ├── data │ │ │ └── default_config_preference.dart │ │ ├── default_advanced_service.dart │ │ ├── mapper.dart │ │ ├── navigation │ │ │ └── default_navigation_service.dart │ │ └── network_builder.dart │ ├── packages │ │ ├── base_package_repository.dart │ │ └── base_package_service.dart │ └── search │ │ ├── base_search_repository.dart │ │ └── base_search_service.dart │ ├── injection │ └── injection_config.dart │ ├── l18n.dart │ ├── presentation │ ├── core │ │ ├── base_widget.dart │ │ ├── custom_progress.dart │ │ ├── custom_refresh.dart │ │ ├── custom_switch.dart │ │ ├── dependency_item.dart │ │ ├── failure_message_view.dart │ │ ├── side_rounded.dart │ │ ├── styles.dart │ │ ├── svg_icon.dart │ │ ├── tag.dart │ │ ├── title_switch.dart │ │ └── version_item.dart │ ├── packages │ │ ├── detail_package_screen.dart │ │ ├── item_package.dart │ │ └── packages_screen.dart │ ├── search │ │ ├── search_item.dart │ │ └── search_screen.dart │ ├── settings │ │ ├── config_builder.dart │ │ └── settings_screen.dart │ └── splash_view_screen.dart │ └── utils │ ├── colors.dart │ ├── constants.dart │ ├── size.dart │ ├── timed.dart │ └── util.dart ├── pub_dev.iml ├── pubspec.lock ├── pubspec.yaml ├── screenshots ├── smartmockups_klcem8w7.png ├── smartmockups_klcen4ty.png ├── smartmockups_klceoqtt.png └── smartmockups_klcesngj.png ├── stores.png └── test └── src ├── application └── package │ ├── state_detail_package_test.dart │ └── state_search_package_test.dart ├── infrastructure ├── core │ └── data │ │ └── package_fake_data.dart ├── mocks.dart ├── mocks.mocks.dart └── package │ ├── get_list_of_package_test.dart │ ├── get_package_detail_test.dart │ └── search_package_test.dart └── presentation └── package └── detail_package_page_test.dart /.flutter-plugins: -------------------------------------------------------------------------------- 1 | # This is a generated file; do not edit or check into version control. 2 | integration_test=/Users/edvaldo/flutter/packages/integration_test/ 3 | path_provider_linux=/Users/edvaldo/.pub-cache/hosted/pub.dev/path_provider_linux-2.1.11/ 4 | path_provider_windows=/Users/edvaldo/.pub-cache/hosted/pub.dev/path_provider_windows-2.1.7/ 5 | share=/Users/edvaldo/.pub-cache/hosted/pub.dev/share-2.0.4/ 6 | shared_preferences=/Users/edvaldo/.pub-cache/hosted/pub.dev/shared_preferences-2.1.2/ 7 | shared_preferences_android=/Users/edvaldo/.pub-cache/hosted/pub.dev/shared_preferences_android-2.1.4/ 8 | shared_preferences_foundation=/Users/edvaldo/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.2.2/ 9 | shared_preferences_linux=/Users/edvaldo/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.2.0/ 10 | shared_preferences_web=/Users/edvaldo/.pub-cache/hosted/pub.dev/shared_preferences_web-2.1.0/ 11 | shared_preferences_windows=/Users/edvaldo/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.2.0/ 12 | url_launcher=/Users/edvaldo/.pub-cache/hosted/pub.dev/url_launcher-6.1.11/ 13 | url_launcher_android=/Users/edvaldo/.pub-cache/hosted/pub.dev/url_launcher_android-6.0.36/ 14 | url_launcher_ios=/Users/edvaldo/.pub-cache/hosted/pub.dev/url_launcher_ios-6.1.4/ 15 | url_launcher_linux=/Users/edvaldo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.0.5/ 16 | url_launcher_macos=/Users/edvaldo/.pub-cache/hosted/pub.dev/url_launcher_macos-3.0.5/ 17 | url_launcher_web=/Users/edvaldo/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.17/ 18 | url_launcher_windows=/Users/edvaldo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.0.6/ 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /.dart_tool/ 3 | /build/ -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | -------------------------------------------------------------------------------- /android/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /android/.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/android/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /android/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | 34 | 35 | -------------------------------------------------------------------------------- /android/.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle___Users_edvaldo_Projects_extra_work_flutter_pub_dev_build_app_intermediates_flutter_debug_libs_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_activity_activity_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_annotation_annotation_1_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_core_core_1_6_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_fragment_fragment_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_java8_2_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_test_core_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_test_monitor_1_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_test_rules_1_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_test_runner_1_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_tracing_tracing_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_window_window_1_0_0_beta04_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__androidx_window_window_java_1_0_0_beta04_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__backport_util_concurrent_backport_util_concurrent_3_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__classworlds_classworlds_1_1_alpha_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_almworks_sqlite4java_sqlite4java_0_282.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_auto_auto_common_0_8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_auto_service_auto_service_1_0_rc4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_errorprone_error_prone_annotations_2_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_errorprone_error_prone_annotations_2_3_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_guava_failureaccess_1_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_guava_guava_27_0_1_jre.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_guava_guava_28_1_android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_j2objc_j2objc_annotations_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_j2objc_j2objc_annotations_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_google_protobuf_protobuf_java_2_6_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_ibm_icu_icu4j_53_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__io_flutter_arm64_v8a_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__io_flutter_armeabi_v7a_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__io_flutter_flutter_embedding_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__io_flutter_x86_64_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__io_flutter_x86_debug_1_0_0_45f6e009110df4f34ec2cf99f63cf73b71b7a420.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_3_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__junit_junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__nekohtml_nekohtml_1_9_6_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__nekohtml_xercesMinimal_1_9_6_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_10_20.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_10_20.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__net_sf_kxml_kxml2_2_3_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_ant_ant_1_8_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_ant_ant_launcher_1_8_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_ant_tasks_2_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_artifact_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_artifact_manager_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_error_diagnostics_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_model_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_plugin_registry_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_profile_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_project_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_repository_metadata_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_maven_settings_2_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_wagon_wagon_file_1_0_beta_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_wagon_wagon_http_lightweight_1_0_beta_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_wagon_wagon_http_shared_1_0_beta_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_apache_maven_wagon_wagon_provider_api_1_0_beta_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_bouncycastle_bcprov_jdk15on_1_52.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_checkerframework_checker_compat_qual_2_5_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_checkerframework_checker_qual_2_5_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_codehaus_mojo_animal_sniffer_annotations_1_17.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_codehaus_mojo_animal_sniffer_annotations_1_18.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_codehaus_plexus_plexus_container_default_1_0_alpha_9_stable_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_codehaus_plexus_plexus_interpolation_1_11.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_codehaus_plexus_plexus_utils_1_5_15.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_5_31.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_7_21.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_5_31.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_7_21.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_5_30.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_7_21.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_5_30.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_5_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_5_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_mockito_mockito_core_1_10_19.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_mockito_mockito_core_3_9_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_mockito_mockito_inline_3_9_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_objenesis_objenesis_3_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_ow2_asm_asm_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_ow2_asm_asm_analysis_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_ow2_asm_asm_commons_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_ow2_asm_asm_tree_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_ow2_asm_asm_util_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_annotations_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_junit_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_pluginapi_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_plugins_maven_dependency_resolver_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_resources_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_robolectric_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_sandbox_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_shadowapi_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_shadows_framework_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_utils_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/libraries/Gradle__org_robolectric_utils_reflector_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /android/.idea/modules/-1014497123/path_provider_windows-2.0.5.android.path_provider_windows.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-1143769122/shared_preferences_macos-2.0.3.android.shared_preferences_macos.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-1469823553/shared_preferences_web-2.0.3.android.shared_preferences_web.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-2130271511/url_launcher_ios-6.0.15.android.url_launcher_ios.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-294890834/url_launcher_macos-3.0.0.android.url_launcher_macos.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-371776130/url_launcher_windows-3.0.0.android.url_launcher_windows.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-428777967/url_launcher-6.0.20.android.url_launcher.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-562675594/shared_preferences_ios-2.1.0.android.shared_preferences_ios.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/-950939025/url_launcher_linux-3.0.0.android.url_launcher_linux.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/1401572111/path_provider_linux-2.1.5.android.path_provider_linux.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/1825594717/shared_preferences_linux-2.1.0.android.shared_preferences_linux.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/92155287/url_launcher_web-2.0.9.android.url_launcher_web.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/939540491/shared_preferences-2.0.13.android.shared_preferences.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/999865580/shared_preferences_windows-2.1.0.android.shared_preferences_windows.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/.idea/modules/android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/debug/debug.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/nunioz/app/pub_dev/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package nunioz.app.pub_dev 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/pubicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/android/app/src/main/res/drawable/pubicon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/profile.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.21' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.1.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | tasks.register("clean", Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Feb 12 16:17:16 WAT 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip 7 | -------------------------------------------------------------------------------- /android/pub_dev_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /android/res/values/strings_en.arb: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/apple.png -------------------------------------------------------------------------------- /assets/fonts/DINNextRoundedLTPro-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/assets/fonts/DINNextRoundedLTPro-Bold.otf -------------------------------------------------------------------------------- /assets/fonts/DINNextRoundedLTPro-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/assets/fonts/DINNextRoundedLTPro-Regular.otf -------------------------------------------------------------------------------- /assets/icons/download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | download-cloud 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/globe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | globe 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | alert-circle 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/repository.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | search 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/images/dartlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/assets/images/dartlogo.png -------------------------------------------------------------------------------- /assets/images/pubicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/assets/images/pubicon.png -------------------------------------------------------------------------------- /assets/locale/i18n_zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "loading": "加载中", 3 | "try_again": "重试", 4 | "connection_failed": "连接失败", 5 | "no_internet_access": "无法访问网络", 6 | "server_failure": "出现临时错误,请重试", 7 | "app": "pub.dev", 8 | "no_results_found": "未找到结果", 9 | "error_readme": "该库未上传 README 文档", 10 | "update_view": "向下滑动以更新", 11 | "search_package": "搜索 Package", 12 | "search_invalidates": "搜索无效", 13 | "app_desc": "pub.dev 的 APP 前端", 14 | "git_desc": "源代码", 15 | "store_desc": "在谷歌商店中查看", 16 | "website": "网站", 17 | "versions": "版本", 18 | "about": "关于", 19 | "likes": "喜欢", 20 | "popularity": "人气", 21 | "points": "Pub points", 22 | "dependencies": "依赖", 23 | "dev_dependencies": "开发依赖", 24 | "search_desc": "搜索依赖", 25 | "language": "语言", 26 | "portuguese": "葡萄牙语", 27 | "english": "英语", 28 | "china": "中文", 29 | "dark_mode": "暗色模式", 30 | "settings": "设置", 31 | "environment": "依赖环境", 32 | "latest_version": "最新", 33 | "published": "发布", 34 | "time_type": "# * ago", 35 | "seconds": "Seconds", 36 | "second": "Second", 37 | "minutes": "Minutes", 38 | "minute": "Minute", 39 | "hours": "Hours", 40 | "hour": "Hour", 41 | "days": "Days", 42 | "day": "Day", 43 | "weeks": "Weeks", 44 | "week": "Week", 45 | "months": "Months", 46 | "month": "Month", 47 | "years": "Years", 48 | "year": "Year", 49 | "now": "Now", 50 | "null_safe": "Null-safe", 51 | "changelog": "Changelog", 52 | "publisher": "Publisher", 53 | "publisher_not_found": "Unverified Uploader" 54 | } -------------------------------------------------------------------------------- /dartlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/dartlogo.png -------------------------------------------------------------------------------- /flutter_pub_dev.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /google-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/google-play.png -------------------------------------------------------------------------------- /integration_test/detail_package_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:integration_test/integration_test.dart'; 3 | import 'package:flutter_package/main.dart' as app; 4 | import 'dart:math'; 5 | import 'package:flutter/material.dart'; 6 | 7 | void main() { 8 | IntegrationTestWidgetsFlutterBinding.ensureInitialized(); 9 | 10 | testWidgets('detail of package', (tester) async { 11 | app.main(); 12 | 13 | await tester.pumpAndSettle(Duration(seconds: 2)); 14 | 15 | var index = Random().nextInt(50) + 1; 16 | 17 | final listFinder = find.byType(Scrollable); 18 | 19 | var itemFinder = find.byKey(ValueKey('package_$index')); 20 | 21 | expect(itemFinder, findsOneWidget); 22 | 23 | await tester.pump(); 24 | await tester.pumpAndSettle(const Duration(seconds: 1)); 25 | await tester.pumpAndSettle(); 26 | 27 | if (index >= 5) { 28 | await tester.scrollUntilVisible(itemFinder, 500.0, 29 | duration: Duration(milliseconds: 300), 30 | scrollable: listFinder, 31 | maxScrolls: 500); 32 | } 33 | 34 | await tester.pump(); 35 | await tester.pumpAndSettle(const Duration(seconds: 1)); 36 | await tester.pumpAndSettle(); 37 | 38 | await tester.tap(itemFinder); 39 | 40 | await tester.pump(); 41 | await tester.pumpAndSettle(const Duration(seconds: 2)); 42 | await tester.pumpAndSettle(); 43 | 44 | var backButton = find.byKey(ValueKey('BackButton')); 45 | 46 | await tester.pumpAndSettle(const Duration(seconds: 1)); 47 | 48 | await tester.tap(backButton); 49 | }); 50 | } 51 | -------------------------------------------------------------------------------- /integration_test/search_package_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:integration_test/integration_test.dart'; 3 | import 'package:flutter_package/main.dart' as app; 4 | import 'package:flutter/material.dart'; 5 | 6 | void main() { 7 | IntegrationTestWidgetsFlutterBinding.ensureInitialized(); 8 | 9 | testWidgets('search package', (tester) async { 10 | app.main(); 11 | 12 | await tester.pumpAndSettle(Duration(seconds: 2)); 13 | 14 | var button = find.byTooltip('search'); 15 | 16 | await tester.tap(button); 17 | 18 | await tester.pumpAndSettle(Duration(milliseconds: 800)); 19 | 20 | expect(find.byType(TextField), findsOneWidget); 21 | 22 | var editText = find.byType(TextField); 23 | await tester.enterText(editText, 'avatar_letter'); 24 | await tester.testTextInput.receiveAction(TextInputAction.done); 25 | 26 | await tester.pump(); 27 | await tester.pumpAndSettle(const Duration(seconds: 2)); 28 | await tester.pumpAndSettle(); 29 | 30 | var _find = await find.byWidgetPredicate((widget) => 31 | widget.key != null && widget.key == ValueKey('search-result')); 32 | expect(_find, findsWidgets); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '16.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" -------------------------------------------------------------------------------- /ios/Runner/Runner.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_package/src/app.dart'; 3 | import 'package:flutter_package/src/application/settings/config_view_model.dart'; 4 | import 'package:flutter_package/src/infrastructure/core/network_builder.dart'; 5 | import 'package:flutter_package/src/injection/injection_config.dart'; 6 | import 'package:shared_preferences/shared_preferences.dart'; 7 | 8 | Future main() async { 9 | WidgetsFlutterBinding.ensureInitialized(); 10 | 11 | var shared = await SharedPreferences.getInstance(); 12 | 13 | final network = NetworkBuilder(); 14 | 15 | InjectorConfig.initialize(dio: network.build(), preferences: shared); 16 | 17 | await inject().initialize(); 18 | 19 | runApp(App()); 20 | } 21 | 22 | 23 | -------------------------------------------------------------------------------- /lib/src/application/core/base_view_model.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'base_view_model.dart'; 4 | 5 | // ************************************************************************** 6 | // StoreGenerator 7 | // ************************************************************************** 8 | 9 | // ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers 10 | 11 | mixin _$BaseViewModel on _BaseViewModel, Store { 12 | Computed? _$isBusyComputed; 13 | 14 | @override 15 | bool get isBusy => (_$isBusyComputed ??= 16 | Computed(() => super.isBusy, name: '_BaseViewModel.isBusy')) 17 | .value; 18 | 19 | late final _$_isBusyAtom = 20 | Atom(name: '_BaseViewModel._isBusy', context: context); 21 | 22 | @override 23 | bool get _isBusy { 24 | _$_isBusyAtom.reportRead(); 25 | return super._isBusy; 26 | } 27 | 28 | @override 29 | set _isBusy(bool value) { 30 | _$_isBusyAtom.reportWrite(value, super._isBusy, () { 31 | super._isBusy = value; 32 | }); 33 | } 34 | 35 | late final _$_BaseViewModelActionController = 36 | ActionController(name: '_BaseViewModel', context: context); 37 | 38 | @override 39 | void setBusy(bool state) { 40 | final _$actionInfo = _$_BaseViewModelActionController.startAction( 41 | name: '_BaseViewModel.setBusy'); 42 | try { 43 | return super.setBusy(state); 44 | } finally { 45 | _$_BaseViewModelActionController.endAction(_$actionInfo); 46 | } 47 | } 48 | 49 | @override 50 | String toString() { 51 | return ''' 52 | isBusy: ${isBusy} 53 | '''; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/src/domain/core/api_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | 3 | abstract class Api { 4 | const Api(this.dio); 5 | final Dio dio; 6 | } 7 | -------------------------------------------------------------------------------- /lib/src/domain/core/data/config_preference.dart: -------------------------------------------------------------------------------- 1 | import 'package:shared_preferences/shared_preferences.dart'; 2 | 3 | abstract class ConfigDataPreference { 4 | final SharedPreferences preferences; 5 | 6 | const ConfigDataPreference(this.preferences); 7 | 8 | /// save preference the language 9 | void saveLanguageCode(String code); 10 | 11 | /// save preference the theme mode 12 | void enableDarkMode(bool value); 13 | 14 | /// clear preferences 15 | void clear(); 16 | 17 | bool getIsActiveDarkMode(); 18 | 19 | String getCurrentLanguageCode(); 20 | } 21 | -------------------------------------------------------------------------------- /lib/src/domain/core/i_advanced_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 3 | 4 | abstract class IAdvancedService { 5 | /// [readFile] Responsible for reading the project readme file 6 | /// This return [String] when the request is successful 7 | /// and [RequestFailure] when the request is not successful 8 | Future> readFile({required String gitPath,required String fileName}); 9 | } 10 | -------------------------------------------------------------------------------- /lib/src/domain/core/navigation/navigation_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | abstract class NavigationService { 4 | final GlobalKey navigator; 5 | 6 | GlobalKey get scaffoldState => GlobalKey(); 7 | 8 | NavigationService(this.navigator); 9 | 10 | /// [navigateToPushNamed] Function responsible for calling 11 | /// a new application screen by route base 12 | Future navigateToPushNamed(String routeName, {Object? arguments}); 13 | 14 | /// [replaceRouteName] Function responsible for replacing 15 | /// a application screen by route base 16 | Future navigateToPushNamedAndRemoveUntil(String routeName); 17 | 18 | /// [navigateToPop] Function responsible for closing the application screen 19 | Future navigateToPop({Object? object}); 20 | } 21 | -------------------------------------------------------------------------------- /lib/src/domain/core/request_failure.dart: -------------------------------------------------------------------------------- 1 | import 'package:freezed_annotation/freezed_annotation.dart'; 2 | 3 | part 'request_failure.freezed.dart'; 4 | 5 | @freezed 6 | abstract class RequestFailure with _$RequestFailure { 7 | factory RequestFailure.networkError() = _NetworkFailure; 8 | factory RequestFailure.empty() = _Empty; 9 | factory RequestFailure.serverError() = _ServerError; 10 | } 11 | 12 | 13 | -------------------------------------------------------------------------------- /lib/src/domain/packages/entities/dependency.dart: -------------------------------------------------------------------------------- 1 | class Dependency{ 2 | String name; 3 | String version; 4 | 5 | Dependency({required this.name, required this.version}); 6 | Map toMap() { 7 | return { 8 | 'name': this.name, 9 | 'version': this.version, 10 | }; 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /lib/src/domain/packages/entities/environment.dart: -------------------------------------------------------------------------------- 1 | class Environment { 2 | final String sdk; 3 | final String flutter; 4 | 5 | Environment({required this.sdk, required this.flutter}); 6 | 7 | Map toMap() { 8 | return { 9 | 'sdk': this.sdk, 10 | 'flutter': this.flutter, 11 | }; 12 | } 13 | 14 | static Environment get empty => 15 | Environment(sdk: '>=2.12.0 <3.0.0', flutter: ''); 16 | } 17 | 18 | extension EnvironmentEx on Environment { 19 | bool get hasData => (sdk.isNotEmpty); 20 | } 21 | -------------------------------------------------------------------------------- /lib/src/domain/packages/entities/metric.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_package/src/domain/packages/entities/score.dart'; 2 | 3 | class Metric { 4 | final List tags; 5 | final bool isNullSafe; 6 | final Score score; 7 | 8 | Metric({ 9 | required this.tags, 10 | required this.isNullSafe, 11 | required this.score, 12 | }); 13 | 14 | Map toMap() { 15 | return { 16 | 'platformList': this.tags, 17 | 'isNullSafe': this.isNullSafe, 18 | 'score': this.score.toMap(), 19 | }; 20 | } 21 | 22 | static Metric get empty => 23 | Metric(tags: [], isNullSafe: false, score: Score.empty); 24 | } 25 | 26 | extension MetricEx on Metric { 27 | bool get isNotEmpty => tags.isNotEmpty; 28 | } 29 | -------------------------------------------------------------------------------- /lib/src/domain/packages/entities/package.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_package/src/domain/packages/entities/version.dart'; 2 | import 'dependency.dart'; 3 | import 'version.dart'; 4 | 5 | 6 | class Package { 7 | final String name; 8 | final String package_url; 9 | final String url; 10 | final List versions; 11 | final Version latest; 12 | 13 | const Package( 14 | {required this.name, 15 | required this.package_url, 16 | required this.url, 17 | required this.latest, 18 | required this.versions}); 19 | 20 | Map toMap() { 21 | return { 22 | 'name': this.name, 23 | 'package_url': this.package_url, 24 | 'url': this.url, 25 | 'versions': this.versions, 26 | 'latest': this.latest, 27 | }; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/src/domain/packages/entities/pubspec.dart: -------------------------------------------------------------------------------- 1 | import 'dependency.dart'; 2 | import 'environment.dart'; 3 | 4 | class Pubspec { 5 | final String name; 6 | final String version; 7 | final String description; 8 | final String homepage; 9 | final String repository; 10 | final Environment environment; 11 | final List dependencies; 12 | final List dev_dependencies; 13 | 14 | Pubspec( 15 | {required this.name, 16 | required this.version, 17 | required this.description, 18 | required this.homepage, 19 | required this.repository, 20 | required this.environment, 21 | required this.dependencies, 22 | required this.dev_dependencies}); 23 | 24 | Map toMap() { 25 | return { 26 | 'name': this.name, 27 | 'version': this.version, 28 | 'description': this.description, 29 | 'repository': this.repository, 30 | 'homepage': this.homepage, 31 | 'dependencies': this.dependencies, 32 | 'dev_dependencies': this.dev_dependencies, 33 | }; 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /lib/src/domain/packages/entities/score.dart: -------------------------------------------------------------------------------- 1 | class Score { 2 | final int grantedPoints; 3 | final int maxPoints; 4 | final int likeCount; 5 | final double popularityScore; 6 | 7 | const Score( 8 | {required this.maxPoints, 9 | required this.grantedPoints, 10 | required this.likeCount, 11 | required this.popularityScore}); 12 | 13 | Map toMap() { 14 | // ignore: unnecessary_cast 15 | return { 16 | 'maxPoints': this.maxPoints, 17 | 'likeCount': this.likeCount, 18 | 'popularityScore': this.popularityScore, 19 | 'grantedPoints': this.grantedPoints, 20 | } as Map; 21 | } 22 | 23 | static Score get empty => 24 | Score(maxPoints: 0, popularityScore: 0.0, likeCount: 0, grantedPoints: 0); 25 | } 26 | 27 | extension Scorex on Score { 28 | String getPopularity() { 29 | var result = (popularityScore * 100).roundToDouble().toStringAsFixed(1); 30 | return '$result%'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/src/domain/packages/entities/version.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_package/src/domain/packages/entities/pubspec.dart'; 2 | 3 | class Version { 4 | final String version; 5 | final String archive_url; 6 | final String published; 7 | final Pubspec pubspec; 8 | 9 | Version( 10 | {required this.version, 11 | required this.archive_url, 12 | required this.pubspec, 13 | required this.published}); 14 | 15 | Map toMap() { 16 | return { 17 | 'version': this.version, 18 | 'published': this.published, 19 | 'archive_url': this.archive_url, 20 | 'pubspec': this.pubspec, 21 | }; 22 | } 23 | } 24 | 25 | extension VersionEx on Version{ 26 | DateTime get date => DateTime.parse(published); 27 | } -------------------------------------------------------------------------------- /lib/src/domain/packages/i_package_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:dio/dio.dart'; 3 | import 'package:flutter_package/src/domain/packages/entities/metric.dart'; 4 | import 'package:flutter_package/src/domain/packages/entities/package.dart'; 5 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 6 | 7 | import '../core/api_service.dart'; 8 | 9 | abstract class IPackageRepository extends Api { 10 | IPackageRepository(Dio dio) : super(dio); 11 | 12 | final String path = '/packages'; 13 | 14 | /// [getPackages] method responsible for listing the packages 15 | /// This returns a list of packets [List] when the request is successful 16 | /// and [RequestFailure] when the request is not successful 17 | Future>> getPackages( 18 | {required int page}); 19 | 20 | /// [getPublisher] get publisher of package [packageName] 21 | /// This return String when the request is successful 22 | /// and [RequestFailure] when the request is not successful 23 | Future> getPublisher( 24 | {required String packageName}); 25 | 26 | /// [getPackageName] This method searches for a package by name 27 | /// This return [Package] when the request is successful 28 | /// and [RequestFailure] when the request is not successful 29 | Future> getPackageName( 30 | {required String packageName}); 31 | 32 | /// [getMetricPackage] This method gets the metrics of a package 33 | /// This return [Metric] when the request is successful 34 | /// and [RequestFailure] when the request is not successful 35 | Future> getMetricPackage( 36 | {required String package}); 37 | } 38 | 39 | 40 | -------------------------------------------------------------------------------- /lib/src/domain/packages/i_package_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/packages/entities/package.dart'; 3 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 4 | import 'entities/metric.dart'; 5 | import 'i_package_repository.dart'; 6 | 7 | abstract class IPackageService { 8 | IPackageService(this.repository); 9 | 10 | final IPackageRepository repository; 11 | 12 | /// [getPackages] method responsible for listing the packages 13 | /// This returns a list of packets [List] when the request is successful 14 | /// and [RequestFailure] when the request is not successful 15 | Future>> getPackages( 16 | {required int page}); 17 | 18 | /// [getPublisher] get publisher of package [packageName] 19 | /// This return String when the request is successful 20 | /// and [RequestFailure] when the request is not successful 21 | Future> getPublisher( 22 | {required String packageName}); 23 | 24 | /// [getPackageName] This method searches for a package by name 25 | /// This return [Package] when the request is successful 26 | /// and [RequestFailure] when the request is not successful 27 | Future> getPackageName( 28 | {required String packageName}); 29 | 30 | /// [getMetricPackage] This method gets the metrics of a package 31 | /// This return [Metric] when the request is successful 32 | /// and [RequestFailure] when the request is not successful 33 | Future> getMetricPackage( 34 | {required String package}); 35 | } 36 | -------------------------------------------------------------------------------- /lib/src/domain/search/i_search_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:dio/dio.dart'; 3 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 4 | import '../core/api_service.dart'; 5 | 6 | abstract class ISearchRepository extends Api { 7 | ISearchRepository(Dio dio) : super(dio); 8 | 9 | final String path = '/search'; 10 | 11 | /// [searchPackage] Method responsible for searching packages 12 | /// This returns list of package names when the request is successful 13 | /// and [RequestFailure] when the request is not successful 14 | Future>> searchPackage( 15 | {required int page, required String query}); 16 | } 17 | -------------------------------------------------------------------------------- /lib/src/domain/search/i_search_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 3 | 4 | import 'i_search_repository.dart'; 5 | 6 | abstract class ISearchService { 7 | ISearchService(this.repository); 8 | 9 | final ISearchRepository repository; 10 | 11 | /// [searchPackage] Method responsible for searching packages 12 | /// This returns list of package names when the request is successful 13 | /// and [RequestFailure] when the request is not successful 14 | Future>> searchPackage( 15 | {required int page, required String query}); 16 | } 17 | 18 | 19 | -------------------------------------------------------------------------------- /lib/src/infrastructure/core/data/default_config_preference.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_package/src/domain/core/data/config_preference.dart'; 2 | import 'package:shared_preferences/shared_preferences.dart'; 3 | 4 | class DefaultConfigDataPreference extends ConfigDataPreference { 5 | static const _keyLanguage = '_key_language'; 6 | static const _keyDarkMode = '_keyDarkMode'; 7 | 8 | DefaultConfigDataPreference(SharedPreferences preferences) 9 | : super(preferences); 10 | 11 | @override 12 | void enableDarkMode(bool value) => preferences.setBool(_keyDarkMode, value); 13 | 14 | @override 15 | void saveLanguageCode(String code) => 16 | preferences.setString(_keyLanguage, code.trim().toLowerCase()); 17 | 18 | @override 19 | void clear() { 20 | preferences.remove(_keyLanguage); 21 | preferences.remove(_keyDarkMode); 22 | } 23 | 24 | @override 25 | bool getIsActiveDarkMode() => preferences.getBool(_keyDarkMode) ?? false; 26 | 27 | @override 28 | String getCurrentLanguageCode() => 29 | preferences.getString(_keyLanguage) ?? ""; 30 | } 31 | -------------------------------------------------------------------------------- /lib/src/infrastructure/core/default_advanced_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/core/i_advanced_service.dart'; 3 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 4 | import 'package:flutter_package/src/infrastructure/core/network_builder.dart'; 5 | 6 | class DefaultAdvancedService extends IAdvancedService { 7 | @override 8 | Future> readFile( 9 | {String? gitPath, String? fileName}) async { 10 | if (gitPath == null || gitPath.isEmpty) 11 | return Left(RequestFailure.serverError()); 12 | 13 | gitPath = gitPath 14 | .replaceAll('https://github.com/', '') 15 | .replaceAll('https://', '') 16 | .replaceAll('tree/', '') 17 | .replaceAll('master/', ''); 18 | var url = 'https://raw.githubusercontent.com/$gitPath/master/$fileName'; 19 | 20 | var network = NetworkBuilder(); 21 | var dio = network.build(); 22 | 23 | var response = await dio 24 | .getUri(Uri.parse(url)) 25 | .then((value) => (value.data)) 26 | .catchError((onError) => null); 27 | 28 | var readme = (response != null && 29 | response.toString().trim() != '404: Not Found' && 30 | response.toString().trim() != '400: Invalid request'); 31 | 32 | return (readme) ? Right(response) : Left(RequestFailure.serverError()); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/src/infrastructure/core/navigation/default_navigation_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_package/src/domain/core/navigation/navigation_service.dart'; 3 | 4 | class DefaultNavigationService extends NavigationService { 5 | DefaultNavigationService(GlobalKey navigator) 6 | : super(navigator); 7 | 8 | @override 9 | Future navigateToPushNamed(String routeName, 10 | {Object? arguments}) async { 11 | return await navigator.currentState! 12 | .pushNamed(routeName, arguments: arguments); 13 | } 14 | 15 | @override 16 | Future navigateToPushNamedAndRemoveUntil(String routeName) async { 17 | return await navigator.currentState! 18 | .pushNamedAndRemoveUntil(routeName, (Route route) => false); 19 | } 20 | 21 | @override 22 | Future navigateToPop({Object? object}) async { 23 | return navigator.currentState!.pop(object); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/src/infrastructure/core/network_builder.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:dio/io.dart'; 3 | 4 | const String host = 'pub.dartlang.org'; 5 | const String apiBaseUrl = 'https://$host/api'; 6 | 7 | class NetworkBuilder { 8 | String _baseUrl = ''; 9 | 10 | void setBaseUrl(String baseUrl) { 11 | ArgumentError.checkNotNull(baseUrl, 'baseUrl'); 12 | _baseUrl = baseUrl; 13 | } 14 | 15 | Dio build() { 16 | final dio = Dio(); 17 | dio.options.baseUrl = (_baseUrl.isEmpty) ? apiBaseUrl : _baseUrl; 18 | final defaultClient = DefaultHttpClientAdapter(); 19 | defaultClient.onHttpClientCreate = (httpClient) { 20 | httpClient.badCertificateCallback = (_, host, __) => host == apiBaseUrl; 21 | }; 22 | dio.httpClientAdapter = defaultClient; 23 | return dio; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/src/infrastructure/packages/base_package_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/packages/entities/metric.dart'; 3 | import 'package:flutter_package/src/domain/packages/entities/package.dart'; 4 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 5 | import 'package:flutter_package/src/domain/packages/i_package_repository.dart'; 6 | import 'package:flutter_package/src/domain/packages/i_package_service.dart'; 7 | 8 | class BasePackageService extends IPackageService { 9 | BasePackageService(IPackageRepository repository) : super(repository); 10 | 11 | @override 12 | Future> getPackageName( 13 | {required String packageName}) async => 14 | await repository.getPackageName(packageName: packageName); 15 | 16 | @override 17 | Future>> getPackages( 18 | {required int page}) async => 19 | await repository.getPackages(page: page); 20 | 21 | @override 22 | Future> getMetricPackage( 23 | {required String package}) async => 24 | await repository.getMetricPackage(package: package); 25 | 26 | @override 27 | Future> getPublisher( 28 | {required String packageName}) async => 29 | await repository.getPublisher(packageName: packageName); 30 | } 31 | -------------------------------------------------------------------------------- /lib/src/infrastructure/search/base_search_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 3 | import 'package:flutter_package/src/domain/search/i_search_service.dart'; 4 | 5 | import '../../domain/search/i_search_repository.dart'; 6 | 7 | class BaseSearchService extends ISearchService { 8 | BaseSearchService(ISearchRepository repository) : super(repository); 9 | 10 | @override 11 | Future>> searchPackage( 12 | {required int page, required String query}) async => 13 | await repository.searchPackage(page: page, query: query); 14 | } 15 | -------------------------------------------------------------------------------- /lib/src/presentation/core/base_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | abstract class BaseComponent extends StatelessWidget { 4 | final String? value; 5 | 6 | BaseComponent({Key? key, this.value}) : super(key: key); 7 | } 8 | -------------------------------------------------------------------------------- /lib/src/presentation/core/custom_progress.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_package/src/utils/colors.dart'; 6 | 7 | class CustomProgress extends StatelessWidget { 8 | final Color? color; 9 | 10 | final double size; 11 | 12 | const CustomProgress({ 13 | this.color, 14 | this.size = 20, 15 | }); 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | Color _color = (color != null) ? color! : kPrimaryColor; 20 | 21 | var brightness = Theme.of(context).brightness; 22 | 23 | return Container( 24 | child: (Platform.isIOS) 25 | ? MediaQuery( 26 | data: MediaQueryData( 27 | platformBrightness: brightness, 28 | ), 29 | child: CupertinoActivityIndicator()) 30 | : CircularProgressIndicator( 31 | strokeWidth: 2.5, 32 | valueColor: AlwaysStoppedAnimation(_color), 33 | ), 34 | width: size, 35 | height: size, 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/src/presentation/core/custom_refresh.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_package/src/presentation/core/styles.dart'; 3 | import 'package:pull_to_refresh/pull_to_refresh.dart'; 4 | import 'base_widget.dart'; 5 | import 'custom_progress.dart'; 6 | 7 | class CustomRefresh extends BaseComponent { 8 | final bool enablePullDown; 9 | final bool enablePullUp; 10 | final RefreshController refresh; 11 | final VoidCallback? onRefresh; 12 | final VoidCallback? onLoading; 13 | final Widget child; 14 | 15 | CustomRefresh( 16 | {this.enablePullDown = true, 17 | this.enablePullUp = true, 18 | required this.refresh, 19 | this.onRefresh, 20 | this.onLoading, 21 | required this.child}) 22 | : super(value: ''); 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | return SmartRefresher( 27 | enablePullDown: enablePullDown, 28 | enablePullUp: enablePullUp, 29 | physics: ClampingScrollPhysics(), 30 | footer: CustomFooter( 31 | builder: (context, mode) { 32 | Widget body = empty; 33 | if (mode == LoadStatus.loading) { 34 | body = Container( 35 | child: CustomProgress(), 36 | width: 24, 37 | height: 24, 38 | ); 39 | } 40 | return Container( 41 | height: 55.0, 42 | child: Center(child: body), 43 | ); 44 | }, 45 | ), 46 | controller: refresh, 47 | onRefresh: onRefresh, 48 | onLoading: onLoading, 49 | child: child, 50 | ); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/src/presentation/core/side_rounded.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SideRounded extends StatelessWidget { 4 | final Widget child; 5 | final double radious; 6 | final Color color; 7 | 8 | const SideRounded({ 9 | Key? key, 10 | required this.child, 11 | this.color = Colors.black, 12 | this.radious = 29, 13 | }) : super(key: key); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Container( 18 | alignment: Alignment.center, 19 | decoration: BoxDecoration( 20 | color: color, 21 | borderRadius: BorderRadius.only( 22 | topLeft: Radius.circular(radious), 23 | bottomRight: Radius.circular(8.0), 24 | ), 25 | ), 26 | child: child, 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/src/presentation/core/svg_icon.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/src/widgets/framework.dart'; 3 | import 'package:flutter_package/src/utils/colors.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | import 'base_widget.dart'; 7 | 8 | class CustomIcon extends BaseComponent { 9 | double? size; 10 | Color? color; 11 | final isColor; 12 | 13 | CustomIcon( 14 | {this.size, this.color, required String icon, this.isColor = false}) 15 | : super(value: icon); 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | size = size ?? 24; 20 | color = (isColor) ? null : color ?? kIconColor; 21 | return SvgPicture.asset( 22 | 'assets/icons/${value}.svg', 23 | height: size, 24 | width: size, 25 | color: color, 26 | ); 27 | } 28 | } 29 | 30 | class SvgImage extends BaseComponent { 31 | final double height; 32 | final double width; 33 | 34 | SvgImage({ 35 | required this.height, 36 | required this.width, 37 | required String icon, 38 | }) : super(value: icon); 39 | 40 | @override 41 | Widget build(BuildContext context) { 42 | return SvgPicture.asset( 43 | 'assets/icons/${value}.svg', 44 | height: height, 45 | width: width, 46 | fit: BoxFit.cover, 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/src/presentation/core/tag.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_package/src/presentation/core/base_widget.dart'; 4 | import 'package:flutter_package/src/utils/colors.dart'; 5 | import 'package:flutter_package/src/presentation/core/styles.dart'; 6 | import 'package:flutter_package/src/utils/size.dart'; 7 | 8 | class Tag extends BaseComponent { 9 | Tag({required String value}) : super(value: value); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Container( 14 | padding: EdgeInsets.all(4.0), 15 | constraints: BoxConstraints(minWidth: 40.0), 16 | decoration: decoration( 17 | color: kPrimaryColor, borderRadius: kBorder/2), 18 | child: Center( 19 | child: Text( 20 | value!, 21 | style: styleText( 22 | fontSize: 12.0, 23 | color: Colors.white, 24 | fontWeight: FontWeight.bold, 25 | ), 26 | maxLines: 1, 27 | textAlign: TextAlign.center, 28 | ), 29 | ), 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/src/presentation/core/title_switch.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_package/src/presentation/core/base_widget.dart'; 3 | import 'package:flutter_package/src/utils/colors.dart'; 4 | 5 | import 'custom_switch.dart'; 6 | 7 | class TitleSwitch extends BaseComponent { 8 | final Function(bool)? onTap; 9 | final CustomSwitchController controller; 10 | 11 | TitleSwitch({ 12 | Key? key, 13 | required String title, 14 | required this.controller, 15 | required this.onTap, 16 | }) : super(value: title); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Container( 21 | child: Row( 22 | children: [ 23 | Expanded(child: Text(value!)), 24 | CustomSwitch( 25 | controller: controller, 26 | width: 42.0, 27 | height: 28.0, 28 | activeColor: kPrimaryColor, 29 | onChange: onTap, 30 | ) 31 | ], 32 | ), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/src/presentation/core/version_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_package/src/domain/packages/entities/version.dart'; 4 | import 'package:flutter_package/src/utils/colors.dart'; 5 | import 'package:flutter_package/src/presentation/core/styles.dart'; 6 | import 'package:flutter_package/src/utils/size.dart'; 7 | 8 | class VersionItem extends StatelessWidget { 9 | final Version version; 10 | final bool selected; 11 | final Function() onTap; 12 | 13 | VersionItem( 14 | {required this.version, required this.onTap, required this.selected}); 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return Container( 19 | padding: EdgeInsets.zero, 20 | decoration: decoration( 21 | color: selected ? kPrimaryColor : kPlaceholderColor, 22 | borderRadius: kBorder), 23 | child: InkWell( 24 | onTap: onTap, 25 | child: Container( 26 | constraints: BoxConstraints(maxWidth: 100.0), 27 | child: Center( 28 | child: Text( 29 | version.version, 30 | style: styleText( 31 | fontSize: 12.0, 32 | color: selected ? Colors.white : kTitleTextColor, 33 | fontWeight: FontWeight.bold, 34 | ), 35 | maxLines: 1, 36 | textAlign: TextAlign.center, 37 | ), 38 | ), 39 | ), 40 | )); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/src/presentation/settings/config_builder.dart: -------------------------------------------------------------------------------- 1 | 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/rendering.dart'; 5 | import 'package:flutter_mobx/flutter_mobx.dart'; 6 | import 'package:flutter_package/src/application/settings/config_view_model.dart'; 7 | import 'package:flutter_package/src/injection/injection_config.dart'; 8 | 9 | class ConfigBuilder extends StatefulWidget { 10 | final Widget Function(Locale,ThemeData) builder; 11 | 12 | ConfigBuilder({required this.builder}); 13 | 14 | @override 15 | _ConfigBuilderState createState() => _ConfigBuilderState(); 16 | } 17 | 18 | class _ConfigBuilderState extends State 19 | with SingleTickerProviderStateMixin { 20 | ConfigViewModel _model = inject(); 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return Observer( 25 | builder: (_) => widget.builder(_model.locale,_model.theme), 26 | ); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/src/utils/colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | late Color kPrimaryColor; 4 | 5 | late Color kBackgroundColor; 6 | 7 | late Color kIconColor; 8 | 9 | late Color kPlaceholderColor; 10 | 11 | late Color kTitleTextColor; 12 | 13 | late Color kSubtitleTextColor; 14 | 15 | late Color kProgressColor; 16 | -------------------------------------------------------------------------------- /lib/src/utils/constants.dart: -------------------------------------------------------------------------------- 1 | const VERSION_APP = '0.0.9'; 2 | const GITHUB = 'https://github.com/EdvaldoMartins/flutter_pub_dev'; 3 | const PUBDEV = 'https://pub.dev/packages'; 4 | 5 | String get fontName => 'Font'; 6 | 7 | List get tagList => [ 8 | "web", 9 | "windows", 10 | "linux", 11 | "macos", 12 | "android", 13 | "ios", 14 | "fuchsia", 15 | ]; 16 | -------------------------------------------------------------------------------- /lib/src/utils/size.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const double _VerticalSpaceSmall = 10.0; 4 | const double _VerticalSpaceMedium = 20.0; 5 | const double _VerticalSpaceLarge = 60.0; 6 | 7 | const double _HorizontalSpaceSmall = 10.0; 8 | const double _HorizontalSpaceMedium = 20.0; 9 | const double HorizontalSpaceLarge = 60.0; 10 | 11 | const double kIconSize = 20.0; 12 | 13 | const double kTitleSize = 16.0; 14 | 15 | const double kSubtitleSize = 14.0; 16 | 17 | const double kBorder = 8.0; 18 | 19 | Widget verticalSpaceSmall() { 20 | return verticalSpace(_VerticalSpaceSmall); 21 | } 22 | 23 | Widget verticalSpaceMedium() { 24 | return verticalSpace(_VerticalSpaceMedium); 25 | } 26 | 27 | Widget verticalSpaceLarge() { 28 | return verticalSpace(_VerticalSpaceLarge); 29 | } 30 | 31 | Widget verticalSpace(double height) { 32 | return Container(height: height); 33 | } 34 | 35 | Widget horizontalSpaceSmall() { 36 | return horizontalSpace(_HorizontalSpaceSmall); 37 | } 38 | 39 | Widget horizontalSpaceMedium() { 40 | return horizontalSpace(_HorizontalSpaceMedium); 41 | } 42 | 43 | Widget horizontalSpaceLarge() { 44 | return horizontalSpace(HorizontalSpaceLarge); 45 | } 46 | 47 | Widget horizontalSpace(double width) { 48 | return Container(width: width); 49 | } 50 | -------------------------------------------------------------------------------- /lib/src/utils/util.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'dart:ui'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_package/src/domain/packages/entities/package.dart'; 5 | import 'package:share/share.dart'; 6 | import 'package:url_launcher/url_launcher.dart'; 7 | 8 | import '../l18n.dart'; 9 | 10 | class Util { 11 | /// [defaultLocale] get locale to device 12 | static Future defaultLocale() async { 13 | var value = Platform.localeName; 14 | value = (value.isEmpty) ? 'pt' : value; 15 | value = value.toLowerCase().contains('pt') ? 'pt' : 'en'; 16 | return I18n.filterLocale(Locale(value)); 17 | } 18 | 19 | /// [openLink] open an address on the web 20 | static openLink({required String url}) async { 21 | try { 22 | if (await canLaunch(url)) { 23 | await launch( 24 | url, 25 | forceSafariVC: false, 26 | forceWebView: false, 27 | ); 28 | } 29 | } catch (ex) {} 30 | } 31 | 32 | /// [shareProject] share the package address 33 | static shareProject({required Package package}) { 34 | var url = package.latest.archive_url 35 | .replaceAll('/versions/${package.latest.version}.tar.gz', ''); 36 | Share.share(url); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /pub_dev.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /screenshots/smartmockups_klcem8w7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/screenshots/smartmockups_klcem8w7.png -------------------------------------------------------------------------------- /screenshots/smartmockups_klcen4ty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/screenshots/smartmockups_klcen4ty.png -------------------------------------------------------------------------------- /screenshots/smartmockups_klceoqtt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/screenshots/smartmockups_klceoqtt.png -------------------------------------------------------------------------------- /screenshots/smartmockups_klcesngj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/screenshots/smartmockups_klcesngj.png -------------------------------------------------------------------------------- /stores.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srnunio/flutter_pub_dev/7f85810dad1b3742e0ce7582bfed0d2c1d9b245a/stores.png -------------------------------------------------------------------------------- /test/src/application/package/state_search_package_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/application/search/search_view_model.dart'; 3 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 4 | import 'package:flutter_package/src/domain/search/i_search_service.dart'; 5 | import 'package:flutter_package/src/infrastructure/search/base_search_service.dart'; 6 | import 'package:flutter_test/flutter_test.dart'; 7 | import 'package:mockito/mockito.dart'; 8 | 9 | import '../../infrastructure/mocks.mocks.dart'; 10 | 11 | void main() { 12 | late MockISearchRepository repository; 13 | late ISearchService service; 14 | late SearchViewModel viewModel; 15 | 16 | setUp(() { 17 | repository = MockISearchRepository(); 18 | service = BaseSearchService(repository); 19 | viewModel = SearchViewModel(service); 20 | }); 21 | 22 | test('change state when search is successfully', () async { 23 | var data = ['avatar_letter']; 24 | var query = 'avatar'; 25 | 26 | when(repository.searchPackage(page: 1, query: query)) 27 | .thenAnswer((_) async => Right(data)); 28 | 29 | expect(viewModel.hasData, false); 30 | 31 | await viewModel.load(query: query); 32 | 33 | expect(viewModel.hasData, true); 34 | }); 35 | 36 | test('state when search result is empty', () async { 37 | var query = 'avatar'; 38 | 39 | when(repository.searchPackage(page: 1, query: query)) 40 | .thenAnswer((_) async => Left(RequestFailure.empty())); 41 | 42 | expect(viewModel.hasData, false); 43 | 44 | await viewModel.load(query: query); 45 | 46 | expect(Left(RequestFailure.empty()), equals(Left(RequestFailure.empty()))); 47 | }); 48 | } 49 | -------------------------------------------------------------------------------- /test/src/infrastructure/mocks.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:flutter_package/src/domain/core/i_advanced_service.dart'; 3 | import 'package:flutter_package/src/domain/packages/i_package_repository.dart'; 4 | import 'package:flutter_package/src/domain/search/i_search_repository.dart'; 5 | import 'package:mockito/annotations.dart'; 6 | 7 | @GenerateMocks([IPackageRepository, ISearchRepository, IAdvancedService], 8 | customMocks: [MockSpec(as: #MockApi)]) 9 | void main() {} 10 | -------------------------------------------------------------------------------- /test/src/infrastructure/package/get_list_of_package_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 3 | import 'package:flutter_package/src/domain/packages/i_package_service.dart'; 4 | import 'package:flutter_package/src/infrastructure/packages/base_package_service.dart'; 5 | import 'package:flutter_test/flutter_test.dart'; 6 | import 'package:mockito/mockito.dart'; 7 | 8 | import '../core/data/package_fake_data.dart'; 9 | import '../mocks.mocks.dart'; 10 | 11 | 12 | void main() { 13 | late MockIPackageRepository repository; 14 | late IPackageService service; 15 | 16 | setUp(() { 17 | repository = MockIPackageRepository(); 18 | service = BasePackageService(repository); 19 | }); 20 | 21 | test('when get list of package is successfully', () async { 22 | var data = [defaultPackage]; 23 | when(repository.getPackages(page: 0)).thenAnswer((_) async => Right(data)); 24 | var result = await service.getPackages(page: 0); 25 | expect(result, Right(data)); 26 | }); 27 | 28 | test('when get list of package is empty', () async { 29 | when(repository.getPackages(page: 0)) 30 | .thenAnswer((_) async => Left(RequestFailure.empty())); 31 | 32 | var result = await service.getPackages(page: 0); 33 | 34 | expect(result, equals(Left(RequestFailure.empty()))); 35 | }); 36 | } 37 | -------------------------------------------------------------------------------- /test/src/infrastructure/package/search_package_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_package/src/domain/core/request_failure.dart'; 3 | import 'package:flutter_package/src/domain/search/i_search_service.dart'; 4 | import 'package:flutter_package/src/infrastructure/search/base_search_service.dart'; 5 | import 'package:flutter_test/flutter_test.dart'; 6 | import 'package:mockito/mockito.dart'; 7 | import '../mocks.mocks.dart'; 8 | 9 | void main() { 10 | late MockISearchRepository repository; 11 | late ISearchService service; 12 | 13 | setUp(() { 14 | repository = MockISearchRepository(); 15 | service = BaseSearchService(repository); 16 | }); 17 | 18 | test('when search is successfully', () async { 19 | var data = ['avatar_letter']; 20 | var query = 'avatar'; 21 | when(repository.searchPackage(page: 0, query: query)) 22 | .thenAnswer((_) async => Right(data)); 23 | 24 | var result = await service.searchPackage(page: 0, query: query); 25 | 26 | expect(result, equals(Right(data))); 27 | }); 28 | 29 | test('when search has empty result', () async { 30 | var query = 'avatar'; 31 | when(repository.searchPackage(page: 0, query: query)) 32 | .thenAnswer((_) async => Left(RequestFailure.empty())); 33 | 34 | var result = await service.searchPackage(page: 0, query: query); 35 | 36 | expect(result, equals(Left(RequestFailure.empty()))); 37 | }); 38 | } 39 | --------------------------------------------------------------------------------