├── .firebase └── hosting.YnVpbGQvd2Vi.cache ├── .firebaserc ├── .fvmrc ├── .gitignore ├── .metadata ├── .vscode ├── launch.json └── settings.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTION.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ ├── google-services.json │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── flutterui │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── 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-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── icons │ ├── android.svg │ ├── back.svg │ ├── card.svg │ ├── chevron_down.svg │ ├── clipboard.svg │ ├── code.svg │ ├── desktop.svg │ ├── diamond.svg │ ├── download.svg │ ├── en.svg │ ├── facebook.svg │ ├── fr.svg │ ├── github.svg │ ├── google.svg │ ├── ios.svg │ ├── link.svg │ ├── linkedin.svg │ ├── linux.svg │ ├── macos.svg │ ├── menu.svg │ ├── mobile.svg │ ├── moon.svg │ ├── next.svg │ ├── search.svg │ ├── spotify.svg │ ├── sun.svg │ ├── tab.svg │ ├── tablet.svg │ ├── telegram.svg │ ├── tiktok.svg │ ├── web.svg │ ├── x.svg │ └── youtube.svg ├── images │ ├── android.png │ ├── android_ori.png │ ├── bottom_frame.png │ ├── code.png │ ├── dart.png │ ├── dart_colored.png │ ├── dart_dark.png │ ├── dart_light.png │ ├── flutter.png │ ├── flutter_colored.png │ ├── flutter_dark.png │ ├── flutter_light.png │ ├── fruity_lips │ │ ├── green_bottle.png │ │ ├── green_mini_slice.png │ │ ├── green_slice.png │ │ ├── logo.png │ │ ├── purple_bottle.png │ │ ├── purple_mini_slice.png │ │ ├── purple_slice.png │ │ ├── yellow_bottle.png │ │ ├── yellow_mini_slice.png │ │ └── yellow_slice.png │ ├── fwh.png │ ├── image_7.jpg │ ├── ios.png │ ├── linux.png │ ├── linux_or.png │ ├── logo_dark.png │ ├── logo_white.png │ ├── macos.png │ ├── nike.png │ ├── nike_0.png │ ├── nike_1.png │ ├── nike_2.png │ ├── profile_0.jpg │ ├── profile_1.jpg │ ├── support.png │ ├── support_1.jpg │ ├── support_2.png │ └── web.png └── translations │ ├── en-US.json │ └── fr-FR.json ├── devtools_options.yaml ├── firebase.json ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.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 │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── GoogleService-Info.plist │ ├── Info.plist │ └── Runner-Bridging-Header.h └── RunnerTests │ └── RunnerTests.swift ├── lib ├── app │ ├── core │ │ ├── app.dart │ │ ├── app_scroll_behavior.dart │ │ ├── boostrap.dart │ │ ├── config.dart │ │ ├── main_dev.dart │ │ ├── main_prod.dart │ │ ├── routes │ │ │ ├── app_router.dart │ │ │ └── route_names.dart │ │ └── service_locators.dart │ ├── presentation │ │ ├── categories │ │ │ ├── screens │ │ │ │ ├── component_category_screen.dart │ │ │ │ ├── component_details_wrapper.dart │ │ │ │ └── template_category_screen.dart │ │ │ └── widget │ │ │ │ ├── category_card.dart │ │ │ │ ├── component_details_footer.dart │ │ │ │ ├── component_layout.dart │ │ │ │ ├── resource_section.dart │ │ │ │ ├── supported_platforms.dart │ │ │ │ └── template_card.dart │ │ ├── coming_soon │ │ │ └── screens │ │ │ │ └── coming_soon_screen.dart │ │ ├── errors │ │ │ └── screens │ │ │ │ └── not_found.dart │ │ ├── home │ │ │ ├── data │ │ │ │ ├── blocks │ │ │ │ │ ├── bottom_nav_bars_bloc_item.dart │ │ │ │ │ ├── buttons_bloc_item.dart │ │ │ │ │ ├── carousels_bloc_item.dart │ │ │ │ │ ├── drawers_bloc_item.dart │ │ │ │ │ ├── inputs_bloc_item.dart │ │ │ │ │ ├── loaders_bloc_item.dart │ │ │ │ │ ├── switchers_bloc_item.dart │ │ │ │ │ └── text_bloc_item.dart │ │ │ │ ├── effects │ │ │ │ │ ├── background_effects_bloc_item.dart │ │ │ │ │ ├── colors_effect_bloc.dart │ │ │ │ │ └── gradient_effects_bloc_item.dart │ │ │ │ ├── export │ │ │ │ │ └── sidebar_categories.dart │ │ │ │ └── templates │ │ │ │ │ ├── app_clone_bloc_item.dart │ │ │ │ │ ├── auth_bloc_item.dart │ │ │ │ │ ├── bottom_bar.dart │ │ │ │ │ └── home_screen_bloc_item.dart │ │ │ ├── model │ │ │ │ └── component_block_model.dart │ │ │ ├── screens │ │ │ │ ├── home_screen.dart │ │ │ │ └── theme_toggle.dart │ │ │ └── widgets │ │ │ │ ├── assets_section.dart │ │ │ │ ├── bottom_bar_clipper.dart │ │ │ │ ├── component_block.dart │ │ │ │ ├── device_interactive.dart │ │ │ │ ├── hero_section.dart │ │ │ │ ├── home_footer.dart │ │ │ │ └── integration_section.dart │ │ ├── request_component │ │ │ └── request_component_screen.dart │ │ └── start │ │ │ └── splash_screen.dart │ └── shared │ │ ├── data │ │ ├── enums │ │ │ ├── component_category_enum.dart │ │ │ ├── device_type.dart │ │ │ ├── sub_component_category_enum.dart │ │ │ ├── supported_platform.dart │ │ │ └── theme.dart │ │ └── models │ │ │ ├── code_component.dart │ │ │ └── component.dart │ │ ├── logic │ │ ├── language │ │ │ ├── language_bloc.dart │ │ │ ├── language_event.dart │ │ │ └── language_state.dart │ │ ├── navigation │ │ │ ├── navigation_bloc.dart │ │ │ ├── navigation_event.dart │ │ │ └── navigation_state.dart │ │ ├── sidebar │ │ │ ├── sidebar_bloc.dart │ │ │ ├── sidebar_event.dart │ │ │ └── sidebar_state.dart │ │ └── theme │ │ │ ├── theme_bloc.dart │ │ │ ├── theme_event.dart │ │ │ └── theme_state.dart │ │ └── presentation │ │ ├── helpers │ │ ├── observers │ │ │ ├── bloc_observer.dart │ │ │ └── nav_observer.dart │ │ └── platform │ │ │ ├── platform.dart │ │ │ ├── platform_enum.dart │ │ │ ├── platform_io.dart │ │ │ ├── platform_stub.dart │ │ │ └── platform_web.dart │ │ ├── models │ │ └── nav_link.dart │ │ ├── utils │ │ ├── colors.dart │ │ ├── icons.dart │ │ ├── images.dart │ │ ├── lang_util.dart │ │ ├── sizing.dart │ │ ├── theme.dart │ │ └── util.dart │ │ └── widgets │ │ ├── app_container.dart │ │ ├── app_search_bar.dart │ │ ├── chip.dart │ │ ├── code_highlight.dart │ │ ├── code_highlighter2.dart │ │ ├── code_preview.dart │ │ ├── component_footer.dart │ │ ├── device_frame.dart │ │ ├── device_section_frame.dart │ │ ├── icon.dart │ │ ├── language_button.dart │ │ └── layout │ │ ├── app_layout.dart │ │ ├── home_mobile_nav.dart │ │ ├── home_nav_bar.dart │ │ ├── main_content.dart │ │ ├── side_bar.dart │ │ └── side_bar_item.dart └── components │ ├── data │ ├── logic │ │ └── component │ │ │ ├── component_bloc.dart │ │ │ ├── component_event.dart │ │ │ └── component_state.dart │ └── services │ │ └── component_service.dart │ ├── presentation │ ├── animations │ │ └── skew_card │ │ │ ├── data.dart │ │ │ ├── skew_card_code.dart │ │ │ └── skew_card_widget.dart │ ├── blocks │ │ ├── bottom_nav_bars │ │ │ └── docking_bar │ │ │ │ ├── data.dart │ │ │ │ ├── docking_bar_code.dart │ │ │ │ ├── docking_bar_setup.dart │ │ │ │ └── docking_bar_widget.dart │ │ ├── buttons │ │ │ ├── apple_books_fab │ │ │ │ ├── apple_books_fab_code.dart │ │ │ │ ├── apple_books_fab_setup.dart │ │ │ │ ├── apple_books_fab_widget.dart │ │ │ │ └── data.dart │ │ │ └── classic_button │ │ │ │ ├── classic_button_code.dart │ │ │ │ ├── classic_button_setup.dart │ │ │ │ ├── classic_button_widget.dart │ │ │ │ └── data.dart │ │ ├── cards │ │ │ └── flip_card │ │ │ │ ├── flip_card_code.dart │ │ │ │ ├── flip_card_data.dart │ │ │ │ ├── flip_card_setup.dart │ │ │ │ └── flip_card_widget.dart │ │ └── tabs │ │ │ ├── blurred_slide_tab │ │ │ ├── blurred_slide_tab_code.dart │ │ │ ├── blurred_slide_tab_widget.dart │ │ │ └── data.dart │ │ │ ├── expandable_tab │ │ │ ├── data.dart │ │ │ ├── expandable_tab_code.dart │ │ │ └── expandable_tab_widget.dart │ │ │ └── slide_tab │ │ │ ├── data.dart │ │ │ ├── slide_tab_code.dart │ │ │ └── slide_tab_widget.dart │ ├── export │ │ └── store.dart │ └── templates │ │ ├── basuu │ │ ├── exports │ │ │ ├── basuu_choose_category_screen_code.dart │ │ │ ├── basuu_choose_language_screen_code.dart │ │ │ ├── basuu_home_screen_code.dart │ │ │ ├── basuu_learning_screen_code.dart │ │ │ ├── basuu_pre_start_screen_code.dart │ │ │ ├── basuu_setup.dart │ │ │ ├── basuu_splash_screen_code.dart │ │ │ └── data.dart │ │ ├── models │ │ │ ├── basuu_category.dart │ │ │ └── basuu_word.dart │ │ ├── screens │ │ │ ├── basuu_choose_category_screen.dart │ │ │ ├── basuu_choose_language_screen.dart │ │ │ ├── basuu_home_screen.dart │ │ │ ├── basuu_learning_screen.dart │ │ │ ├── basuu_pre_start_screen.dart │ │ │ └── basuu_splash_screen.dart │ │ ├── shared │ │ │ ├── basuu_icons.dart │ │ │ ├── basuu_theme.dart │ │ │ └── utils │ │ │ │ ├── basuu_colors.dart │ │ │ │ └── sizing.dart │ │ └── widgets │ │ │ ├── basuu_animated_child.dart │ │ │ ├── basuu_animated_screen.dart │ │ │ ├── basuu_app_bar.dart │ │ │ ├── basuu_app_button.dart │ │ │ └── basuu_app_icon.dart │ │ ├── fade_carousel │ │ ├── fade_carousel_code.dart │ │ ├── fade_carousel_data.dart │ │ ├── fade_carousel_setup.dart │ │ └── fade_carousel_widget.dart │ │ ├── fruity_lips │ │ ├── fruity_lips_code.dart │ │ ├── fruity_lips_data.dart │ │ ├── fruity_lips_setup.dart │ │ └── fruity_lips_widget.dart │ │ ├── leave_review │ │ ├── leave_a_review_code.dart │ │ ├── leave_a_review_data.dart │ │ ├── leave_a_review_setup.dart │ │ └── leave_a_review_widget.dart │ │ ├── nike_zoomer │ │ ├── nike_zoomer_code.dart │ │ ├── nike_zoomer_data.dart │ │ ├── nike_zoomer_setup.dart │ │ └── nike_zoomer_widget.dart │ │ └── onboarding │ │ ├── doctor_onboarding │ │ ├── doctor_onboarding_code.dart │ │ ├── doctor_onboarding_data.dart │ │ ├── doctor_onboarding_setup.dart │ │ └── doctor_onboarding_widget.dart │ │ ├── mental_health │ │ ├── mental_health_code.dart │ │ ├── mental_health_data.dart │ │ ├── mental_health_setup.dart │ │ └── mental_health_widget.dart │ │ └── online │ │ ├── online_code.dart │ │ ├── online_data.dart │ │ ├── online_setup.dart │ │ └── online_widget.dart │ └── shared │ └── setup.dart ├── linux ├── .gitignore ├── CMakeLists.txt ├── flutter │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake ├── main.cc ├── my_application.cc └── my_application.h ├── macos ├── .gitignore ├── Flutter │ ├── Flutter-Debug.xcconfig │ ├── Flutter-Release.xcconfig │ └── GeneratedPluginRegistrant.swift ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ ├── Runner.xcscheme │ │ └── dev.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── app_icon_1024.png │ │ │ ├── app_icon_128.png │ │ │ ├── app_icon_16.png │ │ │ ├── app_icon_256.png │ │ │ ├── app_icon_32.png │ │ │ ├── app_icon_512.png │ │ │ └── app_icon_64.png │ ├── Base.lproj │ │ └── MainMenu.xib │ ├── Configs │ │ ├── AppInfo.xcconfig │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── Warnings.xcconfig │ ├── DebugProfile.entitlements │ ├── GoogleService-Info.plist │ ├── Info.plist │ ├── MainFlutterWindow.swift │ └── Release.entitlements └── RunnerTests │ └── RunnerTests.swift ├── pubspec.lock ├── pubspec.yaml ├── script └── deploy.sh ├── test └── widget_test.dart ├── web ├── favicon.png ├── flutter_bootstrap.js ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ ├── Icon-maskable-512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── github.svg │ ├── linkedin.svg │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ ├── site.webmanifest │ └── x.svg ├── images │ ├── flutterwidgethub_Logo.png │ └── flutterwidgethub_Logo_white.png ├── index.html ├── loader.html ├── loader.js ├── manifest.json └── styles │ ├── loader.css │ └── old_loader.html └── windows ├── .gitignore ├── CMakeLists.txt ├── flutter ├── CMakeLists.txt ├── generated_plugin_registrant.cc ├── generated_plugin_registrant.h └── generated_plugins.cmake └── runner ├── CMakeLists.txt ├── Runner.rc ├── flutter_window.cpp ├── flutter_window.h ├── main.cpp ├── resource.h ├── resources └── app_icon.ico ├── runner.exe.manifest ├── utils.cpp ├── utils.h ├── win32_window.cpp └── win32_window.h /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "flutterui-b4f0b" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.fvmrc: -------------------------------------------------------------------------------- 1 | { 2 | "flutter": "3.22.1" 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | .firebase.json 20 | .firebaserc 21 | /script/* 22 | 23 | # The .vscode folder contains launch configuration and tasks you configure in 24 | # VS Code which you may wish to be included in version control, so this line 25 | # is commented out by default. 26 | #.vscode/ 27 | 28 | # Flutter/Dart/Pub related 29 | **/doc/api/ 30 | **/ios/Flutter/.last_build_id 31 | .dart_tool/ 32 | .flutter-plugins 33 | .flutter-plugins-dependencies 34 | .pub-cache/ 35 | .pub/ 36 | /build/ 37 | pubspect.lock 38 | 39 | # Symbolication related 40 | app.*.symbols 41 | 42 | # Obfuscation related 43 | app.*.map.json 44 | 45 | # Android Studio will place build artifacts here 46 | /android/app/debug 47 | /android/app/profile 48 | /android/app/release 49 | 50 | # FVM Version Cache 51 | .fvm/ 52 | .firebaserc 53 | firebase.json -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 17 | base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 18 | - platform: windows 19 | create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 20 | base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 21 | 22 | # User provided section 23 | 24 | # List of Local paths (relative to this file) that should be 25 | # ignored by the migrate tool. 26 | # 27 | # Files that are not part of the templates will be ignored by default. 28 | unmanaged_files: 29 | - 'lib/main.dart' 30 | - 'ios/Runner.xcodeproj/project.pbxproj' 31 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Web dev", 9 | "request": "launch", 10 | "type": "dart", 11 | "program": "lib/app/core/main_dev.dart", 12 | "args": [ 13 | "--target", 14 | "lib/app/core/main_dev.dart", 15 | "--dart-define-from-file=../envs/fwh/dev.env.json", 16 | "-d", 17 | "chrome", 18 | "--web-port", 19 | "8000", 20 | "web-renderer", 21 | "html", 22 | "--web-browser-flag", 23 | "--disable-web-security" 24 | ] 25 | }, 26 | { 27 | "name": "Launch dev", 28 | "request": "launch", 29 | "type": "dart", 30 | "program": "lib/app/core/main_dev.dart", 31 | "args": [ 32 | "--flavor", 33 | "dev", 34 | "--target", 35 | "lib/app/core/main_dev.dart", 36 | "--dart-define-from-file=../envs/fwh/dev.env.json" 37 | ] 38 | }, 39 | 40 | { 41 | "name": "Launch prod", 42 | "request": "launch", 43 | "type": "dart", 44 | "program": "lib/app/core/main_prod.dart", 45 | "args": [ 46 | "--flavor", 47 | "prod", 48 | "--target", 49 | "lib/app/core/main_prod.dart", 50 | "--dart-define-from-file=../envs/fwh/env.json" 51 | ] 52 | } 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "dart.flutterSdkPath": ".fvm/versions/3.22.1" 3 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Yunweneric 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "393409877189", 4 | "project_id": "flutterui-b4f0b", 5 | "storage_bucket": "flutterui-b4f0b.appspot.com" 6 | }, 7 | "client": [ 8 | { 9 | "client_info": { 10 | "mobilesdk_app_id": "1:393409877189:android:9102d187c894bf8e3eccac", 11 | "android_client_info": { 12 | "package_name": "com.flutterwidget.hub" 13 | } 14 | }, 15 | "oauth_client": [], 16 | "api_key": [ 17 | { 18 | "current_key": "AIzaSyBpoPqqv05eLkKdNP8Q29s22Dh69E_zQiA" 19 | } 20 | ], 21 | "services": { 22 | "appinvite_service": { 23 | "other_platform_oauth_client": [] 24 | } 25 | } 26 | } 27 | ], 28 | "configuration_version": "1" 29 | } -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/flutterui/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.flutterwidget.hub 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | rootProject.buildDir = "../build" 9 | subprojects { 10 | project.buildDir = "${rootProject.buildDir}/${project.name}" 11 | } 12 | subprojects { 13 | project.evaluationDependsOn(":app") 14 | } 15 | 16 | tasks.register("clean", Delete) { 17 | delete rootProject.buildDir 18 | } 19 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | }() 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "7.3.0" apply false 22 | // START: FlutterFire Configuration 23 | id "com.google.gms.google-services" version "4.3.15" apply false 24 | // END: FlutterFire Configuration 25 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false 26 | } 27 | 28 | include ":app" 29 | -------------------------------------------------------------------------------- /assets/icons/android.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/back.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/card.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /assets/icons/chevron_down.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/clipboard.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/code.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/desktop.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/diamond.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/en.svg: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /assets/icons/facebook.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /assets/icons/fr.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/icons/github.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/google.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/icons/ios.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/linkedin.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/macos.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/mobile.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/moon.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/next.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/search.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/spotify.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/sun.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/tab.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/tablet.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/telegram.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/icons/web.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/x.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/youtube.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /assets/images/android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/android.png -------------------------------------------------------------------------------- /assets/images/android_ori.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/android_ori.png -------------------------------------------------------------------------------- /assets/images/bottom_frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/bottom_frame.png -------------------------------------------------------------------------------- /assets/images/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/code.png -------------------------------------------------------------------------------- /assets/images/dart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/dart.png -------------------------------------------------------------------------------- /assets/images/dart_colored.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/dart_colored.png -------------------------------------------------------------------------------- /assets/images/dart_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/dart_dark.png -------------------------------------------------------------------------------- /assets/images/dart_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/dart_light.png -------------------------------------------------------------------------------- /assets/images/flutter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/flutter.png -------------------------------------------------------------------------------- /assets/images/flutter_colored.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/flutter_colored.png -------------------------------------------------------------------------------- /assets/images/flutter_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/flutter_dark.png -------------------------------------------------------------------------------- /assets/images/flutter_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/flutter_light.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/green_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/green_bottle.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/green_mini_slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/green_mini_slice.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/green_slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/green_slice.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/logo.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/purple_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/purple_bottle.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/purple_mini_slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/purple_mini_slice.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/purple_slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/purple_slice.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/yellow_bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/yellow_bottle.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/yellow_mini_slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/yellow_mini_slice.png -------------------------------------------------------------------------------- /assets/images/fruity_lips/yellow_slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fruity_lips/yellow_slice.png -------------------------------------------------------------------------------- /assets/images/fwh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/fwh.png -------------------------------------------------------------------------------- /assets/images/image_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/image_7.jpg -------------------------------------------------------------------------------- /assets/images/ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/ios.png -------------------------------------------------------------------------------- /assets/images/linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/linux.png -------------------------------------------------------------------------------- /assets/images/linux_or.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/linux_or.png -------------------------------------------------------------------------------- /assets/images/logo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/logo_dark.png -------------------------------------------------------------------------------- /assets/images/logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/logo_white.png -------------------------------------------------------------------------------- /assets/images/macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/macos.png -------------------------------------------------------------------------------- /assets/images/nike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/nike.png -------------------------------------------------------------------------------- /assets/images/nike_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/nike_0.png -------------------------------------------------------------------------------- /assets/images/nike_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/nike_1.png -------------------------------------------------------------------------------- /assets/images/nike_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/nike_2.png -------------------------------------------------------------------------------- /assets/images/profile_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/profile_0.jpg -------------------------------------------------------------------------------- /assets/images/profile_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/profile_1.jpg -------------------------------------------------------------------------------- /assets/images/support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/support.png -------------------------------------------------------------------------------- /assets/images/support_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/support_1.jpg -------------------------------------------------------------------------------- /assets/images/support_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/support_2.png -------------------------------------------------------------------------------- /assets/images/web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/assets/images/web.png -------------------------------------------------------------------------------- /devtools_options.yaml: -------------------------------------------------------------------------------- 1 | description: This file stores settings for Dart & Flutter DevTools. 2 | documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states 3 | extensions: 4 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 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 | 12.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, '12.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 | # pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.22.0' 34 | pod 'FirebaseFirestore', :path => '~/Documents/firestore-ios-sdk-frameworks-10.25.0' 35 | 36 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 37 | target 'RunnerTests' do 38 | inherit! :search_paths 39 | end 40 | end 41 | 42 | post_install do |installer| 43 | installer.pods_project.targets.each do |target| 44 | flutter_additional_ios_build_settings(target) 45 | end 46 | end 47 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - path_provider_foundation (0.0.1): 4 | - Flutter 5 | - FlutterMacOS 6 | - url_launcher_ios (0.0.1): 7 | - Flutter 8 | 9 | DEPENDENCIES: 10 | - Flutter (from `Flutter`) 11 | - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) 12 | - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) 13 | 14 | EXTERNAL SOURCES: 15 | Flutter: 16 | :path: Flutter 17 | path_provider_foundation: 18 | :path: ".symlinks/plugins/path_provider_foundation/darwin" 19 | url_launcher_ios: 20 | :path: ".symlinks/plugins/url_launcher_ios/ios" 21 | 22 | SPEC CHECKSUMS: 23 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 24 | path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 25 | url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe 26 | 27 | PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 28 | 29 | COCOAPODS: 1.15.2 30 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /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.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @main 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-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@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/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/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/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | API_KEY 6 | AIzaSyCtGLjp4yboVK2NRSX2_1L7mHKqL17_Cas 7 | GCM_SENDER_ID 8 | 393409877189 9 | PLIST_VERSION 10 | 1 11 | BUNDLE_ID 12 | com.flutterwidget.hub 13 | PROJECT_ID 14 | flutterui-b4f0b 15 | STORAGE_BUCKET 16 | flutterui-b4f0b.appspot.com 17 | IS_ADS_ENABLED 18 | 19 | IS_ANALYTICS_ENABLED 20 | 21 | IS_APPINVITE_ENABLED 22 | 23 | IS_GCM_ENABLED 24 | 25 | IS_SIGNIN_ENABLED 26 | 27 | GOOGLE_APP_ID 28 | 1:393409877189:ios:8d4d9fc0a2d3238c3eccac 29 | 30 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Flutterui 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | flutterui 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | CADisableMinimumFrameDurationOnPhone 45 | 46 | UIApplicationSupportsIndirectInputEvents 47 | 48 | CFBundleLocalizations 49 | 50 | en 51 | fr 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /lib/app/core/app_scroll_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class AppScrollBehavior extends MaterialScrollBehavior { 6 | @override 7 | Set get dragDevices => { 8 | PointerDeviceKind.touch, 9 | PointerDeviceKind.mouse, 10 | PointerDeviceKind.trackpad, 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /lib/app/core/boostrap.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | import 'package:easy_localization/easy_localization.dart'; 4 | import 'package:flutter/services.dart'; 5 | import 'package:flutter/widgets.dart'; 6 | import 'package:flutter_bloc/flutter_bloc.dart'; 7 | import 'package:flutter_screenutil/flutter_screenutil.dart'; 8 | import 'package:flutterui/app/core/config.dart'; 9 | import 'package:flutterui/app/core/service_locators.dart'; 10 | import 'package:flutterui/app/shared/presentation/helpers/observers/bloc_observer.dart'; 11 | import 'package:flutter_web_plugins/url_strategy.dart'; 12 | 13 | Future bootstrap(FutureOr Function() builder, {required AppEnv env}) async { 14 | // Needs to be called so that we can await for EasyLocalization.ensureInitialized(); 15 | WidgetsFlutterBinding.ensureInitialized(); 16 | 17 | SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); 18 | 19 | //await dotenv.load(); 20 | // await Firebase.initializeApp( 21 | // options: DefaultFirebaseOptions.currentPlatform, 22 | // ); 23 | await EasyLocalization.ensureInitialized(); 24 | usePathUrlStrategy(); 25 | 26 | FlutterError.onError = (details) { 27 | log(details.exceptionAsString(), stackTrace: details.stack); 28 | }; 29 | 30 | Bloc.observer = SimpleBlocObserver(); 31 | 32 | // Initialize the app storage 33 | 34 | AppConfig.instance.init(env: env); 35 | 36 | // Initialize the service locator 37 | await ServiceLocators.register(); 38 | await ScreenUtil.ensureScreenSize(); 39 | 40 | runApp( 41 | EasyLocalization( 42 | supportedLocales: const [ 43 | Locale('en', "US"), 44 | Locale('fr', 'FR'), 45 | ], 46 | path: 'assets/translations', 47 | fallbackLocale: const Locale('en', "US"), 48 | // assetLoader: const RemoteLocalesLoader(), 49 | child: await builder(), 50 | ), 51 | ); 52 | } 53 | -------------------------------------------------------------------------------- /lib/app/core/config.dart: -------------------------------------------------------------------------------- 1 | enum AppEnv { 2 | DEV('dev'), 3 | PROD('dev'), 4 | STAGING('staging'); 5 | 6 | const AppEnv(this.value); 7 | final String value; 8 | } 9 | 10 | class AppConfig { 11 | factory AppConfig() => instance; 12 | 13 | AppConfig._privateConstructor(); 14 | late AppEnv env; 15 | 16 | static final AppConfig instance = AppConfig._privateConstructor(); 17 | 18 | void init({required AppEnv env}) { 19 | instance.env = env; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/app/core/main_dev.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/app/core/app.dart'; 2 | import 'package:flutterui/app/core/boostrap.dart'; 3 | import 'package:flutterui/app/core/config.dart'; 4 | 5 | void main() { 6 | bootstrap(() => const MyApp(), env: AppEnv.DEV); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/core/main_prod.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/app/core/app.dart'; 2 | import 'package:flutterui/app/core/boostrap.dart'; 3 | import 'package:flutterui/app/core/config.dart'; 4 | 5 | void main() { 6 | bootstrap(() => const MyApp(), env: AppEnv.PROD); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/core/routes/route_names.dart: -------------------------------------------------------------------------------- 1 | class RouteNames { 2 | static const home = "/"; 3 | static const components = "/components"; 4 | static const introduction = "/components/introduction"; 5 | static const blocks = "/components/blocks"; 6 | static const templates = "/components/templates"; 7 | static const animations = "/components/animations"; 8 | static const effects = "/components/effects"; 9 | 10 | static const getStarted = "$introduction/get-started"; 11 | static const requestComponent = "$introduction/request-component"; 12 | 13 | static const texts = "$blocks/texts"; 14 | static const buttons = "$blocks/buttons"; 15 | static const chips = "$blocks/chips"; 16 | 17 | static const inputs = "$blocks/inputs"; 18 | static const loaders = "$blocks/loaders"; 19 | static const switchers = "$blocks/switchers"; 20 | static const sliders = "$blocks/sliders"; 21 | static const bottomBars = "$blocks/bottom-nav-bars"; 22 | static const drawers = "$blocks/drawers"; 23 | static const carousels = "$blocks/sliders-and-carousels"; 24 | 25 | static const authScreens = "$templates/authentication-screens"; 26 | static const homeScreens = "$templates/home-screens"; 27 | static const onboardingScreens = "$templates/onboarding-screens"; 28 | static const appClones = "$templates/app-clones"; 29 | 30 | static const playground = "/components/playground"; 31 | static const notFound = "not-found"; 32 | 33 | static const hoverAnimations = "$animations/hover-animations"; 34 | static const skewAnimations = "$animations/skew-animations"; 35 | static const rotationAnimations = "$animations/rotation-animations"; 36 | 37 | static const gradientEffects = "$effects/gradient-effects"; 38 | static const backgroundEffects = "$effects/background-effects"; 39 | } 40 | -------------------------------------------------------------------------------- /lib/app/core/service_locators.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/components/data/logic/component/component_bloc.dart'; 2 | import 'package:flutterui/app/core/routes/app_router.dart'; 3 | import 'package:flutterui/app/shared/logic/language/language_bloc.dart'; 4 | import 'package:flutterui/app/shared/logic/navigation/navigation_bloc.dart'; 5 | import 'package:flutterui/app/shared/logic/sidebar/sidebar_bloc.dart'; 6 | import 'package:flutterui/app/shared/logic/theme/theme_bloc.dart'; 7 | import 'package:get_it/get_it.dart'; 8 | import 'package:go_router/go_router.dart'; 9 | 10 | final getIt = GetIt.instance; 11 | 12 | class ServiceLocators { 13 | static Future register() async { 14 | // final appRouter = appRouter; 15 | getIt.registerSingleton(appRouter); 16 | 17 | final themBloc = ThemeBloc(); 18 | final sidebarBloc = SidebarBloc(); 19 | final languageBloc = LanguageBloc(); 20 | final componentBloc = ComponentBloc(); 21 | final navigationBloc = NavigationBloc(); 22 | getIt 23 | ..registerSingleton(themBloc) 24 | ..registerSingleton(componentBloc) 25 | ..registerSingleton(sidebarBloc) 26 | ..registerSingleton(navigationBloc) 27 | ..registerSingleton(languageBloc); 28 | 29 | print('Service Locators registered!'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/app/presentation/categories/widget/component_layout.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/components/data/logic/component/component_bloc.dart'; 3 | import 'package:flutterui/app/core/service_locators.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 5 | import 'package:flutterui/app/shared/presentation/widgets/layout/app_layout.dart'; 6 | import 'package:flutterui/app/shared/presentation/widgets/layout/side_bar.dart'; 7 | 8 | class ComponentLayoutScreen extends StatefulWidget { 9 | final Widget child; 10 | const ComponentLayoutScreen({super.key, required this.child}); 11 | 12 | @override 13 | State createState() => _AppLayoutState(); 14 | } 15 | 16 | class _AppLayoutState extends State { 17 | final duration = const Duration(seconds: 1); 18 | 19 | final componentBloc = getIt.get(); 20 | @override 21 | void initState() { 22 | componentBloc.add(GetAllComponentsEvent()); 23 | super.initState(); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return AppLayout( 29 | hideFooter: true, 30 | isHomeScreenLayout: false, 31 | children: [ 32 | SizedBox( 33 | width: AppSizing.width(context), 34 | height: AppSizing.height(context), 35 | child: Row( 36 | children: [ 37 | AnimatedContainer( 38 | duration: duration, 39 | decoration: BoxDecoration( 40 | border: Border( 41 | right: BorderSide(color: Theme.of(context).dividerColor)), 42 | ), 43 | width: AppSizing.isMobile(context) 44 | ? 0 45 | : AppSizing.width(context) * 0.2, 46 | child: const SideBar(), 47 | ), 48 | Expanded(child: widget.child), 49 | ], 50 | ), 51 | ), 52 | ], 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/app/presentation/coming_soon/screens/coming_soon_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ComingSoonScreen extends StatefulWidget { 4 | const ComingSoonScreen({super.key}); 5 | 6 | @override 7 | State createState() => _ComingSoonScreenState(); 8 | } 9 | 10 | class _ComingSoonScreenState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return const Placeholder(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/app/presentation/errors/screens/not_found.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 3 | // import 'package:flutterui/screens/routes/app_router.gr.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 5 | 6 | class NotFoundScreen extends StatefulWidget { 7 | const NotFoundScreen({super.key}); 8 | 9 | @override 10 | State createState() => _NotFoundScreenState(); 11 | } 12 | 13 | class _NotFoundScreenState extends State { 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | body: SizedBox( 18 | width: AppSizing.width(context), 19 | height: AppSizing.height(context), 20 | child: Column( 21 | mainAxisAlignment: MainAxisAlignment.center, 22 | crossAxisAlignment: CrossAxisAlignment.center, 23 | children: [ 24 | Text(LangUtil.trans("pageNotFound")), 25 | ElevatedButton( 26 | onPressed: () { 27 | // final router = context.innerRouterOf(ComponentLayoutRoute.name); 28 | // print(router); 29 | // context.router.pushNamed(RouteNames.home); 30 | }, 31 | child: Text(LangUtil.trans("home")), 32 | ), 33 | ], 34 | ), 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/app/presentation/home/data/blocks/inputs_bloc_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_svg/flutter_svg.dart'; 3 | import 'package:flutterui/app/shared/presentation/utils/icons.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 5 | 6 | class InputsBlocItem extends StatefulWidget { 7 | const InputsBlocItem({super.key}); 8 | 9 | @override 10 | State createState() => _InputssideBarCategoriestate(); 11 | } 12 | 13 | class _InputssideBarCategoriestate extends State { 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | body: Padding( 18 | padding: EdgeInsets.symmetric( 19 | horizontal: AppSizing.kWPercentage(context, 10)), 20 | child: Column( 21 | mainAxisAlignment: MainAxisAlignment.center, 22 | children: [ 23 | TextField( 24 | decoration: InputDecoration( 25 | hintText: "Search", 26 | prefixIcon: CircleAvatar( 27 | backgroundColor: Colors.transparent, 28 | child: SvgPicture.asset(AppIcons.search, width: 20), 29 | ), 30 | ), 31 | ), 32 | ], 33 | ), 34 | ), 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/app/presentation/home/data/blocks/loaders_bloc_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 3 | 4 | class LoadersBlocItem extends StatefulWidget { 5 | const LoadersBlocItem({super.key}); 6 | 7 | @override 8 | State createState() => _LoaderssideBarCategoriestate(); 9 | } 10 | 11 | class _LoaderssideBarCategoriestate extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | body: Column( 16 | children: [ 17 | SizedBox( 18 | width: AppSizing.width(context), 19 | height: AppSizing.kHPercentage(context, 50), 20 | child: Transform.scale( 21 | scale: 2.5, 22 | child: CircularProgressIndicator.adaptive( 23 | backgroundColor: Theme.of(context).primaryColor, 24 | ), 25 | ), 26 | ), 27 | ], 28 | ), 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/app/presentation/home/data/blocks/switchers_bloc_item.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 5 | 6 | class SwitchersBlocItem extends StatefulWidget { 7 | const SwitchersBlocItem({super.key}); 8 | 9 | @override 10 | State createState() => _TabssideBarCategoriestate(); 11 | } 12 | 13 | class _TabssideBarCategoriestate extends State { 14 | Timer? timer; 15 | 16 | bool isOn = false; 17 | final duration = const Duration(milliseconds: 2000); 18 | @override 19 | void initState() { 20 | startTimer(); 21 | super.initState(); 22 | } 23 | 24 | startTimer() { 25 | timer = Timer.periodic(duration, (tick) { 26 | setState(() { 27 | isOn = !isOn; 28 | }); 29 | }); 30 | } 31 | 32 | @override 33 | void dispose() { 34 | timer?.cancel(); 35 | super.dispose(); 36 | } 37 | 38 | @override 39 | Widget build(BuildContext context) { 40 | return Scaffold( 41 | body: SafeArea( 42 | child: Column( 43 | mainAxisAlignment: MainAxisAlignment.start, 44 | children: [ 45 | SizedBox( 46 | width: AppSizing.width(context), 47 | height: AppSizing.kHPercentage(context, 40), 48 | child: Switch.adaptive( 49 | value: isOn, 50 | onChanged: (val) { 51 | setState(() { 52 | isOn = !isOn; 53 | }); 54 | }, 55 | ), 56 | ), 57 | ], 58 | ), 59 | ), 60 | ); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /lib/app/presentation/home/data/effects/background_effects_bloc_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BackgroundEffectsBlocItem extends StatefulWidget { 4 | const BackgroundEffectsBlocItem({super.key}); 5 | 6 | @override 7 | State createState() => 8 | _BackgroundEffectssideBarCategoriestate(); 9 | } 10 | 11 | class _BackgroundEffectssideBarCategoriestate 12 | extends State { 13 | @override 14 | Widget build(BuildContext context) { 15 | return const Scaffold(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/app/presentation/home/data/templates/app_clone_bloc_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_svg/svg.dart'; 3 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 4 | 5 | class AppCloneBlocItem extends StatefulWidget { 6 | const AppCloneBlocItem({super.key}); 7 | 8 | @override 9 | State createState() => _AppClonesideBarCategoriestate(); 10 | } 11 | 12 | class _AppClonesideBarCategoriestate extends State { 13 | @override 14 | Widget build(BuildContext context) { 15 | return Scaffold( 16 | body: Builder(builder: (context) { 17 | List icons = [ 18 | "assets/icons/google.svg", 19 | "assets/icons/tiktok.svg", 20 | "assets/icons/linkedin.svg", 21 | "assets/icons/youtube.svg", 22 | "assets/icons/spotify.svg", 23 | ]; 24 | return Container( 25 | margin: EdgeInsets.only(top: AppSizing.kHPercentage(context, 22)), 26 | alignment: Alignment.topCenter, 27 | child: Wrap( 28 | spacing: 30, 29 | children: [ 30 | ...icons.map((item) { 31 | return ClipOval(child: SvgPicture.asset(item, width: 30)); 32 | }), 33 | ], 34 | ), 35 | ); 36 | }), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/app/presentation/home/model/component_block_model.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 3 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 4 | 5 | class AppCategoryGroupModel { 6 | final ComponentCategoryEnum category; 7 | final bool? isActive; 8 | final String description; 9 | final List items; 10 | 11 | AppCategoryGroupModel({ 12 | required this.category, 13 | required this.description, 14 | required this.items, 15 | this.isActive, 16 | }); 17 | } 18 | 19 | class AppCategoryModel { 20 | final Widget widget; 21 | final ComponentCategoryEnum category; 22 | final SubComponentCategoryEnum subCategory; 23 | final AlignmentGeometry? alignment; 24 | 25 | AppCategoryModel({ 26 | required this.widget, 27 | required this.category, 28 | required this.subCategory, 29 | this.alignment, 30 | }); 31 | } 32 | -------------------------------------------------------------------------------- /lib/app/presentation/home/widgets/bottom_bar_clipper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BottomBarClipper extends CustomClipper { 4 | @override 5 | getClip(Size size) { 6 | Path path = Path() 7 | ..moveTo(0, size.height / 2) 8 | ..lineTo(size.width, size.height / 2) 9 | ..lineTo(size.width, size.height) 10 | ..lineTo(0, size.height) 11 | ..lineTo(0, size.height / 2) 12 | ..close(); 13 | return path; 14 | } 15 | 16 | @override 17 | bool shouldReclip(covariant CustomClipper oldClipper) { 18 | return false; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/presentation/home/widgets/component_block.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/presentation/home/model/component_block_model.dart'; 3 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 5 | 6 | class ComponentBlock extends StatefulWidget { 7 | final AppCategoryGroupModel item; 8 | final bool isActive; 9 | 10 | const ComponentBlock({super.key, required this.isActive, required this.item}); 11 | 12 | @override 13 | State createState() => _ComponentBlockState(); 14 | } 15 | 16 | class _ComponentBlockState extends State { 17 | @override 18 | Widget build(BuildContext context) { 19 | return TweenAnimationBuilder( 20 | key: ValueKey(widget.isActive), 21 | duration: const Duration(milliseconds: 200), 22 | tween: Tween(begin: 1, end: 0), 23 | child: Column( 24 | crossAxisAlignment: CrossAxisAlignment.start, 25 | children: [ 26 | Text( 27 | widget.item.category.describe(), 28 | style: Theme.of(context).textTheme.displayMedium, 29 | ), 30 | AppSizing.kh10Spacer(), 31 | Text( 32 | LangUtil.trans(widget.item.description), 33 | style: Theme.of(context).textTheme.bodySmall, 34 | ), 35 | ], 36 | ), 37 | builder: (context, value, child) { 38 | return SizedBox( 39 | width: AppSizing.kWPercentage(context, 20), 40 | child: Column( 41 | children: [ 42 | Divider( 43 | endIndent: value * AppSizing.kWPercentage(context, 20), 44 | color: widget.isActive ? Theme.of(context).primaryColor : Theme.of(context).scaffoldBackgroundColor, 45 | ), 46 | AppSizing.kh10Spacer(), 47 | child!, 48 | ], 49 | ), 50 | ); 51 | }, 52 | ); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/app/presentation/request_component/request_component_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 3 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 4 | import 'package:flutterui/app/shared/presentation/widgets/layout/app_layout.dart'; 5 | 6 | class RequestComponentScreen extends StatefulWidget { 7 | const RequestComponentScreen({super.key}); 8 | 9 | @override 10 | State createState() => _RequestComponentScreenState(); 11 | } 12 | 13 | class _RequestComponentScreenState extends State { 14 | @override 15 | Widget build(BuildContext context) { 16 | return AppLayout( 17 | children: [ 18 | Text( 19 | LangUtil.trans("comingSoon"), 20 | style: Theme.of(context).textTheme.displayLarge, 21 | ) 22 | , 23 | AppSizing.kh10Spacer(), 24 | Text( 25 | LangUtil.trans("requestComingSoonDescription"), 26 | textAlign: TextAlign.center, 27 | ) 28 | , 29 | ], 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/app/presentation/start/splash_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class MyWidget extends StatefulWidget { 4 | const MyWidget({super.key}); 5 | 6 | @override 7 | State createState() => _MyWidgetState(); 8 | } 9 | 10 | class _MyWidgetState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return const Placeholder(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/app/shared/data/enums/component_category_enum.dart: -------------------------------------------------------------------------------- 1 | enum ComponentCategoryEnum { 2 | INTRODUCTION, 3 | GETTING_STARTED, 4 | TEMPLATES, 5 | BLOCKS, 6 | EFFECTS, 7 | ANIMATIONS; 8 | 9 | String describe() { 10 | return name[0].toUpperCase() + name.split("_").join(" ").substring(1).toLowerCase(); 11 | } 12 | 13 | String link() { 14 | return name.split("_").join("-").toLowerCase(); 15 | } 16 | 17 | ComponentCategoryEnum enumName(String title) { 18 | return ComponentCategoryEnum.values.firstWhere( 19 | (e) => e.name.toLowerCase() == title.toLowerCase(), 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/app/shared/data/enums/device_type.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/app/shared/presentation/utils/icons.dart'; 2 | 3 | enum AppDeviceType { 4 | MOBILE, 5 | TABLET, 6 | DESKTOP; 7 | 8 | String describe() { 9 | switch (this) { 10 | case AppDeviceType.MOBILE: 11 | return 'Mobile'; 12 | case AppDeviceType.TABLET: 13 | return 'Tablet'; 14 | case AppDeviceType.DESKTOP: 15 | return 'Desktop'; 16 | } 17 | } 18 | 19 | String generateIcon() { 20 | switch (this) { 21 | case AppDeviceType.MOBILE: 22 | return AppIcons.mobile; 23 | case AppDeviceType.TABLET: 24 | return AppIcons.tablet; 25 | case AppDeviceType.DESKTOP: 26 | return AppIcons.desktop; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/app/shared/data/enums/sub_component_category_enum.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 2 | 3 | enum SubComponentCategoryEnum { 4 | GETTING_STARTED, 5 | REQUEST_A_COMPONENT, 6 | ALL_COMPONENTS, 7 | 8 | APPS, 9 | ONBOARDING_SCREENS, 10 | HOME_SCREENS, 11 | AUTHENTICATION_SCREENS, 12 | KITS, 13 | 14 | SWITCHERS, 15 | INPUTS, 16 | TEXTS, 17 | TABS, 18 | LOADERS, 19 | BUTTONS, 20 | BOTTOM_NAV_BARS, 21 | DRAWERS, 22 | SLIDERS_AND_CAROUSELS, 23 | 24 | LINEAR_GRADIENTS; 25 | 26 | String describe() { 27 | // return name[0].toUpperCase() + name.split("_").join(" ").substring(1).toLowerCase(); 28 | // final description = name[0].toUpperCase() + name.split("_").join(" ").substring(1).toLowerCase(); 29 | return LangUtil.trans(name); 30 | // return name; 31 | } 32 | 33 | String link() { 34 | return name.split("_").join("-").toLowerCase(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/app/shared/data/enums/supported_platform.dart: -------------------------------------------------------------------------------- 1 | enum SupportedPlatform { 2 | WEB, 3 | ANDROID, 4 | LINUX, 5 | MACOS, 6 | IOS; 7 | 8 | String describe() { 9 | switch (this) { 10 | case SupportedPlatform.WEB: 11 | return 'Web'; 12 | case SupportedPlatform.ANDROID: 13 | return 'Android'; 14 | case SupportedPlatform.LINUX: 15 | return 'Linux'; 16 | case SupportedPlatform.MACOS: 17 | return 'MacOs'; 18 | case SupportedPlatform.IOS: 19 | return 'Ios'; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/app/shared/data/enums/theme.dart: -------------------------------------------------------------------------------- 1 | // enum AppThemeMode { SYSTEM, DARK, LIGHT } 2 | -------------------------------------------------------------------------------- /lib/app/shared/data/models/code_component.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | // ignore_for_file: public_member_api_docs, sort_constructors_first 6 | class CodeComponent { 7 | final String code; 8 | final Widget widget; 9 | 10 | CodeComponent({required this.code, required this.widget}); 11 | 12 | CodeComponent copyWith({ 13 | String? code, 14 | Widget? widget, 15 | }) { 16 | return CodeComponent( 17 | code: code ?? this.code, 18 | widget: widget ?? this.widget, 19 | ); 20 | } 21 | 22 | Map toMap() { 23 | return { 24 | 'code': code, 25 | 'widget': widget, 26 | }; 27 | } 28 | 29 | factory CodeComponent.fromMap(Map map) { 30 | return CodeComponent( 31 | code: map['code'] as String, 32 | widget: map['widget'] as Widget, 33 | ); 34 | } 35 | 36 | String toJson() => json.encode(toMap()); 37 | 38 | factory CodeComponent.fromJson(String source) => CodeComponent.fromMap(json.decode(source) as Map); 39 | } 40 | -------------------------------------------------------------------------------- /lib/app/shared/logic/language/language_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:meta/meta.dart'; 4 | 5 | part 'language_event.dart'; 6 | part 'language_state.dart'; 7 | 8 | class LanguageBloc extends Bloc { 9 | LanguageBloc() : super(LanguageInitial()) { 10 | on((event, emit) { 11 | emit(LanguageUpdated(event.locale)); 12 | }); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/app/shared/logic/language/language_event.dart: -------------------------------------------------------------------------------- 1 | part of 'language_bloc.dart'; 2 | 3 | @immutable 4 | sealed class LanguageEvent {} 5 | 6 | class UpdateLanguageEvent extends LanguageEvent { 7 | final Locale locale; 8 | UpdateLanguageEvent(this.locale); 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/shared/logic/language/language_state.dart: -------------------------------------------------------------------------------- 1 | part of 'language_bloc.dart'; 2 | 3 | @immutable 4 | sealed class LanguageState {} 5 | 6 | final class LanguageInitial extends LanguageState {} 7 | 8 | final class LanguageUpdated extends LanguageState { 9 | final Locale locale; 10 | LanguageUpdated(this.locale); 11 | List get props => [locale]; 12 | } 13 | -------------------------------------------------------------------------------- /lib/app/shared/logic/navigation/navigation_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:flutterui/app/core/routes/route_names.dart'; 3 | import 'package:meta/meta.dart'; 4 | 5 | part 'navigation_event.dart'; 6 | part 'navigation_state.dart'; 7 | 8 | class NavigationBloc extends Bloc { 9 | NavigationBloc() : super(NavigationInitial(currentRoute: RouteNames.home)) { 10 | on((event, emit) { 11 | emit(NavigationUpdated(currentRoute: event.route)); 12 | }); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/app/shared/logic/navigation/navigation_event.dart: -------------------------------------------------------------------------------- 1 | part of 'navigation_bloc.dart'; 2 | 3 | @immutable 4 | class NavigationEvent {} 5 | 6 | class NavigationEventUpdated extends NavigationEvent { 7 | final String route; 8 | 9 | NavigationEventUpdated({required this.route}); 10 | } 11 | -------------------------------------------------------------------------------- /lib/app/shared/logic/navigation/navigation_state.dart: -------------------------------------------------------------------------------- 1 | part of 'navigation_bloc.dart'; 2 | 3 | class NavigationState { 4 | final String currentRoute; 5 | 6 | NavigationState({required this.currentRoute}); 7 | } 8 | 9 | class NavigationInitial extends NavigationState { 10 | NavigationInitial({required super.currentRoute}); 11 | } 12 | 13 | class NavigationUpdated extends NavigationState { 14 | NavigationUpdated({required super.currentRoute}); 15 | } 16 | -------------------------------------------------------------------------------- /lib/app/shared/logic/sidebar/sidebar_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'sidebar_event.dart'; 4 | part 'sidebar_state.dart'; 5 | 6 | class SidebarBloc extends Bloc { 7 | SidebarBloc() : super(SidebarInitial(isOpen: false)) { 8 | on((event, emit) { 9 | emit(SidebarUpdateStatus(isOpen: event.newStatus)); 10 | }); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/app/shared/logic/sidebar/sidebar_event.dart: -------------------------------------------------------------------------------- 1 | part of 'sidebar_bloc.dart'; 2 | 3 | class SidebarEvent {} 4 | 5 | class UpdateSideBarEvent extends SidebarEvent { 6 | final bool newStatus; 7 | 8 | UpdateSideBarEvent({required this.newStatus}); 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/shared/logic/sidebar/sidebar_state.dart: -------------------------------------------------------------------------------- 1 | part of 'sidebar_bloc.dart'; 2 | 3 | class SidebarState { 4 | final bool isOpen; 5 | 6 | SidebarState({required this.isOpen}); 7 | } 8 | 9 | class SidebarInitial extends SidebarState { 10 | SidebarInitial({required super.isOpen}); 11 | } 12 | 13 | class SidebarUpdateStatus extends SidebarState { 14 | SidebarUpdateStatus({required super.isOpen}); 15 | } 16 | -------------------------------------------------------------------------------- /lib/app/shared/logic/theme/theme_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | part 'theme_event.dart'; 5 | part 'theme_state.dart'; 6 | 7 | class ThemeBloc extends Bloc { 8 | ThemeBloc() : super(ThemeInitial(themeMode: ThemeMode.system)) { 9 | on((event, emit) { 10 | emit(UpdateTheme(themeMode: event.themeMode)); 11 | }); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/app/shared/logic/theme/theme_event.dart: -------------------------------------------------------------------------------- 1 | part of 'theme_bloc.dart'; 2 | 3 | sealed class ThemeEvent {} 4 | 5 | class ChangeTheme extends ThemeEvent { 6 | final ThemeMode themeMode; 7 | 8 | ChangeTheme({required this.themeMode}); 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/shared/logic/theme/theme_state.dart: -------------------------------------------------------------------------------- 1 | part of 'theme_bloc.dart'; 2 | 3 | class ThemeState { 4 | final ThemeMode themeMode; 5 | 6 | ThemeState({required this.themeMode}); 7 | List get props => [themeMode]; 8 | } 9 | 10 | class ThemeInitial extends ThemeState { 11 | ThemeInitial({required super.themeMode}); 12 | } 13 | 14 | class UpdateTheme extends ThemeState { 15 | final ThemeMode themeMode; 16 | UpdateTheme({required this.themeMode}) : super(themeMode: themeMode); 17 | } 18 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/helpers/observers/bloc_observer.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class SimpleBlocObserver extends BlocObserver { 4 | @override 5 | void onEvent(Bloc bloc, Object? event) { 6 | super.onEvent(bloc, event); 7 | print('onEvent -- ${bloc.runtimeType}, $event'); 8 | } 9 | 10 | @override 11 | void onChange(BlocBase bloc, Change change) { 12 | super.onChange(bloc, change); 13 | print('onChange -- ${bloc.runtimeType}, $change'); 14 | } 15 | 16 | @override 17 | void onTransition(Bloc bloc, Transition transition) { 18 | super.onTransition(bloc, transition); 19 | print('onTransition -- ${bloc.runtimeType}, $transition'); 20 | } 21 | 22 | @override 23 | void onError(BlocBase bloc, Object error, StackTrace stackTrace) { 24 | super.onError(bloc, error, stackTrace); 25 | print('onError -- ${bloc.runtimeType}, $error'); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/helpers/observers/nav_observer.dart: -------------------------------------------------------------------------------- 1 | //// import 'package:flutter/material.dart'; 2 | // import 'package:flutterui/core/service_locators.dart'; 3 | // import 'package:flutterui/shared/logic/navigation/navigation_bloc.dart'; 4 | 5 | // class MyObserver extends AutoRouterObserver { 6 | // final navigationBloc = getIt.get(); 7 | // // final autoRoute = getIt.get(); 8 | // @override 9 | // void didPush(Route route, Route? previousRoute) { 10 | // // navigationBloc.add(NavigationEventUpdated(route: route.data?.path ?? "/")); 11 | // // print('New route pushed: ${route.settings.name}'); 12 | // // print('New route pushed: ${route.data?.path}'); 13 | // } 14 | 15 | // // only override to observer tab routes 16 | // @override 17 | // void didInitTabRoute(TabPageRoute route, TabPageRoute? previousRoute) { 18 | // print('Tab route visited: ${route.name}'); 19 | // } 20 | 21 | // @override 22 | // void didChangeTabRoute(TabPageRoute route, TabPageRoute previousRoute) { 23 | // print('Tab route re-visited: ${route.name}'); 24 | // } 25 | // } 26 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/helpers/platform/platform.dart: -------------------------------------------------------------------------------- 1 | export 'platform_stub.dart' 2 | if (dart.library.io) 'platform_io.dart' 3 | if (dart.library.html) 'platform_web.dart'; 4 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/helpers/platform/platform_enum.dart: -------------------------------------------------------------------------------- 1 | enum AppPlatform { android, ios, web, mac } 2 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/helpers/platform/platform_io.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutterui/app/shared/presentation/helpers/platform/platform_enum.dart'; 4 | 5 | AppPlatform getPlatform() { 6 | if (Platform.isAndroid) return AppPlatform.android; 7 | if (Platform.isIOS) return AppPlatform.ios; 8 | if (Platform.isMacOS) return AppPlatform.mac; 9 | throw UnimplementedError('Unsupported'); 10 | } 11 | 12 | dynamic getWindow() { 13 | throw UnimplementedError('Unsupported'); 14 | } 15 | 16 | //The test to actually see if there is a connection 17 | Future checkConnection() async { 18 | var hasConnection = false; 19 | 20 | try { 21 | final result = await InternetAddress.lookup('google.com'); 22 | if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) { 23 | hasConnection = true; 24 | } else { 25 | hasConnection = false; 26 | } 27 | } on SocketException catch (_) { 28 | hasConnection = false; 29 | } 30 | 31 | return hasConnection; 32 | } 33 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/helpers/platform/platform_stub.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/app/shared/presentation/helpers/platform/platform_enum.dart'; 2 | 3 | AppPlatform getPlatform() { 4 | throw UnimplementedError('Unsupported'); 5 | } 6 | 7 | dynamic getWindow() { 8 | throw UnimplementedError('Unsupported'); 9 | } 10 | 11 | //The test to actually see if there is a connection 12 | Future checkConnection() async { 13 | throw UnimplementedError('Unsupported'); 14 | } 15 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/helpers/platform/platform_web.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/app/shared/presentation/helpers/platform/platform_enum.dart'; 2 | import "dart:html" as html; 3 | 4 | AppPlatform getPlatform() { 5 | return AppPlatform.web; 6 | } 7 | 8 | dynamic getWindow() { 9 | return html.window; 10 | } 11 | 12 | //The test to actually see if there is a connection 13 | Future checkConnection() async { 14 | const hasConnection = true; 15 | 16 | // try { 17 | // final result = await InternetAddress.lookup('google.com'); 18 | // if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) { 19 | // hasConnection = true; 20 | // } else { 21 | // hasConnection = false; 22 | // } 23 | // // } on SocketException catch (_) { 24 | // // hasConnection = false; 25 | // // } 26 | // } catch (_) { 27 | // hasConnection = false; 28 | // } 29 | return hasConnection; 30 | } 31 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/models/nav_link.dart: -------------------------------------------------------------------------------- 1 | // 2 | class NavLink { 3 | final String title; 4 | final String path; 5 | 6 | NavLink({required this.title, required this.path}); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/utils/colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppColors { 4 | static const Color PRIMARY = Color(0xFF3867D6); 5 | // static const Color PRIMARY = Colors.teal; 6 | 7 | // Background colors 8 | static const Color BG = Color(0xFFFFFFFF); 9 | static const Color BGDARK = Color(0xFF161616); 10 | 11 | // static const Color BGCARDDARK = Color(0xFF070D36); 12 | static const Color BGCARDDARK = Color(0xFF262626); 13 | 14 | static const Color DARK_PRIMARY = Color(0xFF283C64); 15 | static const Color BGGRAY = Color(0XFF8D9091); 16 | static const Color BGGRAY2 = Color(0XFFD9D9D9); 17 | static const Color BGGRAY3 = Color(0XFFFBFBFB); 18 | 19 | // Card colors 20 | static const Color CARDCOLOR = Color.fromARGB(255, 237, 237, 237); 21 | static const Color RED = Color(0xFFED1010); 22 | static const Color DARKRED = Color(0xFF8B2813); 23 | 24 | // Text colors 25 | static const Color TEXTBLACK = Color(0xFF262B3D); 26 | static const Color TEXTGREY = Color(0XFF8D9091); 27 | static const Color TEXTWHITE = Color(0XFFFFFFFF); 28 | 29 | //My colors* 30 | } 31 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/utils/icons.dart: -------------------------------------------------------------------------------- 1 | class AppIcons { 2 | static const code = "assets/icons/code.svg"; 3 | static const tab = "assets/icons/tab.svg"; 4 | static const menu = "assets/icons/menu.svg"; 5 | static const clipboard = "assets/icons/clipboard.svg"; 6 | static const desktop = "assets/icons/desktop.svg"; 7 | static const tablet = "assets/icons/tablet.svg"; 8 | static const mobile = "assets/icons/mobile.svg"; 9 | static const github = "assets/icons/github.svg"; 10 | static const chevron_down = "assets/icons/chevron_down.svg"; 11 | static const tiktok = "assets/icons/tiktok.svg"; 12 | static const sun = "assets/icons/sun.svg"; 13 | static const search = "assets/icons/search.svg"; 14 | static const moon = "assets/icons/moon.svg"; 15 | static const back = "assets/icons/back.svg"; 16 | static const next = "assets/icons/next.svg"; 17 | static const linkedIn = "assets/icons/linkedIn.svg"; 18 | static const x = "assets/icons/x.svg"; 19 | static const diamond = "assets/icons/diamond.svg"; 20 | static const card = "assets/icons/card.svg"; 21 | static const link = "assets/icons/link.svg"; 22 | static const download = "assets/icons/download.svg"; 23 | } 24 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/utils/images.dart: -------------------------------------------------------------------------------- 1 | class AppImages { 2 | static const String logoDark = "assets/images/logo_dark.png"; 3 | static const String logoLight = "assets/images/logo_white.png"; 4 | static const String flutter = "assets/images/flutter.png"; 5 | static const String flutterColored = "assets/images/flutter_colored.png"; 6 | static const String dartColored = "assets/images/dart_colored.png"; 7 | static const String dart = "assets/images/dart.png"; 8 | static const String bottomFrame = "assets/images/bottom_frame.png"; 9 | static const String code = "assets/images/code.png"; 10 | static const android = "assets/images/android.png"; 11 | static const ios = "assets/images/iphone.png"; 12 | static const macos = "assets/images/apple.png"; 13 | static const linux = "assets/images/linux.png"; 14 | static const web = "assets/images/globe.png"; 15 | } 16 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/utils/lang_util.dart: -------------------------------------------------------------------------------- 1 | import 'package:easy_localization/easy_localization.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class LangUtil { 5 | static String trans(String? key, {List? args, Map? namedArgs, BuildContext? context}) { 6 | if (key != '' && key != null) { 7 | String val = tr(key, args: args, context: context, namedArgs: namedArgs); 8 | return val; 9 | } else { 10 | return ''; 11 | } 12 | } 13 | 14 | static bool isFrench(BuildContext context) { 15 | return context.deviceLocale.languageCode == 'fr'; 16 | } 17 | 18 | static Future setTrans(BuildContext context, Locale locale) async { 19 | await context.setLocale(locale); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/widgets/app_container.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:flutter_screenutil/flutter_screenutil.dart'; 4 | import 'package:flutterui/components/data/logic/component/component_bloc.dart'; 5 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 6 | 7 | class AppContainer extends StatefulWidget { 8 | final Widget child; 9 | final bool isHomeScreenLayout; 10 | const AppContainer( 11 | {super.key, required this.child, required this.isHomeScreenLayout}); 12 | 13 | @override 14 | State createState() => _AppContainerState(); 15 | } 16 | 17 | class _AppContainerState extends State { 18 | @override 19 | Widget build(BuildContext context) { 20 | return Container( 21 | width: 22 | AppSizing.kWPercentage(context, widget.isHomeScreenLayout ? 90 : 95), 23 | margin: EdgeInsets.symmetric( 24 | horizontal: AppSizing.kWPercentage( 25 | context, widget.isHomeScreenLayout ? 5 : 2.5)), 26 | decoration: BoxDecoration( 27 | color: Theme.of(context).scaffoldBackgroundColor.withOpacity(0.95), 28 | border: Border( 29 | bottom: BorderSide(color: Theme.of(context).dividerColor), 30 | ), 31 | ), 32 | child: BlocBuilder( 33 | builder: (context, state) { 34 | return Builder(builder: (context) { 35 | return Column( 36 | children: [ 37 | Container( 38 | padding: EdgeInsets.symmetric(vertical: 15.h), 39 | width: AppSizing.kWPercentage(context, 95), 40 | child: widget.child, 41 | ), 42 | ], 43 | ); 44 | }); 45 | }, 46 | ), 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/widgets/code_highlighter2.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_syntax_view/flutter_syntax_view.dart'; 3 | 4 | class CodeHighlighter2 extends StatefulWidget { 5 | final String code; 6 | const CodeHighlighter2({super.key, required this.code}); 7 | 8 | @override 9 | State createState() => _CodeHighlighter2State(); 10 | } 11 | 12 | class _CodeHighlighter2State extends State { 13 | @override 14 | Widget build(BuildContext context) { 15 | return SyntaxView( 16 | code: widget.code, // Code text 17 | syntax: Syntax.DART, // Language 18 | syntaxTheme: SyntaxTheme.vscodeDark(), // Theme 19 | fontSize: 12.0, // Font size 20 | withZoom: false, // Enable/Disable zoom icon controls 21 | withLinesCount: false, // Enable/Disable line number 22 | expanded: false, // Enable/Disable container expansion 23 | selectable: true // Enable/Disable code text selection 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/widgets/device_frame.dart: -------------------------------------------------------------------------------- 1 | import 'package:device_frame/device_frame.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 4 | 5 | class AppDeviceFrame extends StatefulWidget { 6 | final DeviceInfo deviceInfo; 7 | final Widget child; 8 | final Orientation? orientation; 9 | final bool? isFrameVisible; 10 | 11 | const AppDeviceFrame({ 12 | super.key, 13 | required this.deviceInfo, 14 | required this.child, 15 | this.orientation = Orientation.portrait, 16 | this.isFrameVisible = true, 17 | }); 18 | 19 | @override 20 | State createState() => _AppDeviceFrameState(); 21 | } 22 | 23 | class _AppDeviceFrameState extends State { 24 | @override 25 | Widget build(BuildContext context) { 26 | return Container( 27 | clipBehavior: Clip.hardEdge, 28 | decoration: const BoxDecoration(), 29 | width: AppSizing.width(context), 30 | height: AppSizing.isMobile(context) 31 | ? AppSizing.height(context) * 0.5 32 | : AppSizing.height(context) * 0.6, 33 | child: AnimatedSwitcher( 34 | duration: const Duration(milliseconds: 500), 35 | child: widget.isFrameVisible == false 36 | ? SizedBox( 37 | width: AppSizing.kWPercentage(context, 40), 38 | child: widget.child, 39 | ) 40 | : DeviceFrame( 41 | device: widget.deviceInfo, 42 | isFrameVisible: widget.isFrameVisible!, 43 | // isFrameVisible: false, 44 | orientation: widget.orientation!, 45 | screen: widget.child, 46 | ), 47 | ), 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/widgets/icon.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; 3 | import 'package:flutter_svg/flutter_svg.dart'; 4 | 5 | class AppIcon extends StatelessWidget { 6 | final String icon; 7 | final double? size; 8 | final Color? color; 9 | const AppIcon({super.key, required this.icon, this.color, this.size}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return SvgPicture.asset( 14 | icon, 15 | width: size ?? 20.w, 16 | height: size ?? 20.w, 17 | color: color ?? Theme.of(context).highlightColor, 18 | placeholderBuilder: (context) { 19 | return Center( 20 | child: SizedBox( 21 | width: 10.w, 22 | height: 10.w, 23 | child: CircularProgressIndicator(strokeWidth: 1.w), 24 | ), 25 | ); 26 | }, 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/app/shared/presentation/widgets/layout/side_bar_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; 3 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 4 | 5 | class SideBarItem extends StatefulWidget { 6 | final String title; 7 | final bool isActive; 8 | final String? link; 9 | final void Function()? onPressed; 10 | const SideBarItem({super.key, required this.title, this.onPressed, this.link, required this.isActive}); 11 | 12 | @override 13 | State createState() => _SideBarItemState(); 14 | } 15 | 16 | class _SideBarItemState extends State { 17 | @override 18 | Widget build(BuildContext context) { 19 | return AnimatedContainer( 20 | duration: const Duration(milliseconds: 400), 21 | decoration: BoxDecoration( 22 | border: BorderDirectional( 23 | start: BorderSide( 24 | width: 2.w, 25 | color: widget.isActive ? Theme.of(context).primaryColor : Theme.of(context).dividerColor, 26 | ), 27 | ), 28 | ), 29 | child: TextButton( 30 | style: TextButton.styleFrom( 31 | shape: RoundedRectangleBorder( 32 | borderRadius: BorderRadius.only( 33 | topRight: Radius.circular(5.r), 34 | bottomRight: Radius.circular(5.r), 35 | ), 36 | ), 37 | alignment: Alignment.centerLeft, 38 | ), 39 | onPressed: widget.onPressed, 40 | child: Builder(builder: (context) { 41 | final name = LangUtil.trans("SubComponentCategoryEnum.${widget.title}"); 42 | final formatted = name[0].toUpperCase() + name.split("_").join(" ").substring(1).toLowerCase(); 43 | return Text( 44 | formatted, 45 | style: Theme.of(context).textTheme.bodyMedium, 46 | ); 47 | }), 48 | ), 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /lib/components/data/logic/component/component_event.dart: -------------------------------------------------------------------------------- 1 | part of 'component_bloc.dart'; 2 | 3 | class ComponentEvent {} 4 | 5 | class UpdateActiveComponentEvent extends ComponentEvent { 6 | final Component newComponent; 7 | 8 | UpdateActiveComponentEvent({required this.newComponent}); 9 | } 10 | 11 | class GetAllComponentsEvent extends ComponentEvent {} 12 | 13 | class FindNextComponentBlocEvent extends ComponentEvent { 14 | final bool isNext; 15 | 16 | FindNextComponentBlocEvent({required this.isNext}); 17 | } 18 | 19 | class UpdateActiveCategoryEvent extends ComponentEvent { 20 | final AppCategoryModel category; 21 | UpdateActiveCategoryEvent({required this.category}); 22 | } 23 | -------------------------------------------------------------------------------- /lib/components/data/logic/component/component_state.dart: -------------------------------------------------------------------------------- 1 | part of 'component_bloc.dart'; 2 | 3 | class ComponentState { 4 | final Component activeComponent; 5 | final List allComponents; 6 | final AppCategoryModel? activeCategory; 7 | 8 | ComponentState({ 9 | required this.activeComponent, 10 | required this.allComponents, 11 | this.activeCategory, 12 | }); 13 | } 14 | 15 | class FetchComponents extends ComponentState { 16 | FetchComponents({ 17 | required super.activeComponent, 18 | required super.allComponents, 19 | super.activeCategory, 20 | }); 21 | } 22 | 23 | class ComponentInitial extends ComponentState { 24 | ComponentInitial({ 25 | required super.activeComponent, 26 | required super.allComponents, 27 | super.activeCategory, 28 | }); 29 | } 30 | 31 | class UpdateActiveComponentSuccess extends ComponentState { 32 | UpdateActiveComponentSuccess({ 33 | required super.activeComponent, 34 | required super.allComponents, 35 | super.activeCategory, 36 | }); 37 | } 38 | 39 | class UpdateActiveCategorySuccess extends ComponentState { 40 | UpdateActiveCategorySuccess({ 41 | required super.activeComponent, 42 | required super.allComponents, 43 | required super.activeCategory, 44 | }); 45 | } 46 | -------------------------------------------------------------------------------- /lib/components/data/services/component_service.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/components/presentation/animations/skew_card/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 3 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 5 | import 'package:flutterui/components/presentation/animations/skew_card/skew_card_code.dart'; 6 | import 'package:flutterui/components/presentation/animations/skew_card/skew_card_widget.dart'; 7 | import 'package:flutterui/components/shared/setup.dart'; 8 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 9 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 10 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 11 | import 'package:flutterui/app/shared/data/models/component.dart'; 12 | 13 | class SkewCardData { 14 | static const Widget widget = SkewCard(); 15 | static String code = skewCardCode; 16 | static String setup = basicSetup; 17 | static Component component = Component( 18 | createdAt: DateTime(2024, 9, 2), 19 | updatedAt: DateTime(2024, 9, 2), 20 | id: "3d-skew-card", 21 | codeComponents: [CodeComponent(code: code, widget: widget)], 22 | description: LangUtil.trans('skewCardDescription'), 23 | title: LangUtil.trans('skewCardTitle'), 24 | setup: setup, 25 | category: ComponentCategoryEnum.BLOCKS, 26 | subcategory: SubComponentCategoryEnum.SLIDERS_AND_CAROUSELS, 27 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 28 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET], 29 | ); 30 | } 31 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/bottom_nav_bars/docking_bar/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 3 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 5 | import 'package:flutterui/components/presentation/blocks/bottom_nav_bars/docking_bar/docking_bar_code.dart'; 6 | import 'package:flutterui/components/presentation/blocks/bottom_nav_bars/docking_bar/docking_bar_setup.dart'; 7 | import 'package:flutterui/components/presentation/blocks/bottom_nav_bars/docking_bar/docking_bar_widget.dart'; 8 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 9 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 10 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 11 | import 'package:flutterui/app/shared/data/models/component.dart'; 12 | 13 | class DockingBarData { 14 | static const Widget widget = DockingBarWidget(); 15 | static String code = dockingBarCode; 16 | static String setup = dockingBarSetup; 17 | 18 | static Component component = Component( 19 | createdAt: DateTime(2024, 11, 15), 20 | updatedAt: DateTime(2024, 11, 15), 21 | id: "docking-bottom-bar", 22 | codeComponents: [CodeComponent(code: code, widget: widget)], 23 | description: LangUtil.trans('dockingBarDescription'), 24 | title: LangUtil.trans('dockingBarTitle'), 25 | setup: setup, 26 | category: ComponentCategoryEnum.BLOCKS, 27 | subcategory: SubComponentCategoryEnum.BOTTOM_NAV_BARS, 28 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 29 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET], 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/bottom_nav_bars/docking_bar/docking_bar_setup.dart: -------------------------------------------------------------------------------- 1 | const dockingBarSetup = ''' 2 | fvm use 3.22.1 3 | flutter pub add flutter_svg 4 | flutter pub get 5 | '''; 6 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/buttons/apple_books_fab/apple_books_fab_setup.dart: -------------------------------------------------------------------------------- 1 | const classicButtonSetup = ''' 2 | flutter pub get 3 | '''; 4 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/buttons/apple_books_fab/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 3 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 4 | import 'package:flutterui/components/presentation/blocks/buttons/apple_books_fab/apple_books_fab_code.dart'; 5 | import 'package:flutterui/components/presentation/blocks/buttons/apple_books_fab/apple_books_fab_widget.dart'; 6 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 7 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 8 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 9 | import 'package:flutterui/app/shared/data/models/component.dart'; 10 | import 'package:flutterui/components/shared/setup.dart'; 11 | 12 | class AppleBooksFABData { 13 | static const Widget widget = AppleBooksFAB(); 14 | static String code = appleBooksFABCode; 15 | static String setup = basicSetup; 16 | static Component component = Component( 17 | createdAt: DateTime(2024, 12, 4), 18 | updatedAt: DateTime(2024, 12, 4), 19 | id: "apple-books-fab", 20 | codeComponents: [CodeComponent(code: code, widget: widget)], 21 | description: 'app_components.apple_books.description', 22 | title: 'app_components.apple_books.title', 23 | setup: setup, 24 | category: ComponentCategoryEnum.BLOCKS, 25 | subcategory: SubComponentCategoryEnum.BUTTONS, 26 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 27 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET, AppDeviceType.DESKTOP], 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/buttons/classic_button/classic_button_setup.dart: -------------------------------------------------------------------------------- 1 | const classicButtonSetup = ''' 2 | flutter pub get'''; 3 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/buttons/classic_button/classic_button_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ClassicButton extends StatefulWidget { 4 | const ClassicButton({super.key}); 5 | 6 | @override 7 | State createState() => _ClassicButtonState(); 8 | } 9 | 10 | class _ClassicButtonState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return Center( 14 | child: ElevatedButton( 15 | style: ElevatedButton.styleFrom(backgroundColor: Colors.teal), 16 | onPressed: () { 17 | print("Clicked"); 18 | }, 19 | child: Text("Hello world", 20 | style: Theme.of(context).textTheme.displaySmall), 21 | ), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/buttons/classic_button/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 3 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 5 | import 'package:flutterui/components/presentation/blocks/buttons/classic_button/classic_button_code.dart'; 6 | import 'package:flutterui/components/presentation/blocks/buttons/classic_button/classic_button_setup.dart'; 7 | import 'package:flutterui/components/presentation/blocks/buttons/classic_button/classic_button_widget.dart'; 8 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 9 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 10 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 11 | import 'package:flutterui/app/shared/data/models/component.dart'; 12 | 13 | class ClassicButtonData { 14 | static const Widget widget = ClassicButton(); 15 | static String code = classicButtonCode; 16 | static String setup = classicButtonSetup; 17 | static Component component = Component( 18 | createdAt: DateTime(2024, 8, 12), 19 | updatedAt: DateTime(2024, 8, 12), 20 | id: "classic-btn", 21 | codeComponents: [CodeComponent(code: code, widget: widget)], 22 | description: LangUtil.trans('classicButtonDescription'), 23 | title: LangUtil.trans("classicButtonTitle"), 24 | setup: setup, 25 | category: ComponentCategoryEnum.BLOCKS, 26 | subcategory: SubComponentCategoryEnum.BUTTONS, 27 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 28 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET], 29 | ); 30 | } 31 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/cards/flip_card/flip_card_setup.dart: -------------------------------------------------------------------------------- 1 | const flipCardButtonSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 4 | flutter pub add get'''; 5 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/tabs/blurred_slide_tab/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 3 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 5 | import 'package:flutterui/components/presentation/blocks/bottom_nav_bars/docking_bar/docking_bar_setup.dart'; 6 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 7 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 8 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 9 | import 'package:flutterui/app/shared/data/models/component.dart'; 10 | import 'package:flutterui/components/presentation/blocks/tabs/blurred_slide_tab/blurred_slide_tab_code.dart'; 11 | import 'package:flutterui/components/presentation/blocks/tabs/blurred_slide_tab/blurred_slide_tab_widget.dart'; 12 | 13 | class BlurredSlideTabData { 14 | static const Widget widget = BlurredSlideTabWidget(); 15 | static String code = blurredSlideTabCode; 16 | static String setup = dockingBarSetup; 17 | 18 | static Component component = Component( 19 | createdAt: DateTime(2024, 11, 27), 20 | updatedAt: DateTime(2024, 11, 27), 21 | id: "blurred-slide-tab-bar", 22 | codeComponents: [CodeComponent(code: code, widget: widget)], 23 | description: LangUtil.trans('blurredSlideTabDataDescription'), 24 | title: LangUtil.trans('blurredSlideTabDataTitle'), 25 | setup: setup, 26 | category: ComponentCategoryEnum.BLOCKS, 27 | subcategory: SubComponentCategoryEnum.TABS, 28 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 29 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET], 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/tabs/expandable_tab/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 3 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 5 | import 'package:flutterui/components/presentation/blocks/bottom_nav_bars/docking_bar/docking_bar_setup.dart'; 6 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 7 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 8 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 9 | import 'package:flutterui/app/shared/data/models/component.dart'; 10 | import 'package:flutterui/components/presentation/blocks/tabs/expandable_tab/expandable_tab_code.dart'; 11 | import 'package:flutterui/components/presentation/blocks/tabs/expandable_tab/expandable_tab_widget.dart'; 12 | 13 | class ExpandableTabData { 14 | static const Widget widget = ExpandableTab(); 15 | static String code = expandableTabCode; 16 | static String setup = dockingBarSetup; 17 | 18 | static Component component = Component( 19 | createdAt: DateTime(2024, 11, 20), 20 | updatedAt: DateTime(2024, 11, 20), 21 | id: "expandable-tab-bar", 22 | codeComponents: [CodeComponent(code: code, widget: widget)], 23 | description: LangUtil.trans('expandableTabDescription'), 24 | title: LangUtil.trans('expandableTabTitle'), 25 | setup: setup, 26 | category: ComponentCategoryEnum.BLOCKS, 27 | subcategory: SubComponentCategoryEnum.TABS, 28 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 29 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET], 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /lib/components/presentation/blocks/tabs/slide_tab/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 3 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 4 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 5 | import 'package:flutterui/components/presentation/blocks/bottom_nav_bars/docking_bar/docking_bar_setup.dart'; 6 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 7 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 8 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 9 | import 'package:flutterui/app/shared/data/models/component.dart'; 10 | import 'package:flutterui/components/presentation/blocks/tabs/slide_tab/slide_tab_code.dart'; 11 | import 'package:flutterui/components/presentation/blocks/tabs/slide_tab/slide_tab_widget.dart'; 12 | 13 | class SlideTabData { 14 | static const Widget widget = SlideTabWidget(); 15 | static String code = slideTabCode; 16 | static String setup = dockingBarSetup; 17 | 18 | static Component component = Component( 19 | createdAt: DateTime(2024, 11, 24), 20 | updatedAt: DateTime(2024, 11, 24), 21 | id: "slide-tab-bar", 22 | codeComponents: [CodeComponent(code: code, widget: widget)], 23 | description: LangUtil.trans('slideTabDescription'), 24 | title: LangUtil.trans('slideTabTitle'), 25 | setup: setup, 26 | category: ComponentCategoryEnum.BLOCKS, 27 | subcategory: SubComponentCategoryEnum.TABS, 28 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 29 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET], 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /lib/components/presentation/export/store.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterui/components/presentation/animations/skew_card/data.dart'; 2 | import 'package:flutterui/app/shared/data/models/component.dart'; 3 | import 'package:flutterui/components/presentation/blocks/bottom_nav_bars/docking_bar/data.dart'; 4 | import 'package:flutterui/components/presentation/blocks/buttons/apple_books_fab/data.dart'; 5 | import 'package:flutterui/components/presentation/blocks/tabs/blurred_slide_tab/data.dart'; 6 | import 'package:flutterui/components/presentation/blocks/tabs/expandable_tab/data.dart'; 7 | import 'package:flutterui/components/presentation/blocks/tabs/slide_tab/data.dart'; 8 | import 'package:flutterui/components/presentation/templates/basuu/exports/data.dart'; 9 | import 'package:flutterui/components/presentation/templates/onboarding/doctor_onboarding/doctor_onboarding_data.dart'; 10 | import 'package:flutterui/components/presentation/templates/fade_carousel/fade_carousel_data.dart'; 11 | import 'package:flutterui/components/presentation/templates/fruity_lips/fruity_lips_data.dart'; 12 | import 'package:flutterui/components/presentation/templates/leave_review/leave_a_review_data.dart'; 13 | import 'package:flutterui/components/presentation/templates/nike_zoomer/nike_zoomer_data.dart'; 14 | import 'package:flutterui/components/presentation/templates/onboarding/mental_health/mental_health_data.dart'; 15 | import 'package:flutterui/components/presentation/templates/onboarding/online/online_data.dart'; 16 | 17 | class AllComponents { 18 | static List widgets = [ 19 | BasuuData.component, 20 | FruityLipsTemplateData.component, 21 | NikeZoomerTemplateData.component, 22 | FadeCarouselTemplateData.component, 23 | LeaveAReviewTemplateData.component, 24 | SkewCardData.component, 25 | DockingBarData.component, 26 | ExpandableTabData.component, 27 | SlideTabData.component, 28 | BlurredSlideTabData.component, 29 | AppleBooksFABData.component, 30 | OnlineOnboardingData.component, 31 | MentalHealthOnboardingData.component, 32 | DoctorOnboardingData.component, 33 | ]; 34 | } 35 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/exports/basuu_setup.dart: -------------------------------------------------------------------------------- 1 | const basuuSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 4 | flutter pub add flutter_screenutil 5 | flutter pub add flutter_svg 6 | flutter pub add google_fonts 7 | flutter pub add get 8 | '''; 9 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/models/basuu_category.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BasuuCategory { 4 | final String label; 5 | final String title; 6 | final Color color; 7 | final int? percentage; 8 | final bool? isChecked; 9 | 10 | BasuuCategory({ 11 | required this.label, 12 | required this.title, 13 | required this.color, 14 | this.percentage, 15 | this.isChecked, 16 | }); 17 | 18 | BasuuCategory copyWith({ 19 | String? label, 20 | String? title, 21 | Color? color, 22 | int? percentage, 23 | bool? isChecked, 24 | }) { 25 | return BasuuCategory( 26 | label: label ?? this.label, 27 | title: title ?? this.title, 28 | color: color ?? this.color, 29 | percentage: percentage ?? this.percentage, 30 | isChecked: isChecked ?? this.isChecked, 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/models/basuu_word.dart: -------------------------------------------------------------------------------- 1 | class BasuuWord { 2 | final String title; 3 | final bool hasLearned; 4 | 5 | BasuuWord({required this.title, required this.hasLearned}); 6 | 7 | BasuuWord copyWith({ 8 | String? title, 9 | bool? hasLearned, 10 | }) { 11 | return BasuuWord( 12 | title: title ?? this.title, 13 | hasLearned: hasLearned ?? this.hasLearned, 14 | ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/shared/utils/basuu_colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BasuuColors { 4 | static const BGDARK = Color(0xFF14161B); 5 | static const BGWHITE = Color(0xFFC0C0C0); 6 | static const Color BGCARDDARK = Color(0xFF22252E); 7 | static const PRIMARY = Color(0XFFF1CC06); 8 | 9 | // Text colors 10 | static const Color TEXTBLACK = Color(0xFF000000); 11 | static const Color TEXTGREY = Color(0XFF8D9091); 12 | static const Color TEXTWHITE = Color(0XFFFFFFFF); 13 | static const Color GREEN = Color(0xFF108C15); 14 | static const Color TEAL = Color(0xFF04826B); 15 | static const Color DGREEN = Color(0xFF4B7C0C); 16 | static const Color DARKORANGE = Color(0xFFA48C0E); 17 | static const Color DARKRED = Color(0xFFA44D0E); 18 | static const Color MIDRED = Color(0xFFDC401D); 19 | static const Color DEEPRED = Color(0xFFDC1D62); 20 | static const Color RED = Color(0xFFFF5858); 21 | 22 | static const Color BGGRAY = Color(0XFF313843); 23 | static const Color BGGRAY2 = Color(0XFFD9D9D9); 24 | static const Color BGGRAY3 = Color(0XFFFBFBFB); 25 | } 26 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/widgets/basuu_animated_child.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/presentation/utils/sizing.dart'; 3 | 4 | class BasuuAnimatedChild extends StatelessWidget { 5 | final Widget child; 6 | final double animation; 7 | final double offset; 8 | const BasuuAnimatedChild({super.key, required this.child, required this.animation, required this.offset}); 9 | @override 10 | Widget build(BuildContext context) { 11 | return Transform.translate( 12 | offset: Offset(0.0, offset * animation * AppSizing.kHPercentage(context, 10)), 13 | child: Opacity( 14 | opacity: 1 - animation, 15 | child: child, 16 | ), 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/widgets/basuu_animated_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BasuuAnimatedScreen extends StatefulWidget { 4 | final bool? animated; 5 | final Widget Function(BuildContext context, bool animated, double animation) builder; 6 | const BasuuAnimatedScreen({super.key, this.animated, required this.builder}); 7 | 8 | @override 9 | State createState() => _AnimatedScreenState(); 10 | } 11 | 12 | class _AnimatedScreenState extends State { 13 | bool animated = false; 14 | 15 | @override 16 | void initState() { 17 | WidgetsBinding.instance.addPostFrameCallback((d) { 18 | setState(() => animated = widget.animated ?? true); 19 | }); 20 | super.initState(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return PopScope( 26 | onPopInvoked: (pop) { 27 | setState(() => animated = false); 28 | }, 29 | child: TweenAnimationBuilder( 30 | tween: animated ? Tween(begin: 1, end: 0) : Tween(begin: 0, end: 1), 31 | curve: Curves.fastOutSlowIn, 32 | key: ValueKey(animated), 33 | duration: const Duration(milliseconds: 700), 34 | builder: (context, animation, _) { 35 | return widget.builder(context, animated, animation); 36 | }, 37 | ), 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/widgets/basuu_app_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | // import 'package:flutter_openui/shared/utils/colors.dart'; 3 | import 'package:flutter_screenutil/flutter_screenutil.dart'; 4 | import 'package:flutterui/components/presentation/templates/basuu/shared/utils/basuu_colors.dart'; 5 | 6 | class BasuuButton extends StatefulWidget { 7 | final Widget? icon; 8 | final String text; 9 | final double? width; 10 | final Color? bgColor; 11 | final BorderSide? side; 12 | final void Function()? onPressed; 13 | final TextStyle? style; 14 | final EdgeInsetsGeometry? padding; 15 | const BasuuButton({ 16 | super.key, 17 | this.icon, 18 | required this.text, 19 | this.bgColor, 20 | this.width, 21 | this.onPressed, 22 | this.side, 23 | this.style, 24 | this.padding, 25 | }); 26 | 27 | @override 28 | State createState() => _BasuuButtonState(); 29 | } 30 | 31 | class _BasuuButtonState extends State { 32 | @override 33 | Widget build(BuildContext context) { 34 | return SizedBox( 35 | width: widget.width, 36 | child: ElevatedButton.icon( 37 | style: ElevatedButton.styleFrom( 38 | padding: widget.padding ?? EdgeInsets.symmetric(horizontal: 10.w, vertical: 15.h), 39 | backgroundColor: widget.bgColor ?? Theme.of(context).primaryColor, 40 | side: widget.side, 41 | elevation: 0, 42 | ), 43 | onPressed: widget.onPressed, 44 | icon: widget.icon, 45 | label: Text( 46 | widget.text, 47 | style: widget.style ?? 48 | Theme.of(context).textTheme.bodyMedium!.copyWith( 49 | color: BasuuColors.TEXTBLACK, 50 | fontSize: 14.sp, 51 | fontWeight: FontWeight.w600, 52 | ), 53 | ), 54 | ), 55 | ); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/basuu/widgets/basuu_app_icon.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; 3 | import 'package:flutter_svg/svg.dart'; 4 | 5 | class BasuuIcon extends StatelessWidget { 6 | final String icon; 7 | final double? size; 8 | final Color? color; 9 | const BasuuIcon({super.key, required this.icon, this.size, this.color}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return SvgPicture.string( 14 | icon, 15 | color: color, 16 | width: size?.w ?? 30.w, 17 | height: size?.w ?? 30.w, 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/fade_carousel/fade_carousel_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 3 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 4 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 5 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 6 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 7 | import 'package:flutterui/app/shared/data/models/component.dart'; 8 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 9 | import 'package:flutterui/components/presentation/templates/fade_carousel/fade_carousel_code.dart'; 10 | import 'package:flutterui/components/presentation/templates/fade_carousel/fade_carousel_setup.dart'; 11 | import 'package:flutterui/components/presentation/templates/fade_carousel/fade_carousel_widget.dart'; 12 | 13 | class FadeCarouselTemplateData { 14 | static Widget widget = const FadeCarouselTemplate(); 15 | static String code = fadeCarouselCode; 16 | static String setup = fadeCarouselSetup; 17 | static Component component = Component( 18 | createdAt: DateTime(2024, 8, 22), 19 | updatedAt: DateTime(2024, 8, 22), 20 | id: "fade-carousel", 21 | codeComponents: [CodeComponent(code: code, widget: widget)], 22 | description: LangUtil.trans('fadeCarouselDescription'), 23 | title: LangUtil.trans('fadeCarouselTitle'), 24 | setup: setup, 25 | category: ComponentCategoryEnum.BLOCKS, 26 | subcategory: SubComponentCategoryEnum.SLIDERS_AND_CAROUSELS, 27 | assetLink: "https://github.com/yunweneric/flutter-open-ui/raw/fade_caarousel/assets/images.zip", 28 | gitHubLink: "https://github.com/yunweneric/flutter-open-ui/tree/fade_caarousel", 29 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 30 | responsiveDevices: [AppDeviceType.MOBILE], 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/fade_carousel/fade_carousel_setup.dart: -------------------------------------------------------------------------------- 1 | const fadeCarouselSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 4 | flutter pub add get'''; 5 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/fruity_lips/fruity_lips_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 3 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 4 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 5 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 6 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 7 | import 'package:flutterui/app/shared/data/models/component.dart'; 8 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 9 | import 'package:flutterui/components/presentation/templates/fruity_lips/fruity_lips_code.dart'; 10 | import 'package:flutterui/components/presentation/templates/fruity_lips/fruity_lips_setup.dart'; 11 | import 'package:flutterui/components/presentation/templates/fruity_lips/fruity_lips_widget.dart'; 12 | 13 | class FruityLipsTemplateData { 14 | static Widget widget = const FruityLipsTemplate(); 15 | static String code = fruityLipsCode; 16 | static String setup = fruityLipsSetup; 17 | static Component component = Component( 18 | createdAt: DateTime(2024, 7, 9), 19 | updatedAt: DateTime(2024, 7, 9), 20 | id: "fruity-lips-carousel", 21 | codeComponents: [CodeComponent(code: code, widget: widget)], 22 | description: LangUtil.trans('fruityLipsDescription'), 23 | title: LangUtil.trans('fruityLipsTitle'), 24 | setup: setup, 25 | category: ComponentCategoryEnum.BLOCKS, 26 | subcategory: SubComponentCategoryEnum.SLIDERS_AND_CAROUSELS, 27 | assetLink: "https://github.com/yunweneric/flutter-open-ui/raw/fruity_lips/assets/images.zip", 28 | gitHubLink: "https://github.com/yunweneric/flutter-open-ui/tree/fruity_lips", 29 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS], 30 | responsiveDevices: [AppDeviceType.MOBILE], 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/fruity_lips/fruity_lips_setup.dart: -------------------------------------------------------------------------------- 1 | const fruityLipsSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 4 | flutter pub add get'''; 5 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/leave_review/leave_a_review_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 3 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 4 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 5 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 6 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 7 | import 'package:flutterui/app/shared/data/models/component.dart'; 8 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 9 | import 'package:flutterui/components/presentation/templates/leave_review/leave_a_review_code.dart'; 10 | import 'package:flutterui/components/presentation/templates/leave_review/leave_a_review_setup.dart'; 11 | import 'package:flutterui/components/presentation/templates/leave_review/leave_a_review_widget.dart'; 12 | 13 | class LeaveAReviewTemplateData { 14 | static Widget widget = const LeaveReviewHomeScreen(); 15 | static String code = leaveAReviewCode; 16 | static String setup = leaveAReviewSetup; 17 | static Component component = Component( 18 | createdAt: DateTime(2024, 7, 2), 19 | updatedAt: DateTime(2024, 7, 2), 20 | codeComponents: [CodeComponent(code: code, widget: widget)], 21 | id: "leave-a-review", 22 | description: LangUtil.trans('leaveAReviewDescription'), 23 | title: LangUtil.trans('leaveAReviewTitle'), 24 | setup: setup, 25 | category: ComponentCategoryEnum.BLOCKS, 26 | subcategory: SubComponentCategoryEnum.SLIDERS_AND_CAROUSELS, 27 | gitHubLink: "https://github.com/yunweneric/flutter-open-ui/tree/leave_a_review", 28 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS, SupportedPlatform.MACOS, SupportedPlatform.WEB], 29 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET, AppDeviceType.DESKTOP], 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/leave_review/leave_a_review_setup.dart: -------------------------------------------------------------------------------- 1 | const leaveAReviewSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 4 | flutter pub add get'''; 5 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/nike_zoomer/nike_zoomer_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 3 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 4 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 5 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 6 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 7 | import 'package:flutterui/app/shared/data/models/component.dart'; 8 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 9 | import 'package:flutterui/components/presentation/templates/nike_zoomer/nike_zoomer_code.dart'; 10 | import 'package:flutterui/components/presentation/templates/nike_zoomer/nike_zoomer_setup.dart'; 11 | import 'package:flutterui/components/presentation/templates/nike_zoomer/nike_zoomer_widget.dart'; 12 | 13 | class NikeZoomerTemplateData { 14 | static Widget widget = const NikeZoomerTemplate(); 15 | static String code = nikeZoomerCode; 16 | static String setup = nikeZoomerSetup; 17 | static Component component = Component( 18 | createdAt: DateTime(2024, 5, 19), 19 | updatedAt: DateTime(2024, 5, 19), 20 | codeComponents: [CodeComponent(code: code, widget: widget)], 21 | id: "nike-zoomer", 22 | description: LangUtil.trans('nikeZoomerDescription'), 23 | title: LangUtil.trans('nikeZoomerTitle'), 24 | setup: setup, 25 | category: ComponentCategoryEnum.BLOCKS, 26 | subcategory: SubComponentCategoryEnum.SLIDERS_AND_CAROUSELS, 27 | assetLink: "https://github.com/yunweneric/flutter-open-ui/raw/nike_zoomer/assets.zip", 28 | gitHubLink: "https://github.com/yunweneric/flutter-open-ui/tree/nike_zoomer", 29 | supportedPlatforms: [SupportedPlatform.ANDROID, SupportedPlatform.IOS, SupportedPlatform.MACOS, SupportedPlatform.WEB], 30 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET, AppDeviceType.DESKTOP], 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/nike_zoomer/nike_zoomer_setup.dart: -------------------------------------------------------------------------------- 1 | const nikeZoomerSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 4 | flutter pub add get'''; 5 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/onboarding/doctor_onboarding/doctor_onboarding_setup.dart: -------------------------------------------------------------------------------- 1 | const doctorOnboardingSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 // This is optional 4 | flutter pub add flutter_svg 5 | flutter pub add flutter_screenutil 6 | 7 | '''; 8 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/onboarding/mental_health/mental_health_setup.dart: -------------------------------------------------------------------------------- 1 | const mentalHealthOnboardingSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 // This is optional 4 | flutter pub add flutter_svg 5 | flutter pub add google_fonts 6 | 7 | '''; 8 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/onboarding/online/online_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterui/app/shared/data/enums/component_category_enum.dart'; 3 | import 'package:flutterui/app/shared/data/enums/device_type.dart'; 4 | import 'package:flutterui/app/shared/data/enums/sub_component_category_enum.dart'; 5 | import 'package:flutterui/app/shared/data/enums/supported_platform.dart'; 6 | import 'package:flutterui/app/shared/data/models/code_component.dart'; 7 | import 'package:flutterui/app/shared/data/models/component.dart'; 8 | import 'package:flutterui/app/shared/presentation/utils/lang_util.dart'; 9 | import 'package:flutterui/components/presentation/templates/onboarding/online/online_code.dart'; 10 | import 'package:flutterui/components/presentation/templates/onboarding/online/online_setup.dart'; 11 | import 'package:flutterui/components/presentation/templates/onboarding/online/online_widget.dart'; 12 | 13 | class OnlineOnboardingData { 14 | static Widget widget = const OnlineOnboarding(); 15 | static String code = onlineOnboardingCode; 16 | static String setup = onlineOnboardingSetup; 17 | static Component component = Component( 18 | createdAt: DateTime(2024, 12, 22), 19 | updatedAt: DateTime(2024, 12, 22), 20 | id: "online-onboarding-onboarding", 21 | codeComponents: [CodeComponent(code: code, widget: widget)], 22 | description: LangUtil.trans('onlineOnBoardingDescription'), 23 | title: LangUtil.trans('onlineOnBoardingTitle'), 24 | setup: setup, 25 | category: ComponentCategoryEnum.ANIMATIONS, 26 | subcategory: SubComponentCategoryEnum.ONBOARDING_SCREENS, 27 | assetLink: "https://github.com/yunweneric/flutter-open-ui/raw/onboarding_ui_ch_2/assets.zip", 28 | gitHubLink: "https://github.com/yunweneric/flutter-open-ui/tree/onboarding_ui_ch_2", 29 | supportedPlatforms: [ 30 | SupportedPlatform.ANDROID, 31 | SupportedPlatform.IOS, 32 | ], 33 | responsiveDevices: [AppDeviceType.MOBILE, AppDeviceType.TABLET], 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /lib/components/presentation/templates/onboarding/online/online_setup.dart: -------------------------------------------------------------------------------- 1 | const onlineOnboardingSetup = ''' 2 | flutter pub get 3 | fvm use 3.22 // This is optional 4 | flutter pub add flutter_svg 5 | flutter pub add google_fonts 6 | 7 | '''; 8 | -------------------------------------------------------------------------------- /lib/components/shared/setup.dart: -------------------------------------------------------------------------------- 1 | const basicSetup = ''' 2 | flutter pub get 3 | '''; 4 | -------------------------------------------------------------------------------- /linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | #include 10 | 11 | void fl_register_plugins(FlPluginRegistry* registry) { 12 | g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = 13 | fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); 14 | url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); 15 | } 16 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | url_launcher_linux 7 | ) 8 | 9 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 10 | ) 11 | 12 | set(PLUGIN_BUNDLED_LIBRARIES) 13 | 14 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 15 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 16 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 18 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 19 | endforeach(plugin) 20 | 21 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 22 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 23 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 24 | endforeach(ffi_plugin) 25 | -------------------------------------------------------------------------------- /linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import path_provider_foundation 9 | import shared_preferences_foundation 10 | import url_launcher_macos 11 | 12 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 13 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 14 | SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) 15 | UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) 16 | } 17 | -------------------------------------------------------------------------------- /macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '10.14' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def flutter_root 13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) 14 | unless File.exist?(generated_xcode_build_settings_path) 15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" 16 | end 17 | 18 | File.foreach(generated_xcode_build_settings_path) do |line| 19 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 20 | return matches[1].strip if matches 21 | end 22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" 23 | end 24 | 25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 26 | 27 | flutter_macos_podfile_setup 28 | 29 | target 'Runner' do 30 | use_frameworks! 31 | use_modular_headers! 32 | # pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.25.0' 33 | pod 'FirebaseFirestore', :path => '~/Documents/firestore-ios-sdk-frameworks-10.25.0' 34 | 35 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) 36 | target 'RunnerTests' do 37 | inherit! :search_paths 38 | end 39 | end 40 | 41 | post_install do |installer| 42 | installer.pods_project.targets.each do |target| 43 | flutter_additional_macos_build_settings(target) 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @main 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "app_icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "app_icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "app_icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "app_icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "app_icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "app_icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "app_icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "app_icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "app_icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "app_icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = flutterui 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.flutterwidget.hub 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | com.apple.security.network.client 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /macos/Runner/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | API_KEY 6 | AIzaSyCtGLjp4yboVK2NRSX2_1L7mHKqL17_Cas 7 | GCM_SENDER_ID 8 | 393409877189 9 | PLIST_VERSION 10 | 1 11 | BUNDLE_ID 12 | com.flutterwidget.hub 13 | PROJECT_ID 14 | flutterui-b4f0b 15 | STORAGE_BUCKET 16 | flutterui-b4f0b.appspot.com 17 | IS_ADS_ENABLED 18 | 19 | IS_ANALYTICS_ENABLED 20 | 21 | IS_APPINVITE_ENABLED 22 | 23 | IS_GCM_ENABLED 24 | 25 | IS_SIGNIN_ENABLED 26 | 27 | GOOGLE_APP_ID 28 | 1:393409877189:ios:8d4d9fc0a2d3238c3eccac 29 | 30 | -------------------------------------------------------------------------------- /macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /script/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Script to clean, get dependencies, build Flutter web (WASM), and deploy using Firebase 4 | 5 | echo "Cleaning Flutter project..." 6 | flutter clean 7 | 8 | echo "Getting Flutter dependencies..." 9 | flutter pub get 10 | 11 | echo "Clearing terminal..." 12 | clear 13 | 14 | echo "Building Flutter web with WASM..." 15 | # flutter build web --wasm --target lib/app/core/main_dev.dart --dart-define-from-file=../envs/fwh/dev.env.json 16 | flutter build web --wasm --target lib/app/core/main_prod.dart --dart-define-from-file=../envs/fwh/env.json 17 | # flutter build web --web-renderer html --target lib/main_dev.dart --dart-define-from-file=../envs/fwh/dev.env.json 18 | 19 | echo "Deploying to Firebase..." 20 | firebase deploy 21 | 22 | echo "Deployment complete!" 23 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | void main() {} 2 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/favicon.png -------------------------------------------------------------------------------- /web/flutter_bootstrap.js: -------------------------------------------------------------------------------- 1 | 2 | var appRunner; 3 | const button = document.getElementById("skip_btn") 4 | 5 | button.addEventListener(("click"), async () => { 6 | await appRunner.runApp(); 7 | }) 8 | 9 | const initialize = () => { 10 | {{flutter_js}} 11 | {{flutter_build_config}} 12 | _flutter.loader.load({ 13 | onEntrypointLoaded: async function (engineInitializer) { 14 | appRunner = await engineInitializer.initializeEngine(); 15 | const timeout = 25000; 16 | button.classList.add('active') 17 | // console.log("App not Loaded!, adding timeout of ", timeout, "timeout", timeout) 18 | setTimeout(async () => { 19 | await appRunner.runApp(); 20 | }, timeout); 21 | 22 | }, 23 | }); 24 | }; 25 | 26 | 27 | try { 28 | window.addEventListener("load", () => { 29 | console.log("flutter loaded!") 30 | initialize(); 31 | }); 32 | } catch (error) { 33 | console.log(error); 34 | } 35 | -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /web/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /web/icons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /web/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/favicon-16x16.png -------------------------------------------------------------------------------- /web/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/favicon-32x32.png -------------------------------------------------------------------------------- /web/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/favicon.ico -------------------------------------------------------------------------------- /web/icons/github.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /web/icons/linkedin.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /web/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/icons/mstile-150x150.png -------------------------------------------------------------------------------- /web/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/icons/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FWH", 3 | "short_name": "FWH", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /web/icons/x.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/images/flutterwidgethub_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/images/flutterwidgethub_Logo.png -------------------------------------------------------------------------------- /web/images/flutterwidgethub_Logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/web/images/flutterwidgethub_Logo_white.png -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Flutter Widgethub", 3 | "short_name": "FWH", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "Build Stunning flutter UI and UX from a vast collection of templates,blocs,animations and effects", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/andr", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /web/styles/old_loader.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /windows/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | #include 10 | 11 | void RegisterPlugins(flutter::PluginRegistry* registry) { 12 | UrlLauncherWindowsRegisterWithRegistrar( 13 | registry->GetRegistrarForPlugin("UrlLauncherWindows")); 14 | } 15 | -------------------------------------------------------------------------------- /windows/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void RegisterPlugins(flutter::PluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | url_launcher_windows 7 | ) 8 | 9 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 10 | ) 11 | 12 | set(PLUGIN_BUNDLED_LIBRARIES) 13 | 14 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 15 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 16 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 18 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 19 | endforeach(plugin) 20 | 21 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 22 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 23 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 24 | endforeach(ffi_plugin) 25 | -------------------------------------------------------------------------------- /windows/runner/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | project(runner LANGUAGES CXX) 3 | 4 | # Define the application target. To change its name, change BINARY_NAME in the 5 | # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer 6 | # work. 7 | # 8 | # Any new source files that you add to the application should be added here. 9 | add_executable(${BINARY_NAME} WIN32 10 | "flutter_window.cpp" 11 | "main.cpp" 12 | "utils.cpp" 13 | "win32_window.cpp" 14 | "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" 15 | "Runner.rc" 16 | "runner.exe.manifest" 17 | ) 18 | 19 | # Apply the standard set of build settings. This can be removed for applications 20 | # that need different build settings. 21 | apply_standard_settings(${BINARY_NAME}) 22 | 23 | # Add preprocessor definitions for the build version. 24 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") 25 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") 26 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") 27 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") 28 | target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") 29 | 30 | # Disable Windows macros that collide with C++ standard library functions. 31 | target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") 32 | 33 | # Add dependency libraries and include directories. Add any application-specific 34 | # dependencies here. 35 | target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) 36 | target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") 37 | target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") 38 | 39 | # Run the Flutter tool portions of the build. This must not be removed. 40 | add_dependencies(${BINARY_NAME} flutter_assemble) 41 | -------------------------------------------------------------------------------- /windows/runner/flutter_window.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_FLUTTER_WINDOW_H_ 2 | #define RUNNER_FLUTTER_WINDOW_H_ 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | #include "win32_window.h" 10 | 11 | // A window that does nothing but host a Flutter view. 12 | class FlutterWindow : public Win32Window { 13 | public: 14 | // Creates a new FlutterWindow hosting a Flutter view running |project|. 15 | explicit FlutterWindow(const flutter::DartProject& project); 16 | virtual ~FlutterWindow(); 17 | 18 | protected: 19 | // Win32Window: 20 | bool OnCreate() override; 21 | void OnDestroy() override; 22 | LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, 23 | LPARAM const lparam) noexcept override; 24 | 25 | private: 26 | // The project to run. 27 | flutter::DartProject project_; 28 | 29 | // The Flutter instance hosted by this window. 30 | std::unique_ptr flutter_controller_; 31 | }; 32 | 33 | #endif // RUNNER_FLUTTER_WINDOW_H_ 34 | -------------------------------------------------------------------------------- /windows/runner/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "flutter_window.h" 6 | #include "utils.h" 7 | 8 | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, 9 | _In_ wchar_t *command_line, _In_ int show_command) { 10 | // Attach to console when present (e.g., 'flutter run') or create a 11 | // new console when running with a debugger. 12 | if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { 13 | CreateAndAttachConsole(); 14 | } 15 | 16 | // Initialize COM, so that it is available for use in the library and/or 17 | // plugins. 18 | ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); 19 | 20 | flutter::DartProject project(L"data"); 21 | 22 | std::vector command_line_arguments = 23 | GetCommandLineArguments(); 24 | 25 | project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); 26 | 27 | FlutterWindow window(project); 28 | Win32Window::Point origin(10, 10); 29 | Win32Window::Size size(1280, 720); 30 | if (!window.Create(L"flutterui", origin, size)) { 31 | return EXIT_FAILURE; 32 | } 33 | window.SetQuitOnClose(true); 34 | 35 | ::MSG msg; 36 | while (::GetMessage(&msg, nullptr, 0, 0)) { 37 | ::TranslateMessage(&msg); 38 | ::DispatchMessage(&msg); 39 | } 40 | 41 | ::CoUninitialize(); 42 | return EXIT_SUCCESS; 43 | } 44 | -------------------------------------------------------------------------------- /windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunweneric/flutter-widgethub/298044bce4bc4d29e574c925fc40496a66740ad3/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /windows/runner/utils.cpp: -------------------------------------------------------------------------------- 1 | #include "utils.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | void CreateAndAttachConsole() { 11 | if (::AllocConsole()) { 12 | FILE *unused; 13 | if (freopen_s(&unused, "CONOUT$", "w", stdout)) { 14 | _dup2(_fileno(stdout), 1); 15 | } 16 | if (freopen_s(&unused, "CONOUT$", "w", stderr)) { 17 | _dup2(_fileno(stdout), 2); 18 | } 19 | std::ios::sync_with_stdio(); 20 | FlutterDesktopResyncOutputStreams(); 21 | } 22 | } 23 | 24 | std::vector GetCommandLineArguments() { 25 | // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. 26 | int argc; 27 | wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); 28 | if (argv == nullptr) { 29 | return std::vector(); 30 | } 31 | 32 | std::vector command_line_arguments; 33 | 34 | // Skip the first argument as it's the binary name. 35 | for (int i = 1; i < argc; i++) { 36 | command_line_arguments.push_back(Utf8FromUtf16(argv[i])); 37 | } 38 | 39 | ::LocalFree(argv); 40 | 41 | return command_line_arguments; 42 | } 43 | 44 | std::string Utf8FromUtf16(const wchar_t* utf16_string) { 45 | if (utf16_string == nullptr) { 46 | return std::string(); 47 | } 48 | unsigned int target_length = ::WideCharToMultiByte( 49 | CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, 50 | -1, nullptr, 0, nullptr, nullptr) 51 | -1; // remove the trailing null character 52 | int input_length = (int)wcslen(utf16_string); 53 | std::string utf8_string; 54 | if (target_length == 0 || target_length > utf8_string.max_size()) { 55 | return utf8_string; 56 | } 57 | utf8_string.resize(target_length); 58 | int converted_length = ::WideCharToMultiByte( 59 | CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, 60 | input_length, utf8_string.data(), target_length, nullptr, nullptr); 61 | if (converted_length == 0) { 62 | return std::string(); 63 | } 64 | return utf8_string; 65 | } 66 | -------------------------------------------------------------------------------- /windows/runner/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_UTILS_H_ 2 | #define RUNNER_UTILS_H_ 3 | 4 | #include 5 | #include 6 | 7 | // Creates a console for the process, and redirects stdout and stderr to 8 | // it for both the runner and the Flutter library. 9 | void CreateAndAttachConsole(); 10 | 11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string 12 | // encoded in UTF-8. Returns an empty std::string on failure. 13 | std::string Utf8FromUtf16(const wchar_t* utf16_string); 14 | 15 | // Gets the command line arguments passed in as a std::vector, 16 | // encoded in UTF-8. Returns an empty std::vector on failure. 17 | std::vector GetCommandLineArguments(); 18 | 19 | #endif // RUNNER_UTILS_H_ 20 | --------------------------------------------------------------------------------