├── .gitignore ├── README.md ├── bluetooth ├── esp │ ├── debug.cfg │ ├── debug.svd │ ├── debug_custom.json │ ├── esp32s3_ble_for_video.zip │ └── esp32s3_ble_for_video_2.ino └── flutter │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── frezycode │ │ │ │ │ └── esp_ble_flutter │ │ │ │ │ └── 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 │ ├── 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 │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h │ └── RunnerTests │ │ └── RunnerTests.swift │ ├── lib │ ├── features │ │ ├── device │ │ │ ├── bloc │ │ │ │ ├── device_bloc.dart │ │ │ │ ├── device_event.dart │ │ │ │ └── device_state.dart │ │ │ ├── device.dart │ │ │ ├── view │ │ │ │ ├── device_screen.dart │ │ │ │ └── view.dart │ │ │ └── widget │ │ │ │ ├── color_box.dart │ │ │ │ ├── color_slider.dart │ │ │ │ └── widget.dart │ │ └── devices │ │ │ ├── bloc │ │ │ ├── devices_bloc.dart │ │ │ ├── devices_event.dart │ │ │ └── devices_state.dart │ │ │ ├── devices.dart │ │ │ └── view │ │ │ ├── devices_list_screen.dart │ │ │ └── view.dart │ └── main.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 │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.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 │ │ ├── Info.plist │ │ ├── MainFlutterWindow.swift │ │ └── Release.entitlements │ └── RunnerTests │ │ └── RunnerTests.swift │ ├── pubspec.lock │ ├── pubspec.yaml │ ├── test │ └── widget_test.dart │ ├── web │ ├── favicon.png │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ ├── index.html │ └── manifest.json │ └── 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 ├── crypto_coins_list ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── cryptoguys │ │ │ │ │ └── crypto_coins_list │ │ │ │ │ └── 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 │ └── svg │ │ └── bitcoin_logo.svg ├── 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 │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h ├── lib │ ├── crypto_coins_list_app.dart │ ├── features │ │ ├── crypto_coin │ │ │ ├── bloc │ │ │ │ └── crypto_coin_details │ │ │ │ │ ├── crypto_coin_details_bloc.dart │ │ │ │ │ ├── crypto_coin_details_event.dart │ │ │ │ │ └── crypto_coin_details_state.dart │ │ │ ├── crypto_coin.dart │ │ │ ├── view │ │ │ │ ├── crypto_coin_screen.dart │ │ │ │ └── view.dart │ │ │ └── widgets │ │ │ │ ├── base_card.dart │ │ │ │ └── widgets.dart │ │ └── crypto_list │ │ │ ├── bloc │ │ │ ├── crypto_list_bloc.dart │ │ │ ├── crypto_list_event.dart │ │ │ └── crypto_list_state.dart │ │ │ ├── crypto_list.dart │ │ │ ├── view │ │ │ ├── crypto_list_screen.dart │ │ │ └── view.dart │ │ │ └── widgets │ │ │ ├── crypto_coin_tile.dart │ │ │ └── widgets.dart │ ├── main.dart │ ├── repositories │ │ └── crypto_coins │ │ │ ├── abstarct_coins_repository.dart │ │ │ ├── crypto_coins.dart │ │ │ ├── crypto_coins_rpository.dart │ │ │ └── models │ │ │ ├── crypto_coin.dart │ │ │ ├── crypto_coin.g.dart │ │ │ ├── crypto_coin_details.dart │ │ │ ├── crypto_coin_details.g.dart │ │ │ └── models.dart │ ├── router │ │ ├── router.dart │ │ └── router.gr.dart │ └── theme │ │ └── theme.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 │ ├── 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 │ │ ├── Info.plist │ │ ├── MainFlutterWindow.swift │ │ └── Release.entitlements ├── pubspec.lock ├── pubspec.yaml ├── repo │ └── assets │ │ ├── crypto_app1.png │ │ ├── crypto_app2.png │ │ └── crypto_app3.png ├── web │ ├── favicon.png │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ ├── index.html │ └── manifest.json └── 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 ├── dart_tutorials ├── README.md ├── exchange │ ├── .gitignore │ ├── CHANGELOG.md │ ├── README.md │ ├── analysis_options.yaml │ ├── bin │ │ └── exchange.dart │ ├── pubspec.lock │ └── pubspec.yaml ├── lesson1.dart ├── lesson10-11.dart ├── lesson12.dart ├── lesson13.dart ├── lesson14.dart ├── lesson15.dart ├── lesson16.dart ├── lesson17.dart ├── lesson18.dart ├── lesson19.dart ├── lesson2.dart ├── lesson20.dart ├── lesson21.dart ├── lesson22.dart ├── lesson23.dart ├── lesson24.dart ├── lesson25.dart ├── lesson26.dart ├── lesson27.dart ├── lesson28.dart ├── lesson29-30.dart ├── lesson3.dart ├── lesson31.dart ├── lesson32.dart ├── lesson33.dart ├── lesson34.dart ├── lesson35.dart ├── lesson36.dart ├── lesson37.dart ├── lesson38.dart ├── lesson39.dart ├── lesson4.dart ├── lesson40.dart ├── lesson41.dart ├── lesson5.dart ├── lesson6.dart ├── lesson7.dart ├── lesson8.dart └── lesson9.dart └── localization ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── frezycode │ │ │ │ └── localization │ │ │ │ └── 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 ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── 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 │ ├── Info.plist │ └── Runner-Bridging-Header.h └── RunnerTests │ └── RunnerTests.swift ├── lib ├── generated │ ├── intl │ │ ├── messages_all.dart │ │ ├── messages_en.dart │ │ └── messages_ru.dart │ └── l10n.dart ├── l10n │ ├── intl_en.arb │ └── intl_ru.arb └── main.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 ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.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 │ ├── Info.plist │ ├── MainFlutterWindow.swift │ └── Release.entitlements └── RunnerTests │ └── RunnerTests.swift ├── pubspec.lock ├── pubspec.yaml ├── test └── widget_test.dart ├── web ├── favicon.png ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── index.html └── manifest.json └── 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 /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | riverpod/ -------------------------------------------------------------------------------- /bluetooth/esp/debug.cfg: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Example OpenOCD configuration file for ESP32-S3 connected via builtin USB-JTAG adapter. 4 | # 5 | # For example, OpenOCD can be started for ESP32-S3 debugging on 6 | # 7 | # openocd -f board/esp32s3-builtin.cfg 8 | # 9 | 10 | # Source the JTAG interface configuration file 11 | source [find interface/esp_usb_jtag.cfg] 12 | # Source the ESP32-S3 configuration file 13 | source [find target/esp32s3.cfg] 14 | 15 | -------------------------------------------------------------------------------- /bluetooth/esp/debug_custom.json: -------------------------------------------------------------------------------- 1 | { 2 | "name":"Arduino on ESP32-S3", 3 | "toolchainPrefix":"xtensa-esp32s3-elf", 4 | "svdFile":"debug.svd", 5 | "request":"attach", 6 | "overrideAttachCommands":[ 7 | "set remote hardware-watchpoint-limit 2", 8 | "monitor reset halt", 9 | "monitor gdb_sync", 10 | "thb setup", 11 | "c" 12 | ], 13 | "overrideRestartCommands":[ 14 | "monitor reset halt", 15 | "monitor gdb_sync" 16 | ] 17 | } -------------------------------------------------------------------------------- /bluetooth/esp/esp32s3_ble_for_video.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/esp/esp32s3_ble_for_video.zip -------------------------------------------------------------------------------- /bluetooth/flutter/.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 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Symbolication related 35 | app.*.symbols 36 | 37 | # Obfuscation related 38 | app.*.map.json 39 | 40 | # Android Studio will place build artifacts here 41 | /android/app/debug 42 | /android/app/profile 43 | /android/app/release 44 | -------------------------------------------------------------------------------- /bluetooth/flutter/README.md: -------------------------------------------------------------------------------- 1 | # esp_ble_flutter 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/kotlin/com/frezycode/esp_ble_flutter/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.frezycode.esp_ble_flutter 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() 6 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false 23 | } 24 | 25 | include ":app" 26 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - flutter_blue_plus (0.0.1): 4 | - Flutter 5 | 6 | DEPENDENCIES: 7 | - Flutter (from `Flutter`) 8 | - flutter_blue_plus (from `.symlinks/plugins/flutter_blue_plus/ios`) 9 | 10 | EXTERNAL SOURCES: 11 | Flutter: 12 | :path: Flutter 13 | flutter_blue_plus: 14 | :path: ".symlinks/plugins/flutter_blue_plus/ios" 15 | 16 | SPEC CHECKSUMS: 17 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 18 | flutter_blue_plus: 4837da7d00cf5d441fdd6635b3a57f936778ea96 19 | 20 | PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 21 | 22 | COCOAPODS: 1.15.2 23 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /bluetooth/flutter/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. -------------------------------------------------------------------------------- /bluetooth/flutter/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/device/bloc/device_event.dart: -------------------------------------------------------------------------------- 1 | part of 'device_bloc.dart'; 2 | 3 | sealed class DeviceEvent extends Equatable {} 4 | 5 | final class UpdateDeviceCharacteristics extends DeviceEvent { 6 | UpdateDeviceCharacteristics({ 7 | this.red, 8 | this.green, 9 | this.blue, 10 | }); 11 | 12 | final int? red; 13 | final int? green; 14 | final int? blue; 15 | 16 | @override 17 | List get props => [red, green, blue]; 18 | } 19 | 20 | final class _SetInitialDeviceCharacteristics 21 | extends UpdateDeviceCharacteristics { 22 | _SetInitialDeviceCharacteristics({ 23 | super.red, 24 | super.green, 25 | super.blue, 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/device/bloc/device_state.dart: -------------------------------------------------------------------------------- 1 | part of 'device_bloc.dart'; 2 | 3 | sealed class DeviceState extends Equatable {} 4 | 5 | final class DeviceInitial extends DeviceState { 6 | @override 7 | List get props => []; 8 | } 9 | 10 | final class DeviceLoading extends DeviceState { 11 | @override 12 | List get props => []; 13 | } 14 | 15 | final class DeviceLoaded extends DeviceState { 16 | DeviceLoaded({ 17 | this.red = 0, 18 | this.green = 0, 19 | this.blue = 0, 20 | }); 21 | 22 | final int red; 23 | final int green; 24 | final int blue; 25 | 26 | @override 27 | List get props => [red, green, blue]; 28 | 29 | DeviceLoaded copyWith({ 30 | int? red, 31 | int? green, 32 | int? blue, 33 | }) { 34 | return DeviceLoaded( 35 | red: red ?? this.red, 36 | green: green ?? this.green, 37 | blue: blue ?? this.blue, 38 | ); 39 | } 40 | } 41 | 42 | final class DeviceFailure extends DeviceState { 43 | DeviceFailure(this.exception); 44 | 45 | final Object? exception; 46 | 47 | @override 48 | List get props => [exception]; 49 | } 50 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/device/device.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/device/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'device_screen.dart'; 2 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/device/widget/color_box.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ColorBox extends StatelessWidget { 4 | const ColorBox({ 5 | super.key, 6 | required this.color, 7 | }); 8 | 9 | final Color color; 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Container( 14 | height: 25, 15 | width: 25, 16 | decoration: BoxDecoration(color: color), 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/device/widget/color_slider.dart: -------------------------------------------------------------------------------- 1 | import 'package:esp_ble_flutter/features/device/widget/widget.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class ColorSlider extends StatelessWidget { 5 | const ColorSlider({ 6 | super.key, 7 | required this.color, 8 | required this.value, 9 | required this.onChanged, 10 | }); 11 | 12 | final Color color; 13 | final double value; 14 | final Function(double value) onChanged; 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return Row( 19 | mainAxisAlignment: MainAxisAlignment.center, 20 | children: [ 21 | ColorBox(color: color), 22 | Slider( 23 | value: value, 24 | max: 255, 25 | min: 0, 26 | divisions: 255, 27 | onChanged: onChanged, 28 | ), 29 | ], 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/device/widget/widget.dart: -------------------------------------------------------------------------------- 1 | export 'color_box.dart'; 2 | export 'color_slider.dart'; 3 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/devices/bloc/devices_event.dart: -------------------------------------------------------------------------------- 1 | part of 'devices_bloc.dart'; 2 | 3 | sealed class DevicesEvent extends Equatable {} 4 | 5 | final class LoadDevices extends DevicesEvent { 6 | @override 7 | List get props => throw UnimplementedError(); 8 | } 9 | 10 | final class _SetLoadedDevices extends DevicesEvent { 11 | _SetLoadedDevices(this.devices); 12 | final List devices; 13 | 14 | @override 15 | List get props => [devices]; 16 | } 17 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/devices/bloc/devices_state.dart: -------------------------------------------------------------------------------- 1 | part of 'devices_bloc.dart'; 2 | 3 | sealed class DevicesState extends Equatable {} 4 | 5 | final class DevicesInitial extends DevicesState { 6 | @override 7 | List get props => []; 8 | } 9 | 10 | final class DevicesLoading extends DevicesState { 11 | @override 12 | List get props => []; 13 | } 14 | 15 | final class DevicesLoaded extends DevicesState { 16 | DevicesLoaded({required this.devices}); 17 | 18 | final List devices; 19 | 20 | @override 21 | List get props => [devices]; 22 | } 23 | 24 | final class DevicesFailure extends DevicesState { 25 | DevicesFailure({this.exception}); 26 | 27 | final Object? exception; 28 | 29 | @override 30 | List get props => [exception]; 31 | } 32 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/devices/devices.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/features/devices/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'devices_list_screen.dart'; 2 | -------------------------------------------------------------------------------- /bluetooth/flutter/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:esp_ble_flutter/features/devices/devices.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_blue_plus/flutter_blue_plus.dart'; 4 | 5 | void main() { 6 | FlutterBluePlus.setLogLevel(LogLevel.verbose, color: false); 7 | runApp(const MyApp()); 8 | } 9 | 10 | class MyApp extends StatelessWidget { 11 | const MyApp({super.key}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return MaterialApp( 16 | title: 'Flutter Demo', 17 | theme: ThemeData( 18 | colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), 19 | useMaterial3: true, 20 | ), 21 | home: const DevicesListScreen(), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /bluetooth/flutter/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | 10 | void fl_register_plugins(FlPluginRegistry* registry) { 11 | } 12 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | ) 7 | 8 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 9 | ) 10 | 11 | set(PLUGIN_BUNDLED_LIBRARIES) 12 | 13 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 14 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 15 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 16 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 18 | endforeach(plugin) 19 | 20 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 21 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 22 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 23 | endforeach(ffi_plugin) 24 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import flutter_blue_plus 9 | 10 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 11 | FlutterBluePlusPlugin.register(with: registry.registrar(forPlugin: "FlutterBluePlusPlugin")) 12 | } 13 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /bluetooth/flutter/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 = esp_ble_flutter 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.frezycode.espBleFlutter 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.frezycode. All rights reserved. 15 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | 12 | 13 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:esp_ble_flutter/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /bluetooth/flutter/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/web/favicon.png -------------------------------------------------------------------------------- /bluetooth/flutter/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/web/icons/Icon-192.png -------------------------------------------------------------------------------- /bluetooth/flutter/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/web/icons/Icon-512.png -------------------------------------------------------------------------------- /bluetooth/flutter/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /bluetooth/flutter/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /bluetooth/flutter/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | esp_ble_flutter 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /bluetooth/flutter/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "esp_ble_flutter", 3 | "short_name": "esp_ble_flutter", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 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/Icon-maskable-192.png", 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 | } 36 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | 10 | void RegisterPlugins(flutter::PluginRegistry* registry) { 11 | } 12 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | ) 7 | 8 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 9 | ) 10 | 11 | set(PLUGIN_BUNDLED_LIBRARIES) 12 | 13 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 14 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 15 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 16 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 18 | endforeach(plugin) 19 | 20 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 21 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 22 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 23 | endforeach(ffi_plugin) 24 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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"esp_ble_flutter", 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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/bluetooth/flutter/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /bluetooth/flutter/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 | -------------------------------------------------------------------------------- /crypto_coins_list/.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 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/kotlin/com/cryptoguys/crypto_coins_list/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.cryptoguys.crypto_coins_list 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /crypto_coins_list/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.6.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.1.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /crypto_coins_list/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /crypto_coins_list/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.4-all.zip 6 | -------------------------------------------------------------------------------- /crypto_coins_list/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '11.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - path_provider_foundation (0.0.1): 4 | - Flutter 5 | - FlutterMacOS 6 | - share_plus (0.0.1): 7 | - Flutter 8 | 9 | DEPENDENCIES: 10 | - Flutter (from `Flutter`) 11 | - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) 12 | - share_plus (from `.symlinks/plugins/share_plus/ios`) 13 | 14 | EXTERNAL SOURCES: 15 | Flutter: 16 | :path: Flutter 17 | path_provider_foundation: 18 | :path: ".symlinks/plugins/path_provider_foundation/ios" 19 | share_plus: 20 | :path: ".symlinks/plugins/share_plus/ios" 21 | 22 | SPEC CHECKSUMS: 23 | Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 24 | path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9 25 | share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 26 | 27 | PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 28 | 29 | COCOAPODS: 1.12.0 30 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /crypto_coins_list/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. -------------------------------------------------------------------------------- /crypto_coins_list/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/crypto_coins_list_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:crypto_coins_list/router/router.dart'; 3 | import 'package:crypto_coins_list/theme/theme.dart'; 4 | import 'package:get_it/get_it.dart'; 5 | import 'package:talker_flutter/talker_flutter.dart'; 6 | 7 | class CryptoCurrenciesListApp extends StatefulWidget { 8 | const CryptoCurrenciesListApp({super.key}); 9 | 10 | @override 11 | State createState() => 12 | _CryptoCurrenciesListAppState(); 13 | } 14 | 15 | class _CryptoCurrenciesListAppState extends State { 16 | final _appRouter = AppRouter(); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return MaterialApp.router( 21 | title: 'CryptoCurrenciesList', 22 | theme: darkTheme, 23 | routerConfig: _appRouter.config( 24 | navigatorObservers: () => [ 25 | TalkerRouteObserver(GetIt.I()), 26 | ], 27 | ), 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_coin/bloc/crypto_coin_details/crypto_coin_details_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:crypto_coins_list/repositories/crypto_coins/crypto_coins.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:equatable/equatable.dart'; 4 | import 'package:get_it/get_it.dart'; 5 | import 'package:talker_flutter/talker_flutter.dart'; 6 | 7 | part 'crypto_coin_details_event.dart'; 8 | part 'crypto_coin_details_state.dart'; 9 | 10 | class CryptoCoinDetailsBloc 11 | extends Bloc { 12 | CryptoCoinDetailsBloc(this.coinsRepository) 13 | : super(const CryptoCoinDetailsState()) { 14 | on(_load); 15 | } 16 | 17 | final AbstractCoinsRepository coinsRepository; 18 | 19 | Future _load( 20 | LoadCryptoCoinDetails event, 21 | Emitter emit, 22 | ) async { 23 | try { 24 | if (state is! CryptoCoinDetailsLoaded) { 25 | emit(const CryptoCoinDetailsLoading()); 26 | } 27 | 28 | final coinDetails = 29 | await coinsRepository.getCoinDetails(event.currencyCode); 30 | 31 | emit(CryptoCoinDetailsLoaded(coinDetails)); 32 | } catch (e, st) { 33 | emit(CryptoCoinDetailsLoadingFailure(e)); 34 | GetIt.I().handle(e, st); 35 | } 36 | } 37 | 38 | @override 39 | void onError(Object error, StackTrace stackTrace) { 40 | super.onError(error, stackTrace); 41 | GetIt.I().handle(error, stackTrace); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_coin/bloc/crypto_coin_details/crypto_coin_details_event.dart: -------------------------------------------------------------------------------- 1 | part of 'crypto_coin_details_bloc.dart'; 2 | 3 | abstract class CryptoCoinDetailsEvent extends Equatable { 4 | const CryptoCoinDetailsEvent(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | 10 | class LoadCryptoCoinDetails extends CryptoCoinDetailsEvent { 11 | const LoadCryptoCoinDetails({ 12 | required this.currencyCode, 13 | }); 14 | 15 | final String currencyCode; 16 | 17 | @override 18 | List get props => super.props..add(currencyCode); 19 | } 20 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_coin/bloc/crypto_coin_details/crypto_coin_details_state.dart: -------------------------------------------------------------------------------- 1 | part of 'crypto_coin_details_bloc.dart'; 2 | 3 | class CryptoCoinDetailsState extends Equatable { 4 | const CryptoCoinDetailsState(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | 10 | class CryptoCoinDetailsLoading extends CryptoCoinDetailsState { 11 | const CryptoCoinDetailsLoading(); 12 | } 13 | 14 | class CryptoCoinDetailsLoaded extends CryptoCoinDetailsState { 15 | const CryptoCoinDetailsLoaded(this.coin); 16 | 17 | final CryptoCoin coin; 18 | 19 | @override 20 | List get props => [coin]; 21 | } 22 | 23 | class CryptoCoinDetailsLoadingFailure extends CryptoCoinDetailsState { 24 | const CryptoCoinDetailsLoadingFailure(this.exception); 25 | 26 | final Object exception; 27 | 28 | @override 29 | List get props => super.props..add(exception); 30 | } 31 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_coin/crypto_coin.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_coin/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'crypto_coin_screen.dart'; 2 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_coin/widgets/base_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BaseCard extends StatelessWidget { 4 | const BaseCard({super.key, required this.child}); 5 | 6 | final Widget child; 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return Container( 11 | margin: const EdgeInsets.symmetric( 12 | horizontal: 16, 13 | vertical: 8, 14 | ), 15 | width: double.infinity, 16 | padding: const EdgeInsets.all(16), 17 | decoration: BoxDecoration( 18 | borderRadius: BorderRadius.circular(16), 19 | color: const Color.fromARGB(255, 21, 21, 21), 20 | ), 21 | child: child, 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_coin/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'base_card.dart'; 2 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_list/bloc/crypto_list_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:crypto_coins_list/repositories/crypto_coins/crypto_coins.dart'; 4 | import 'package:equatable/equatable.dart'; 5 | import 'package:flutter_bloc/flutter_bloc.dart'; 6 | import 'package:get_it/get_it.dart'; 7 | import 'package:talker_flutter/talker_flutter.dart'; 8 | 9 | part 'crypto_list_event.dart'; 10 | part 'crypto_list_state.dart'; 11 | 12 | class CryptoListBloc extends Bloc { 13 | CryptoListBloc(this.coinsRepository) : super(CryptoListInitial()) { 14 | on(_load); 15 | } 16 | 17 | final AbstractCoinsRepository coinsRepository; 18 | 19 | Future _load( 20 | LoadCryptoList event, 21 | Emitter emit, 22 | ) async { 23 | try { 24 | if (state is! CryptoListLoaded) { 25 | emit(CryptoListLoading()); 26 | } 27 | final coinsList = await coinsRepository.getCoinsList(); 28 | emit(CryptoListLoaded(coinsList: coinsList)); 29 | } catch (e, st) { 30 | emit(CryptoListLoadingFailure(exception: e)); 31 | GetIt.I().handle(e, st); 32 | } finally { 33 | event.completer?.complete(); 34 | } 35 | } 36 | 37 | @override 38 | void onError(Object error, StackTrace stackTrace) { 39 | super.onError(error, stackTrace); 40 | GetIt.I().handle(error, stackTrace); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_list/bloc/crypto_list_event.dart: -------------------------------------------------------------------------------- 1 | part of 'crypto_list_bloc.dart'; 2 | 3 | abstract class CryptoListEvent extends Equatable {} 4 | 5 | class LoadCryptoList extends CryptoListEvent { 6 | LoadCryptoList({ 7 | this.completer, 8 | }); 9 | 10 | final Completer? completer; 11 | 12 | @override 13 | List get props => [completer]; 14 | } 15 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_list/bloc/crypto_list_state.dart: -------------------------------------------------------------------------------- 1 | part of 'crypto_list_bloc.dart'; 2 | 3 | abstract class CryptoListState extends Equatable {} 4 | 5 | class CryptoListInitial extends CryptoListState { 6 | @override 7 | List get props => []; 8 | } 9 | 10 | class CryptoListLoading extends CryptoListState { 11 | @override 12 | List get props => []; 13 | } 14 | 15 | class CryptoListLoaded extends CryptoListState { 16 | CryptoListLoaded({ 17 | required this.coinsList, 18 | }); 19 | 20 | final List coinsList; 21 | 22 | @override 23 | List get props => [coinsList]; 24 | } 25 | 26 | class CryptoListLoadingFailure extends CryptoListState { 27 | CryptoListLoadingFailure({ 28 | this.exception, 29 | }); 30 | 31 | final Object? exception; 32 | 33 | @override 34 | List get props => [exception]; 35 | } 36 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_list/crypto_list.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_list/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'crypto_list_screen.dart'; 2 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_list/widgets/crypto_coin_tile.dart: -------------------------------------------------------------------------------- 1 | import 'package:auto_route/auto_route.dart'; 2 | import 'package:crypto_coins_list/repositories/crypto_coins/models/crypto_coin.dart'; 3 | import 'package:crypto_coins_list/router/router.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class CryotoCoinTile extends StatelessWidget { 7 | const CryotoCoinTile({ 8 | Key? key, 9 | required this.coin, 10 | }) : super(key: key); 11 | 12 | final CryptoCoin coin; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | final theme = Theme.of(context); 17 | final coinDetails = coin.details; 18 | return ListTile( 19 | leading: Image.network(coinDetails.fullImageUrl), 20 | title: Text( 21 | coin.name, 22 | style: theme.textTheme.bodyMedium, 23 | ), 24 | subtitle: Text( 25 | '${coinDetails.priceInUSD} \$', 26 | style: theme.textTheme.labelSmall, 27 | ), 28 | trailing: const Icon(Icons.arrow_forward_ios), 29 | onTap: () { 30 | AutoRouter.of(context).push(CryptoCoinRoute(coin: coin)); 31 | // Navigator.of(context).pushNamed( 32 | // '/coin', 33 | // arguments: coin, 34 | // ); 35 | }, 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/features/crypto_list/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'crypto_coin_tile.dart'; 2 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/repositories/crypto_coins/abstarct_coins_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:crypto_coins_list/repositories/crypto_coins/models/crypto_coin.dart'; 2 | 3 | abstract class AbstractCoinsRepository { 4 | Future> getCoinsList(); 5 | Future getCoinDetails(String currencyCode); 6 | } 7 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/repositories/crypto_coins/crypto_coins.dart: -------------------------------------------------------------------------------- 1 | export 'abstarct_coins_repository.dart'; 2 | export 'crypto_coins_rpository.dart'; 3 | export 'models/models.dart'; 4 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/repositories/crypto_coins/models/crypto_coin.dart: -------------------------------------------------------------------------------- 1 | import 'package:crypto_coins_list/repositories/crypto_coins/models/crypto_coin_details.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | import 'package:hive_flutter/hive_flutter.dart'; 4 | 5 | part 'crypto_coin.g.dart'; 6 | 7 | @HiveType(typeId: 2) 8 | class CryptoCoin extends Equatable { 9 | const CryptoCoin({ 10 | required this.name, 11 | required this.details, 12 | }); 13 | 14 | @HiveField(0) 15 | final String name; 16 | 17 | @HiveField(1) 18 | final CryptoCoinDetail details; 19 | 20 | @override 21 | List get props => [name, details]; 22 | } 23 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/repositories/crypto_coins/models/crypto_coin.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'crypto_coin.dart'; 4 | 5 | // ************************************************************************** 6 | // TypeAdapterGenerator 7 | // ************************************************************************** 8 | 9 | class CryptoCoinAdapter extends TypeAdapter { 10 | @override 11 | final int typeId = 2; 12 | 13 | @override 14 | CryptoCoin read(BinaryReader reader) { 15 | final numOfFields = reader.readByte(); 16 | final fields = { 17 | for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), 18 | }; 19 | return CryptoCoin( 20 | name: fields[0] as String, 21 | details: fields[1] as CryptoCoinDetail, 22 | ); 23 | } 24 | 25 | @override 26 | void write(BinaryWriter writer, CryptoCoin obj) { 27 | writer 28 | ..writeByte(2) 29 | ..writeByte(0) 30 | ..write(obj.name) 31 | ..writeByte(1) 32 | ..write(obj.details); 33 | } 34 | 35 | @override 36 | int get hashCode => typeId.hashCode; 37 | 38 | @override 39 | bool operator ==(Object other) => 40 | identical(this, other) || 41 | other is CryptoCoinAdapter && 42 | runtimeType == other.runtimeType && 43 | typeId == other.typeId; 44 | } 45 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/repositories/crypto_coins/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'crypto_coin.dart'; 2 | export 'crypto_coin_details.dart'; 3 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/router/router.dart: -------------------------------------------------------------------------------- 1 | import 'package:auto_route/auto_route.dart'; 2 | import 'package:crypto_coins_list/features/crypto_coin/crypto_coin.dart'; 3 | import 'package:crypto_coins_list/features/crypto_list/crypto_list.dart'; 4 | import 'package:crypto_coins_list/repositories/crypto_coins/crypto_coins.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | part 'router.gr.dart'; 8 | 9 | @AutoRouterConfig() 10 | class AppRouter extends _$AppRouter { 11 | @override 12 | List get routes => [ 13 | AutoRoute(page: CryptoListRoute.page, path: '/'), 14 | AutoRoute(page: CryptoCoinRoute.page), 15 | ]; 16 | } 17 | 18 | // final routes = { 19 | // '/': (context) => const CryptoListScreen(), 20 | // '/coin': (context) => const CryptoCoinScreen(), 21 | // }; 22 | -------------------------------------------------------------------------------- /crypto_coins_list/lib/theme/theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | final darkTheme = ThemeData( 4 | scaffoldBackgroundColor: const Color.fromARGB(255, 31, 31, 31), 5 | primarySwatch: Colors.yellow, 6 | dividerColor: Colors.white24, 7 | appBarTheme: const AppBarTheme( 8 | iconTheme: IconThemeData(color: Colors.white), 9 | elevation: 0, 10 | backgroundColor: Color.fromARGB(255, 31, 31, 31), 11 | titleTextStyle: TextStyle( 12 | color: Colors.white, 13 | fontSize: 20, 14 | fontWeight: FontWeight.w700, 15 | ), 16 | ), 17 | listTileTheme: const ListTileThemeData(iconColor: Colors.white), 18 | textTheme: TextTheme( 19 | bodyMedium: const TextStyle( 20 | color: Colors.white, 21 | fontWeight: FontWeight.w500, 22 | fontSize: 20, 23 | ), 24 | labelSmall: TextStyle( 25 | color: Colors.white.withOpacity(0.6), 26 | fontWeight: FontWeight.w700, 27 | fontSize: 14, 28 | ), 29 | headlineMedium: const TextStyle( 30 | color: Colors.white, 31 | fontWeight: FontWeight.w500, 32 | fontSize: 24, 33 | ), 34 | ), 35 | ); 36 | -------------------------------------------------------------------------------- /crypto_coins_list/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /crypto_coins_list/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 share_plus 10 | 11 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 12 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 13 | SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) 14 | } 15 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | 33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) 34 | end 35 | 36 | post_install do |installer| 37 | installer.pods_project.targets.each do |target| 38 | flutter_additional_macos_build_settings(target) 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FlutterMacOS (1.0.0) 3 | - path_provider_foundation (0.0.1): 4 | - Flutter 5 | - FlutterMacOS 6 | - share_plus (0.0.1): 7 | - FlutterMacOS 8 | 9 | DEPENDENCIES: 10 | - FlutterMacOS (from `Flutter/ephemeral`) 11 | - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos`) 12 | - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) 13 | 14 | EXTERNAL SOURCES: 15 | FlutterMacOS: 16 | :path: Flutter/ephemeral 17 | path_provider_foundation: 18 | :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/macos 19 | share_plus: 20 | :path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos 21 | 22 | SPEC CHECKSUMS: 23 | FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 24 | path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9 25 | share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7 26 | 27 | PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 28 | 29 | COCOAPODS: 1.12.0 30 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /crypto_coins_list/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 = crypto_coins_list 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.cryptoguys.cryptoCoinsList 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2022 com.cryptoguys. All rights reserved. 15 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | 12 | 13 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController.init() 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 | -------------------------------------------------------------------------------- /crypto_coins_list/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /crypto_coins_list/repo/assets/crypto_app1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/repo/assets/crypto_app1.png -------------------------------------------------------------------------------- /crypto_coins_list/repo/assets/crypto_app2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/repo/assets/crypto_app2.png -------------------------------------------------------------------------------- /crypto_coins_list/repo/assets/crypto_app3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/repo/assets/crypto_app3.png -------------------------------------------------------------------------------- /crypto_coins_list/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/web/favicon.png -------------------------------------------------------------------------------- /crypto_coins_list/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/web/icons/Icon-192.png -------------------------------------------------------------------------------- /crypto_coins_list/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/web/icons/Icon-512.png -------------------------------------------------------------------------------- /crypto_coins_list/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /crypto_coins_list/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /crypto_coins_list/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "crypto_coins_list", 3 | "short_name": "crypto_coins_list", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 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/Icon-maskable-192.png", 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 | } 36 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | #include 11 | 12 | void RegisterPlugins(flutter::PluginRegistry* registry) { 13 | SharePlusWindowsPluginCApiRegisterWithRegistrar( 14 | registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); 15 | UrlLauncherWindowsRegisterWithRegistrar( 16 | registry->GetRegistrarForPlugin("UrlLauncherWindows")); 17 | } 18 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | share_plus 7 | url_launcher_windows 8 | ) 9 | 10 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 11 | ) 12 | 13 | set(PLUGIN_BUNDLED_LIBRARIES) 14 | 15 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 16 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 17 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 18 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 19 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 20 | endforeach(plugin) 21 | 22 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 23 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 24 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 25 | endforeach(ffi_plugin) 26 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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.CreateAndShow(L"crypto_coins_list", 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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/crypto_coins_list/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /crypto_coins_list/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 | -------------------------------------------------------------------------------- /dart_tutorials/exchange/.gitignore: -------------------------------------------------------------------------------- 1 | # https://dart.dev/guides/libraries/private-files 2 | # Created by `dart pub` 3 | .dart_tool/ 4 | -------------------------------------------------------------------------------- /dart_tutorials/exchange/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.0 2 | 3 | - Initial version. 4 | -------------------------------------------------------------------------------- /dart_tutorials/exchange/README.md: -------------------------------------------------------------------------------- 1 | A sample command-line application with an entrypoint in `bin/`, library code 2 | in `lib/`, and example unit test in `test/`. 3 | -------------------------------------------------------------------------------- /dart_tutorials/exchange/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the static analysis results for your project (errors, 2 | # warnings, and lints). 3 | # 4 | # This enables the 'recommended' set of lints from `package:lints`. 5 | # This set helps identify many issues that may lead to problems when running 6 | # or consuming Dart code, and enforces writing Dart using a single, idiomatic 7 | # style and format. 8 | # 9 | # If you want a smaller set of lints you can change this to specify 10 | # 'package:lints/core.yaml'. These are just the most critical lints 11 | # (the recommended set includes the core lints). 12 | # The core lints are also what is used by pub.dev for scoring packages. 13 | 14 | include: package:lints/recommended.yaml 15 | 16 | # Uncomment the following section to specify additional rules. 17 | 18 | # linter: 19 | # rules: 20 | # - camel_case_types 21 | 22 | # analyzer: 23 | # exclude: 24 | # - path/to/excluded/files/** 25 | 26 | # For more information about the core and recommended set of lints, see 27 | # https://dart.dev/go/core-lints 28 | 29 | # For additional information about configuring this file, see 30 | # https://dart.dev/guides/language/analysis-options 31 | -------------------------------------------------------------------------------- /dart_tutorials/exchange/bin/exchange.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:http/http.dart' as http; 4 | 5 | Future main(List arguments) async { 6 | if (arguments.length != 3) { 7 | print('Неверный формат вызова'); 8 | print('Формат: exchange EUR GBP 1000'); 9 | return; 10 | } 11 | final fromCurrency = arguments[0]; 12 | final toCurrency = arguments[1]; 13 | final strAmount = arguments[2]; 14 | if (double.tryParse(strAmount) == null) { 15 | print('Последним аргументом должна быть сумма'); 16 | return; 17 | } 18 | final amount = double.parse(strAmount); 19 | 20 | print('Начал подсчет: $fromCurrency -> $toCurrency сумма: $amount'); 21 | 22 | final uri = Uri( 23 | scheme: 'https', 24 | host: 'api.exchangerate.host', 25 | path: 'convert', 26 | queryParameters: { 27 | 'from': fromCurrency, 28 | 'to': toCurrency, 29 | 'amount': amount.toString(), 30 | 'access_key': 'f80b67a9cebb4b434c72dcafa8520235', 31 | }, 32 | ); 33 | 34 | final response = await http.get(uri); 35 | final stringBody = response.body; 36 | final data = JsonDecoder().convert(stringBody) as Map; 37 | print(data['result']); 38 | } 39 | -------------------------------------------------------------------------------- /dart_tutorials/exchange/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: exchange 2 | description: A sample command-line application. 3 | version: 1.0.0 4 | # repository: https://github.com/my_org/my_repo 5 | 6 | environment: 7 | sdk: ^3.5.4 8 | 9 | # Add regular dependencies here. 10 | dependencies: 11 | http: ^1.2.2 12 | # path: ^1.8.0 13 | 14 | dev_dependencies: 15 | lints: ^4.0.0 16 | test: ^1.24.0 17 | -------------------------------------------------------------------------------- /dart_tutorials/lesson1.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | print("Hello from dart!"); 3 | } 4 | -------------------------------------------------------------------------------- /dart_tutorials/lesson10-11.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final students = ['Вася', 'Лера', 'Маша']; 3 | 4 | print(students); 5 | 6 | for (final student in students) { 7 | print(student); 8 | } 9 | 10 | for (var i = 0; i < students.length; i++) { 11 | students[i] = students[i] + ' ' + i.toString(); 12 | } 13 | print(students); 14 | 15 | while (students.isNotEmpty) { 16 | students.removeLast(); 17 | print('#########'); 18 | } 19 | print(students); 20 | 21 | var a = 980; 22 | do { 23 | a = a + 1; 24 | print(a); 25 | } while (a < 1000); 26 | } 27 | -------------------------------------------------------------------------------- /dart_tutorials/lesson12.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final result = pow(5, 3); 3 | print(formatResult(result)); 4 | 5 | final result1 = pow(7, 3); 6 | print(formatResult(result1)); 7 | 8 | final result2 = pow(8, 2); 9 | print(formatResult(result2)); 10 | } 11 | 12 | int pow(int number, int n) { 13 | for (var i = 1; i < n; i++) { 14 | number = square(number); 15 | } 16 | return number; 17 | } 18 | 19 | int square(int number) { 20 | return number * number; 21 | } 22 | 23 | String formatResult(int number) { 24 | return 'Результат операции: $number'; 25 | } 26 | -------------------------------------------------------------------------------- /dart_tutorials/lesson13.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final sum = (num a, num b) => a + b; 3 | final diff = (num a, num b) => a - b; 4 | final divide = (num a, num b) => a / b; 5 | final multply = (num a, num b) => a * b; 6 | final pov = (num a, num b) { 7 | final number = a; 8 | for (var i = 1; i < b; i++) { 9 | a = a * number; 10 | } 11 | return a; 12 | }; 13 | 14 | print(calculate(1, 2, sum)); 15 | print(calculate(1, 2, diff)); 16 | print(calculate(1, 2, divide)); 17 | print(calculate(1, 2, multply)); 18 | print(calculate(2, 8, pov)); 19 | } 20 | 21 | num calculate( 22 | num a, 23 | num b, 24 | num Function(num a, num b) action, 25 | ) => 26 | action(a, b); 27 | -------------------------------------------------------------------------------- /dart_tutorials/lesson14.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | print(greaterOrLess(2, 2)); 3 | } 4 | 5 | String greaterOrLess(int a, int b) { 6 | if (a == b) return 'Числа равны'; 7 | return a > b ? 'Больше' : 'Меньше'; 8 | } 9 | -------------------------------------------------------------------------------- /dart_tutorials/lesson15.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | try { 3 | print(divide(1, 0)); 4 | print('Все хорошо'); 5 | } on Exception catch (e) { 6 | print('Произшла ошибка\n' + e.toString()); 7 | } on Error catch (e) { 8 | print('ААААААААААА!\n' + e.toString()); 9 | } finally { 10 | print('Конец работы функции'); 11 | } 12 | } 13 | 14 | num divide(num a, num b) { 15 | if (b == 0) { 16 | throw Exception('Делить на ноль нельзя'); 17 | } 18 | return a / b; 19 | } 20 | -------------------------------------------------------------------------------- /dart_tutorials/lesson16.dart: -------------------------------------------------------------------------------- 1 | enum Pet { 2 | dog('Собака'), 3 | cat('Кошка'), 4 | bird('Птичка'); 5 | 6 | const Pet(this.localization); 7 | final String localization; 8 | 9 | void printPetName() { 10 | print(this.localization); 11 | } 12 | } 13 | 14 | void main() { 15 | final vasyaPet = Pet.dog; 16 | final stasPet = Pet.cat; 17 | 18 | vasyaPet.printPetName(); 19 | stasPet.printPetName(); 20 | } 21 | -------------------------------------------------------------------------------- /dart_tutorials/lesson17.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | var sanya = Human(name: 'Саша', age: 23, height: 190); 3 | 4 | print(sanya); 5 | print(sanya.name); 6 | print(sanya.height); 7 | 8 | sanya.age = 24; 9 | print(sanya.age); 10 | } 11 | 12 | class Human { 13 | Human({ 14 | required this.name, 15 | required this.age, 16 | required this.height, 17 | }); 18 | 19 | final String name; 20 | int age; 21 | double height; 22 | } 23 | -------------------------------------------------------------------------------- /dart_tutorials/lesson18.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | var sanya = Human(name: 'Саша', age: 23, height: 190); 3 | var vova = Human(name: 'Вова', age: 20, height: 170); 4 | 5 | print(sanya.isHighter(vova)); 6 | } 7 | 8 | class Human { 9 | Human({ 10 | required this.name, 11 | required this.age, 12 | required this.height, 13 | }); 14 | 15 | final String name; 16 | int age; 17 | double height; 18 | 19 | void grewUp(int years) { 20 | age += years; 21 | } 22 | 23 | bool isHighter(Human otherHuman) { 24 | return this.height > otherHuman.height; 25 | } 26 | 27 | @override 28 | String toString() { 29 | return 'Человек Имя: $name Возраст: $age Рост: $height'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /dart_tutorials/lesson2.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | String title = 'Курс Dart видео 2'; 3 | title = "С нуля до профи Dart Переменные #2"; 4 | 5 | int likes = 99999; 6 | likes = 100000; 7 | 8 | double raiting = 4.5; 9 | raiting = 4.0; 10 | 11 | bool great = true; 12 | great = false; 13 | 14 | print(title); 15 | print(likes); 16 | print(raiting); 17 | print(great); 18 | } 19 | -------------------------------------------------------------------------------- /dart_tutorials/lesson20.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | var sanya = Human(name: 'Саша', age: 23, height: 190); 3 | print(sanya.age); 4 | sanya.grewUp(1); 5 | print(sanya.age); 6 | print(sanya.nameAndAge); 7 | } 8 | 9 | class Human { 10 | Human({ 11 | required this.name, 12 | required int age, 13 | required this.height, 14 | }) : _age = age; 15 | 16 | int get age => _age; 17 | String get nameAndAge => '$name:$age'; 18 | 19 | final String name; 20 | int _age; 21 | double height; 22 | 23 | void grewUp(int years) { 24 | _age += years; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /dart_tutorials/lesson21.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | var sanya = Human(name: 'Саша', age: 23, height: 190); 3 | print(sanya.name); 4 | print(Human.count); 5 | 6 | var vova = Human(name: 'Вова', age: 23, height: 190); 7 | print(vova.name); 8 | print(Human.count); 9 | } 10 | 11 | class Human { 12 | Human({ 13 | required this.name, 14 | required this.age, 15 | required this.height, 16 | }) { 17 | count += 1; 18 | } 19 | 20 | static dynamic count = 0; 21 | 22 | final String name; 23 | int age; 24 | double height; 25 | } 26 | -------------------------------------------------------------------------------- /dart_tutorials/lesson22.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final Animal wolf = Wolf(5); 3 | final Animal tiger = Tiger(1); 4 | 5 | wolf.makeSound(); 6 | tiger.makeSound(); 7 | } 8 | 9 | abstract interface class Animal { 10 | double get age; 11 | void makeSound(); 12 | } 13 | 14 | class Wolf implements Animal { 15 | Wolf(this.age); 16 | @override 17 | void makeSound() { 18 | print('Auuuuuu!'); 19 | } 20 | 21 | @override 22 | final double age; 23 | } 24 | 25 | class Tiger implements Animal { 26 | Tiger(this.age); 27 | @override 28 | void makeSound() { 29 | print('RRRRRRR!'); 30 | } 31 | 32 | void makePerformanceInCircus() { 33 | print('Тигр в цирке выступает'); 34 | } 35 | 36 | @override 37 | final double age; 38 | } 39 | -------------------------------------------------------------------------------- /dart_tutorials/lesson23.dart: -------------------------------------------------------------------------------- 1 | import 'lesson22.dart'; 2 | 3 | abstract class Bird implements Animal { 4 | static String name = ''; 5 | } 6 | 7 | void main() { 8 | Bird.name; 9 | } 10 | -------------------------------------------------------------------------------- /dart_tutorials/lesson24.dart: -------------------------------------------------------------------------------- 1 | abstract class Animal { 2 | double get age; 3 | void makeSound(); 4 | } 5 | 6 | final class Bird extends Animal { 7 | Bird({required this.age}); 8 | 9 | @override 10 | final double age; 11 | 12 | @override 13 | void makeSound() => print('Twit twit twit'); 14 | } 15 | 16 | final class Owl extends Bird { 17 | Owl({required super.age}); 18 | } 19 | -------------------------------------------------------------------------------- /dart_tutorials/lesson25.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final calculator = Calculator(); 3 | print(calculator.sum(1, 2)); 4 | print(calculator.sum(1.5, 2.7)); 5 | } 6 | 7 | class Calculator { 8 | num sum(num a, num b) { 9 | final result = a + b; 10 | print(result.runtimeType); 11 | return result; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dart_tutorials/lesson26.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final storage = Storage(1); 3 | storage.update(4); 4 | final value = storage.read(); 5 | print(value); 6 | } 7 | 8 | class Storage { 9 | Storage(this.value); 10 | T value; 11 | 12 | T read() => value; 13 | 14 | void update(T value) { 15 | this.value = value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /dart_tutorials/lesson27.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | int a = 1; 3 | bool b = false; 4 | 5 | double c = a.toDouble() + converBoolToDouble(b); 6 | print(c); 7 | print(c.runtimeType); 8 | } 9 | 10 | double converBoolToDouble(bool value) { 11 | if (value) { 12 | return 1; 13 | } 14 | return 0; 15 | } 16 | -------------------------------------------------------------------------------- /dart_tutorials/lesson28.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final game = MinecraftGame(); 3 | game.playerMove(); 4 | game.playerBuild(); 5 | game.playerDestroy(); 6 | game.playerCraft(); 7 | print(game.level); 8 | } 9 | 10 | class MinecraftGame { 11 | int level = 0; 12 | 13 | void playerMove() { 14 | print('Персонаж двигается'); 15 | level += 1; 16 | } 17 | 18 | void playerBuild() { 19 | print('Персонаж строит что-то'); 20 | level += 1; 21 | } 22 | } 23 | 24 | extension MinecraftGameDestroyExtension on MinecraftGame { 25 | void playerDestroy() { 26 | print('Персонаж ломает что-то'); 27 | level += 1; 28 | } 29 | } 30 | 31 | extension on MinecraftGame { 32 | void playerCraft() { 33 | print('Персонаж собирает что-то'); 34 | level += 2; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /dart_tutorials/lesson29-30.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | const sanya = Human(name: 'Саша', age: 23, height: 190); 3 | final kostya = sanya.copyWith(name: 'Костян'); 4 | 5 | print(sanya.nameAndAge); 6 | print(kostya.nameAndAge); 7 | } 8 | 9 | class Human { 10 | const Human({ 11 | required this.name, 12 | required this.age, 13 | required this.height, 14 | }); 15 | 16 | String get nameAndAge => '$name:$age'; 17 | 18 | final String name; 19 | final int age; 20 | final double height; 21 | 22 | Human copyWith({ 23 | String? name, 24 | int? age, 25 | double? height, 26 | }) { 27 | return Human( 28 | name: name ?? this.name, 29 | age: age ?? this.age, 30 | height: height ?? this.height, 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /dart_tutorials/lesson3.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | double a = 4.5; 3 | var b = a % 4; 4 | var c = a ~/ 4; 5 | 6 | bool d = c != 1; 7 | 8 | print(b); 9 | print(c); 10 | print(d); 11 | } 12 | -------------------------------------------------------------------------------- /dart_tutorials/lesson31.dart: -------------------------------------------------------------------------------- 1 | typedef String = int; 2 | 3 | void main() { 4 | String a = 1; 5 | print(a.runtimeType); 6 | } 7 | -------------------------------------------------------------------------------- /dart_tutorials/lesson32.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final storage = Storage(); 3 | print(storage.value); 4 | storage.update('ывбарывопа'); 5 | print(storage.value); 6 | storage.update('sdsdhsgghd'); 7 | print(storage.value); 8 | } 9 | 10 | class Storage { 11 | Storage({this.value}); 12 | T? value; 13 | 14 | T? read() => value; 15 | 16 | void update(T value) { 17 | this.value = value; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /dart_tutorials/lesson33.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final storage = Storage(); 3 | final str = storage.read(); 4 | if (str == null) {} 5 | } 6 | 7 | class Storage { 8 | Storage({this.value}); 9 | T? value; 10 | 11 | T? read() => value; 12 | 13 | void update(T value) { 14 | this.value = value; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /dart_tutorials/lesson34.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | String? name = _getUserName(); 3 | print(name?.substring(0, 1)); 4 | } 5 | 6 | String? _getUserName() { 7 | return 'Ууаваьырив'; 8 | } 9 | -------------------------------------------------------------------------------- /dart_tutorials/lesson35.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final sasha = User( 3 | name: 'Саша', 4 | email: 'shasha@gmail.com', 5 | phone: '89022775730', 6 | ); 7 | 8 | print(sasha.displayName); 9 | } 10 | 11 | class User { 12 | const User({ 13 | this.name, 14 | this.email, 15 | this.phone, 16 | }); 17 | 18 | final String? name; 19 | final String? email; 20 | final String? phone; 21 | 22 | String get displayName => name ?? email ?? phone ?? 'Имя не указано'; 23 | } 24 | -------------------------------------------------------------------------------- /dart_tutorials/lesson36.dart: -------------------------------------------------------------------------------- 1 | mixin Wifi { 2 | var enabled = false; 3 | 4 | void enableWifi() { 5 | enabled = true; 6 | print("Wifi enabled"); 7 | } 8 | 9 | void disableWifi() { 10 | enabled = false; 11 | print("Wifi disabled"); 12 | } 13 | } 14 | 15 | class Phone with Wifi {} 16 | 17 | class TV with Wifi {} 18 | 19 | void main() { 20 | var xiaomi = Phone(); 21 | xiaomi.enabled; 22 | xiaomi.enableWifi(); 23 | xiaomi.disableWifi(); 24 | } 25 | -------------------------------------------------------------------------------- /dart_tutorials/lesson37.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | void main() async { 4 | final sec1 = await makeCoffee(1); 5 | final sec2 = await makeCoffee(2); 6 | final sec3 = await makeCoffee(3); 7 | print('Кофейня закончила работать!'); 8 | print('Все кофе приготовлили за ${sec1 + sec2 + sec3} сек'); 9 | } 10 | 11 | Future makeCoffee(int number) async { 12 | print('Делаем кофе №$number...'); 13 | final random = Random(); 14 | final seconds = random.nextInt(4); 15 | await Future.delayed(Duration(seconds: seconds)); 16 | print('Сделали кофе №$number за $seconds сек.'); 17 | return seconds; 18 | } 19 | -------------------------------------------------------------------------------- /dart_tutorials/lesson38.dart: -------------------------------------------------------------------------------- 1 | void main() async { 2 | Future(() => print('Кофе #1 готов')); 3 | Future(() => print('Кофе #2 готов')); 4 | for (var i = 0; i < 100000; i++) { 5 | Future.microtask(() => print('Кофе #${i + 3} готов')); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /dart_tutorials/lesson39.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | Stream messageStream() async* { 4 | final id = Random().nextInt(1000); 5 | print('Канал $id создан'); 6 | yield 'Привет!'; 7 | await Future.delayed(Duration(seconds: 1)); 8 | yield 'Давно не виделись)'; 9 | await Future.delayed(Duration(seconds: 1)); 10 | yield 'Как дела?'; 11 | } 12 | 13 | void main() { 14 | final stream = messageStream().asBroadcastStream(); 15 | final sub1 = stream.listen((value) => print(value)); 16 | final sub2 = stream.listen((value) => print(value)); 17 | 18 | stream.last.then((_) { 19 | sub1.cancel(); 20 | sub2.cancel(); 21 | }); 22 | } 23 | -------------------------------------------------------------------------------- /dart_tutorials/lesson4.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final date = DateTime.now(); 3 | print(date); 4 | } 5 | -------------------------------------------------------------------------------- /dart_tutorials/lesson40.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | void main() { 4 | final user = User(height: 190, weight: 87); 5 | print(user.bmi); 6 | } 7 | 8 | class User { 9 | User({ 10 | required this.height, 11 | required this.weight, 12 | }) { 13 | bmi = weight / pow(height, 2); 14 | } 15 | 16 | final double height; 17 | final double weight; 18 | double? bmi; 19 | } 20 | -------------------------------------------------------------------------------- /dart_tutorials/lesson41.dart: -------------------------------------------------------------------------------- 1 | import 'dart:isolate'; 2 | 3 | Future main() async { 4 | final receivePort = ReceivePort(); 5 | 6 | final numberList = List.generate(20, (i) => i + 1); 7 | final isolatesCount = 4; 8 | 9 | final resultResultList = []; 10 | var completedIsolates = 0; 11 | 12 | for (var i = 0; i < isolatesCount; i++) { 13 | final stepSize = numberList.length ~/ isolatesCount; 14 | final sublist = numberList.sublist(i * stepSize, (i + 1) * stepSize); 15 | Isolate.spawn(mathIsolate, [sublist, receivePort.sendPort, i]); 16 | } 17 | 18 | await for (final data in receivePort) { 19 | resultResultList.addAll(data as List); 20 | completedIsolates += 1; 21 | if (completedIsolates == 4) { 22 | resultResultList.sort(); 23 | print('Все посчитано:\n$resultResultList'); 24 | receivePort.close(); 25 | break; 26 | } 27 | } 28 | } 29 | 30 | void mathIsolate(List args) async { 31 | final numbersList = args[0] as List; 32 | final sendPort = args[1] as SendPort; 33 | final index = args[2] as int; 34 | 35 | final resultList = []; 36 | 37 | await Future.delayed(Duration(seconds: 5)); 38 | 39 | for (final number in numbersList) { 40 | final result = number * number; 41 | resultList.add(result); 42 | print('Изолят [$index] посчитал $result'); 43 | } 44 | 45 | sendPort.send(resultList); 46 | print('Изолят [$index] закончил работу'); 47 | } 48 | -------------------------------------------------------------------------------- /dart_tutorials/lesson5.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | dynamic likes = 99999; 3 | likes = 'sdfhsdfjsgd'; 4 | 5 | print(likes); 6 | } 7 | -------------------------------------------------------------------------------- /dart_tutorials/lesson6.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final clesses = {'11А', '11Б', '11В'}; 3 | 4 | clesses.add('11А'); 5 | clesses.add('11В'); 6 | clesses.add('11Б'); 7 | clesses.add('11В'); 8 | 9 | clesses.add('11Г'); 10 | 11 | print(clesses); 12 | } 13 | -------------------------------------------------------------------------------- /dart_tutorials/lesson7.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | final students = { 3 | "Вася": 4.5, 4 | "Лера": 4.0, 5 | "Гена": 3.0, 6 | }; 7 | print(students); 8 | students["Саша"] = 5.0; 9 | print(students); 10 | 11 | students.remove("Вася"); 12 | print(students); 13 | 14 | students.addAll({ 15 | "Катя": 3.5, 16 | "Женя": 4.4, 17 | }); 18 | print(students); 19 | print(students.length); 20 | 21 | print(students.keys.toList()); 22 | print(students.values.toList()); 23 | 24 | print(students.containsKey('Женя')); 25 | print(students.containsKey('Жен')); 26 | 27 | print(students.containsValue(4.4)); 28 | print(students.containsValue(4.3)); 29 | } 30 | -------------------------------------------------------------------------------- /dart_tutorials/lesson8.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | var temp = 23; 3 | 4 | if (temp < -20 || temp > 30) { 5 | print('Не идем гулять'); 6 | return; 7 | } 8 | print('Идем гулять!'); 9 | } 10 | -------------------------------------------------------------------------------- /dart_tutorials/lesson9.dart: -------------------------------------------------------------------------------- 1 | void main() { 2 | // final students = ['Вася', 'Лера', 'Гена', 'Саша']; 3 | final student = 'Вася'; 4 | 5 | if (student == 'Вася') { 6 | print('Оценка: 4.5'); 7 | } else if (student != 'Лера') { 8 | print('Оценка: 4'); 9 | } else if (student == 'Гена') { 10 | print('Оценка: 3'); 11 | } else if (student == 'Саша') { 12 | print('Оценка: 3.3'); 13 | } else { 14 | print('Ученик не найден'); 15 | } 16 | 17 | switch (student) { 18 | case 'Вася': 19 | print('Оценка: 4.5'); 20 | break; 21 | case 'Лера': 22 | print('Оценка: 4'); 23 | break; 24 | case 'Гена': 25 | print('Оценка: 3'); 26 | break; 27 | default: 28 | print('Такого ученика нет'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /localization/.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 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | -------------------------------------------------------------------------------- /localization/README.md: -------------------------------------------------------------------------------- 1 | # localization 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /localization/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 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /localization/android/app/src/main/kotlin/com/frezycode/localization/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.frezycode.localization 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /localization/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /localization/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /localization/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /localization/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /localization/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /localization/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /localization/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /localization/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /localization/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /localization/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /localization/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | tasks.register("clean", Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /localization/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /localization/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.5-all.zip 6 | -------------------------------------------------------------------------------- /localization/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/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 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /localization/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /localization/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /localization/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /localization/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /localization/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /localization/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /localization/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /localization/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /localization/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /localization/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /localization/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. -------------------------------------------------------------------------------- /localization/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/lib/generated/intl/messages_en.dart: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart 2 | // This is a library that provides messages for a en locale. All the 3 | // messages from the main program should be duplicated here with the same 4 | // function name. 5 | 6 | // Ignore issues from commonly used lints in this file. 7 | // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new 8 | // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering 9 | // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases 10 | // ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes 11 | // ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes 12 | 13 | import 'package:intl/intl.dart'; 14 | import 'package:intl/message_lookup_by_library.dart'; 15 | 16 | final messages = new MessageLookup(); 17 | 18 | typedef String MessageIfAbsent(String messageStr, List args); 19 | 20 | class MessageLookup extends MessageLookupByLibrary { 21 | String get localeName => 'en'; 22 | 23 | static String m0(bonus) => "You receive ${bonus} points"; 24 | 25 | final messages = _notInlinedMessages(_notInlinedMessages); 26 | static Map _notInlinedMessages(_) => { 27 | "goodbye": MessageLookupByLibrary.simpleMessage("Goodbye"), 28 | "hello": MessageLookupByLibrary.simpleMessage("Hello!"), 29 | "youReceiveNBouns": m0 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /localization/lib/generated/intl/messages_ru.dart: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart 2 | // This is a library that provides messages for a ru locale. All the 3 | // messages from the main program should be duplicated here with the same 4 | // function name. 5 | 6 | // Ignore issues from commonly used lints in this file. 7 | // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new 8 | // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering 9 | // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases 10 | // ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes 11 | // ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes 12 | 13 | import 'package:intl/intl.dart'; 14 | import 'package:intl/message_lookup_by_library.dart'; 15 | 16 | final messages = new MessageLookup(); 17 | 18 | typedef String MessageIfAbsent(String messageStr, List args); 19 | 20 | class MessageLookup extends MessageLookupByLibrary { 21 | String get localeName => 'ru'; 22 | 23 | static String m0(bonus) => "Вы получили бонус ${bonus} баллов"; 24 | 25 | final messages = _notInlinedMessages(_notInlinedMessages); 26 | static Map _notInlinedMessages(_) => { 27 | "goodbye": MessageLookupByLibrary.simpleMessage("Пока"), 28 | "hello": MessageLookupByLibrary.simpleMessage("Привет!"), 29 | "youReceiveNBouns": m0 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /localization/lib/l10n/intl_en.arb: -------------------------------------------------------------------------------- 1 | { 2 | "hello": "Hello!", 3 | "goodbye": "Goodbye", 4 | "youReceiveNBouns": "You receive {bonus} points" 5 | } -------------------------------------------------------------------------------- /localization/lib/l10n/intl_ru.arb: -------------------------------------------------------------------------------- 1 | { 2 | "hello": "Привет!", 3 | "goodbye": "Пока", 4 | "youReceiveNBouns": "Вы получили бонус {bonus} баллов" 5 | } -------------------------------------------------------------------------------- /localization/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /localization/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 | 10 | void fl_register_plugins(FlPluginRegistry* registry) { 11 | } 12 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | ) 7 | 8 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 9 | ) 10 | 11 | set(PLUGIN_BUNDLED_LIBRARIES) 12 | 13 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 14 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 15 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 16 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 18 | endforeach(plugin) 19 | 20 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 21 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 22 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 23 | endforeach(ffi_plugin) 24 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /localization/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /localization/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /localization/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | 9 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 10 | } 11 | -------------------------------------------------------------------------------- /localization/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /localization/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /localization/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /localization/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /localization/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 = localization 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.frezycode.localization 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2023 com.frezycode. All rights reserved. 15 | -------------------------------------------------------------------------------- /localization/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /localization/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/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 | 12 | 13 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /localization/macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import FlutterMacOS 2 | import Cocoa 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 | -------------------------------------------------------------------------------- /localization/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:localization/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /localization/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/web/favicon.png -------------------------------------------------------------------------------- /localization/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/web/icons/Icon-192.png -------------------------------------------------------------------------------- /localization/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/web/icons/Icon-512.png -------------------------------------------------------------------------------- /localization/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /localization/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /localization/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "localization", 3 | "short_name": "localization", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 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/Icon-maskable-192.png", 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 | } 36 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/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 | 10 | void RegisterPlugins(flutter::PluginRegistry* registry) { 11 | } 12 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | ) 7 | 8 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 9 | ) 10 | 11 | set(PLUGIN_BUNDLED_LIBRARIES) 12 | 13 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 14 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 15 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 16 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 18 | endforeach(plugin) 19 | 20 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 21 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 22 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 23 | endforeach(ffi_plugin) 24 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/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"localization", 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 | -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Frezyx/flutter_tutorials/7b87d67f7f37077c99da6f36f009c466bf6c47be/localization/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /localization/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 | -------------------------------------------------------------------------------- /localization/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 | --------------------------------------------------------------------------------